diff --git a/.gitignore b/.gitignore
index 1ef33e7..cf043f9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,8 @@
/node_modules
# Production
+/.vitepress/.temp
+/.vitepress/cache
/build
# Generated files
@@ -20,3 +22,8 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+
+# Lock files
+package-lock.json
+yarn.lock
+pnpm-lock.yaml
diff --git a/.vitepress/config.js b/.vitepress/config.js
new file mode 100644
index 0000000..d1d333e
--- /dev/null
+++ b/.vitepress/config.js
@@ -0,0 +1,225 @@
+const baseDir = '/handbook/';
+
+export default {
+ lang: 'en-GB',
+ title: 'React Native WebRTC',
+ description: 'The WebRTC module for React Native',
+ srcDir: 'src',
+ outDir: 'build',
+ base: baseDir,
+ cleanUrls: true,
+ appearance: 'dark',
+ lastUpdated: true,
+ sitemap: {
+ hostname: 'https://react-native-webrtc.github.io/handbook'
+ },
+ head: [
+ [
+ 'meta',
+ {
+ name: 'theme-color',
+ content: '#3c8772'
+ }
+ ],
+ [
+ 'link',
+ {
+ rel: 'icon',
+ href: `${baseDir}logo.svg`,
+ type: 'image/svg+xml'
+ }
+ ],
+ [
+ 'link',
+ {
+ rel: 'alternate icon',
+ href: `${baseDir}favicon.png`,
+ type: 'image/png',
+ sizes: '16x16'
+ }
+ ],
+ [
+ 'link',
+ {
+ rel: 'mask-icon',
+ href: `${baseDir}logo.svg`,
+ color: '#ffffff'
+ }
+ ],
+ /*
+ [
+ 'meta',
+ {
+ property: 'og:title',
+ content: ''
+ }
+ ],
+ [
+ 'meta',
+ {
+ property: 'og:description',
+ content: ''
+ }
+ ],
+ [
+ 'meta',
+ {
+ property: 'og:url',
+ content: ''
+ }
+ ],
+ [
+ 'meta',
+ {
+ property: 'og:image',
+ content: ''
+ }
+ ]
+ */
+ ],
+ themeConfig: {
+ logo: '/logo.svg',
+ siteTitle: 'React Native WebRTC',
+ outline: 'deep',
+ search: {
+ provider: 'local'
+ },
+ nav: [
+ {
+ text: 'Guides',
+ link: '/guides/intro/getting-started'
+ },
+ {
+ text: 'Examples',
+ link: '/examples'
+ },
+ {
+ text: 'Ecosystem',
+ link: '/ecosystem'
+ },
+ {
+ text: 'Community',
+ link: 'https://react-native-webrtc.discourse.group'
+ }
+ ],
+ socialLinks: [
+ {
+ icon: 'github',
+ link: 'https://github.com/react-native-webrtc/react-native-webrtc'
+ },
+ {
+ icon: {
+ svg: '',
+ },
+ link: 'https://react-native-webrtc.discourse.group'
+ }
+ ],
+ sidebar: {
+ '/guides/': [
+ {
+ text: 'Introduction',
+ items: [
+ {
+ text: 'What is WebRTC?',
+ link: '/guides/intro/what-is-webrtc'
+ },
+ {
+ text: 'Supported Features',
+ link: '/guides/intro/supported-features'
+ },
+ {
+ text: 'Getting Started',
+ link: '/guides/intro/getting-started'
+ }
+ ]
+ },
+ {
+ text: 'Extra Steps',
+ collapsible: true,
+ items: [
+ {
+ text: 'Android 7+',
+ link: '/guides/extra-steps/android'
+ },
+ {
+ text: 'iOS 12+',
+ link: '/guides/extra-steps/ios'
+ },
+ {
+ text: 'Expo 45+',
+ link: '/guides/extra-steps/expo'
+ },
+ {
+ text: 'React Native Web',
+ link: '/guides/extra-steps/react-native-web'
+ },
+ {
+ text: 'macOS 10.13+',
+ link: '/guides/extra-steps/macos'
+ },
+ {
+ text: 'macOS Catalyst',
+ link: '/guides/extra-steps/macos-catalyst'
+ },
+ {
+ text: 'tvOS / Android TV',
+ link: '/guides/extra-steps/tv'
+ },
+ {
+ text: 'Windows 10+',
+ link: '/guides/extra-steps/windows'
+ }
+ ]
+ },
+ {
+ text: 'Guides',
+ collapsible: true,
+ items: [
+ {
+ text: 'Basic Usage',
+ link: '/guides/basic-usage'
+ },
+ {
+ text: 'Getting a Call Connected',
+ link: '/guides/getting-a-call-connected'
+ },
+ {
+ text: 'Improving Call Reliability',
+ link: '/guides/improving-call-reliability'
+ },
+ {
+ text: 'Building WebRTC',
+ link: '/guides/building-webrtc'
+ }
+ ]
+ },
+ {
+ text: 'Misc',
+ collapsible: true,
+ items: [
+ {
+ text: 'Contributing Guidelines',
+ link: '/guides/misc/contributing'
+ },
+ {
+ text: 'Troubleshooting',
+ link: '/guides/misc/troubleshooting'
+ },
+ {
+ text: 'FAQs',
+ link: '/guides/misc/faqs'
+ }
+ ]
+ }
+ ]
+ },
+ editLink: {
+ pattern: 'https://github.com/react-native-webrtc/handbook/edit/master/src/:path',
+ text: 'Suggest changes to this page'
+ },
+ footer: {
+ message: 'Released under the Apache 2.0 License',
+ copyright: 'Copyright © 2023 - React Native WebRTC'
+ }
+ }
+};
diff --git a/.vitepress/theme/index.js b/.vitepress/theme/index.js
new file mode 100644
index 0000000..ba84c2a
--- /dev/null
+++ b/.vitepress/theme/index.js
@@ -0,0 +1,4 @@
+import DefaultTheme from 'vitepress/theme';
+//import './styles.css';
+
+export default DefaultTheme;
diff --git a/.vitepress/theme/styles.css b/.vitepress/theme/styles.css
new file mode 100644
index 0000000..7c2b385
--- /dev/null
+++ b/.vitepress/theme/styles.css
@@ -0,0 +1,111 @@
+/**
+ * Colors
+ * -------------------------------------------------------------------------- */
+
+:root {
+/*
+ --primary: #ed8a80;
+ --primary-content: #3C3C3B;
+ --neutral: #27464F;
+ --neutral-content: #EDEDED;
+ --secondary: #EDEDED;
+ --secondary-content: #3C3C3B;
+ --accent: #3C3C3B;
+ --accent-content: #EDEDED;
+ --btn-focus-scale: 1.05;
+
+ --vp-c-accent: rgb(218, 180, 11);
+
+ --vp-c-brand: var(--primary);
+ --vp-c-brand-light: #FFA69D;
+ --vp-c-brand-lighter: #FA978D;
+ --vp-c-brand-dark: #e47f75;
+ --vp-c-brand-darker: #db6d62;
+
+ --vp-code-block-bg: rgba(125, 125, 125, 0.04);
+
+ --vp-c-green-light: rgb(18, 181, 157);
+ --vp-custom-block-tip-border: rgba(18, 181, 157, 0.5);
+ --vp-custom-block-tip-bg: rgba(18, 181, 157, 0.1);
+ --vp-code-line-highlight-color: rgba(18, 181, 157, 0.2);
+*/
+
+ /* --vp-code-line-highlight-color: #eea74b22; */
+ /* --vp-code-line-highlight-color: #db6d6232; */
+ /* --vp-code-line-highlight-color: #db6d6232; */
+ /* --vp-code-line-highlight-color: rgba(0, 0, 0, 0.1); */
+}
+
+.dark {
+ --vp-c-bg: #121212;
+ --vp-c-bg-alt: #080808;
+
+ --vp-code-block-bg: rgba(0, 0, 0, 0.2);
+
+/*
+ --vp-code-line-highlight-color: rgba(18, 181, 157, 0.15);
+*/
+}
+
+/**
+ * Component: Button
+ * -------------------------------------------------------------------------- */
+
+:root {
+/*
+ --vp-button-brand-border: var(--vp-c-brand-light);
+ --vp-button-brand-text: var(--vp-c-text-dark-1);
+ --vp-button-brand-bg: var(--vp-c-brand);
+ --vp-button-brand-hover-border: var(--vp-c-brand-light);
+ --vp-button-brand-hover-text: var(--vp-c-text-dark-1);
+ --vp-button-brand-hover-bg: var(--vp-c-brand-light);
+ --vp-button-brand-active-border: var(--vp-c-brand-light);
+ --vp-button-brand-active-text: var(--vp-c-text-dark-1);
+ --vp-button-brand-active-bg: var(--vp-button-brand-bg);
+*/
+}
+
+/**
+ * Component: Home
+ * -------------------------------------------------------------------------- */
+
+/* :root {
+ --vp-home-hero-image-background-image: linear-gradient(-45deg, #42d392 10%, #155f3e 40%);
+ --vp-home-hero-image-filter: blur(40px);
+}
+
+@media (min-width: 640px) {
+ :root {
+ --vp-home-hero-image-filter: blur(56px);
+ }
+}
+
+@media (min-width: 960px) {
+ :root {
+ --vp-home-hero-image-filter: blur(72px);
+ }
+} */
+
+/**
+ * Component: Algolia
+ * -------------------------------------------------------------------------- */
+
+.DocSearch {
+ --docsearch-primary-color: var(--vp-c-brand) !important;
+}
+
+/**
+ * Custom Navbar
+ * -------------------------------------------------------------------------- */
+
+
+.VPNav.no-sidebar {
+ background: initial !important;
+ backdrop-filter: initial !important;
+}
+
+/*
+.dark .VPNavBar.has-sidebar .content {
+ background: rgba(18, 18, 18, 0.6) !important;
+}
+*/
diff --git a/README.md b/README.md
index bf19dc3..70c9a74 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,24 @@
# The React-Native-WebRTC Handbook
-This is the React Native WebRTC Handbook.
-It's powered by [VitePress](https://vitepress.vuejs.org/).
-NOTE: Nodejs >= 16 is necessary.
+Powered by [VitePress](https://vitepress.vuejs.org/).
+`Nodejs >= 18 is necessary.`
+Built automatically with every push thanks to [GH Actions](https://github.com/react-native-webrtc/handbook/blob/master/.github/workflows/gh-pages.yml).
-## Building the Site
+## Want to build and run our handbook?
-The site is built automatically with every push thanks to a [GH Actions](https://github.com/react-native-webrtc/handbook/blob/master/.github/workflows/gh-pages.yml).
-If you want to build it locally, follow this simple step:
+Say no more. It's as simple as running one of the following lines.
+Entirely depends on your preferred package manager.
-```js
+```
+npm install && npm start
yarn && yarn start
+pnpm install && pnpm start
```
-You can now edit the files in the `docs` folder and the site will reflect the changes immediately thanks to live reloading.
+You can now edit the files in the `src` folder and the site should start to reflect any changes you make thanks to live reloading.
-## Contributing
+## Got some spare time?
-We appreciate all contributions to this repository.
-Please make a Pull Request, no matter how small, all contributions are valuable!
+We appreciate all contributions within our organisation.
+Please make a pull request. No matter how small.
+All contributions are valuable. Every little helps.
diff --git a/docs/.vitepress/config.js b/docs/.vitepress/config.js
deleted file mode 100644
index 6284261..0000000
--- a/docs/.vitepress/config.js
+++ /dev/null
@@ -1,217 +0,0 @@
-export default {
- lang: 'en-GB',
- title: 'React Native WebRTC',
- description: 'The WebRTC module for React Native',
- outDir: '../build',
- base: '/handbook/',
- ignoreDeadLinks: true,
- cleanUrls: 'disabled',
- head: [
- [
- 'meta',
- {
- name: 'theme-color',
- content: '#3c8772'
- }
- ],
- [
- 'link',
- {
- rel: 'icon',
- href: '/handbook/logo.svg',
- type: 'image/svg+xml'
- }
- ],
- [
- 'link',
- {
- rel: 'alternate icon',
- href: '/handbook/favicon.png',
- type: 'image/png',
- sizes: '16x16'
- }
- ],
- [
- 'link',
- {
- rel: 'mask-icon',
- href: '/handbook/logo.svg',
- color: '#ffffff'
- }
- ],
- /*
- [
- 'meta',
- {
- property: 'og:title',
- content: ''
- }
- ],
- [
- 'meta',
- {
- property: 'og:description',
- content: ''
- }
- ],
- [
- 'meta',
- {
- property: 'og:url',
- content: ''
- }
- ],
- [
- 'meta',
- {
- property: 'og:image',
- content: ''
- }
- ]
- */
- ],
- themeConfig: {
- logo: '/logo.svg',
- siteTitle: 'React Native WebRTC',
- nav: [
- {
- text: 'Docs',
- link: '/guides/intro/getting-started'
- },
- {
- text: 'Examples',
- link: 'https://github.com/react-native-webrtc/examples'
- },
- {
- text: 'Community',
- link: 'https://react-native-webrtc.discourse.group'
- },
- {
- text: 'Other Modules',
- items: [
- {
- text: 'Call Keep',
- link: 'https://github.com/react-native-webrtc/react-native-callkeep'
- },
- {
- text: 'inCall Manager',
- link: 'https://github.com/react-native-webrtc/react-native-incall-manager'
- }
- ]
- },
- ],
- editLink: {
- pattern: 'https://github.com/react-native-webrtc/handbook/edit/master/docs/:path',
- text: 'Suggest changes to this page'
- },
- socialLinks: [
- {
- icon: 'github',
- link: 'https://github.com/react-native-webrtc/react-native-webrtc'
- },
- {
- icon: {
- svg: '',
- },
- link: 'https://react-native-webrtc.discourse.group'
- }
- ],
- sidebar: [
- {
- text: 'Introduction',
- items: [
- /*
- {
- text: 'What is WebRTC?',
- link: '/guides/intro/what-is-webrtc'
- },
- */
- {
- text: 'Supported Features',
- link: '/guides/intro/supported-features'
- },
- {
- text: 'Getting Started',
- link: '/guides/intro/getting-started'
- }
- ]
- },
- {
- text: 'Extra Steps',
- collapsible: true,
- items: [
- {
- text: 'Android 4.4+',
- link: '/guides/extra-steps/android'
- },
- {
- text: 'iOS 11+',
- link: '/guides/extra-steps/ios'
- },
- {
- text: 'macOS 10.13+',
- link: '/guides/extra-steps/macos'
- },
- {
- text: 'Windows - Not Supported',
- link: '/guides/extra-steps/windows'
- },
- {
- text: 'React Native Web',
- link: '/guides/extra-steps/react-native-web'
- },
- {
- text: 'Expo 45+',
- link: '/guides/extra-steps/expo'
- }
- ]
- },
- {
- text: 'Guides',
- collapsible: true,
- items: [
- {
- text: 'Basic Usage',
- link: '/guides/basic-usage'
- },
- {
- text: 'Getting a Call Connected',
- link: '/guides/getting-a-call-connected'
- },
- {
- text: 'Improving Call Reliability',
- link: '/guides/improving-call-reliability'
- },
- {
- text: 'Building WebRTC',
- link: '/guides/building-webrtc'
- }
- ]
- },
- /*
- {
- text: 'Misc',
- collapsible: true,
- items: [
- {
- text: 'Contributing Guidelines',
- link: '/guides/misc/contributing'
- },
- {
- text: 'Troubleshooting',
- link: '/guides/misc/troubleshooting'
- },
- {
- text: 'FAQs',
- link: '/guides/misc/faqs'
- }
- ]
- }
- */
- ],
- footer: {
- message: 'Released under the Apache 2.0 License',
- copyright: 'Copyright © 2022 - React Native WebRTC'
- }
- }
-}
diff --git a/docs/guides/extra-steps/macos.md b/docs/guides/extra-steps/macos.md
deleted file mode 100644
index 0dda52e..0000000
--- a/docs/guides/extra-steps/macos.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# macOS 10.13+
-
-A guide will be published here soon.
diff --git a/docs/guides/extra-steps/react-native-web.md b/docs/guides/extra-steps/react-native-web.md
deleted file mode 100644
index 0dd8df3..0000000
--- a/docs/guides/extra-steps/react-native-web.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# React Native Web
-
-The [react-native-webrtc-web-shim](https://github.com/react-native-webrtc/react-native-webrtc-web-shim) project provides a shim for [react-native-web](https://github.com/necolas/react-native-web) support.
-
-That will allow you to use ["almost"](https://github.com/react-native-webrtc/react-native-webrtc-web-shim/tree/main#setup) the exact same code in your mixed web project as you would with [react-native](https://reactnative.dev/) directly.
diff --git a/docs/guides/intro/supported-features.md b/docs/guides/intro/supported-features.md
deleted file mode 100644
index 962cd4b..0000000
--- a/docs/guides/intro/supported-features.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Supported Features
-
-| Feature | Android | iOS | macOS | Windows | RN Web | Expo |
-| :------- | :-------: | :---: | :-----: | :-------: | :------: | :----: |
-| Audio/Video | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | - | :heavy_check_mark: | :heavy_check_mark: |
-| Data Channels | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | - | :heavy_check_mark: | :heavy_check_mark: |
-| Screen Capture* | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | - | :heavy_check_mark: | :heavy_check_mark: |
-| Plan B* | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | - | :heavy_check_mark: | :heavy_check_mark: |
-| Unified Plan* | - | - | - | - | - | - |
-
-:::warning Screen Capturing requires extra setup.
-Make sure to follow the extra steps for Android and iOS or you will get blank streams.
-:::
-
-:::danger Plan B is due to be deprecated soon.
-Nothing to worry about, our docs will be updated to reflect the changes.
-:::
-
-:::tip Unified Plan is in active development.
-Plan B will remain default until adequate support and testing has been completed.
-:::
-
-## WebRTC Revision
-
-* Currently used revision: [M100](https://github.com/jitsi/webrtc/releases/tag/v100.0.0)
-* Supported architectures
- * Android: armeabi-v7a, arm64-v8a, x86, x86_64
- * iOS: arm64, x86_64 (for bitcode support, run [this script](https://raw.githubusercontent.com/react-native-webrtc/react-native-webrtc/master/tools/downloadBitcode.sh))
- * macOS: x86_64
-
-:::info You can build your own WebRTC version.
-Follow the [building guide](../building-webrtc.md) if you'd like to use an older or newer WebRTC revision.
-:::
diff --git a/docs/guides/misc/contributing.md b/docs/guides/misc/contributing.md
deleted file mode 100644
index aed1318..0000000
--- a/docs/guides/misc/contributing.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Contributing Guidelines
-
-To be filled in soon.
diff --git a/docs/guides/misc/faqs.md b/docs/guides/misc/faqs.md
deleted file mode 100644
index 1dc089c..0000000
--- a/docs/guides/misc/faqs.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Frequently Asked Questions
-
-To be filled in soon.
diff --git a/docs/index.md b/docs/index.md
deleted file mode 100644
index dd07180..0000000
--- a/docs/index.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-layout: home
-
-title: Handbook
-titleTemplate:
-
-hero:
- name: React Native WebRTC
- text:
- tagline: The WebRTC module for React Native
- image:
- src: /undraw_video_call_re_4p26_modified.svg
- alt: React Native WebRTC
- actions:
- - theme: brand
- text: Get Started
- link: /guides/intro/getting-started
- - theme: alt
- text: View on GitHub
- link: https://github.com/react-native-webrtc/react-native-webrtc
-
-features:
- - title: Batteries Included
- details:
- - title: Multiple Platforms
- details:
- - title: Stable and Standardized
- details:
----
diff --git a/package.json b/package.json
index 6b0c6cc..dff3f3a 100644
--- a/package.json
+++ b/package.json
@@ -1,12 +1,15 @@
{
"license": "Apache-2.0",
- "devDependencies": {
- "vitepress": "1.0.0-alpha.8",
- "vue": "^3.2.37"
+ "engines": {
+ "node": ">= 18"
},
"scripts": {
- "start": "vitepress dev docs",
- "build": "vitepress build docs",
- "serve": "yarn build && vitepress serve docs"
+ "start": "vitepress dev",
+ "build": "vitepress build",
+ "serve": "vitepress serve"
+ },
+ "devDependencies": {
+ "vitepress": "1.0.0-rc.17",
+ "vue": "^3.3.4"
}
}
diff --git a/src/ecosystem.md b/src/ecosystem.md
new file mode 100644
index 0000000..51162e8
--- /dev/null
+++ b/src/ecosystem.md
@@ -0,0 +1 @@
+# Show listing of each module with badges in the rn-webrtc git.
diff --git a/src/examples.md b/src/examples.md
new file mode 100644
index 0000000..7dc7bd9
--- /dev/null
+++ b/src/examples.md
@@ -0,0 +1 @@
+# Show links to examples here and ask for contributors!
diff --git a/docs/guides/basic-usage.md b/src/guides/basic-usage.md
similarity index 85%
rename from docs/guides/basic-usage.md
rename to src/guides/basic-usage.md
index 22cdcb8..f3867b4 100644
--- a/docs/guides/basic-usage.md
+++ b/src/guides/basic-usage.md
@@ -6,47 +6,32 @@ Most of the included functionality is similar to how you would deal with WebRTC
If you see functions that are listed in the document above but not listed below then they are likely not supported by this module yet and will most likely be supported in the near future, we're open to contributions.
-```javascript
+```typescript
import {
- ScreenCapturePickerView,
- RTCPeerConnection,
RTCIceCandidate,
+ RTCPeerConnection,
RTCSessionDescription,
RTCView,
+ ScreenCapturePickerView,
+ RTCRtpTransceiver,
+ RTCRtpReceiver,
+ RTCRtpSender,
+ RTCErrorEvent,
MediaStream,
MediaStreamTrack,
mediaDevices,
+ permissions,
registerGlobals
} from 'react-native-webrtc';
```
-## Registering Globals
-
-You'll only really need to use this function if you are mixing project development with libraries that use browser based WebRTC functions. Also applies if you are making your project compatible with react-native-web.
-
-```javascript
-registerGlobals();
-```
-
-Here is a list of everything that will be linked up.
-You can also find a shim for react-native-web over [here](https://github.com/react-native-webrtc/react-native-webrtc-web-shim).
-
-`navigator.mediaDevices.getUserMedia()`
-`navigator.mediaDevices.getDisplayMedia()`
-`navigator.mediaDevices.enumerateDevices()`
-`window.RTCPeerConnection`
-`window.RTCIceCandidate`
-`window.RTCSessionDescription`
-`window.MediaStream`
-`window.MediaStreamTrack`
-
-## Get Available Media Devices
+## Get Media Devices
Some devices might not have more than 1 camera. The following will allow you to know how many cameras the device has.
You can of-course use `enumerateDevices` to list other media device information too.
-```javascript
+```typescript
let cameraCount = 0;
try {
@@ -67,7 +52,7 @@ try {
By default we're sending both audio and video.
This will allow us to toggle the video stream during a call.
-```javascript
+```typescript
let mediaConstraints = {
audio: true,
video: {
@@ -77,12 +62,16 @@ let mediaConstraints = {
};
```
-## Getting a Media Stream using getUserMedia
+## Getting a Media Stream
+
+Fill me in.
+
+### getUserMedia
If you only want a voice call then you can flip `isVoiceOnly` over to `true`.
You can then cycle and enable or disable the video tracks on demand during a call.
-```javascript
+```typescript
let localMediaStream;
let isVoiceOnly = false;
@@ -100,13 +89,13 @@ try {
};
```
-## Getting a Media Stream using getDisplayMedia
+### getDisplayMedia
This will allow capturing the device screen, requests permission on execution.
Make sure to follow [these](/guides/extra-steps/android#screen-capture-support-android-10) extra steps for Android and [these](/guides/extra-steps/ios#screen-capture-support) for iOS.
Otherwise you'll experience blank streams.
-```javascript
+```typescript
try {
const mediaStream = await mediaDevices.getDisplayMedia();
@@ -121,8 +110,8 @@ try {
Cycling all of the tracks and stopping them is more than enough to clean up after a call has finished.
You won't usually need to do this for remote tracks, only local.
-```javascript
-localMediaStream.getTracks().map(
+```typescript
+localMediaStream.getTracks().forEach(
track => track.stop()
);
@@ -134,7 +123,7 @@ localMediaStream = null;
We're only specifying a STUN server but you should also be using a TURN server.
Check [this guide](/guides/improving-call-reliability) if you'd like some advice on how to improve call reliability.
-```javascript
+```typescript
let peerConstraints = {
iceServers: [
{
@@ -149,7 +138,7 @@ let peerConstraints = {
Here we're creating a peer connection required to create a call.
You can also overwrite hook functions instead of using event listeners.
-```javascript
+```typescript
let peerConnection = new RTCPeerConnection( peerConstraints );
peerConnection.addEventListener( 'connectionstatechange', event => {} );
peerConnection.addEventListener( 'icecandidate', event => {} );
@@ -158,8 +147,7 @@ peerConnection.addEventListener( 'iceconnectionstatechange', event => {} );
peerConnection.addEventListener( 'icegatheringstatechange', event => {} );
peerConnection.addEventListener( 'negotiationneeded', event => {} );
peerConnection.addEventListener( 'signalingstatechange', event => {} );
-peerConnection.addEventListener( 'addstream', event => {} );
-peerConnection.addEventListener( 'removestream', event => {} );
+peerConnection.addEventListener( 'track', event => {} );
```
## Destroying the Peer Connection
@@ -167,7 +155,7 @@ peerConnection.addEventListener( 'removestream', event => {} );
When ending a call you should always make sure to dispose of everything ready for another call.
The following should dispose of everything.
-```javascript
+```typescript
peerConnection._unregisterEvents();
peerConnection.close();
peerConnection = null;
@@ -178,8 +166,10 @@ peerConnection = null;
After using one of the media functions above you can then add the media stream to the peer.
The negotiation needed event will be triggered on the peer afterwords.
-```javascript
-peerConnection.addStream( localMediaStream );
+```typescript
+localMediaStream.getTracks().forEach(
+ track => peerConnection.addTrack( track, localMediaStream );
+);
```
## Creating a Data Channel
@@ -187,7 +177,7 @@ peerConnection.addStream( localMediaStream );
Usually the call initialiser would create the data channel but it can be done on both sides.
The negotiation needed event will be triggered on the peer connection afterwords.
-```javascript
+```typescript
let datachannel = peerConnection.createDataChannel( 'my_channel' );
datachannel.addEventListener( 'open', event => {} );
datachannel.addEventListener( 'close', event => {} );
@@ -199,7 +189,7 @@ datachannel.addEventListener( 'message', message => {} );
The following event is for the second client, not the client which created the data channel.
Unless of-course you want both sides to create separate data channels.
-```javascript
+```typescript
peerConnection.addEventListener( 'datachannel', event => {
let datachannel = event.channel;
@@ -214,7 +204,7 @@ You can send a range of different data types over data channels, but for this ex
Bare in mind there are limits so sending large amounts of data isn't usually advised.
-```javascript
+```typescript
datachannel.send( 'Hey There!' );
```
@@ -224,7 +214,7 @@ When the peer connection is destroyed everything attached should also be destroy
But as good practice, you can always make sure they are closed.
-```javascript
+```typescript
datachannel.close();
datachannel = null;
```
@@ -235,7 +225,7 @@ As mentioned above we're going for the approach of offering both video and voice
That will allow you to enable and disable video streams while a call is active.
-```javascript
+```typescript
let sessionConstraints = {
mandatory: {
OfferToReceiveAudio: true,
@@ -252,7 +242,7 @@ Typically inside the `negotiationneeded` event.
ICE Candidate creation and gathering will start as soon as an offer has been created.
-```javascript
+```typescript
try {
const offerDescription = await peerConnection.createOffer( sessionConstraints );
await peerConnection.setLocalDescription( offerDescription );
@@ -268,13 +258,13 @@ try {
All parties will need to ensure they are handling ICE Candidates correctly.
Otherwise the offer and answer handshake stages will go a little wonky.
-```javascript
+```typescript
try {
// Use the received offerDescription
const offerDescription = new RTCSessionDescription( offerDescription );
await peerConnection.setRemoteDescription( offerDescription );
- const answerDescription = await peerConnection.createAnswer( sessionConstraints );
+ const answerDescription = await peerConnection.createAnswer();
await peerConnection.setLocalDescription( answerDescription );
// Send the answerDescription back as a response to the offerDescription.
@@ -289,7 +279,7 @@ During an active call you might want to mute your microphone.
Easy to accomplish by flipping the track enabled value to `false`.
Also possible on remote tracks.
-```javascript
+```typescript
let isMuted = false;
try {
@@ -307,7 +297,7 @@ try {
Naturally we assume you'll be using the front camera by default when starting a call.
So we set `isFrontCam` as `true` and let the value flip on execution.
-```javascript
+```typescript
let isFrontCam = true;
try {
@@ -323,12 +313,23 @@ try {
};
```
+## Controlling the Remote Audio Volume
+
+Remote audio tracks are automatically handled and played through your audio output.
+The volume of individual tracks can be set with the `_setVolume` function.
+It takes in a number between 0 to 10, defaults to 1.
+
+```typescript
+const audioTrack = remoteMediaStream.getAudioTracks()[ 0 ];
+audioTrack._setVolume( 0.5 );
+```
+
## Rendering the Media Stream
Once you've gained a local and/or remote stream then rendering it is as follows.
Don't forget, the user facing camera is usually mirrored.
-```javascript
+```typescript
` section.
+In `android/app/src/main/AndroidManifest.xml` add the following permissions before the `` section.
That will define all of the permissions you might use.
```xml
@@ -68,7 +68,7 @@ You will be prompted for permissions automatically each time you want to start s
A notification channel is also required and created.
-```javascript
+```typescript
import notifee, { AndroidImportance } from '@notifee/react-native';
try {
@@ -97,7 +97,7 @@ Once screen capturing has finished you should then stop the foreground service.
Usually you'd run a notification cancellation function but as there is a service involved.
Instead you should run the following to get the job done.
-```javascript
+```typescript
try {
await notifee.stopForegroundService();
} catch( err ) {
@@ -108,7 +108,7 @@ try {
Lastly you need to add this to your projects main `index.js` file.
Otherwise you will receive an error relating to the service not being registered.
-```javascript
+```typescript
notifee.registerForegroundService( notification => {
return new Promise( () => {
// Handle Notification
diff --git a/docs/guides/extra-steps/expo.md b/src/guides/extra-steps/expo.md
similarity index 100%
rename from docs/guides/extra-steps/expo.md
rename to src/guides/extra-steps/expo.md
diff --git a/docs/guides/extra-steps/ios.md b/src/guides/extra-steps/ios.md
similarity index 89%
rename from docs/guides/extra-steps/ios.md
rename to src/guides/extra-steps/ios.md
index 56aab63..1ebe471 100644
--- a/docs/guides/extra-steps/ios.md
+++ b/src/guides/extra-steps/ios.md
@@ -1,4 +1,4 @@
-# iOS 11+
+# iOS 12+
Starting with React Native 0.60 due to a new auto linking feature you no longer need to follow manual linking steps but you will need to follow the other steps below if you plan on releasing your app to production.
@@ -9,11 +9,11 @@ Otherwise you will experience problems.
:::
You may have to change the `platform` field in your podfile.
-`react-native-webrtc` doesn't support iOS < 11
-Set it to `11.0` or above otherwise you'll receive an error when running `pod install`.
+`react-native-webrtc` doesn't support iOS < 12
+Set it to `12.0` or above otherwise you'll receive an error when running `pod install`.
```
-platform :ios, '11.0'
+platform :ios, '12.0'
```
## Declaring Permissions
diff --git a/src/guides/extra-steps/macos-catalyst.md b/src/guides/extra-steps/macos-catalyst.md
new file mode 100644
index 0000000..17db5fd
--- /dev/null
+++ b/src/guides/extra-steps/macos-catalyst.md
@@ -0,0 +1,7 @@
+# macOS Catalyst
+
+We don't support `macOS Catalyst` currently.
+But there is a PR open over [here](https://github.com/react-native-webrtc/react-native-webrtc/pull/1420) which might help change that.
+
+Anyone interested in helping to get the ball rolling?
+We're open to contributions.
diff --git a/src/guides/extra-steps/macos.md b/src/guides/extra-steps/macos.md
new file mode 100644
index 0000000..c73650f
--- /dev/null
+++ b/src/guides/extra-steps/macos.md
@@ -0,0 +1,6 @@
+# macOS 10.13+
+
+We don't currently support the [react-native-macos](https://github.com/microsoft/react-native-macos) platform at this time.
+
+Anyone interested in getting the ball rolling?
+We're open to contributions.
diff --git a/src/guides/extra-steps/react-native-web.md b/src/guides/extra-steps/react-native-web.md
new file mode 100644
index 0000000..3b76b90
--- /dev/null
+++ b/src/guides/extra-steps/react-native-web.md
@@ -0,0 +1,38 @@
+# React Native Web
+
+The [react-native-webrtc-web-shim](https://github.com/react-native-webrtc/react-native-webrtc-web-shim) project provides a shim for [react-native-web](https://github.com/necolas/react-native-web) support.
+
+That will allow you to use ["almost"](https://github.com/react-native-webrtc/react-native-webrtc-web-shim/tree/main#setup) the exact same code in your mixed web project as you would with [react-native](https://reactnative.dev/) directly.
+
+## Registering Globals
+
+```typescript
+import { registerGlobals } from 'react-native-webrtc';
+```
+
+You'll only really need to use this function if you are mixing project development with libraries that use browser based WebRTC functions. Also applies if you are making your project compatible with react-native-web.
+
+```typescript
+registerGlobals();
+```
+
+Here is a list of everything that will be linked up.
+
+```typescript
+navigator.mediaDevices.getUserMedia();
+navigator.mediaDevices.getDisplayMedia();
+navigator.mediaDevices.enumerateDevices();
+
+window.RTCIceCandidate
+window.RTCPeerConnection
+window.RTCRtpReceiver
+window.RTCRtpSender
+window.RTCSessionDescription
+window.MediaStream
+window.MediaStreamTrack
+window.MediaStreamTrackEvent
+window.RTCRtpTransceiver
+window.RTCRtpReceiver
+window.RTCRtpSender
+window.RTCErrorEvent
+```
diff --git a/src/guides/extra-steps/tv.md b/src/guides/extra-steps/tv.md
new file mode 100644
index 0000000..a456f31
--- /dev/null
+++ b/src/guides/extra-steps/tv.md
@@ -0,0 +1,24 @@
+# tvOS / Android TV
+
+In order to use React Native on tvOS, you will need to use [react-native-tvos](https://www.npmjs.com/package/react-native-tvos).
+tvOS support was deprecated and removed from current/future versions of React Native.
+We strongly recommend using React Native 0.69+ with React 18+
+
+Change the following dependency in your projects `package.json` file to get started.
+```
+'react-native': 'npm:react-native-tvos@0.69.8-2'
+```
+
+## Adjusting the Supported Platform Version
+
+:::warning Make sure you are using CocoaPods 1.10 or higher.
+Otherwise you will experience problems.
+:::
+
+You may have to change the `platform` field in your podfile.
+`react-native-webrtc` doesn't support tvOS < 16.
+Set it to '16.0' or above. Older versions of tvOS don't support WebRTC.
+
+```
+platform :tvos, '16.0'
+```
diff --git a/docs/guides/extra-steps/windows.md b/src/guides/extra-steps/windows.md
similarity index 93%
rename from docs/guides/extra-steps/windows.md
rename to src/guides/extra-steps/windows.md
index d32fca4..baf8875 100644
--- a/docs/guides/extra-steps/windows.md
+++ b/src/guides/extra-steps/windows.md
@@ -1,4 +1,4 @@
-# Windows
+# Windows 10+
We don't currently support the [react-native-windows](https://github.com/microsoft/react-native-windows) platform at this time.
diff --git a/docs/guides/getting-a-call-connected.md b/src/guides/getting-a-call-connected.md
similarity index 92%
rename from docs/guides/getting-a-call-connected.md
rename to src/guides/getting-a-call-connected.md
index 189911b..1819692 100644
--- a/docs/guides/getting-a-call-connected.md
+++ b/src/guides/getting-a-call-connected.md
@@ -21,7 +21,7 @@ If you want to start the call as voice only then you can flip the boolean but th
**Don't forget, you will be prompted to accept permissions for the camera and microphone.**
**Usually it is better to request permissions at an earlier stage to improve the user experience.**
-```javascript
+```typescript
let mediaConstraints = {
audio: true,
video: {
@@ -31,6 +31,7 @@ let mediaConstraints = {
};
let localMediaStream;
+let remoteMediaStream;
let isVoiceOnly = false;
try {
@@ -47,7 +48,15 @@ try {
};
```
-## Step 2 - Create your peer, add the media stream
+## Step 2
+
+### Create the Peer
+
+### Setup the Events
+
+### Add the MediaStream
+
+Create your peer, add the media stream
Now that we've got the media stream which consists of an audio and video track we can actually start getting the peer connection created and ready to connect. Once the media stream has been added to the peer then the `negotiationneeded` event will fire to indicate that you can now start creating an offer.
@@ -55,7 +64,7 @@ In some instances you might find that the `negotiationneeded` event can fire mul
The `iceServers` below include one of Googles public STUN servers, you should also provide your own TURN server alongside a STUN server to ensure that connections can actually be established between callers.
-```javascript
+```typescript
let peerConstraints = {
iceServers: [
{
@@ -113,14 +122,17 @@ peerConnection.addEventListener( 'signalingstatechange', event => {
break;
};
} );
-
-peerConnection.addEventListener( 'addstream', event => {
- // Grab the remote stream from the connected participant.
- remoteMediaStream = event.stream;
+
+peerConnection.addEventListener( 'track', event => {
+ // Grab the remote track from the connected participant.
+ remoteMediaStream = remoteMediaStream || new MediaStream();
+ remoteMediaStream.addTrack( event.track, remoteMediaStream );
} );
// Add our stream to the peer connection.
-peerConnection.addStream( localMediaStream );
+localMediaStream.getTracks().forEach(
+ track => peerConnection.addTrack( track, localMediaStream );
+);
```
## Step 3 - Signal that you're starting a call
@@ -135,10 +147,14 @@ But do intend to provide an example app along with signalling app in the near fu
## Step 4 - Create an offer, set the local description
+### Create an Offer
+
+### Set the Local Description
+
We've added the media stream to the peer connection and got most of the basic events hooked up.
You can now start creating an offer which then needs sending off to the other call participant.
-```javascript
+```typescript
let sessionConstraints = {
mandatory: {
OfferToReceiveAudio: true,
@@ -168,7 +184,7 @@ An easy solution is to hold onto some of the candidates and process them immedia
We will process any leftover candidates in the next step.
-```javascript
+```typescript
let remoteCandidates = [];
function handleRemoteCandidate( iceCandidate ) {
@@ -197,13 +213,13 @@ Set the offer as the remote description, create an answer and set the local desc
You can now process any candidates if any got caught in-between the handshake process.
Lastly you need to send the answer back to the caller who gave the offer.
-```javascript
+```typescript
try {
// Use the received offerDescription
const offerDescription = new RTCSessionDescription( offerDescription );
await peerConnection.setRemoteDescription( offerDescription );
- const answerDescription = await peerConnection.createAnswer( sessionConstraints );
+ const answerDescription = await peerConnection.createAnswer();
await peerConnection.setLocalDescription( answerDescription );
// Here is a good place to process candidates.
@@ -223,7 +239,7 @@ Then the waiting game begins and the connection is a success or a failure.
Hopefully the whole process wasn't too complex to understand.
But it definitely can get more complex when involving more participants.
-```javascript
+```typescript
try {
// Use the received answerDescription
const answerDescription = new RTCSessionDescription( answerDescription );
diff --git a/docs/guides/improving-call-reliability.md b/src/guides/improving-call-reliability.md
similarity index 51%
rename from docs/guides/improving-call-reliability.md
rename to src/guides/improving-call-reliability.md
index b4a7b47..3502b00 100644
--- a/docs/guides/improving-call-reliability.md
+++ b/src/guides/improving-call-reliability.md
@@ -1,51 +1,63 @@
# Improving Call Reliability
This guide covers some basic knowledge about STUN and TURN servers.
-But most importantly why you should have and use both in production apps.
+But most importantly why you should use both in production apps.
Having issues getting devices connected together?
You're definitely in the right place!
:::warning Don't be discouraged.
-Pushing app development to production means striving for reliability and success.
+Pushing app development to production means striving for reliability and success.
+I'm sure you'd rather have a working call service rather than complaints and eventual failure.
:::
## What is a NAT and how do we get around it?
NAT (Network Address Translation) is a method of mapping an IP Address space to make sure traffic can flow to its desired destination when a device doesn't have a dedicated public IP Address.
-On a typical network you'll find a NAT device sitting on the edge mapped to a public IP Address waiting to handout local IP Addresses to all of the devices on the same network wanting internet access.
+On a typical network you will find a NAT device (Usually a Router) sitting on the edge mapped to a public IP Address waiting to give local IP Addresses to all of the devices on the same network requiring internet access.
-Simply put, all of the devices behind the NAT will have local IP Addresses rather than accessible public IP Addresses and as such the NAT device has to then route all of the traffic to the correct devices.
+Simply put, all of the devices behind the NAT will have local IP Addresses rather than accessible public IP Addresses and as such the NAT device has to route all internet traffic to the correct devices.
+
+To the internet all devices behind the NAT will just look like one device as they will all be connecting through a single public IP Address.
+
+As annoying as it is there does happen to be a good reason for having a NAT.
+[IPv4](https://en.wikipedia.org/wiki/IPv4_address_exhaustion) only allows around 4.29 billion addresses maximum.
+
+New devices are being created all the time so it makes sense to push them through smaller amounts of public IP Addresses rather than giving them one each.
-To the internet all devices behind the NAT will just look like one device as they will all be going over a single Public IP Address. There is a good reason for having a NAT, like for example the IPv4 limitations where there can only be around 4.29 billion addresses and as new devices are being created all the time it makes sense to throw them over smaller amounts of Public IP Addresses rather than giving them one each.
+As time goes by [IPv6](https://en.wikipedia.org/wiki/IPv6) will eventually be adopted by everything and the whole NAT issue will become less and less of a problem.
## What is a STUN server and why do i need it?
STUN (Session Traversal Utilities for NAT) is a protocol that helps devices behind a NAT connect outside of the local network.
-The STUN server enables devices to find out what their public IP Address is, the type of NAT they are behind and also the accessible public port associated with the device behind the NAT.
+The STUN server enables devices to find out what their public IP Address is, the type of NAT they are behind and also what the accessible public ports associated with the device behind the NAT might be.
-Once that information has been gathered tests can take place to determine if data can be routed to the device directly without restriction. If data can't be routed properly then a relay selection process begins.
-
-At this point a TURN server will be chosen to relay data for you.
-If you don't use a TURN server then the connection will just outright fail.
+Once that information has been gathered then tests will take place to determine if data can actually route to the device directly without restriction.
+
+If data can't be routed properly then a relay selection process begins.
+That is if and only if you have a TURN server.
## What is a TURN server and why do i need it?
TURN (Traversal Using Relay NAT) is a protocol specifically designed to help relay traffic around restrictive networks.
-
-When a direct connection can't be established between peers then the only option is to relay data or fail to connect.
-You should always use a STUN server to determine if direct connections can be established.
+WE NEED MORE HERE
+
+## Where do i go from here?
-Then your TURN server can be used as the fallback option.
-At the end of the day, it is better to have a working call service vs connections failing.
+At this point a TURN server will be chosen to relay data for you.
+If you don't use a TURN server then the connection will just outright fail.
+
+You should always be using a STUN server in parallel with your TURN server as it is used to help determine if direct connections can be established successfully.
+
+When direct connections aren't possible then the only option is to relay data via your TURN server or fail to connect.
## Are there any free STUN/TURN servers?
Free TURN servers do exist but they are either slow, restrictive or unreliable.
-As such it is hard to really advise any for actual production use.
+At this time it is hard to really advise any for production use.
Google provides STUN servers freely which are generally reliable.
But don't forget, using just a STUN server won't create a reliable call service.
@@ -58,20 +70,22 @@ But don't forget, using just a STUN server won't create a reliable call service.
## Can i host my own?
-Here is just a handful of the common STUN and TURN server softwares.
+Here are some of the common STUN/TURN server softwares.
Bare in mind not all TURN server softwares include STUN server functionalities.
[coturn - STUN + TURN](https://github.com/coturn/coturn) - Plenty of Features, **Recommended**
[eturnal - STUN + TURN](https://eturnal.net/)
[stuntman - STUN](https://stunprotocol.org/)
-Make sure the host you decide to use has an open network to the internet.
-The whole purpose of having a TURN server is to relay traffic around restrictive networks.
-So it wouldn't make sense to use a restrictive hosting environment.
+Make sure the hosting environment you decide to use is open to the internet.
+Having a TURN server means being able to relay traffic around restrictive networks.
+
+Using a restrictive hosting environment wouldn't be doing you any favours.
+Most hosting companies aren't restrictive but might require firewall ports opening.
## Can i test the STUN/TURN servers?
-You can use the [Official WebRTC Trickle Ice Sample](https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/) to test your STUN and TURN server.
+You can use the [Official WebRTC Trickle Ice Sample](https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/) to test your STUN/TURN server.
:::danger Make sure your TURN server has authentication.
Best case would be each user having their own temporary auth.
diff --git a/src/guides/index.md b/src/guides/index.md
new file mode 100644
index 0000000..1e3da9a
--- /dev/null
+++ b/src/guides/index.md
@@ -0,0 +1 @@
+# Looking at the index eh?
diff --git a/docs/guides/intro/getting-started.md b/src/guides/intro/getting-started.md
similarity index 100%
rename from docs/guides/intro/getting-started.md
rename to src/guides/intro/getting-started.md
diff --git a/src/guides/intro/supported-features.md b/src/guides/intro/supported-features.md
new file mode 100644
index 0000000..0efd1c5
--- /dev/null
+++ b/src/guides/intro/supported-features.md
@@ -0,0 +1,44 @@
+# Supported Features
+
+| | Android | iOS | tvOS | macOS* | Windows* | Web* | Expo* |
+| :- | :-: | :-: | :-: | :-: | :-: | :-: | :-: |
+| Audio/Video | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | - | - | :heavy_check_mark: | :heavy_check_mark: |
+| Data Channels | :heavy_check_mark: | :heavy_check_mark: | - | - | - | :heavy_check_mark: | :heavy_check_mark: |
+| Screen Capture | :heavy_check_mark: | :heavy_check_mark: | - | - | - | :heavy_check_mark: | :heavy_check_mark: |
+| Plan B | - | - | - | - | - | - | - |
+| Unified Plan* | :heavy_check_mark: | :heavy_check_mark: | - | - | - | :heavy_check_mark: | :heavy_check_mark: |
+| Simulcast* | :heavy_check_mark: | :heavy_check_mark: | - | - | - | :heavy_check_mark: | :heavy_check_mark: |
+
+## TODO
+Instead of this write something, highlight the vast supported features on what platforms and also the unsupported stuff.
+##
+
+:::warning Screen Capturing requires extra setup.
+Make sure to follow the extra steps for Android and iOS or you will get blank streams.
+:::
+
+:::tip Unified Plan - As of version 106.0.0
+Unified Plan is now the only supported mode.
+Those still in need of Plan B will need to use an older release.
+:::
+
+:::tip Simulcast - As of version 111.0.0
+Simulcast is now possible due to using software encode/decode factories by default.
+Hardware codecs can still be used but require extra setup and have long standing issues.
+:::
+
+### Security Warning
+
+https://support.google.com/faqs/answer/12577537
+
+## WebRTC Revision
+
+* Currently used revision: [M111](https://github.com/jitsi/webrtc/tree/M111)
+* Supported architectures
+ * Android: armeabi-v7a, arm64-v8a, x86, x86_64
+ * iOS: arm64, x86_64
+ * macOS: (temporarily disabled)
+
+:::info You can build your own WebRTC version.
+Follow the [building guide](../building-webrtc.md) if you'd like to use an older or newer WebRTC revision.
+:::
diff --git a/docs/guides/intro/what-is-webrtc.md b/src/guides/intro/what-is-webrtc.md
similarity index 100%
rename from docs/guides/intro/what-is-webrtc.md
rename to src/guides/intro/what-is-webrtc.md
diff --git a/src/guides/misc/contributing.md b/src/guides/misc/contributing.md
new file mode 100644
index 0000000..572efa7
--- /dev/null
+++ b/src/guides/misc/contributing.md
@@ -0,0 +1,4 @@
+# Contributing Guidelines
+
+To be considered soon.
+[Reference](https://github.com/auth0/open-source-template/blob/master/GENERAL-CONTRIBUTING.md)
diff --git a/src/guides/misc/faqs.md b/src/guides/misc/faqs.md
new file mode 100644
index 0000000..a80ca6b
--- /dev/null
+++ b/src/guides/misc/faqs.md
@@ -0,0 +1,11 @@
+# Frequently Asked Questions
+
+To be filled in soon.
+Just some notes so far.
+
+## Screen Capture
+**Why can't i see my own stream?**
+
+If you are trying to display your own screen capture then the chances are you won't see anything.
+That is an artificial limitation in place which prevents the infinite mirror effect.
+The screen capture should display correctly for whoever you are streaming to.
diff --git a/docs/guides/misc/troubleshooting.md b/src/guides/misc/troubleshooting.md
similarity index 100%
rename from docs/guides/misc/troubleshooting.md
rename to src/guides/misc/troubleshooting.md
diff --git a/src/index.md b/src/index.md
new file mode 100644
index 0000000..62a1851
--- /dev/null
+++ b/src/index.md
@@ -0,0 +1,58 @@
+---
+layout: home
+
+title: Handbook
+titleTemplate:
+
+hero:
+ name: React Native WebRTC
+ text:
+ tagline: The WebRTC module for React Native
+ image:
+ src: /logo.svg
+ alt: React Native WebRTC
+ actions:
+ - theme: brand
+ text: Get Started
+ link: /guides/intro/getting-started
+ - theme: alt
+ text: View on GitHub
+ link: https://github.com/react-native-webrtc/react-native-webrtc
+
+features:
+ - icon: ⚡️
+ title: Batteries Included
+ details:
+ - icon: 🔥
+ title: Multiple Platforms
+ details:
+ - icon: 👍
+ title: Stable and Standardized
+ details:
+---
+
diff --git a/docs/public/favicon.png b/src/public/favicon.png
similarity index 100%
rename from docs/public/favicon.png
rename to src/public/favicon.png
diff --git a/docs/public/logo.svg b/src/public/logo.svg
similarity index 100%
rename from docs/public/logo.svg
rename to src/public/logo.svg
diff --git a/docs/public/robots.txt b/src/public/robots.txt
similarity index 100%
rename from docs/public/robots.txt
rename to src/public/robots.txt
diff --git a/docs/public/undraw_video_call_re_4p26_modified.svg b/src/public/undraw_video_call_re_4p26_modified.svg
similarity index 100%
rename from docs/public/undraw_video_call_re_4p26_modified.svg
rename to src/public/undraw_video_call_re_4p26_modified.svg
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 286f501..0000000
--- a/yarn.lock
+++ /dev/null
@@ -1,611 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@algolia/autocomplete-core@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.1.tgz#025538b8a9564a9f3dd5bcf8a236d6951c76c7d1"
- integrity sha512-eiZw+fxMzNQn01S8dA/hcCpoWCOCwcIIEUtHHdzN5TGB3IpzLbuhqFeTfh2OUhhgkE8Uo17+wH+QJ/wYyQmmzg==
- dependencies:
- "@algolia/autocomplete-shared" "1.7.1"
-
-"@algolia/autocomplete-preset-algolia@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.1.tgz#7dadc5607097766478014ae2e9e1c9c4b3f957c8"
- integrity sha512-pJwmIxeJCymU1M6cGujnaIYcY3QPOVYZOXhFkWVM7IxKzy272BwCvMFMyc5NpG/QmiObBxjo7myd060OeTNJXg==
- dependencies:
- "@algolia/autocomplete-shared" "1.7.1"
-
-"@algolia/autocomplete-shared@1.7.1":
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74"
- integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg==
-
-"@algolia/cache-browser-local-storage@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936"
- integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==
- dependencies:
- "@algolia/cache-common" "4.14.2"
-
-"@algolia/cache-common@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598"
- integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==
-
-"@algolia/cache-in-memory@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24"
- integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==
- dependencies:
- "@algolia/cache-common" "4.14.2"
-
-"@algolia/client-account@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16"
- integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==
- dependencies:
- "@algolia/client-common" "4.14.2"
- "@algolia/client-search" "4.14.2"
- "@algolia/transporter" "4.14.2"
-
-"@algolia/client-analytics@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb"
- integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==
- dependencies:
- "@algolia/client-common" "4.14.2"
- "@algolia/client-search" "4.14.2"
- "@algolia/requester-common" "4.14.2"
- "@algolia/transporter" "4.14.2"
-
-"@algolia/client-common@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300"
- integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==
- dependencies:
- "@algolia/requester-common" "4.14.2"
- "@algolia/transporter" "4.14.2"
-
-"@algolia/client-personalization@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec"
- integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==
- dependencies:
- "@algolia/client-common" "4.14.2"
- "@algolia/requester-common" "4.14.2"
- "@algolia/transporter" "4.14.2"
-
-"@algolia/client-search@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92"
- integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==
- dependencies:
- "@algolia/client-common" "4.14.2"
- "@algolia/requester-common" "4.14.2"
- "@algolia/transporter" "4.14.2"
-
-"@algolia/logger-common@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee"
- integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==
-
-"@algolia/logger-console@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b"
- integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==
- dependencies:
- "@algolia/logger-common" "4.14.2"
-
-"@algolia/requester-browser-xhr@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2"
- integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==
- dependencies:
- "@algolia/requester-common" "4.14.2"
-
-"@algolia/requester-common@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1"
- integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==
-
-"@algolia/requester-node-http@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115"
- integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==
- dependencies:
- "@algolia/requester-common" "4.14.2"
-
-"@algolia/transporter@4.14.2":
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d"
- integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==
- dependencies:
- "@algolia/cache-common" "4.14.2"
- "@algolia/logger-common" "4.14.2"
- "@algolia/requester-common" "4.14.2"
-
-"@babel/parser@^7.16.4":
- version "7.18.11"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9"
- integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==
-
-"@docsearch/css@3.2.1", "@docsearch/css@^3.2.1":
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.2.1.tgz#c05d7818b0e43b42f9efa2d82a11c36606b37b27"
- integrity sha512-gaP6TxxwQC+K8D6TRx5WULUWKrcbzECOPA2KCVMuI+6C7dNiGUk5yXXzVhc5sld79XKYLnO9DRTI4mjXDYkh+g==
-
-"@docsearch/js@^3.2.1":
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.2.1.tgz#d6856fb6223c7a47091640264d5144d59806bc30"
- integrity sha512-H1PekEtSeS0msetR2YGGey2w7jQ2wAKfGODJvQTygSwMgUZ+2DHpzUgeDyEBIXRIfaBcoQneqrzsljM62pm6Xg==
- dependencies:
- "@docsearch/react" "3.2.1"
- preact "^10.0.0"
-
-"@docsearch/react@3.2.1":
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.2.1.tgz#112ad88db07367fa6fd933d67d58421d8d8289aa"
- integrity sha512-EzTQ/y82s14IQC5XVestiK/kFFMe2aagoYFuTAIfIb/e+4FU7kSMKonRtLwsCiLQHmjvNQq+HO+33giJ5YVtaQ==
- dependencies:
- "@algolia/autocomplete-core" "1.7.1"
- "@algolia/autocomplete-preset-algolia" "1.7.1"
- "@docsearch/css" "3.2.1"
- algoliasearch "^4.0.0"
-
-"@esbuild/linux-loong64@0.14.54":
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
- integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
-
-"@types/web-bluetooth@^0.0.15":
- version "0.0.15"
- resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.15.tgz#d60330046a6ed8a13b4a53df3813c44942ebdf72"
- integrity sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==
-
-"@vitejs/plugin-vue@^3.0.3":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-3.0.3.tgz#7e3e401ccb30b4380d2279d9849281413f1791ef"
- integrity sha512-U4zNBlz9mg+TA+i+5QPc3N5lQvdUXENZLO2h0Wdzp56gI1MWhqJOv+6R+d4kOzoaSSq6TnGPBdZAXKOe4lXy6g==
-
-"@vue/compiler-core@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a"
- integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==
- dependencies:
- "@babel/parser" "^7.16.4"
- "@vue/shared" "3.2.37"
- estree-walker "^2.0.2"
- source-map "^0.6.1"
-
-"@vue/compiler-dom@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5"
- integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==
- dependencies:
- "@vue/compiler-core" "3.2.37"
- "@vue/shared" "3.2.37"
-
-"@vue/compiler-sfc@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4"
- integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==
- dependencies:
- "@babel/parser" "^7.16.4"
- "@vue/compiler-core" "3.2.37"
- "@vue/compiler-dom" "3.2.37"
- "@vue/compiler-ssr" "3.2.37"
- "@vue/reactivity-transform" "3.2.37"
- "@vue/shared" "3.2.37"
- estree-walker "^2.0.2"
- magic-string "^0.25.7"
- postcss "^8.1.10"
- source-map "^0.6.1"
-
-"@vue/compiler-ssr@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff"
- integrity sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==
- dependencies:
- "@vue/compiler-dom" "3.2.37"
- "@vue/shared" "3.2.37"
-
-"@vue/devtools-api@^6.2.1":
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
- integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==
-
-"@vue/reactivity-transform@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz#0caa47c4344df4ae59f5a05dde2a8758829f8eca"
- integrity sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==
- dependencies:
- "@babel/parser" "^7.16.4"
- "@vue/compiler-core" "3.2.37"
- "@vue/shared" "3.2.37"
- estree-walker "^2.0.2"
- magic-string "^0.25.7"
-
-"@vue/reactivity@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848"
- integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==
- dependencies:
- "@vue/shared" "3.2.37"
-
-"@vue/runtime-core@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3"
- integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==
- dependencies:
- "@vue/reactivity" "3.2.37"
- "@vue/shared" "3.2.37"
-
-"@vue/runtime-dom@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz#002bdc8228fa63949317756fb1e92cdd3f9f4bbd"
- integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==
- dependencies:
- "@vue/runtime-core" "3.2.37"
- "@vue/shared" "3.2.37"
- csstype "^2.6.8"
-
-"@vue/server-renderer@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz#840a29c8dcc29bddd9b5f5ffa22b95c0e72afdfc"
- integrity sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==
- dependencies:
- "@vue/compiler-ssr" "3.2.37"
- "@vue/shared" "3.2.37"
-
-"@vue/shared@3.2.37":
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702"
- integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==
-
-"@vueuse/core@^9.1.0":
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-9.1.0.tgz#f0fb13fd99768c0eb617169a2d2c1cbd5f5a52eb"
- integrity sha512-BIroqvXEqt826aE9r3K5cox1zobuPuAzdYJ36kouC2TVhlXvFKIILgFVWrpp9HZPwB3aLzasmG3K87q7TSyXZg==
- dependencies:
- "@types/web-bluetooth" "^0.0.15"
- "@vueuse/metadata" "9.1.0"
- "@vueuse/shared" "9.1.0"
- vue-demi "*"
-
-"@vueuse/metadata@9.1.0":
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-9.1.0.tgz#194d4bd47f7acb91e348c0f436e678ddf7ee235b"
- integrity sha512-8OEhlog1iaAGTD3LICZ8oBGQdYeMwByvXetOtAOZCJOzyCRSwqwdggTsmVZZ1rkgYIEqgUBk942AsAPwM21s6A==
-
-"@vueuse/shared@9.1.0":
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-9.1.0.tgz#d8459a45324f32fb05a2a56ed754637c3d0efaeb"
- integrity sha512-pB/3njQu4tfJJ78ajELNda0yMG6lKfpToQW7Soe09CprF1k3QuyoNi1tBNvo75wBDJWD+LOnr+c4B5HZ39jY/Q==
- dependencies:
- vue-demi "*"
-
-algoliasearch@^4.0.0:
- version "4.14.2"
- resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c"
- integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==
- dependencies:
- "@algolia/cache-browser-local-storage" "4.14.2"
- "@algolia/cache-common" "4.14.2"
- "@algolia/cache-in-memory" "4.14.2"
- "@algolia/client-account" "4.14.2"
- "@algolia/client-analytics" "4.14.2"
- "@algolia/client-common" "4.14.2"
- "@algolia/client-personalization" "4.14.2"
- "@algolia/client-search" "4.14.2"
- "@algolia/logger-common" "4.14.2"
- "@algolia/logger-console" "4.14.2"
- "@algolia/requester-browser-xhr" "4.14.2"
- "@algolia/requester-common" "4.14.2"
- "@algolia/requester-node-http" "4.14.2"
- "@algolia/transporter" "4.14.2"
-
-body-scroll-lock@^4.0.0-beta.0:
- version "4.0.0-beta.0"
- resolved "https://registry.yarnpkg.com/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz#4f78789d10e6388115c0460cd6d7d4dd2bbc4f7e"
- integrity sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==
-
-csstype@^2.6.8:
- version "2.6.20"
- resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
- integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
-
-esbuild-android-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be"
- integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==
-
-esbuild-android-arm64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771"
- integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==
-
-esbuild-darwin-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25"
- integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==
-
-esbuild-darwin-arm64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73"
- integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==
-
-esbuild-freebsd-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d"
- integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==
-
-esbuild-freebsd-arm64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48"
- integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==
-
-esbuild-linux-32@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5"
- integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==
-
-esbuild-linux-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652"
- integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==
-
-esbuild-linux-arm64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b"
- integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==
-
-esbuild-linux-arm@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59"
- integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==
-
-esbuild-linux-mips64le@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34"
- integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==
-
-esbuild-linux-ppc64le@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e"
- integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==
-
-esbuild-linux-riscv64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8"
- integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==
-
-esbuild-linux-s390x@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6"
- integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==
-
-esbuild-netbsd-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81"
- integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==
-
-esbuild-openbsd-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b"
- integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==
-
-esbuild-sunos-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da"
- integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==
-
-esbuild-windows-32@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31"
- integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==
-
-esbuild-windows-64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4"
- integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==
-
-esbuild-windows-arm64@0.14.54:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982"
- integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==
-
-esbuild@^0.14.47:
- version "0.14.54"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2"
- integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==
- optionalDependencies:
- "@esbuild/linux-loong64" "0.14.54"
- esbuild-android-64 "0.14.54"
- esbuild-android-arm64 "0.14.54"
- esbuild-darwin-64 "0.14.54"
- esbuild-darwin-arm64 "0.14.54"
- esbuild-freebsd-64 "0.14.54"
- esbuild-freebsd-arm64 "0.14.54"
- esbuild-linux-32 "0.14.54"
- esbuild-linux-64 "0.14.54"
- esbuild-linux-arm "0.14.54"
- esbuild-linux-arm64 "0.14.54"
- esbuild-linux-mips64le "0.14.54"
- esbuild-linux-ppc64le "0.14.54"
- esbuild-linux-riscv64 "0.14.54"
- esbuild-linux-s390x "0.14.54"
- esbuild-netbsd-64 "0.14.54"
- esbuild-openbsd-64 "0.14.54"
- esbuild-sunos-64 "0.14.54"
- esbuild-windows-32 "0.14.54"
- esbuild-windows-64 "0.14.54"
- esbuild-windows-arm64 "0.14.54"
-
-estree-walker@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
- integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
-
-fsevents@~2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
- integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
-
-function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
- integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
-
-has@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
- integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
- dependencies:
- function-bind "^1.1.1"
-
-is-core-module@^2.9.0:
- version "2.10.0"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
- integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
- dependencies:
- has "^1.0.3"
-
-jsonc-parser@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d"
- integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==
-
-magic-string@^0.25.7:
- version "0.25.9"
- resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
- integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
- dependencies:
- sourcemap-codec "^1.4.8"
-
-nanoid@^3.3.4:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
- integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
-
-path-parse@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
- integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-
-picocolors@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
- integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
-
-postcss@^8.1.10, postcss@^8.4.16:
- version "8.4.16"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c"
- integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==
- dependencies:
- nanoid "^3.3.4"
- picocolors "^1.0.0"
- source-map-js "^1.0.2"
-
-preact@^10.0.0:
- version "10.10.2"
- resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.2.tgz#3460d456d84c4701af33ac37e9bd3054271d5b1e"
- integrity sha512-GUXSsfwq4NKhlLYY5ctfNE0IjFk7Xo4952yPI8yMkXdhzeQmQ+FahZITe7CeHXMPyKBVQ8SoCmGNIy9TSOdhgQ==
-
-resolve@^1.22.1:
- version "1.22.1"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
- integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
- dependencies:
- is-core-module "^2.9.0"
- path-parse "^1.0.7"
- supports-preserve-symlinks-flag "^1.0.0"
-
-"rollup@>=2.75.6 <2.77.0 || ~2.77.0":
- version "2.77.3"
- resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12"
- integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
- optionalDependencies:
- fsevents "~2.3.2"
-
-shiki@^0.11.1:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.11.1.tgz#df0f719e7ab592c484d8b73ec10e215a503ab8cc"
- integrity sha512-EugY9VASFuDqOexOgXR18ZV+TbFrQHeCpEYaXamO+SZlsnT/2LxuLBX25GGtIrwaEVFXUAbUQ601SWE2rMwWHA==
- dependencies:
- jsonc-parser "^3.0.0"
- vscode-oniguruma "^1.6.1"
- vscode-textmate "^6.0.0"
-
-source-map-js@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
- integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
-
-source-map@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
- integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-
-sourcemap-codec@^1.4.8:
- version "1.4.8"
- resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
- integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
-
-supports-preserve-symlinks-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
- integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-
-vite@^3.0.8:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.8.tgz#aa095ad8e3e5da46d9ec7e878f262678965d6531"
- integrity sha512-AOZ4eN7mrkJiOLuw8IA7piS4IdOQyQCA81GxGsAQvAZzMRi9ZwGB3TOaYsj4uLAWK46T5L4AfQ6InNGlxX30IQ==
- dependencies:
- esbuild "^0.14.47"
- postcss "^8.4.16"
- resolve "^1.22.1"
- rollup ">=2.75.6 <2.77.0 || ~2.77.0"
- optionalDependencies:
- fsevents "~2.3.2"
-
-vitepress@1.0.0-alpha.8:
- version "1.0.0-alpha.8"
- resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.0.0-alpha.8.tgz#b6a3b503c2ea3ed0a44a16539849c02fa996c090"
- integrity sha512-kTRN5DCagvMqr9OjylSV9/waGg0IHrxL0hBVuJoz7ykleZq2qR02n5CaiFq5QrSB/VRBGqiVsFQzet9vJsXS8g==
- dependencies:
- "@docsearch/css" "^3.2.1"
- "@docsearch/js" "^3.2.1"
- "@vitejs/plugin-vue" "^3.0.3"
- "@vue/devtools-api" "^6.2.1"
- "@vueuse/core" "^9.1.0"
- body-scroll-lock "^4.0.0-beta.0"
- shiki "^0.11.1"
- vite "^3.0.8"
- vue "^3.2.37"
-
-vscode-oniguruma@^1.6.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607"
- integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA==
-
-vscode-textmate@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-6.0.0.tgz#a3777197235036814ac9a92451492f2748589210"
- integrity sha512-gu73tuZfJgu+mvCSy4UZwd2JXykjK9zAZsfmDeut5dx/1a7FeTk0XwJsSuqQn+cuMCGVbIBfl+s53X4T19DnzQ==
-
-vue-demi@*:
- version "0.13.7"
- resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.7.tgz#5ae380b15c13be556ac4a0da0a48450c98a01d4b"
- integrity sha512-hbhlvpx1gFW3TB5HxJ0mNxyA9Jh5iQt409taOs6zkhpvfJ7YzLs1rsLufJmDsjH5PI1cOyfikY1fE/meyHfU5A==
-
-vue@^3.2.37:
- version "3.2.37"
- resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.37.tgz#da220ccb618d78579d25b06c7c21498ca4e5452e"
- integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==
- dependencies:
- "@vue/compiler-dom" "3.2.37"
- "@vue/compiler-sfc" "3.2.37"
- "@vue/runtime-dom" "3.2.37"
- "@vue/server-renderer" "3.2.37"
- "@vue/shared" "3.2.37"