{"_id":"@ducanh2912/react-tuby","_rev":"17-e62394b10603dfbd9693480ce95ae33d","name":"@ducanh2912/react-tuby","dist-tags":{"beta":"0.3.3-beta.1","latest":"1.1.0"},"versions":{"0.2.0":{"version":"0.2.0","license":"MIT","main":"dist/index.js","typings":"dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"microbundle && npm run build:style","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev"},"module":"dist/react-tuby.esm.js","repository":{"type":"git","url":"git+https://github.com/napthedev/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/react-tuby.cjs.production.min.js","limit":"10 KB"},{"path":"dist/react-tuby.esm.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"gitHead":"c236f00876830ef5f5ef17611902377cd1026bc2","bugs":{"url":"https://github.com/napthedev/react-tuby/issues"},"homepage":"https://github.com/napthedev/react-tuby#readme","_id":"@ducanh2912/react-tuby@0.2.0","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-dOYHhD/b8WMe5dB+bM5+9u8Qs2wWdh45YS5Kj9Bb/jUxfT81NmhnPb2f0DmqASaYfRa9yTtnz6pwefdm8K3+Rg==","shasum":"763a0f34a5a554614f8dce10fb0585c697ffa2f1","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.2.0.tgz","fileCount":47,"unpackedSize":882303,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBaxBH2QSV3W0ZVGELG6y5eyabdWK6MXVqL6ciaBTVL2AiEAjP+474xYIwzoWLja+oyjwHUdy0qXqWmW5gYbOuoj8l0="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFa89ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpHCBAAlNAXRoh4iiQawLStiiTsYMxl6siJYRh2VgnmUgo3qNDQvN8A\r\n9sM/FGWGt10NnKKOYBGRDXxQDhQiJkbCUcwmIivsLPBONZy6yZFCdueXz0W9\r\n+KPqlEWmSuqznw3v6k65d8siwidPR0te5+hctlFwqJ7vEtA4JjIJM1x3KmTh\r\npTIQnJ8sK0SRw3ROJMtkZQ1dRG3wSPEJv9hpjl9sK1PdNcL1fOEK9pEMlGLw\r\ndRyDCFEEB0c4QJ5ABKXXUQ3lA/jiEPrdq+yvWmRDL/ygers0MHUolgOrGpwI\r\nDMSZaVTbqbPutYUKtxu4sGaCS9g7pJ3jdstzDxQR8vEIMUrqSieH07JTEe22\r\nLoniXBhMl1b8fGwwDhY2Lm1b2Cv2LgsgjQjBb/CnrO5SfshGDNJG//dbSb5g\r\nRr/j5CxXoIU9sgywnHuekDmRHwiXRCG58iPUyZdpCGVThtbg/V2GOSlT8H4U\r\nw2Rm18Jxf4dTmvkupO7S0c4eT3ghfjEGD8bDXOCUffX+JJQgr2PAg8BfXU2j\r\nqDDzu3NaydV1GHgRi0wVPBVgezbUw0EqDxePpErxBawMScw1/Mcu6TMyPAHX\r\n4ggHdJ4yfw7C4St/Iud9dOK/c3p9U/04SXXdyvD4NdU6rX2ZYbn6HZtInK4/\r\nIC7VShL272Xw/0djE/SArYTpUdMTiVLeyI4=\r\n=pkDp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.2.0_1662365501386_0.8409946809809878"},"_hasShrinkwrap":false},"0.3.0":{"version":"0.3.0","license":"MIT","exports":{"require":"./dist/index.js","default":"./dist/index.modern.mjs"},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"microbundle && npm run build:style","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"readme":"<p align=\"center\">\r\n  <img src=\"https://res.cloudinary.com/naptest/image/upload/w_600/react-tuby/preview_jhnrup.png\">\r\n</p>\r\n\r\n# React Tuby\r\n\r\n[![Build Size](https://img.shields.io/bundlephobia/minzip/react-tuby?label=Bundle%20size&style=flat&color=success)](https://bundlephobia.com/result?p=react-tuby)\r\n[![Version](https://img.shields.io/npm/v/react-tuby?style=flat&color=success)](https://www.npmjs.com/package/react-tuby)\r\n[![Downloads](https://img.shields.io/npm/dt/react-tuby.svg?style=flat&color=success)](https://www.npmjs.com/package/react-tuby)\r\n\r\nA React video player library with YouTube-like UI\r\n\r\n## Demo\r\n\r\n[https://react-tuby.vercel.app](https://react-tuby.vercel.app)\r\n\r\n## Feature\r\n\r\n- 📹 HTML Video, M3U8 support\r\n- 🎛 Allow multiple qualities\r\n- 📱 Fully responsive\r\n- 🖥 Full screen cross browser support, even Safari on iPhone\r\n- 📖 Subtitles support\r\n- ⏰ Speed control\r\n- ⌨️ Keyboard shortcuts\r\n- ⚙️ Support server side rendering (Next.js)\r\n- 🛠 No extra dependencies\r\n- ✅ Automatically fallback to default `<video />` if rendering fails on older browsers\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm i react-tuby\r\n# or\r\n# yarn add react-tuby\r\n# or\r\n# pnpm add react-tuby\r\n```\r\n\r\n## Import\r\n\r\n```jsx\r\nimport { Player } from \"react-tuby\";\r\nimport \"react-tuby/css/main.css\";\r\n```\r\n\r\n## Example player\r\n\r\n```jsx\r\n<Player\r\n  src={[\r\n    {\r\n      quality: \"Full HD\",\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/1080.mp4\",\r\n    },\r\n    {\r\n      quality: 720,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/720.mp4\",\r\n    },\r\n    {\r\n      quality: 480,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/480.mp4\",\r\n    },\r\n  ]}\r\n  subtitles={[\r\n    {\r\n      lang: \"en\",\r\n      language: \"English\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/en.vtt\",\r\n    },\r\n    {\r\n      lang: \"fr\",\r\n      language: \"French\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/fr.vtt\",\r\n    },\r\n  ]}\r\n  poster=\"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/poster.png\"\r\n/>\r\n```\r\n\r\n## Props\r\n\r\n| prop                     | type                                                                                                                           | description                                                                                            |\r\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |\r\n| **src**                  | { quality: number \\| string; url: string; }[] \\| string;                                                                       | One video url or array of video urls and qualities                                                                 |\r\n| **subtitles**            | { lang: string; language: string; url: string; }[]                                                                             | Array of subtitles, the first one will be the default. Subtitle **must** be in .vtt format.                |\r\n| **dimensions**           | number \\| { width: number \\| string; height: number \\| string }                                                                | Number: aspect ratio (height/width). Default is 56.25% (9/16) Width, height: set custom width and height |\r\n| **primaryColor**         | string                                                                                                                         | Customize the primary color. Default: #ff0000                                                          |\r\n| **poster**               | string                                                                                                                         | The url of poster image                                                                                |\r\n| **seekDuration**         | number                                                                                                                         | Seek duration when pressing left/right key. Default: 10                                                |\r\n| **playerKey**            | string                                                                                                                         | Unique user key to store video state in localStorage                                                   |\r\n| **internationalization** | string                                                                                                                         | See internationalization section below                                                                 |\r\n| **playerRef**            | RefObject\\<HTMLVideoElement\\>                                                                                                  | Use your own ref to control the video player                                                           |\r\n| **pictureInPicture**     | boolean                                                                                                                        | Show picture in picture button                                                                         |\r\n| **keyboardShortcut**     | boolean \\| { pause?: boolean; rewind?: boolean; forward?: boolean; fullScreen?: boolean; mute?: boolean; subtitle?: boolean; } | Customize keyboard shortcuts                                                                           |\r\n\r\n## Examples\r\n\r\n### One src only\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" />\r\n```\r\n\r\n### Custom width, height\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" dimensions={{ width: \"100%\", height: \"100%\" }} />\r\n```\r\n\r\n### Custom props for video\r\n\r\nThis library uses **render props** to allow user to set custom render component\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, props) => <video ref={ref} {...props} autoPlay loop />}\r\n</Player>\r\n```\r\n\r\n### Custom event\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, { onPause, ...others }) => (\r\n    <video\r\n      ref={ref}\r\n      {...others}\r\n      onPause={(e) => {\r\n        // The library original event\r\n        onPause && onPause(e);\r\n\r\n        // Do something here\r\n        console.log(\"Paused\");\r\n      }}\r\n    />\r\n  )}\r\n</Player>\r\n```\r\n\r\n### Usage with m3u8 / HLS\r\n\r\nInstall react-hls-player\r\n\r\n```\r\nnpm i react-hls-player --force\r\n```\r\n\r\nUsage\r\n\r\n```jsx\r\nimport ReactHlsPlayer from \"react-hls-player\";\r\n\r\n<Player src=\"/your-video.m3u8\">\r\n  {(ref, props) => <ReactHlsPlayer playerRef={ref} {...props} />}\r\n</Player>;\r\n```\r\n\r\n### Get video currentTime using custom ref\r\n\r\n```jsx\r\nconst ref = useRef(null);\r\n\r\nuseEffect(() => {\r\n  ref.current?.addEventListener(\"timeupdate\", () => {\r\n    console.log(ref.current?.currentTime);\r\n  });\r\n}, []);\r\n\r\n<Player playerRef={ref} src=\"/your-video.mp4\" />;\r\n```\r\n\r\n### Disable keyboard shortcuts\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" keyboardShortcut={false} />\r\n\r\n// or\r\n\r\n<Player\r\n  src=\"/your-video.mp4\"\r\n  keyboardShortcut={{\r\n    pause: false,\r\n    forward: true,\r\n    rewind: true,\r\n    fullScreen: true,\r\n    mute: true,\r\n    subtitle: true,\r\n  }}\r\n/>\r\n```\r\n\r\n## Internationalization\r\n\r\n| property                    | default              |\r\n| --------------------------- | -------------------- |\r\n| tooltipsPlay                | Play (k)             |\r\n| tooltipsPause               | Pause (k)            |\r\n| tooltipsMute                | Mute (m)             |\r\n| tooltipsUnmute              | Unmute (m)           |\r\n| tooltipsSubtitles           | Subtitles (c)        |\r\n| tooltipsSettings            | Settings             |\r\n| tooltipsFullscreen          | Full Screen (f)      |\r\n| tooltipsExitFullscreen      | Exit full screen (f) |\r\n| settingsPlaybackSpeed       | Playback Speed       |\r\n| settingsPlaybackSpeedNormal | Normal               |\r\n| settingsSubtitles           | Subtitles            |\r\n| settingsSubtitlesOff        | Off                  |\r\n| settingsQuality             | Quality              |\r\n| settingsModalOff            | OK                   |\r\n\r\n## Issues\r\n\r\nIf you encounter some bugs or have a feature request, feel free to submit an issue on the [github repo](https://github.com/DuCanhGH/react-tuby.git).\r\n","readmeFilename":"README.md","gitHead":"09eed6cdca67edcf018828d8c540b6cda14b3145","_id":"@ducanh2912/react-tuby@0.3.0","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-eustoU0W/xKYy639mEuY5SlGgBXx+X8GrdIfhE/LJ7tjNDtIi0IhEwDIiyVs4fN0DSrMdCS0UWOz+CM71LUD8Q==","shasum":"7e893dd34ba867a17d75fddb8c65d1a577850966","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.0.tgz","fileCount":41,"unpackedSize":481419,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9ePBAJw1+dZwgQJoqITJe9GZMQEqT1S9UnxdQEe4vngIhAONQDJ0dflgn96G3eoio0+ZJRWzmN23tFSfx8g+HVmGc"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFbDJACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoECg//bz6WuZ7Ow4TLcaG3ajWISwgmJBLadT7QEAi4XvSTDHiP8qdN\r\n9+GehSAk++UcWw97PIIkbh2VTG+y8bTvououMaCmMRSDxeYibs7Zwjohcx2m\r\nZBodphjpvlTWNnEW5Cyzsi7Yip1XmHjHU2Cc4MH12/AfO01u/pGtITPGHR6X\r\nyv6Bg+iFS9mKn8gYwO3gbaZ848df+jYEJBFoAvRCdvB22LSxTz4F8n7wfgsS\r\nYcPIQH3+ytycs2E25runPnw/B2Jvi5//JeZQBC2S1vRDlL1dTXx0y3IcH+t/\r\nEFdHvRoYDx8RGAciE0v79GRa/R8EZOGRB/T1eJzH6yMTyVeWxHZ8ym8ms77u\r\nztKBE9deQgWlapWlPDIKYuf6RMQyoxsaTnIuphJtEiiB1PzkPWtTk1vHTmWY\r\nZ8YuR2T8b5iuGcXyINQV3bwX1Ai5RCCYijMXSUubZpV+AiIu4M83LhP/0sBa\r\nUs0vQCmjoUuke8VR/MX6nugsYCG8oohh/G+cqTsAn06bDdMxHWuuhyULzFEM\r\nZHD2IkrWPMShnR+1qz1z038Mm8H0OVyGVorOJFyGFoum80yf/xcB0SGwIM5b\r\nzvji4SPf+XSlcBtWGFn9aiRFRy6iLiRfBvDBiDr8iCZbdLpFxudRQyyBCscb\r\nXzN2ySf2vmpkvwqQTY04K4ivFgf06TI6K4c=\r\n=SDwX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.0_1662365897043_0.6134111833142635"},"_hasShrinkwrap":false},"0.3.0-beta.1":{"version":"0.3.0-beta.1","license":"MIT","exports":{"require":"./dist/index.js","default":"./dist/index.modern.mjs"},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"readme":"<p align=\"center\">\r\n  <img src=\"https://res.cloudinary.com/naptest/image/upload/w_600/react-tuby/preview_jhnrup.png\">\r\n</p>\r\n\r\n# React Tuby\r\n\r\n[![Build Size](https://img.shields.io/bundlephobia/minzip/react-tuby?label=Bundle%20size&style=flat&color=success)](https://bundlephobia.com/result?p=react-tuby)\r\n[![Version](https://img.shields.io/npm/v/react-tuby?style=flat&color=success)](https://www.npmjs.com/package/react-tuby)\r\n[![Downloads](https://img.shields.io/npm/dt/react-tuby.svg?style=flat&color=success)](https://www.npmjs.com/package/react-tuby)\r\n\r\nA React video player library with YouTube-like UI\r\n\r\n## Demo\r\n\r\n[https://react-tuby.vercel.app](https://react-tuby.vercel.app)\r\n\r\n## Feature\r\n\r\n- 📹 HTML Video, M3U8 support\r\n- 🎛 Allow multiple qualities\r\n- 📱 Fully responsive\r\n- 🖥 Full screen cross browser support, even Safari on iPhone\r\n- 📖 Subtitles support\r\n- ⏰ Speed control\r\n- ⌨️ Keyboard shortcuts\r\n- ⚙️ Support server side rendering (Next.js)\r\n- 🛠 No extra dependencies\r\n- ✅ Automatically fallback to default `<video />` if rendering fails on older browsers\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm i react-tuby\r\n# or\r\n# yarn add react-tuby\r\n# or\r\n# pnpm add react-tuby\r\n```\r\n\r\n## Import\r\n\r\n```jsx\r\nimport { Player } from \"react-tuby\";\r\nimport \"react-tuby/css/main.css\";\r\n```\r\n\r\n## Example player\r\n\r\n```jsx\r\n<Player\r\n  src={[\r\n    {\r\n      quality: \"Full HD\",\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/1080.mp4\",\r\n    },\r\n    {\r\n      quality: 720,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/720.mp4\",\r\n    },\r\n    {\r\n      quality: 480,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/480.mp4\",\r\n    },\r\n  ]}\r\n  subtitles={[\r\n    {\r\n      lang: \"en\",\r\n      language: \"English\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/en.vtt\",\r\n    },\r\n    {\r\n      lang: \"fr\",\r\n      language: \"French\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/fr.vtt\",\r\n    },\r\n  ]}\r\n  poster=\"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/poster.png\"\r\n/>\r\n```\r\n\r\n## Props\r\n\r\n| prop                     | type                                                                                                                           | description                                                                                            |\r\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |\r\n| **src**                  | { quality: number \\| string; url: string; }[] \\| string;                                                                       | One video url or array of video urls and qualities                                                                 |\r\n| **subtitles**            | { lang: string; language: string; url: string; }[]                                                                             | Array of subtitles, the first one will be the default. Subtitle **must** be in .vtt format.                |\r\n| **dimensions**           | number \\| { width: number \\| string; height: number \\| string }                                                                | Number: aspect ratio (height/width). Default is 56.25% (9/16) Width, height: set custom width and height |\r\n| **primaryColor**         | string                                                                                                                         | Customize the primary color. Default: #ff0000                                                          |\r\n| **poster**               | string                                                                                                                         | The url of poster image                                                                                |\r\n| **seekDuration**         | number                                                                                                                         | Seek duration when pressing left/right key. Default: 10                                                |\r\n| **playerKey**            | string                                                                                                                         | Unique user key to store video state in localStorage                                                   |\r\n| **internationalization** | string                                                                                                                         | See internationalization section below                                                                 |\r\n| **playerRef**            | RefObject\\<HTMLVideoElement\\>                                                                                                  | Use your own ref to control the video player                                                           |\r\n| **pictureInPicture**     | boolean                                                                                                                        | Show picture in picture button                                                                         |\r\n| **keyboardShortcut**     | boolean \\| { pause?: boolean; rewind?: boolean; forward?: boolean; fullScreen?: boolean; mute?: boolean; subtitle?: boolean; } | Customize keyboard shortcuts                                                                           |\r\n\r\n## Examples\r\n\r\n### One src only\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" />\r\n```\r\n\r\n### Custom width, height\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" dimensions={{ width: \"100%\", height: \"100%\" }} />\r\n```\r\n\r\n### Custom props for video\r\n\r\nThis library uses **render props** to allow user to set custom render component\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, props) => <video ref={ref} {...props} autoPlay loop />}\r\n</Player>\r\n```\r\n\r\n### Custom event\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, { onPause, ...others }) => (\r\n    <video\r\n      ref={ref}\r\n      {...others}\r\n      onPause={(e) => {\r\n        // The library original event\r\n        onPause && onPause(e);\r\n\r\n        // Do something here\r\n        console.log(\"Paused\");\r\n      }}\r\n    />\r\n  )}\r\n</Player>\r\n```\r\n\r\n### Usage with m3u8 / HLS\r\n\r\nInstall react-hls-player\r\n\r\n```\r\nnpm i react-hls-player --force\r\n```\r\n\r\nUsage\r\n\r\n```jsx\r\nimport ReactHlsPlayer from \"react-hls-player\";\r\n\r\n<Player src=\"/your-video.m3u8\">\r\n  {(ref, props) => <ReactHlsPlayer playerRef={ref} {...props} />}\r\n</Player>;\r\n```\r\n\r\n### Get video currentTime using custom ref\r\n\r\n```jsx\r\nconst ref = useRef(null);\r\n\r\nuseEffect(() => {\r\n  ref.current?.addEventListener(\"timeupdate\", () => {\r\n    console.log(ref.current?.currentTime);\r\n  });\r\n}, []);\r\n\r\n<Player playerRef={ref} src=\"/your-video.mp4\" />;\r\n```\r\n\r\n### Disable keyboard shortcuts\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" keyboardShortcut={false} />\r\n\r\n// or\r\n\r\n<Player\r\n  src=\"/your-video.mp4\"\r\n  keyboardShortcut={{\r\n    pause: false,\r\n    forward: true,\r\n    rewind: true,\r\n    fullScreen: true,\r\n    mute: true,\r\n    subtitle: true,\r\n  }}\r\n/>\r\n```\r\n\r\n## Internationalization\r\n\r\n| property                    | default              |\r\n| --------------------------- | -------------------- |\r\n| tooltipsPlay                | Play (k)             |\r\n| tooltipsPause               | Pause (k)            |\r\n| tooltipsMute                | Mute (m)             |\r\n| tooltipsUnmute              | Unmute (m)           |\r\n| tooltipsSubtitles           | Subtitles (c)        |\r\n| tooltipsSettings            | Settings             |\r\n| tooltipsFullscreen          | Full Screen (f)      |\r\n| tooltipsExitFullscreen      | Exit full screen (f) |\r\n| settingsPlaybackSpeed       | Playback Speed       |\r\n| settingsPlaybackSpeedNormal | Normal               |\r\n| settingsSubtitles           | Subtitles            |\r\n| settingsSubtitlesOff        | Off                  |\r\n| settingsQuality             | Quality              |\r\n| settingsModalOff            | OK                   |\r\n\r\n## Issues\r\n\r\nIf you encounter some bugs or have a feature request, feel free to submit an issue on the [github repo](https://github.com/DuCanhGH/react-tuby.git).\r\n","readmeFilename":"README.md","gitHead":"29e2928ef10c3adc067c2586d26ab74efe71670c","_id":"@ducanh2912/react-tuby@0.3.0-beta.1","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-CHe7tDzbVCJKYUm8Qkyq12PiqfBtIOzVpa7/4JRjFMsxHP4qDAV8yGtObQ7dmmg95AjMWEn+AT6i51LYHr4M8A==","shasum":"53157d337f144a34606b4502ca2c6c2938134872","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.0-beta.1.tgz","fileCount":41,"unpackedSize":480970,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHtjF+3sQ1coeWfYU4gVTxEVDIUvAsI4TfcEJrKpdau5AiEAzmIgE/l5lubTBzN7omX59e0/HhYhUnJ/pybLxwhOgZ4="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFbTqACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqcuA/9GO4NYLlmcpwAuZgjZqW0+lmiEsreXEpCdKnFmKQ9y7DQd0OC\r\nlneTmBd0Ke+vDIOKz3Rz0jxueAiR4WyfrYvDY7BEOZyUnKoV/730LBkJGZ/k\r\n62C2Y8hzkNruWKZM3+05A4xqaUYNK84BgsHSNRQIDyKCDbpzeXMnlx92wUls\r\n3asFPnTcFMGbdcSNAAO5TRJgkbh3DsOICD4ls/I0TlUKH6z0Q6s3ekz3orXq\r\nIRw6hLBfYYoFTZjw5nhzF/D1UN1Xs7T60E6gIQ5pIrIZ9jysbbAmiyyTNyBq\r\noIn0KEtoMCxDnUofzb7gv+8Xajn7+RAo/vMwIozeawkxWSm08pOJcnnkWKCr\r\nrIrZc3Kib+Rf3xbwxHFGLDIaUKUduz6euhTsVEECNJ1TGCshGVFxUuUWFYMJ\r\nuMHM6Y4LyjYffgORQqHT3MtfueIt3xMH/yPtGf318wjHOsERjynmU/1DPww5\r\nIbzJRul58rtShNORKNbGlSQc+JYCeWtv/GpiyoHom4+SE1TBKoVTkrhbf3Vx\r\nPTr7ZEvj6NVY/am2ib8QdHgrF86bUyaHbDN5Os3k+aBN4cEvfM+eAxmJNFJo\r\n5F6EAhvvSQ5Oh6lTy/bc+yG0vJUQR8hZFuSlfSG5ARSYbxTMfIT8S0p6gDAR\r\nnoHykW3EPwp/kKAhNPIHtSyFPJWQKrmOMaM=\r\n=6WLX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.0-beta.1_1662366954758_0.7351551798099099"},"_hasShrinkwrap":false},"0.3.0-beta.2":{"version":"0.3.0-beta.2","license":"MIT","exports":{".":{"require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"import":"./css/main.css","require":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"readme":"<p align=\"center\">\r\n  <img src=\"https://res.cloudinary.com/naptest/image/upload/w_600/react-tuby/preview_jhnrup.png\">\r\n</p>\r\n\r\n# React Tuby\r\n\r\n[![Build Size](https://img.shields.io/bundlephobia/minzip/react-tuby?label=Bundle%20size&style=flat&color=success)](https://bundlephobia.com/result?p=react-tuby)\r\n[![Version](https://img.shields.io/npm/v/react-tuby?style=flat&color=success)](https://www.npmjs.com/package/react-tuby)\r\n[![Downloads](https://img.shields.io/npm/dt/react-tuby.svg?style=flat&color=success)](https://www.npmjs.com/package/react-tuby)\r\n\r\nA React video player library with YouTube-like UI\r\n\r\n## Demo\r\n\r\n[https://react-tuby.vercel.app](https://react-tuby.vercel.app)\r\n\r\n## Feature\r\n\r\n- 📹 HTML Video, M3U8 support\r\n- 🎛 Allow multiple qualities\r\n- 📱 Fully responsive\r\n- 🖥 Full screen cross browser support, even Safari on iPhone\r\n- 📖 Subtitles support\r\n- ⏰ Speed control\r\n- ⌨️ Keyboard shortcuts\r\n- ⚙️ Support server side rendering (Next.js)\r\n- 🛠 No extra dependencies\r\n- ✅ Automatically fallback to default `<video />` if rendering fails on older browsers\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm i react-tuby\r\n# or\r\n# yarn add react-tuby\r\n# or\r\n# pnpm add react-tuby\r\n```\r\n\r\n## Import\r\n\r\n```jsx\r\nimport { Player } from \"react-tuby\";\r\nimport \"react-tuby/css/main.css\";\r\n```\r\n\r\n## Example player\r\n\r\n```jsx\r\n<Player\r\n  src={[\r\n    {\r\n      quality: \"Full HD\",\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/1080.mp4\",\r\n    },\r\n    {\r\n      quality: 720,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/720.mp4\",\r\n    },\r\n    {\r\n      quality: 480,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/480.mp4\",\r\n    },\r\n  ]}\r\n  subtitles={[\r\n    {\r\n      lang: \"en\",\r\n      language: \"English\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/en.vtt\",\r\n    },\r\n    {\r\n      lang: \"fr\",\r\n      language: \"French\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/fr.vtt\",\r\n    },\r\n  ]}\r\n  poster=\"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/poster.png\"\r\n/>\r\n```\r\n\r\n## Props\r\n\r\n| prop                     | type                                                                                                                           | description                                                                                            |\r\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |\r\n| **src**                  | { quality: number \\| string; url: string; }[] \\| string;                                                                       | One video url or array of video urls and qualities                                                                 |\r\n| **subtitles**            | { lang: string; language: string; url: string; }[]                                                                             | Array of subtitles, the first one will be the default. Subtitle **must** be in .vtt format.                |\r\n| **dimensions**           | number \\| { width: number \\| string; height: number \\| string }                                                                | Number: aspect ratio (height/width). Default is 56.25% (9/16) Width, height: set custom width and height |\r\n| **primaryColor**         | string                                                                                                                         | Customize the primary color. Default: #ff0000                                                          |\r\n| **poster**               | string                                                                                                                         | The url of poster image                                                                                |\r\n| **seekDuration**         | number                                                                                                                         | Seek duration when pressing left/right key. Default: 10                                                |\r\n| **playerKey**            | string                                                                                                                         | Unique user key to store video state in localStorage                                                   |\r\n| **internationalization** | string                                                                                                                         | See internationalization section below                                                                 |\r\n| **playerRef**            | RefObject\\<HTMLVideoElement\\>                                                                                                  | Use your own ref to control the video player                                                           |\r\n| **pictureInPicture**     | boolean                                                                                                                        | Show picture in picture button                                                                         |\r\n| **keyboardShortcut**     | boolean \\| { pause?: boolean; rewind?: boolean; forward?: boolean; fullScreen?: boolean; mute?: boolean; subtitle?: boolean; } | Customize keyboard shortcuts                                                                           |\r\n\r\n## Examples\r\n\r\n### One src only\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" />\r\n```\r\n\r\n### Custom width, height\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" dimensions={{ width: \"100%\", height: \"100%\" }} />\r\n```\r\n\r\n### Custom props for video\r\n\r\nThis library uses **render props** to allow user to set custom render component\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, props) => <video ref={ref} {...props} autoPlay loop />}\r\n</Player>\r\n```\r\n\r\n### Custom event\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, { onPause, ...others }) => (\r\n    <video\r\n      ref={ref}\r\n      {...others}\r\n      onPause={(e) => {\r\n        // The library original event\r\n        onPause && onPause(e);\r\n\r\n        // Do something here\r\n        console.log(\"Paused\");\r\n      }}\r\n    />\r\n  )}\r\n</Player>\r\n```\r\n\r\n### Usage with m3u8 / HLS\r\n\r\nInstall react-hls-player\r\n\r\n```\r\nnpm i react-hls-player --force\r\n```\r\n\r\nUsage\r\n\r\n```jsx\r\nimport ReactHlsPlayer from \"react-hls-player\";\r\n\r\n<Player src=\"/your-video.m3u8\">\r\n  {(ref, props) => <ReactHlsPlayer playerRef={ref} {...props} />}\r\n</Player>;\r\n```\r\n\r\n### Get video currentTime using custom ref\r\n\r\n```jsx\r\nconst ref = useRef(null);\r\n\r\nuseEffect(() => {\r\n  ref.current?.addEventListener(\"timeupdate\", () => {\r\n    console.log(ref.current?.currentTime);\r\n  });\r\n}, []);\r\n\r\n<Player playerRef={ref} src=\"/your-video.mp4\" />;\r\n```\r\n\r\n### Disable keyboard shortcuts\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" keyboardShortcut={false} />\r\n\r\n// or\r\n\r\n<Player\r\n  src=\"/your-video.mp4\"\r\n  keyboardShortcut={{\r\n    pause: false,\r\n    forward: true,\r\n    rewind: true,\r\n    fullScreen: true,\r\n    mute: true,\r\n    subtitle: true,\r\n  }}\r\n/>\r\n```\r\n\r\n## Internationalization\r\n\r\n| property                    | default              |\r\n| --------------------------- | -------------------- |\r\n| tooltipsPlay                | Play (k)             |\r\n| tooltipsPause               | Pause (k)            |\r\n| tooltipsMute                | Mute (m)             |\r\n| tooltipsUnmute              | Unmute (m)           |\r\n| tooltipsSubtitles           | Subtitles (c)        |\r\n| tooltipsSettings            | Settings             |\r\n| tooltipsFullscreen          | Full Screen (f)      |\r\n| tooltipsExitFullscreen      | Exit full screen (f) |\r\n| settingsPlaybackSpeed       | Playback Speed       |\r\n| settingsPlaybackSpeedNormal | Normal               |\r\n| settingsSubtitles           | Subtitles            |\r\n| settingsSubtitlesOff        | Off                  |\r\n| settingsQuality             | Quality              |\r\n| settingsModalOff            | OK                   |\r\n\r\n## Issues\r\n\r\nIf you encounter some bugs or have a feature request, feel free to submit an issue on the [github repo](https://github.com/DuCanhGH/react-tuby.git).\r\n","readmeFilename":"README.md","gitHead":"29e2928ef10c3adc067c2586d26ab74efe71670c","_id":"@ducanh2912/react-tuby@0.3.0-beta.2","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-fdo0u12Q9aQSwqEXcBXatS8J7qQYr95k8nHWHs0g/OyOogKHprO3VnTKt4H5UYDozlnur+TJ/KG/tQ80Pxd2rg==","shasum":"a84db4d26b245e7fa73f7056a5330e3aec31bfde","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.0-beta.2.tgz","fileCount":41,"unpackedSize":481090,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIwfeVoHaDjtJIlVPHGKoiwF60M3cH+B6BNEbNg49eywIgPdaFqbF5sRTx85OIYUuTbyL0r7XmQQFunVTX/tVIRdM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFbYiACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqysxAApGTXHfNvFBRvt4cWaq5bmraozVsQ5DE+U6HL1cQnCUvK1Cuf\r\naYSuXFZmVnKODQvsRNWJFniiqx2uAgboDqsCSWjFO2NEPZVM12mugTk+ZFnx\r\n5lKNKa+iC9EkUK9TQ8HKJVX9oTFEdsXU054MAhCP3tMgVt88wkcFRm+34bwV\r\ns0nV+cikGQOObor7Tv380v5GPfExWDer7wl0+B64dgmYqtqxPAVXmyniFssU\r\n0qpPQ7iH6U0ZMnZObncTtvEAhbSn1KjV2Fz2B2esm7qX3N+u8nXtYDVv8+0+\r\nBq+XgAbI1I8DwShT8wpb889zSUPptMVbCKEw2Uvi5CHF5hGjBYdN5EFF7YMP\r\nfssZzDSr8amst1tIxqHuaa7dJyK05DAtYFsp3cCeTTzdxWk+QeIHQsQjLe7c\r\n3kEn0CN2wsJrawESm2NRmI/WYU1kSH2O0FFdp7fbeDKvin1kb5A1qJurwCPq\r\ndWOb/bobRzvZPZ+c6z8FLZLNiwsUnZqP6d+i54mQlAgMjByO0Zrvgf7poEZZ\r\n2LycbPO1K8toyrNxPjVj16VwRhFZRCVrJz2q7nx1CNVteihzBerVL01RDeIG\r\nU7W0MpnW8N6ClpP3WBXIoUMYuMSsJ1Tu1GuN1uzywM34RwDNNkpqXc2fLnJP\r\n5COEBK2TjIP7j1kWAaHglpijtiwHi9ZEgo0=\r\n=KThj\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.0-beta.2_1662367265905_0.36996976254990677"},"_hasShrinkwrap":false},"0.3.1":{"version":"0.3.1","license":"MIT","exports":{".":{"require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"import":"./css/main.css","require":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"gitHead":"7aa607270e68c37a04c0b7f934eddaec4ff82110","_id":"@ducanh2912/react-tuby@0.3.1","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-aPrOf7lDorobHd2LvsVi574F9VxyTtvlVbjAIteuTue/t5TbTG50CDITbYvznRY7Cl1EGYgdsvz/yewqxCHctw==","shasum":"66570b042568e067575a1507bf6165aa1f4ae14e","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.1.tgz","fileCount":41,"unpackedSize":481083,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBhR4cAJCra0nepFT0FUNlQ8vNUWzHojd+tlF1VVOOsAAiEAqQeZR3HTZSoMT5xuw6kc2ldRuIdZJWeBOWDyBnSbfVo="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFbbQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpAug/+PBrpVn0pPZmL6UAHwAKs5jHMP51JZIDVcyuH94blF3V0yTfN\r\nLNvdPJFsSuBrBO3Aday3jePaQuAnfd5T1ZHFQoFEg3IKuDdTOpNiBuIsaJ/O\r\nGcVIXWrh+trWajErJgYNUaRmXlYFSjHyywKKaa1+UaitSbHwueMYJPvHE6A2\r\naR93ww5OtLw7Zhi3IVuF9freZGZ3sBI4KUhyHztzIiG0VrVICSHFgxdMDQPY\r\nxJKWleB2rAaN821iFLzKM1zWje3C1PQPKmhVl2y2vZeoowSTpDWBsfp5TKj0\r\nCWvhZDcoK6rxMGmgMWmJceTeGpPgTMUWxaSw1WMyiJhTPs4vZ3/Qo2Gia8kO\r\nGWUOEUEYdm0ikpyBFUXuFUclLMv69DI3VNkTp8GQMZG7D9UDLUF3ObHo8qWz\r\nozJFwVvgtysUdt1XMFN412MaUmZWE3CGxPSkhR0MFDPKVCohD0/tFc+i4Ki/\r\ntGqmKAQvRYgrkfkB68DwNkgTZttZw7dx7TOohwac8g0/80mj695FjsMwVymp\r\nHUUSS8FpTo9zKrjRw6y+osMxW9gpqF3X3t3ieiljiFS5rWeY0TmqPsPnCcDb\r\nosGJ25onK2Va3qe00IO+jXHRlh53jC4s69p46lB5gtLDcNwlBC9LkJgq58f/\r\n4ptHDdAGI32YRHbMzpsUdEhZNVaD2nigShM=\r\n=80hO\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.1_1662367440504_0.4670929564396884"},"_hasShrinkwrap":false},"0.3.2":{"version":"0.3.2","license":"MIT","exports":{".":{"require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"import":"./css/main.css","require":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"gitHead":"dc9372da8788ad4ea0d30324c4c87da9e3f34fac","_id":"@ducanh2912/react-tuby@0.3.2","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-xJovtjEDfhCSOb9veoERwPFaDibfboDc0MIcwLjImiRMo5VIbJenNMV8oawZH3bdbFrT0LvsXPhHSo9xAkbfgQ==","shasum":"584ceeb7f98a0ad47d4ae50eadafaad6a340c2dd","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.2.tgz","fileCount":41,"unpackedSize":481002,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC3eQqRocOElNwIW+5Sm0YBjNc+HuHeXd6+kXDVAUyN/AiEA3WzGBYLK0SU8oCJVFSxDatZtHu1rHbvzQfbcalVUqxQ="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFbh8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq2lQ//RjkhIhU1vmpSfa3pEhQs3EkH0B41C/+5YLeyykxfl2t6oG5w\r\np4pwLL9W4YD6cU3mj3m37V+6OUYNyzgrxWgJZpPHd7TlhaV9A8PL4kZMh2eC\r\nqP8xJ1WzqZGLBXKtEjwd2RyINT1+sY7p6Gy1oAZx09UZo8yYcGRJap6NQVsQ\r\n+g6ZA8FXX5y287mXFn/n2N7sW7uUB/aSa6CrVBkMIDDV1D4zWJzeRt05bJG5\r\nFcnKjc+9+ORUTszTCDx/7cAT3muotjwumlWyE8nkZSABDMVMfiKynElOHhmS\r\nMIgI1D4VY7mEZHFWSDPV/zSckY1JI7PHohmtzOtsTedkKYmnsa5AokhWt3rl\r\ng/AvbwKnbBJvaHFU9cqQEgFYy7bLkv0Gxm9zLJTp6BA5n1GQjhObYb6iq6+b\r\nt2FdM0o8o5atbpL1i6iZXqEFcW6yeRw5lGzVnm+WLBhp27rV8SypiflOwzSB\r\n/3WC+BY8jH7fjk1cQUSpxtUcSankpSiPjnUaD+lUYKUaPCu+cfOmM7eiR7gW\r\nHCrwy1k8O2IA4pcBvh1ppSXib7IUezxuWI5rE61WM7Fhbu7bh5JUOK1kQha+\r\n3khcwQYAGwsGr42x6BH5vfstXl0JmNm/YuRu4SocQzhosCaGubIr83Bp1y4n\r\n5gIa/GW+A46TP3viiw9Onbuuhb1sRq8no+M=\r\n=9agX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.2_1662367868840_0.0876636604447254"},"_hasShrinkwrap":false},"0.3.3-beta.1":{"version":"0.3.3-beta.1","license":"MIT","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"readme":"<p align=\"center\">\r\n  <img src=\"https://res.cloudinary.com/naptest/image/upload/w_600/react-tuby/preview_jhnrup.png\">\r\n</p>\r\n\r\n# React Tuby\r\n\r\n[![Build Size](https://img.shields.io/bundlephobia/minzip/@ducanh2912/react-tuby?label=Bundle%20size&style=flat&color=success)](https://bundlephobia.com/result?p=@ducanh2912/react-tuby)\r\n[![Version](https://img.shields.io/npm/v/@ducanh2912/react-tuby?style=flat&color=success)](https://www.npmjs.com/package/@ducanh2912/react-tuby)\r\n\r\nA React video player library with YouTube-like UI\r\n\r\n## Demo\r\n\r\n[https://react-tuby.vercel.app](https://react-tuby.vercel.app)\r\n\r\n## Feature\r\n\r\n- 📹 HTML Video, M3U8 support\r\n- 🎛 Allow multiple qualities\r\n- 📱 Fully responsive\r\n- 🖥 Full screen cross browser support, even Safari on iPhone\r\n- 📖 Subtitles support\r\n- ⏰ Speed control\r\n- ⌨️ Keyboard shortcuts\r\n- ⚙️ Support server side rendering (Next.js)\r\n- 🛠 No extra dependencies\r\n- ✅ Automatically fallback to default `<video />` if rendering fails on older browsers\r\n\r\n## Installation\r\n\r\n```bash\r\nnpm i react-tuby\r\n# or\r\n# yarn add react-tuby\r\n# or\r\n# pnpm add react-tuby\r\n```\r\n\r\n## Import\r\n\r\n```jsx\r\nimport { Player } from \"react-tuby\";\r\nimport \"react-tuby/css/main.css\";\r\n```\r\n\r\n## Example player\r\n\r\n```jsx\r\n<Player\r\n  src={[\r\n    {\r\n      quality: \"Full HD\",\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/1080.mp4\",\r\n    },\r\n    {\r\n      quality: 720,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/720.mp4\",\r\n    },\r\n    {\r\n      quality: 480,\r\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/480.mp4\",\r\n    },\r\n  ]}\r\n  subtitles={[\r\n    {\r\n      lang: \"en\",\r\n      language: \"English\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/en.vtt\",\r\n    },\r\n    {\r\n      lang: \"fr\",\r\n      language: \"French\",\r\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/fr.vtt\",\r\n    },\r\n  ]}\r\n  poster=\"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/poster.png\"\r\n/>\r\n```\r\n\r\n## Props\r\n\r\n| prop                     | type                                                                                                                           | description                                                                                            |\r\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ |\r\n| **src**                  | { quality: number \\| string; url: string; }[] \\| string;                                                                       | One video url or array of video urls and qualities                                                                 |\r\n| **subtitles**            | { lang: string; language: string; url: string; }[]                                                                             | Array of subtitles, the first one will be the default. Subtitle **must** be in .vtt format.                |\r\n| **dimensions**           | number \\| { width: number \\| string; height: number \\| string }                                                                | Number: aspect ratio (height/width). Default is 56.25% (9/16) Width, height: set custom width and height |\r\n| **primaryColor**         | string                                                                                                                         | Customize the primary color. Default: #ff0000                                                          |\r\n| **poster**               | string                                                                                                                         | The url of poster image                                                                                |\r\n| **seekDuration**         | number                                                                                                                         | Seek duration when pressing left/right key. Default: 10                                                |\r\n| **playerKey**            | string                                                                                                                         | Unique user key to store video state in localStorage                                                   |\r\n| **internationalization** | string                                                                                                                         | See internationalization section below                                                                 |\r\n| **playerRef**            | RefObject\\<HTMLVideoElement\\>                                                                                                  | Use your own ref to control the video player                                                           |\r\n| **pictureInPicture**     | boolean                                                                                                                        | Show picture in picture button                                                                         |\r\n| **keyboardShortcut**     | boolean \\| { pause?: boolean; rewind?: boolean; forward?: boolean; fullScreen?: boolean; mute?: boolean; subtitle?: boolean; } | Customize keyboard shortcuts                                                                           |\r\n\r\n## Examples\r\n\r\n### One src only\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" />\r\n```\r\n\r\n### Custom width, height\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" dimensions={{ width: \"100%\", height: \"100%\" }} />\r\n```\r\n\r\n### Custom props for video\r\n\r\nThis library uses **render props** to allow user to set custom render component\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, props) => <video ref={ref} {...props} autoPlay loop />}\r\n</Player>\r\n```\r\n\r\n### Custom event\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\">\r\n  {(ref, { onPause, ...others }) => (\r\n    <video\r\n      ref={ref}\r\n      {...others}\r\n      onPause={(e) => {\r\n        // The library original event\r\n        onPause && onPause(e);\r\n\r\n        // Do something here\r\n        console.log(\"Paused\");\r\n      }}\r\n    />\r\n  )}\r\n</Player>\r\n```\r\n\r\n### Usage with m3u8 / HLS\r\n\r\nInstall react-hls-player\r\n\r\n```\r\nnpm i react-hls-player --force\r\n```\r\n\r\nUsage\r\n\r\n```jsx\r\nimport ReactHlsPlayer from \"react-hls-player\";\r\n\r\n<Player src=\"/your-video.m3u8\">\r\n  {(ref, props) => <ReactHlsPlayer playerRef={ref} {...props} />}\r\n</Player>;\r\n```\r\n\r\n### Get video currentTime using custom ref\r\n\r\n```jsx\r\nconst ref = useRef(null);\r\n\r\nuseEffect(() => {\r\n  ref.current?.addEventListener(\"timeupdate\", () => {\r\n    console.log(ref.current?.currentTime);\r\n  });\r\n}, []);\r\n\r\n<Player playerRef={ref} src=\"/your-video.mp4\" />;\r\n```\r\n\r\n### Disable keyboard shortcuts\r\n\r\n```jsx\r\n<Player src=\"/your-video.mp4\" keyboardShortcut={false} />\r\n\r\n// or\r\n\r\n<Player\r\n  src=\"/your-video.mp4\"\r\n  keyboardShortcut={{\r\n    pause: false,\r\n    forward: true,\r\n    rewind: true,\r\n    fullScreen: true,\r\n    mute: true,\r\n    subtitle: true,\r\n  }}\r\n/>\r\n```\r\n\r\n## Internationalization\r\n\r\n| property                    | default              |\r\n| --------------------------- | -------------------- |\r\n| tooltipsPlay                | Play (k)             |\r\n| tooltipsPause               | Pause (k)            |\r\n| tooltipsMute                | Mute (m)             |\r\n| tooltipsUnmute              | Unmute (m)           |\r\n| tooltipsSubtitles           | Subtitles (c)        |\r\n| tooltipsSettings            | Settings             |\r\n| tooltipsFullscreen          | Full Screen (f)      |\r\n| tooltipsExitFullscreen      | Exit full screen (f) |\r\n| settingsPlaybackSpeed       | Playback Speed       |\r\n| settingsPlaybackSpeedNormal | Normal               |\r\n| settingsSubtitles           | Subtitles            |\r\n| settingsSubtitlesOff        | Off                  |\r\n| settingsQuality             | Quality              |\r\n| settingsModalOff            | OK                   |\r\n\r\n## Issues\r\n\r\nIf you encounter some bugs or have a feature request, feel free to submit an issue on the [github repo](https://github.com/DuCanhGH/react-tuby.git).\r\n","readmeFilename":"README.md","gitHead":"7dd083066eba32f5802e84644e5a773497a7aa2d","_id":"@ducanh2912/react-tuby@0.3.3-beta.1","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-+fHSDVRa2HSFAkoVw4jCvUp1L8KSlO1dodJR68QiQO4iq39yjIomJqL128koclBt+7yHKcIzpbWJcp4DmjJGjA==","shasum":"e1c054061f83ae8bbf99253f64c930cf2d130ec8","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.3-beta.1.tgz","fileCount":41,"unpackedSize":481045,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBQ+RmN8hEUmjGKAMC/SBFMfSxpcmmduGPVvVENeHFqXAiBctdgM0F6cjPvg3CyAwYx+nQMh6TnNaCmBPaonzzQaxQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFdvxACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmoi4xAAmdD1Ixfrey6vq+pJCaXHhvxItqZTvHuuzpJjvNkNac62OO39\r\noPQJXtsVPvY52LXsf45Oeej716P/WS2DexQdF6CB83sWdIp9GUG1ZXEshO9i\r\nC/jjIDbYScNKxxgVOuAOx0ASxu6irLNpcl7mROvp2q51ztuTfkFgtjsM+FAV\r\nHA+9eb3Bf7NR1R+VP0It/DtMROqwoyQaQuisZTPa9xw1fNFhHEh3gTpYNd0Q\r\nA5/QlDzDb0T21A9T6gYMoPpEoHMcvalUgloVJ8Cc7nSxkc7gXB6LeVb/WaVp\r\nWCMTjabAlGjW5+6fnuY1xKfywRFCe6Ha9OgP6et2N8CJBs7p8vUfGiFdQcrs\r\n/Hfk83YkYYOH/Dism+1K9Bq++13Kahw8NsZrJIdIf78YiHZk+8X2ZwZjjpN2\r\nejMkBNpCXNMLeN7p+y1ALaocuVJ47x47ZNJw5GvXfAHai/W6Lwhzt7cEp/qM\r\nKtCorQBO7j3oiHxSD+TLKOBonvnmbRF8tUDIBgKoL2ZygpOPzEpY1ySaCVoY\r\nkBngNhq3I44u6+JwgyjPTEeU4I4s2tgjLS22icXaEKV6w9TKXggrC41zhT3l\r\nuBl82i55jGrGRuSyLdVMqOOIU+XUgsDXRChoA3P7tuwP1Qbt9x78lIoDzNKt\r\nVakqhe3l2SOCTjfE+uZRGaE8eIpHFvoXYxs=\r\n=dbOW\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.3-beta.1_1662376944694_0.06087090166533904"},"_hasShrinkwrap":false},"0.3.3":{"version":"0.3.3","license":"MIT","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"gitHead":"7dd083066eba32f5802e84644e5a773497a7aa2d","_id":"@ducanh2912/react-tuby@0.3.3","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-TRIUSMcdnhIFgReuS9CJ2Aj31HpZbqBSrFvtr81Hvk3OMbFA2yiSsG9+MVYPfrOfwPXIVal1vBw0mGjmyQlDdw==","shasum":"18153b4041c1f9929b5fa615bb5d3ac3f3ceae2b","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.3.tgz","fileCount":41,"unpackedSize":481038,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCXKotXlz7ypVZG73NoaSGTmvRrlqLxj4F/oiQL+Hje+gIgV1Gwguc2zfI1TShiuhe1dvTw0a/4XMH0u4+6mW++LLE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFd4DACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrj/w/+K9W/B+ro6rPNUFOe/sUXQGAHCCu+oj/39AxQKr4mCP1mK1Sg\r\nhij/zafNcE6Z9b33eZcywNX7e7bIUYpxj6vmAKnrPunZiIGY+KcNVmSckYEZ\r\nHJCT98mcF/pWFqu2MvZfRM+WgkAW/ylpY6xVFXdXYBeSfpL88h9e7kH54WCz\r\nHcgPOxnitS8NNgFyGRBi6lNTz7v+hB0BrVLRpDQVPPnOYtt8TCHfIaP+z+8X\r\nd014qvi0+UE61BMQ6KdEsRvxXkdujOJpix5ct9xSayhlySW9E/CTR+0f+UFS\r\nmVFequivU7lRzNsg5IfD5SrvbUs3+t9fU6cOdw8s3rrt9Z5BeB5Z7wVtNSTU\r\nTdUusCAdjqhx4FfhUmYQEjzj8cfMDtX/xByKsW/zdGYLYh3UbljDce71XxIz\r\n5d/9GTQRtEPC6/azy9IttYVIdvtZhEV2zzquHlmeQpbuDtXcesoZ+JcbYv4r\r\naewODeKWUgue+nCr+tSNVQv8c0OIqWSY+re15wFd8wEAgvu+r0fgisZfpJHE\r\n1egotB+BelQBgoNVyyFcp2WxG6TR8qCmoZVtfZh6tTXN2KoJytjqO0WlKiFL\r\nIh6iFtxHOLtdIFfAKO/NoySm3zAKtfd1pXBL4M2MsqC7kpFSMBNCsys2LbGQ\r\nUBxx8jCd1LufKFRATPKB5+I9RklsI2cwpCw=\r\n=bbCL\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.3_1662377475658_0.027574807686309377"},"_hasShrinkwrap":false},"0.3.4":{"version":"0.3.4","license":"MIT","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-hls/issues"},"homepage":"https://github.com/DuCanhGH/react-hls#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-hls.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"gitHead":"07515e9c1b3a49aa4dcfd85cd1ce55c435e9404d","_id":"@ducanh2912/react-tuby@0.3.4","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-/8dWY680JrYJb6G2zG8zL4HJXpcDQD48jB/okNC3rV5NmWzrpcztCCUlsXcE7Ws9R6DZHghJU9x+Q4NEIGZ2AQ==","shasum":"8370d8da279a993fdb25b23d02945716ab0496bc","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.4.tgz","fileCount":41,"unpackedSize":491646,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCI/xxWSPlK0azPmh4pSv/Nd37QqBk3Dbw7TfVMQ3vgiQIgLm8sxCie5bZ+reB5SOv02BbUvmO10J1x7OM7DQ9HZ4E="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFuouACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmrn1xAAiVpw3gJ4jXr9CMtMbJaT9ZXVe3b5uMe+LYXVIg6LRv5PHkeG\r\nMaS2CE1al4qDnZlJFamHatAQ3o4e8nYbDiNlcJtdgov7VuS79A6xDg0YQ90c\r\nPLdG/pQiwVEtAR99+f5y39mY76mRN+FsTlq6bCion4mQxQRA0RbaO67Evqsy\r\np4WbfmiaoGBdDMH/Dp2PTNNP38qTDt/NYL6yxndJonyCj8GgjD0Lez5145z7\r\nuT2/V/JKMGqN0fWzJHqpfhSxw1itRNpTWXLRGkhTSNk2HimZcMqCqmX0E64k\r\nZ5CcXwhQ8g3ZGhjtzClOHNoqYY5UTZSDQ/Y7ZW1nHHC+AQPmIRzzqGbAAYf5\r\nUqi3JMKyZXu/9qZ2MQllKvhaqf1aTy3M5PNvzQNaZvdmdO6pPr7aIwan7dJq\r\n+RZ8lGn67ypyP1+oRiBmpiC5YvvxQW4gkUfKIZbn/wsHiwXnPmAjCpsuCXHA\r\nIgqGNR6vPOXLNmU3Wy0nGir2LltPvYxzgc/5Zo8wd2z/PsuXy688UAzgzvv5\r\no9LDvYdYfpFIYicOfbUXKqlzn7JwOUCrzPFn8YTwYWUtdC54i6qlRoYjJJU+\r\ny6aTi1Md+NKSGtylClbE3NEt3qBgRfFgbsECmggy6PDL2oCmM4GSQaB8BZnQ\r\n5s8XVz9jqSniuBQO9WABYSBH2dmS9vcpO/M=\r\n=Yoro\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.4_1662446125973_0.38719080295573916"},"_hasShrinkwrap":false},"0.3.5":{"version":"0.3.5","license":"MIT","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"gitHead":"afe549d93ef79d591c239865e50e1dd20205a626","_id":"@ducanh2912/react-tuby@0.3.5","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-PEPpnK7vKMDLQdPCmQWhI44bHo1Lm+q35n99DMe50XLvLmdCtDaXsf6mYCHo64puBb6Ioq5yXu2av8DejCWgIQ==","shasum":"52d64f5d680e84c3efb2da62fb10f6ca693cf5d7","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.5.tgz","fileCount":41,"unpackedSize":491649,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYtFOfY/o7HmG0WCvCgDP45hMRhigjBCv7gBjPN+GQGwIgTiqynl2fx5qvMLhvoo1ibgS9sdq5aUataZh1i/BcNbs="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFur2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoLZQ/9EycC/LvaEF7FqcWj/LxbO2L7E26JsgKWNX+LvPYdNDOsjUZf\r\nenMXD6Q3THJ1LUu7dfq59z4U0fdAkgL7mFiOm0UcZX/A4/uTEQnKzayVl25K\r\nGkXGM/VzULKBtbj/tm9I4tqedpZVlAazBH2kRmE43BXqYHjHLv+of+dscBv/\r\nB/B52+++c1ZY2GqI8qNUpPD6jla/eHGq8sATSNp/7lVyqWuzd24T+otjzddf\r\noJoClH0dbC5mOUFjvX7Xe1bhXcPBb6fx8fGHJnjqURXWnITJ4OIDnBjzncat\r\nfItNywEYXKSsMcfyuz9B426z7FdMw2DLdFzljSX+mg/1MILtRFqJYyA/CWgB\r\nEWic2ctAFfjnZc9VKCOlcYmN9eIgmKRSqCTNy+DTSDq1O7gQKd4NxorGm5QJ\r\neiUlAo+JBio+iF72h4QYC9v3FpixxvFgCBSOV/pLz0MUpyUliL8w8lcIsYqc\r\nhmUpRHyhWQ+9HW5tHvZLCa8Sjf4mOkdPyGACp9h9EokZxSYSva/Ed9fo3J1b\r\nJn/ysXkStU/r4e7tR7wuUVlIZkAru9sCCr/7wponX7+ast0oggt5LK6HwfQ1\r\nm0jF+vi41BlInSnQJ1oRj6Puo9ACsaLoR2cLdPIG+iWV/fbthSeS/UNeRSky\r\nz9/TanyJKMyQ5GuVD8xLNcPJF9l52csi5/M=\r\n=nxs6\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.5_1662446325852_0.5227117374151822"},"_hasShrinkwrap":false},"0.3.6":{"version":"0.3.6","license":"MIT","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"husky":{"hooks":{"pre-commit":"npm run lint"}},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.0.1","@size-limit/webpack":"8.0.1","@size-limit/webpack-why":"8.0.1","@testing-library/react":"13.4.0","@types/jest":"29.0.0","@types/react":"18.0.18","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.1","@typescript-eslint/parser":"5.36.1","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.6","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.2","jest-environment-jsdom":"29.0.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.8","size-limit":"8.0.1","ts-jest":"29.0.0-next.1","tslib":"2.4.0","typescript":"4.8.2","webpack":"5.74.0"},"gitHead":"89f596ffd717355ddf818fdad93b62fd71fcef50","_id":"@ducanh2912/react-tuby@0.3.6","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-qxyUMH2u/pW/GrRgx6DyKaIN5ZNOIHCorQX9I/hwZrENnCzv1SPywIDwCAfF45f8KgCx71M475PitEbc58A4Rg==","shasum":"4b34e46f4581d8ab468591f8b5534bbba5d9ff88","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.6.tgz","fileCount":41,"unpackedSize":493335,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGNJ6O8hJLLiJKhVYH3B5ebG97V3DIfjUkvdle09j38aAiBmCGx+eJ/eCVeXeJXA90KLCZbQenDyRnRdtviugvYCuw=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjFvpZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqlbBAAjfKWm0yas1FnTNLRXlkgV8bAvM28CvfEKZ8bFTNG+QgpLY9y\r\nX0GPcwPO1eAhPuWc4UR9yA4mRoEKSojYi5eBVd+2LWmOdqwGoswyvw/vzG6n\r\nMCVCzBFhWvJhKPBNuyC2/QK1vj2Ufj4RHmwxFPdJ7pca+vBpdDpz2a4W9gzR\r\nc1qBCUkcljb/rmq1WJtGqMz5PTY5TrUw2dlDVgZt8wqSKkBTrz3Ji2gDJ56I\r\nKWpZr1RbBbMw5XHyhpEOrH75z96THRLPFitgAW2Fsiug/dQwy1q+f9ugqHRQ\r\nopgQchOxfxJBGMOywqq/aNuc+q+aN2dEoY/LdSwmS6fsV4TdCh//cbefnDZS\r\n5duwWz/RUnY4viAd/8CaMZISp/DRMti8PK2Nw2ZDpah1l96y6r7Rxes4DHHM\r\n9hOZ9eIyuboXN8TBqpXCZrv19ArBW4rAjfEi0nfxvLxRsC454ZA4b0z61WUx\r\ngmvkijtHb2CEnO6XqgvhAairPozkLSBcgNT3B0Fzw4v+WKktUnvVEFSN1WGE\r\nZyOdt5/52EF85vaDadxar0vMuHkfQxx2KDJmrnPh45ZfagwBJ2clKfPxzl5f\r\n29dlyfpfA2jF19MKRPGUDTy3NrBourr8FTrt5WgC6nUgMRjkDXs41M8ubKdV\r\nEoEu2SjxOGTxaPzqM/DBtjhyMTf5aD3tDgA=\r\n=m/kT\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.6_1662450265347_0.13867161761085023"},"_hasShrinkwrap":false},"0.3.7":{"version":"0.3.7","license":"MIT","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","default":"./dist/index.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/index.js","module":"./dist/index.module.js","unpkg":"./dist/index.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint --cache --cache-location ./node_modules/.cache/eslint .","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","prepare":"husky install","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"name":"@ducanh2912/react-tuby","description":"A React video player library with YouTube-like UI","author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.1.0","@size-limit/webpack":"8.1.0","@size-limit/webpack-why":"8.1.0","@testing-library/react":"13.4.0","@types/jest":"29.0.1","@types/react":"18.0.19","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.36.2","@typescript-eslint/parser":"5.36.2","eslint":"8.23.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.8","eslint-plugin-react-hooks":"4.6.0","husky":"8.0.1","jest":"29.0.3","jest-environment-jsdom":"29.0.3","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","sass":"1.54.9","size-limit":"8.1.0","ts-jest":"29.0.0","tslib":"2.4.0","typescript":"4.8.3","webpack":"5.74.0"},"gitHead":"a3a5d53069c92d2b6be8745edf8e9a64f70b4ed2","_id":"@ducanh2912/react-tuby@0.3.7","_nodeVersion":"16.16.0","_npmVersion":"8.12.2","dist":{"integrity":"sha512-4l5/5v3EnEQAyhRWnNixK0YSoH1KyoO61rIZDOPswP+Q6lQU8WykO4nc/W1Ts+NK94p6QHl47SyAausNNIRgmw==","shasum":"d9c7261299fae9700d8b9ffc3efaa94870f0d777","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.7.tgz","fileCount":41,"unpackedSize":496615,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE2XG553WNoQVPIwDjP6znSd4V6M9ZlvJZhZvk1jd3/xAiEA78Ova/ZXuoFi9PSf16oW7/YGTiHgJ006FHyakkeFdAk="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjHgK8ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmobeRAAjsQz3MptUbuK84K4sk03tp3ek5+3rCn0CStQdVds1YvpwzBk\r\n4zmsIssJsEoRj1td461eI9PN0DE/pfPs3unQez9uBeVvolTqnDNgl6umWSHM\r\nK/D5/ESYJ0kUUa1N2zhNhV+qp8YLnp8UnJNMumrzeRmPV+REww57NdFRCcUs\r\nsaet8eP3tH2HC1E2PaUDNpbCe4PZDuYYEOxwVCPDm7XNXc7LQMkTyTr+e0hU\r\nYJVz/erBAxVAWbO8vzRCEqsX73994mIE6HblV8yLDl7hommt5tYhRs2oNEnj\r\nBbxpvQZZBuhSPpcAIh+acSFaMgEnsPrMYDcOwj6hDGtDltL9/AAuLZonNlop\r\n+/e5U0WFgEeOyh0aEq2CD6hRpVFyFTz88TnKOv0y67Lt/N8lyn5oRqMZzqRd\r\n2CwblD1J8yGr1QlaTvGJcmudOKTtgu9WmD8NlduMx1Se9YhUFm7FDMtIAcpw\r\nHw76WOiajy373lnpoTcfvD9AfKqPLDPLP+PKBmuM2x323hpo0x9zDghFu1DJ\r\n9pW67tJGBHmiD/tuVZKjVtb9cuvbvK5/bV4YadZNKqOugYds2E4fcvCh/wDi\r\nc+LdG2DskcPyEo28sMQeFjlpQj2keFtPg9cjZ2IJqPoHnwpcbcIwZUoHv2MF\r\nhrZiWZwDpIEvQ2iE7TQ41IqP9o2wOec9Iak=\r\n=s4E9\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.7_1662911164170_0.9559014729577837"},"_hasShrinkwrap":false},"0.3.8":{"name":"@ducanh2912/react-tuby","author":{"name":"napthedev, DuCanhGH"},"description":"A React video player library with YouTube-like UI","version":"0.3.8","license":"MIT","source":"./src/index.tsx","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/ducanh2912-react-tuby.js","default":"./dist/ducanh2912-react-tuby.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/ducanh2912-react-tuby.js","module":"./dist/ducanh2912-react-tuby.module.js","unpkg":"./dist/ducanh2912-react-tuby.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"rimraf dist && rimraf css && npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint src --cache --cache-location ./node_modules/.cache/eslint --ext ts,tsx,js,jsx,cjs,mjs","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","prepare":"husky install","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@size-limit/preset-small-lib":"8.1.0","@size-limit/webpack":"8.1.0","@size-limit/webpack-why":"8.1.0","@testing-library/react":"13.4.0","@types/jest":"29.0.3","@types/react":"18.0.21","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.38.0","@typescript-eslint/parser":"5.38.0","eslint":"8.24.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.8","eslint-plugin-react-hooks":"4.6.0","eslint-plugin-simple-import-sort":"8.0.0","husky":"8.0.1","jest":"29.0.3","jest-environment-jsdom":"29.0.3","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","rimraf":"3.0.2","sass":"1.55.0","size-limit":"8.1.0","ts-jest":"29.0.2","tslib":"2.4.0","typescript":"4.8.3","webpack":"5.74.0"},"gitHead":"ebc715ea45771f1b12812a27846325866028b77c","_id":"@ducanh2912/react-tuby@0.3.8","_nodeVersion":"16.16.0","_npmVersion":"8.19.2","dist":{"integrity":"sha512-NXtbb3XaDovbVLOMl9E1FEvFf/h28NhnOt+GG0zedfu1En0Mm9gza5qgEbVOLCue9AFtX9xF4tIiAj6moUIM7w==","shasum":"a851dd747c395bd702e7f76882a113a2e5185462","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-0.3.8.tgz","fileCount":41,"unpackedSize":500757,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB3K7BDMWLHzSY6ohQModNow/116D6ZjB95HNcT7gYNzAiACG6O8g77Ylwx7BMuI7ZfqVJg0WcWGsGQZFuRJ5c6oeA=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjLzgaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrASg//TgIFSK+E72zRUzzRanJ3qNMjSU+a384R4eJRu3Xn4RzRfcwK\r\nVsp43Lr168rfr7b0PCmbqGhc9LeGgbXnoF8Wu7tDF/YROOwxcLYJwzKhu54r\r\nGhU4PjhXpa4WajioVNDT55NF2+Sd13MXOMs15eX+7K1FLGA0dLlEmmrjLxXx\r\nDyJAqK09JgpbqsPuw1dHh7yqg4WjyOwWNdgiu1HEQXKX4M9Ykn+XHSyOqywd\r\nhhtdweGt30pPSoKYktunMPNFVkKKfwrrOBWB91CmiH03si3ycoEsG+B3oSbS\r\npS4ZFzUISJeGk6EXc/dD7xaoTeCTvy11YpOa6gu0Ex4B73t9a2C7ctgS5rz2\r\nBAcn4R9xeIMFs3m97CZCj2SvLgvORlTkt5oqzreAfs3jAkFQaFSw4vZUZv0p\r\n8WgjtZwMCbp7Q5ekqh7kGCE43dUvB9r4VUd/I9sisp5/pV7EKutnvS0NEdxY\r\nMerSzwbB+PkhJ8X4iwCykcy9gLv7Xbtt8v98WGUKQdmGxwA/X1T1G/UHRJns\r\nkBKp7ztf6h/aIQRuwF8soTUl42d9/sNQEMu6NUmQZ3cOTvcF/LC39GyHvTmM\r\nJp3h+dsztx+W14IhPMB0s2Ei6ceYKHf8BvTfBRUSIxHIRDtXsiC3erZZ/ZIN\r\n65k50YCtc1GxBDfh//0oqE8PHT09J9cltPk=\r\n=NNJz\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_0.3.8_1664038938419_0.18778803378253972"},"_hasShrinkwrap":false},"1.0.0":{"name":"@ducanh2912/react-tuby","author":{"name":"napthedev, DuCanhGH"},"description":"A React video player library with YouTube-like UI","version":"1.0.0","license":"MIT","source":"./src/index.tsx","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/ducanh2912-react-tuby.js","default":"./dist/ducanh2912-react-tuby.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/ducanh2912-react-tuby.js","module":"./dist/ducanh2912-react-tuby.module.js","unpkg":"./dist/ducanh2912-react-tuby.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"rimraf dist && rimraf css && npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint src --cache --cache-location ./node_modules/.cache/eslint --ext ts,tsx,js,jsx,cjs,mjs","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","prepare":"husky install","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#README","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/index.js","limit":"10 KB"},{"path":"dist/index.modern.mjs","limit":"10 KB"},{"path":"dist/index.module.js","limit":"10 KB"},{"path":"dist/index.umd.js","limit":"10 KB"}],"devDependencies":{"@semantic-release/changelog":"6.0.1","@semantic-release/commit-analyzer":"9.0.2","@semantic-release/git":"10.0.1","@semantic-release/github":"8.0.6","@semantic-release/npm":"9.0.1","@semantic-release/release-notes-generator":"10.0.3","@size-limit/preset-small-lib":"8.1.0","@size-limit/webpack":"8.1.0","@size-limit/webpack-why":"8.1.0","@testing-library/react":"13.4.0","@types/jest":"29.0.3","@types/react":"18.0.21","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.38.0","@typescript-eslint/parser":"5.38.0","eslint":"8.24.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.8","eslint-plugin-react-hooks":"4.6.0","eslint-plugin-simple-import-sort":"8.0.0","husky":"8.0.1","jest":"29.0.3","jest-environment-jsdom":"29.0.3","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","rimraf":"3.0.2","sass":"1.55.0","semantic-release":"19.0.5","size-limit":"8.1.0","ts-jest":"29.0.2","tslib":"2.4.0","typescript":"4.8.3","webpack":"5.74.0"},"gitHead":"c2e81fbcb5fb48c21bd3c03d25ab36099a7887b0","_id":"@ducanh2912/react-tuby@1.0.0","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-KpYsEECCWxYv7qcSjDszjMY1e3scaPFBf8sYknqA2UO8zKe6Nf69TaOGp2ZnrB+ZqNnA12aCNimILyEeVw2DJQ==","shasum":"ed6942717be669a258f7b1722e3be2ff32546f44","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-1.0.0.tgz","fileCount":41,"unpackedSize":487736,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAiy60zdCS+/J5sanVSJ/sUKR2+vzebf9a/g8EcYkViXAiEA1cvSQJ3vXDFWI13FW20Worpos78aUfioATwPFYAqojc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjPm3nACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqyzA//XeDUYvOUD1rkrMVakGWdrgHH4xyOKFNLIMtVn9qMCOS7KeCy\r\nAEQNweeIJh+BoniXbH0geaQpbe1VLUbOH6q8DuKl5YF0BXsUhcq4OfasX4ee\r\n6bmsc27ek1EYVGl9aNE4Bba3Q2qUNHQW7yNvSKq/ghAhJeAXmVEPkns61N69\r\nR9Gp2aYHbHaU6L41SFaHkzqH7Z3iTLraUO0U+doiiX0l2qtNOfHYtsmEZY5x\r\nz5vyLAaq88NjbEYo9i3vUXYV3Nmf17ZNnUixQK6sDqYKy3MpdWxofcPusk0l\r\n1cTc6HLpQc8M3qrWQeyW0JkAE9fjxQEtazsi6XpA8TA/xFk+tt+93lXuMlWg\r\nyBfHjY24K/iX84U5TfWIJRLRDz1ly6jPqsAREbMqdRMDcEOIkPtD/fZM4avU\r\nkaSf1gOVlKG5LaTHJF4me1gQB4dr/7foFoq+IWtZsfk4RxPUdJVdAJom1/kx\r\naNpykJkz4rTZd6qE0tHWclcIvC+NcO0IRm5BtJ61sox3OcDqJwT3Tb7LO+tM\r\ngnlXCNdb70Jyqzjjp/YvbgFRkZC1BHPp24R3pG7UgsUeCnGOQBzqrBSkz8io\r\neGuHXOvKJ7sz0ideGCLXsNccRluqLBr7/4ZR1Y29/CoPiPsifZVh1eCkrrNN\r\nOkPTwMJ04T8PqE1uNk1pHpUXiLv6usdr96o=\r\n=YTfa\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_1.0.0_1665035751588_0.20537619262103535"},"_hasShrinkwrap":false},"1.0.1":{"name":"@ducanh2912/react-tuby","author":{"name":"napthedev, DuCanhGH"},"description":"A React video player library with YouTube-like UI","version":"1.0.1","license":"MIT","source":"./src/index.tsx","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/ducanh2912-react-tuby.js","default":"./dist/ducanh2912-react-tuby.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/ducanh2912-react-tuby.js","module":"./dist/ducanh2912-react-tuby.module.js","unpkg":"./dist/ducanh2912-react-tuby.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"rimraf dist && rimraf css && npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint src --cache --cache-location ./node_modules/.cache/eslint --ext ts,tsx,js,jsx,cjs,mjs","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","prepare":"husky install","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#readme","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/ducanh2912-react-tuby.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.modern.mjs","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.module.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.umd.js","limit":"10 KB"}],"devDependencies":{"@semantic-release/changelog":"6.0.1","@semantic-release/commit-analyzer":"9.0.2","@semantic-release/git":"10.0.1","@semantic-release/github":"8.0.6","@semantic-release/npm":"9.0.1","@semantic-release/release-notes-generator":"10.0.3","@size-limit/preset-small-lib":"8.1.0","@size-limit/webpack":"8.1.0","@size-limit/webpack-why":"8.1.0","@testing-library/react":"13.4.0","@types/jest":"29.1.2","@types/react":"18.0.21","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.40.0","@typescript-eslint/parser":"5.40.0","eslint":"8.25.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.10","eslint-plugin-react-hooks":"4.6.0","eslint-plugin-simple-import-sort":"8.0.0","husky":"8.0.1","jest":"29.1.2","jest-environment-jsdom":"29.1.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","rimraf":"3.0.2","sass":"1.55.0","semantic-release":"19.0.5","size-limit":"8.1.0","ts-jest":"29.0.3","tslib":"2.4.0","typescript":"4.8.4","webpack":"5.74.0"},"gitHead":"b4992f3c785d4eeaacca46ff4c1a4f0b826f1d33","_id":"@ducanh2912/react-tuby@1.0.1","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-VU7ZwTSUOsY+2elRyuIy9bj2LqrpPiiIMDAGOHBHxxvePspU4MSXTXWtkdKdfi1jcfAvR8mTPWw1rKdLsm7lWA==","shasum":"2711089e4263ffa6ad26ab8e8f72a18878bf775f","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-1.0.1.tgz","fileCount":41,"unpackedSize":491847,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFhp5EGElwISVjde0e6zUG6st0HE8X4drX9vncjyoGSeAiAPmOpWQO1hnMyc9K0E6s4bmDAC/6EeYvJC7VxoeDKunQ=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSCE2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqZQg/+JiQsM2S2RoS0FVRXmtiQEqW2Z9JD7+qROrxAZv5iPmbiNy5a\r\nzMab4SeE9PVIUI3If052HUJnBsSJTCnngW0YQHeMY6MfhS0bYKlHg8dEbyNJ\r\nFP9czVOjHHeiHyCJeDvBiQZqbKeiWUsV7za3oPp+ciYyn0HTTS51O/D2NcOk\r\ngAu+MvAsDQFXyhGTOEHeDXEv7BZU4hh58ClcXQhWV54jgIuc0jOneg0G9eHl\r\nDhFnj/ZcaOLQTJud8Zqn/612OFfFF4CkVw6X6VQRM4wEMuVdHQaX7gUJ/uRU\r\njHnGI4PSGbEUIhydj2v43/d72NxY0sG1n7O/r43twKgPs9nRowxa9xxkWhdv\r\nQfwSFoZfoHl0yjXxec+T4s9iBzvXZWqKWylktJnM08txdV64NsqbOCVsKZ0A\r\nkOFc1AB1hhInuY57/g9zZZvPZDjGVp8GtAe4J5Ty3rKhRcHM0t2VYFy2ZUS5\r\nHYofRR1hyefVwDrssp0rqHX8byr6EfTR/mMTckCyNVYPJ5/NOl1gQ9ADFuVH\r\nwN+wTe4/74FdR8xhF4HmLTtaAjpBDKogAbpbQ+FjuslkNDgyPq9V13yhkUYp\r\nJ0bj3TrEAEMqRc5zvBF4LKD6yarIOXZYwvKM6mAxpx8+h1q0vxQqRlOf/z0u\r\nlX9JysHmdMLVb/F5TVZatcI1+XueRPrX4Qw=\r\n=/AJp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_1.0.1_1665671477809_0.7413066539662794"},"_hasShrinkwrap":false},"1.0.2":{"name":"@ducanh2912/react-tuby","author":{"name":"napthedev, DuCanhGH"},"description":"A React video player library with YouTube-like UI","version":"1.0.2","license":"MIT","source":"./src/index.tsx","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/ducanh2912-react-tuby.js","default":"./dist/ducanh2912-react-tuby.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/ducanh2912-react-tuby.js","module":"./dist/ducanh2912-react-tuby.module.js","unpkg":"./dist/ducanh2912-react-tuby.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"rimraf dist && rimraf css && npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint src --cache --cache-location ./node_modules/.cache/eslint --ext ts,tsx,js,jsx,cjs,mjs","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","prepare":"husky install","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#readme","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/ducanh2912-react-tuby.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.modern.mjs","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.module.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.umd.js","limit":"10 KB"}],"devDependencies":{"@semantic-release/changelog":"6.0.1","@semantic-release/commit-analyzer":"9.0.2","@semantic-release/git":"10.0.1","@semantic-release/github":"8.0.6","@semantic-release/npm":"9.0.1","@semantic-release/release-notes-generator":"10.0.3","@size-limit/preset-small-lib":"8.1.0","@size-limit/webpack":"8.1.0","@size-limit/webpack-why":"8.1.0","@testing-library/react":"13.4.0","@types/jest":"29.1.2","@types/react":"18.0.21","@types/react-dom":"18.0.6","@typescript-eslint/eslint-plugin":"5.40.0","@typescript-eslint/parser":"5.40.0","eslint":"8.25.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.10","eslint-plugin-react-hooks":"4.6.0","eslint-plugin-simple-import-sort":"8.0.0","husky":"8.0.1","jest":"29.1.2","jest-environment-jsdom":"29.1.2","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.7.1","react":"18.2.0","react-dom":"18.2.0","rimraf":"3.0.2","sass":"1.55.0","semantic-release":"19.0.5","size-limit":"8.1.0","ts-jest":"29.0.3","tslib":"2.4.0","typescript":"4.8.4","webpack":"5.74.0"},"gitHead":"322c382a6b18dbad85f633203770b03a4e096fca","_id":"@ducanh2912/react-tuby@1.0.2","_nodeVersion":"16.17.1","_npmVersion":"8.15.0","dist":{"integrity":"sha512-KmhKAKksTAOCmFDtfBiExBmwmI5KY2m90b6RGveBhdKixX0beYfmu7t0aM2NLqA2jjtHP3jyPsCoZc7XswliMg==","shasum":"bd4c04936fbb95daf917f0c4124da5ea485aee72","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-1.0.2.tgz","fileCount":41,"unpackedSize":492820,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEUebDIl0MgEo+AS3fy9qjfotVGWhijkCSQ3+4H4cx7wAiEArH6QbX/hC9gkqQ2a2BROfR8+vgB096mN66QPEjCElKM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSCJlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp5pg/7BjjQP1eH/hURfYDBveFpgJ07GH6zeCqUFT0et/5490ANAOBG\r\nc7FogATK0xFPcyMkyoExQliFlHhdgMXsNSo1I0BlpT3+vJIWkg0rwrTv4SVr\r\n6DNBNzYaAfYcmPDUDJGyQyIvYATmXfJLZQoHUDAfjyBg+SkTBQAC75SL2uOk\r\nNv4ldidcw1mNiGE6/f1btNkYoX44bs1CTuugaWGyaklcVCejn9O3GppgDqZ8\r\nvp1vMngxkGOrECg15QSR/3cgx2Rv2U4FRYcJ4HPO/xbqkxIIybCxZG1/QLBq\r\nhW5ev0nbRUMSmGxN59G4Z47k3PuXaRfl7GIgr+Nozrm3nL47RRGZEWUJFD/h\r\nsugYc5vajpcqGIfx+J04MAxLaEzIGGOIgnS4sN2u/UE2l9il+U3LD+OxHYrt\r\nONRQV9oy8OsnhZeogZi73PGJLxcxQ1kThvxtrbDNdypYe1UqGumxVP2IElUD\r\nsnlVZWvikTAwNPTytdo3DjynnRwDs/kbCUiCTaga6qc4BZnb7aaC4uM5jxDc\r\nTPJP2icBMfeeG4tpEmr8SUf1oCjfU+CtkrTQoFb+Xm4wXy62O36qyIhDSiHe\r\nJcF0IA+0VaexRr2n7Sx15NsmUF1utTKuj+RXFLGE0UZW9MMdFBJP3tx+7Uvf\r\nCEgLOSoRZtHiOMLLg0b6zOsEdse7XA5tPN8=\r\n=xtcp\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_1.0.2_1665671781358_0.05760266254068003"},"_hasShrinkwrap":false},"1.0.3":{"name":"@ducanh2912/react-tuby","author":{"name":"napthedev, DuCanhGH"},"description":"A React video player library with YouTube-like UI","version":"1.0.3","license":"MIT","source":"./src/index.tsx","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/ducanh2912-react-tuby.js","default":"./dist/ducanh2912-react-tuby.modern.mjs"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/ducanh2912-react-tuby.js","module":"./dist/ducanh2912-react-tuby.module.js","unpkg":"./dist/ducanh2912-react-tuby.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"scripts":{"dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"rimraf dist && rimraf css && npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","test":"jest --env=jsdom","lint":"eslint src --cache --cache-location ./node_modules/.cache/eslint --ext ts,tsx,js,jsx,cjs,mjs","typecheck":"tsc","format":"prettier --write .","prepublishOnly":"npm run build","prepare":"husky install","size":"size-limit","analyze":"size-limit --why"},"peerDependencies":{"react":">=16.8.0"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#readme","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/ducanh2912-react-tuby.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.modern.mjs","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.module.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.umd.js","limit":"10 KB"}],"devDependencies":{"@semantic-release/changelog":"6.0.2","@semantic-release/commit-analyzer":"9.0.2","@semantic-release/git":"10.0.1","@semantic-release/github":"8.0.7","@semantic-release/npm":"9.0.1","@semantic-release/release-notes-generator":"10.0.3","@size-limit/preset-small-lib":"8.1.0","@size-limit/webpack":"8.1.0","@size-limit/webpack-why":"8.1.0","@testing-library/react":"13.4.0","@types/jest":"29.2.4","@types/react":"18.0.26","@types/react-dom":"18.0.9","@typescript-eslint/eslint-plugin":"5.45.1","@typescript-eslint/parser":"5.45.1","eslint":"8.29.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.11","eslint-plugin-react-hooks":"4.6.0","eslint-plugin-simple-import-sort":"8.0.0","husky":"8.0.2","jest":"29.3.1","jest-environment-jsdom":"29.3.1","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.8.0","react":"18.2.0","react-dom":"18.2.0","rimraf":"3.0.2","sass":"1.56.1","semantic-release":"19.0.5","size-limit":"8.1.0","ts-jest":"29.0.3","tslib":"2.4.1","typescript":"4.9.3","webpack":"5.75.0"},"gitHead":"84bb18117856be404bf6d3b8178b8bcddfd2027d","_id":"@ducanh2912/react-tuby@1.0.3","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-NKohPz5BUOlthuhc3q20IOEFMmfDkgDlWP1h5ztpYMH2G6KD5KRhfrDfmfMY5ub/81DLUqY1P0Z5pr21lbuuYg==","shasum":"db3a408c31a490c332fad874d8330f178b0d5f3f","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-1.0.3.tgz","fileCount":41,"unpackedSize":492796,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5D/VuqTyH7ZUGO4LoRypnXMyTQEqEzn5699+HULaHPQIgY36grkeT7HZpzSSH/M1tCo5lkmJXK0w0J6GAyIPTDXM="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjjq3oACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmqbzw//Z1PfJokI5huxa1nwyHfegBuFEsUB84N8SHKG3xm/mNVpRZwV\r\nx5gW3o84FWuM4YeUmVwtAkwEq9FJqm/kI0GddoMfsW931IBQfOI3TDRTM9bC\r\nhwUYKYd+9A7ViTK+x9bTRHFyzzLbciSaUPe+5pyvKHdaJSScOUQ593KH5mjL\r\nccuLOrJ5+tOSMPsDtXlV/1l3DFngANg+DnFkI8xeWAWIZy9+rDN3IDbkSOfG\r\nv0x1GlBwQa62YL7ekBxW3UaGACeWi67UjdyEnycawK1FYQ2VipN2UCctl+vk\r\nVW8qYdOgtSljlj5yBo+1DJ8MjS5arkOo2y3wv2sFS+/OgTY+veYg1nSMNvW1\r\nXJEVwYaAJzgRrYZ7FCN8u1T8w5z2Vr+my8AS0Vl0Z4jrFRjl115NAK49j768\r\niPuqRa721NUywIrWHeM1s2jurKLoSdBz8azwkMJBSRe2bWQ+OflIfHlTz06T\r\nHk8vJcx6tVS3fyGDp9WHqr7mbUx33QZ//XwXvWiy9UDXViKgnPKnyw+rkS7S\r\nF/ezfT/3BNcxXuD8zaLeTv5DxKgpc0CqzHFQ+fh9R/nMYjWJW9gCt/iust2b\r\n8E/7aKVd0ozc8QfodlvRhX+Lu213oJKSAhswd8uZrfV1IaSOPXq1l68Kolnj\r\ns280eadfUpqFxgj/U+da/7ezZl8VA12b+bE=\r\n=1yla\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_1.0.3_1670295016065_0.3953935586002688"},"_hasShrinkwrap":false},"1.1.0":{"name":"@ducanh2912/react-tuby","author":{"name":"napthedev, DuCanhGH"},"description":"A React video player library with YouTube-like UI","version":"1.1.0","license":"MIT","source":"./src/index.tsx","type":"module","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/ducanh2912-react-tuby.cjs","default":"./dist/ducanh2912-react-tuby.modern.js"},"./css/main.css":{"require":"./css/main.css","import":"./css/main.css"}},"main":"./dist/ducanh2912-react-tuby.cjs","module":"./dist/ducanh2912-react-tuby.module.js","unpkg":"./dist/ducanh2912-react-tuby.umd.js","types":"./dist/index.d.ts","engines":{"node":">=10"},"peerDependencies":{"react":">=16.8.0"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"homepage":"https://github.com/DuCanhGH/react-tuby#readme","repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"keywords":["react","tuby","tube","youtube","react-tuby"],"size-limit":[{"path":"dist/ducanh2912-react-tuby.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.modern.mjs","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.module.js","limit":"10 KB"},{"path":"dist/ducanh2912-react-tuby.umd.js","limit":"10 KB"}],"devDependencies":{"@changesets/cli":"2.26.0","@size-limit/preset-small-lib":"8.1.0","@size-limit/webpack":"8.1.0","@size-limit/webpack-why":"8.1.0","@testing-library/react":"13.4.0","@types/jest":"29.2.5","@types/react":"18.0.26","@types/react-dom":"18.0.10","@typescript-eslint/eslint-plugin":"5.48.0","@typescript-eslint/parser":"5.48.0","eslint":"8.31.0","eslint-config-prettier":"8.6.0","eslint-plugin-import":"2.26.0","eslint-plugin-jsx-a11y":"6.6.1","eslint-plugin-prettier":"4.2.1","eslint-plugin-react":"7.31.11","eslint-plugin-react-hooks":"4.6.0","eslint-plugin-simple-import-sort":"8.0.0","husky":"8.0.3","jest":"29.3.1","jest-environment-jsdom":"29.3.1","microbundle":"0.15.1","npm-run-all":"4.1.5","prettier":"2.8.1","react":"18.2.0","react-dom":"18.2.0","rimraf":"3.0.2","sass":"1.57.1","size-limit":"8.1.0","ts-jest":"29.0.3","tslib":"2.4.1","typescript":"4.9.4","webpack":"5.75.0"},"scripts":{"analyze":"size-limit --why","dev":"run-p dev:*","dev:main":"microbundle watch","dev:style":"sass scss/main.scss css/main.css --watch --no-source-map","build":"rimraf dist && rimraf css && npm run build:style && microbundle","build:style":"sass scss/main.scss css/main.css --style=compressed --no-source-map","format":"prettier --write .","lint":"eslint src --cache --cache-location ./node_modules/.cache/eslint --ext ts,tsx,js,jsx,cjs,mjs","new-changeset":"changeset","publish-packages":"pnpm typecheck && pnpm lint && pnpm build && changeset publish","size":"size-limit","test":"jest --env=jsdom","typecheck":"tsc"},"_id":"@ducanh2912/react-tuby@1.1.0","_integrity":"sha512-0G17JmTuyiFJKxRBVFmR+MHXyiDrah5NW/Mn711drUK7UiTTZvpD4mkHf05Zk/MG2Xya9sVFnehwamHQseEJFw==","_resolved":"/tmp/3b8ff4baca593f131b46e36b803506e7/ducanh2912-react-tuby-1.1.0.tgz","_from":"file:ducanh2912-react-tuby-1.1.0.tgz","_nodeVersion":"16.18.1","_npmVersion":"8.19.2","dist":{"integrity":"sha512-0G17JmTuyiFJKxRBVFmR+MHXyiDrah5NW/Mn711drUK7UiTTZvpD4mkHf05Zk/MG2Xya9sVFnehwamHQseEJFw==","shasum":"4bb9f622ed05fafadcdff5093a4fab0fcb6f350c","tarball":"https://registry.npmjs.org/@ducanh2912/react-tuby/-/react-tuby-1.1.0.tgz","fileCount":41,"unpackedSize":492598,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDQmvO+3q6w4Tovr1o0X2rjUv9//P0pIbYD6EdUJliHggIgDAeLdM7isBnZyfX7DVad5vA2STi5uXo0bCem8XI5N3g="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjuPzwACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpnRA/+K7SOj/K0ixlK3ldc4LpfEAbBfart/SfmoZbHPyGpIryzuV9M\r\npHmQVqH5ivkztUEyoKgUhNZgb8kFGgZCd1Lf8TMEsu0Uz8Is+13goywucYuC\r\nhKmaWIDUFRUBosm7m8Ee38O5F2JKD3qRZLjs9eGhJddccuuAFpn+lK0YLKuV\r\nO+coUk6au6SVPsFHFWBkX6I+EV6v11I1oOXleMzR3SL9iK03sAXgU27LZ6df\r\njqAJs3Ovs7OnLAK6He49N41739v1ClpCJ0DpHm7d1wruKvSsZi64zEIT/nqH\r\na0dv4BPPHx/sjdzuB9VcBQfgEGqmfmRDiT40rP7wTu/NpYaEcti3yMv8j0Xs\r\nLlv6+3mnMcqfQs0K61Ith2g8nd4RTuEp3ITWPba41jpl4bOjy19EHrvb177W\r\nDPeE3bP+akoYWCS+/fHE1oORCV9W4v9litshJRAiGk9FSjKcsD8rzFQpnwer\r\nLGM9S+dJCipQ1FiSaL7qMF75nS8x8PHF2WK9N3lce7cDVHykk5haoRecjTQt\r\nJUgVnMnEfGgM+QFYi5xDk+EwxLbz+pxHkFuVQpU7oBESzM7KKtTlZTuoxdRn\r\nkRbmcR7Se0S7yPV2pVaLrm1lKIrpqqZ0+KSR82fygZKZPdZoZ3bN5v/zTCK9\r\nwZnaDRaMcqdgQlaTBDp4p6cv8KbGOR4jSsM=\r\n=s6nu\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"},"directories":{},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/react-tuby_1.1.0_1673067760590_0.7321922236259149"},"_hasShrinkwrap":false}},"time":{"created":"2022-09-05T08:11:41.144Z","0.2.0":"2022-09-05T08:11:41.513Z","modified":"2023-01-07T05:02:40.951Z","0.3.0":"2022-09-05T08:18:17.172Z","0.3.0-beta.1":"2022-09-05T08:35:54.900Z","0.3.0-beta.2":"2022-09-05T08:41:06.083Z","0.3.1":"2022-09-05T08:44:00.664Z","0.3.2":"2022-09-05T08:51:08.962Z","0.3.3-beta.1":"2022-09-05T11:22:24.974Z","0.3.3":"2022-09-05T11:31:15.872Z","0.3.4":"2022-09-06T06:35:26.223Z","0.3.5":"2022-09-06T06:38:45.997Z","0.3.6":"2022-09-06T07:44:25.505Z","0.3.7":"2022-09-11T15:46:04.434Z","0.3.8":"2022-09-24T17:02:18.593Z","1.0.0":"2022-10-06T05:55:51.794Z","1.0.1":"2022-10-13T14:31:18.018Z","1.0.2":"2022-10-13T14:36:21.561Z","1.0.3":"2022-12-06T02:50:16.264Z","1.1.0":"2023-01-07T05:02:40.878Z"},"maintainers":[{"name":"ducanh2912","email":"ngoducanh2912@gmail.com"}],"description":"A React video player library with YouTube-like UI","homepage":"https://github.com/DuCanhGH/react-tuby#readme","keywords":["react","tuby","tube","youtube","react-tuby"],"repository":{"type":"git","url":"git+https://github.com/DuCanhGH/react-tuby.git"},"author":{"name":"napthedev, DuCanhGH"},"bugs":{"url":"https://github.com/DuCanhGH/react-tuby/issues"},"license":"MIT","readme":"<p align=\"center\">\n  <img src=\"https://res.cloudinary.com/naptest/image/upload/w_600/react-tuby/preview_jhnrup.png\">\n</p>\n\n# React Tuby\n\n[![Build Size](https://img.shields.io/bundlephobia/minzip/@ducanh2912/react-tuby?label=Bundle%20size&style=flat&color=success)](https://bundlephobia.com/result?p=@ducanh2912/react-tuby)\n[![Version](https://img.shields.io/npm/v/@ducanh2912/react-tuby?style=flat&color=success)](https://www.npmjs.com/package/@ducanh2912/react-tuby)\n\nA React video player library with YouTube-like UI\n\n## Demo\n\n[https://react-tuby.vercel.app](https://react-tuby.vercel.app)\n\n## Feature\n\n- 📹 HTML Video, M3U8 support\n- 🎛 Allow multiple qualities\n- 📱 Fully responsive\n- 🖥 Full screen cross browser support, even Safari on iPhone\n- 📖 Subtitles support\n- ⏰ Speed control\n- ⌨️ Keyboard shortcuts\n- ⚙️ Support server side rendering (Next.js)\n- 🛠 No extra dependencies\n- ✅ Automatically fallback to default `<video />` if rendering fails on older browsers\n\n## Installation\n\n```bash\nnpm i @ducanh2912/react-tuby\n# or\n# yarn add @ducanh2912/react-tuby\n# or\n# pnpm add @ducanh2912/react-tuby\n```\n\n## Import\n\n```jsx\nimport { Player } from \"@ducanh2912/react-tuby\";\nimport \"@ducanh2912/react-tuby/css/main.css\";\n```\n\n## Example player\n\n```jsx\n<Player\n  src={[\n    {\n      quality: \"Full HD\",\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/1080.mp4\",\n    },\n    {\n      quality: 720,\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/720.mp4\",\n    },\n    {\n      quality: 480,\n      url: \"https://cdn.glitch.me/cbf2cfb4-aa52-4a1f-a73c-461eef3d38e8/480.mp4\",\n    },\n  ]}\n  subtitles={[\n    {\n      lang: \"en\",\n      language: \"English\",\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/en.vtt\",\n    },\n    {\n      lang: \"fr\",\n      language: \"French\",\n      url: \"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/fr.vtt\",\n    },\n  ]}\n  poster=\"https://cdn.jsdelivr.net/gh/naptestdev/video-examples@master/poster.png\"\n/>\n```\n\n## Props\n\n| prop                     | type                                                                                                                           | description                                                                                              |\n| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------- |\n| **src**                  | { quality: number \\| string; url: string; }[] \\| string;                                                                       | One video url or array of video urls and qualities                                                       |\n| **subtitles**            | { lang: string; language: string; url: string; }[]                                                                             | Array of subtitles, the first one will be the default. Subtitle **must** be in .vtt format.              |\n| **dimensions**           | number \\| { width: number \\| string; height: number \\| string }                                                                | Number: aspect ratio (height/width). Default is 56.25% (9/16) Width, height: set custom width and height |\n| **primaryColor**         | string                                                                                                                         | Customize the primary color. Default: #ff0000                                                            |\n| **poster**               | string                                                                                                                         | The url of poster image                                                                                  |\n| **seekDuration**         | number                                                                                                                         | Seek duration when pressing left/right key. Default: 10                                                  |\n| **playerKey**            | string                                                                                                                         | Unique user key to store video state in localStorage                                                     |\n| **internationalization** | string                                                                                                                         | See internationalization section below                                                                   |\n| **playerRef**            | RefObject\\<HTMLVideoElement\\>                                                                                                  | Use your own ref to control the video player                                                             |\n| **pictureInPicture**     | boolean                                                                                                                        | Show picture in picture button                                                                           |\n| **keyboardShortcut**     | boolean \\| { pause?: boolean; rewind?: boolean; forward?: boolean; fullScreen?: boolean; mute?: boolean; subtitle?: boolean; } | Customize keyboard shortcuts                                                                             |\n| **preserve**             | { watchTime?: boolean; volume?: boolean; playbackSpeed?: boolean; }                                                            | Choose which values to preserve in localStorage                                                          |\n\n## Examples\n\n### One src only\n\n```jsx\n<Player src=\"/your-video.mp4\" />\n```\n\n### Custom width, height\n\n```jsx\n<Player src=\"/your-video.mp4\" dimensions={{ width: \"100%\", height: \"100%\" }} />\n```\n\n### Custom props for video\n\nThis library uses **render props** to allow user to set custom render component\n\n```jsx\n<Player src=\"/your-video.mp4\">\n  {(ref, props) => <video ref={ref} {...props} autoPlay loop />}\n</Player>\n```\n\n### Custom event\n\n```jsx\n<Player src=\"/your-video.mp4\">\n  {(ref, { onPause, ...others }) => (\n    <video\n      ref={ref}\n      {...others}\n      onPause={(e) => {\n        // The library original event\n        onPause && onPause(e);\n\n        // Do something here\n        console.log(\"Paused\");\n      }}\n    />\n  )}\n</Player>\n```\n\n### Usage with m3u8 / HLS\n\nInstall react-hls-player (I'd recommend my fork @ducanh2912/react-hls-player though, since that package isn't maintained anymore)\n\n```bash\nnpm i react-hls-player\n# or\n# yarn add react-hls-player\n# or\n# pnpm add react-hls-player\n```\n\nUsage\n\n```jsx\nimport ReactHlsPlayer from \"react-hls-player\";\n\n<Player src=\"/your-video.m3u8\">\n  {(ref, props) => <ReactHlsPlayer playerRef={ref} {...props} />}\n</Player>;\n```\n\n### Get video currentTime using custom ref\n\n```jsx\nconst ref = useRef(null);\n\nuseEffect(() => {\n  ref.current?.addEventListener(\"timeupdate\", () => {\n    console.log(ref.current?.currentTime);\n  });\n}, []);\n\n<Player playerRef={ref} src=\"/your-video.mp4\" />;\n```\n\n### Disable keyboard shortcuts\n\n```jsx\n<Player src=\"/your-video.mp4\" keyboardShortcut={false} />\n\n// or\n\n<Player\n  src=\"/your-video.mp4\"\n  keyboardShortcut={{\n    pause: false,\n    forward: true,\n    rewind: true,\n    fullScreen: true,\n    mute: true,\n    subtitle: true,\n  }}\n/>\n```\n\n## Internationalization\n\n| property                    | default              |\n| --------------------------- | -------------------- |\n| tooltipsPlay                | Play (k)             |\n| tooltipsPause               | Pause (k)            |\n| tooltipsMute                | Mute (m)             |\n| tooltipsUnmute              | Unmute (m)           |\n| tooltipsSubtitles           | Subtitles (c)        |\n| tooltipsSettings            | Settings             |\n| tooltipsFullscreen          | Full Screen (f)      |\n| tooltipsExitFullscreen      | Exit full screen (f) |\n| settingsPlaybackSpeed       | Playback Speed       |\n| settingsPlaybackSpeedNormal | Normal               |\n| settingsSubtitles           | Subtitles            |\n| settingsSubtitlesOff        | Off                  |\n| settingsQuality             | Quality              |\n| settingsModalOff            | OK                   |\n\n## Issues\n\nIf you encounter some bugs or have a feature request, feel free to submit an issue on the [github repo](https://github.com/DuCanhGH/react-tuby.git).\n","readmeFilename":"README.md"}