diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 000000000..35cc9e5b5
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1,12 @@
+# These are supported funding model platforms
+
+github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
+patreon: cookpete
+open_collective: # Replace with a single Open Collective username
+ko_fi: # Replace with a single Ko-fi username
+tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
+community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
+liberapay: # Replace with a single Liberapay username
+issuehunt: # Replace with a single IssueHunt username
+otechie: # Replace with a single Otechie username
+custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/.github/issue_template.md b/.github/issue_template.md
new file mode 100644
index 000000000..291911e13
--- /dev/null
+++ b/.github/issue_template.md
@@ -0,0 +1,22 @@
+Be sure to [search for your issue](https://github.com/CookPete/react-player/issues) before opening a new one.
+
+#### Current Behavior
+
+
+#### Expected Behavior
+
+
+#### Steps to Reproduce
+
+1.
+1.
+1.
+
+#### Environment
+- URL attempting to play:
+- Browser:
+- Operating system:
+- jsFiddle example: https://jsfiddle.net/sv5x3ug1
+
+#### Other Information
+
diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
new file mode 100644
index 000000000..f77cc4e39
--- /dev/null
+++ b/.github/workflows/cd.yml
@@ -0,0 +1,66 @@
+name: CD
+
+concurrency: production
+
+on:
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+ inputs:
+ version:
+ type: choice
+ required: true
+ description: Version
+ options:
+ - conventional
+ - patch
+ - minor
+ - major
+ - prerelease
+ - from-package
+ - from-git
+ prerelease:
+ type: choice
+ description: Pre-release
+ options:
+ -
+ - canary
+ - beta
+ dryrun:
+ description: 'Dry-run'
+ type: boolean
+
+run-name: Deploy ${{ inputs.version }} ${{ inputs.dryrun && '--dry-run' || '' }} ${{ inputs.prerelease && format('--prerelease {0}', inputs.prerelease) || '' }}
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ environment: production
+ permissions:
+ contents: write
+ id-token: write
+
+ env:
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
+ CONVENTIONAL_GITHUB_RELEASER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0 # Fetch all history for all tags and branches
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ # this line is required for the setup-node action to be able to run the npm publish below.
+ registry-url: 'https://registry.npmjs.org/'
+ - uses: fregante/setup-git-user@v1
+ - run: npm ci
+ - run: npm run lint
+ - run: npm run test:coverage
+ - run: npm run build
+ - run: npm run build:demo
+ - run: npx --yes wet-run@1.0.1 release ${{ inputs.version }} ${{ inputs.dryrun && '--dry-run' || '' }} ${{ inputs.prerelease && format('--prerelease {0}', inputs.prerelease) || '' }} --provenance --github-release --verbose
+ - name: Get NPM version
+ id: npm-version
+ uses: martinbeentjes/npm-get-version-action@v1.3.1
+ - name: Released ${{ steps.npm-version.outputs.current-version}} ✨
+ run: echo ${{ steps.npm-version.outputs.current-version}}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 000000000..052df39f5
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,89 @@
+name: Node.js CI
+
+on: [push, pull_request]
+
+# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
+# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
+concurrency:
+ group: "pages"
+ cancel-in-progress: false
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [18.x]
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: npm
+ - run: npm ci
+ - run: npm run lint
+
+ test:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [18.x]
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: npm
+ - run: npm ci
+ - run: npm run test:coverage
+
+ build:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ node-version: [16.x, 18.x, 20.x]
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Use Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v4
+ with:
+ node-version: ${{ matrix.node-version }}
+ cache: npm
+ - run: npm ci
+ - run: npm run build
+ - run: npm run build:demo
+
+ deploy-preview:
+ # Grant GITHUB_TOKEN the permissions required to make a Pages deployment
+ permissions:
+ pages: write # to deploy to Pages
+ id-token: write # to verify the deployment originates from an appropriate source
+
+ environment:
+ name: github-preview
+ url: ${{ steps.deployment.outputs.page_url }}
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/configure-pages@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - run: npm ci
+ - run: npm run build
+ - run: npm run build:demo
+ - uses: actions/upload-pages-artifact@v3
+ with:
+ path: './demo'
+ - uses: actions/deploy-pages@v4
+ id: deployment
diff --git a/.gitignore b/.gitignore
index bbf713f51..4d63d4146 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,14 @@
node_modules
npm-debug.log
+yarn-error.log
.DS_Store
/lib
+/lazy
/demo
-/test/coverage
+/coverage
+/es6
+.idea/
+.vscode/
+/disttest/
+/dist/
+tsconfig.tsbuildinfo
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 862f62123..000000000
--- a/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-src
-test
-server.js
-webpack.config.*.js
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index cea82498f..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-language: node_js
-addons:
- chrome: stable
- apt:
- packages:
- - sshpass
-cache: yarn
-before_install:
- - export DISPLAY=:99.0
- - sh -e /etc/init.d/xvfb start
-node_js:
- - node
-script:
- - npm run lint
- - npm run test
- - npm run build:lib
- - npm run build:demo
- - npm run build:dist
- - npm run build:standalone
-after_success:
- - npm run coverage
- - test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "master" && sshpass -e scp -r -o stricthostkeychecking=no demo/* $DEPLOY_DEST
-env:
- global:
- - secure: deRlaZ1x+C3wv9uLdjI9QNLUsIqnB5RRgHQfRn28eMJL+qky0Md98My/H81luGmkaOyTrvZL0Vt6WomsRky577hdBQBDrvMnhqAoyrf+Nhs+ewV4N92szZ7CvAWwjIlceo8cpHCCPjusMWXFOCKX9v53S/CBPSUh0TiXJNsrPzLSJ/e1k1rg7C7xC2eI0aOuhhL+uNIdRMfirLjGLUIor622ZrJjXC95h6d+O0OyJHx21RonYCgF5H0cPp8tULhN1DV2n1Bdwa364o8njrkGJiOVfHeAo6YjKeT0V3WxfMwF/gfxBLVgrSWFfL0bgpbE8wzP6QIxj7Et9+FO62zYTxMIdcKMwRvMMpXJtkiCuWIoAcKBE/GXmdz3QlY3wjmvEGQCz1VmNVkHut63/1s8leYikc+BaOBaCitdOSMShRCGh5OK3AgfdIdjg/OGeYTBeD7nrlkLv3bMKhLWMNUtVPHzvY/dWJJW34thCCeeV8Pt6dpBjZZRqnYdRCvHcVCc5fkLxmRFc2oF2uUDOM4JnUn/cuLBETaw85FoXgSVoH1bn71CY4CM6WXBSMQU0Qzvb8mFc1KoMnraw+6lt5LvRkN48SATkbhrrUKZ6bl1+HvJdQZbJA2gX7RJJG6dLUa4t/XIEteLDVtC6ipfALIJd3i3e/mBtUV4UubIdoIYMMA=
- - secure: OMUsOpLIWCPcNkVdHUKFF13ukt1cFLXPFBwktM3anr2BGqs4tyfPw9e9EZiOv3BKF2s859PE+kCiF1fyrxDyuQcJUIJaKyFNkzK9LFshcl/cz9usQQbrjxU+Y+urVrWz71r6zBapNFbfDgkGbME/wa6nPutynXYGon4HagF/hcIFTJnpTUwN8dpXWxrxbBSVNEpT33jJaFm6e7iwXoq6Uti3OzWotfY6fXa3C9rc0um7CUTQ7pmNzOox2eFTVTw/kY02+a25lAB1x8bZkaV6nZfA79vFwKg1RvOaTaOSjx9g5hn0Qcnkt242yuLpO813e1988OIXGSMWWwNWCLh0dgKNiLWvrF+ClBZ8YSbyS6TMNuqUKXH8s/XX4asf+NZKjbzLZl7VA2dskBMEbTXxQJdl7lENSdOb61bA43uoOOsDQ4WnHm39hU2GdypJzNkmN59kW7URSbTo5g2BQebGtEJRE1BnrAQ0tjc665J2jiqcuOE5lcv+UscF7gsIXQOjVZ+Yl2gLlsAik6bgoVn0U1ZHO4IPzXNHtRhJagb1oPpGfKjMHIHt6Bk48COxtjAZNtla0I1Y5T6Hp9wdI+MUgfMoOI7PPNJjoY72xDxhPwD+IKJ6i/wSn43iqiR9e2PPaHuw25SYwdmqIkVIqI7JqtygxWdOKRaSIbfqqGMkdcg=
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d0987184a..869596a97 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,600 +1,1542 @@
### Changelog
-All notable changes to this project will be documented in this file.
+
+All notable changes to this project will be documented in this file. Dates are displayed in UTC.
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
-#### [v1.3.0](https://github.com/CookPete/react-player/compare/v1.2.1...v1.3.0)
+#### [v3.4.0](https://github.com/cookpete/react-player/compare/v3.3.3...v3.4.0)
+
+- fix: Improve accessibility and code quality [`#1985`](https://github.com/cookpete/react-player/pull/1985)
+- feat: Add disableRemotePlayback prop [`#2004`](https://github.com/cookpete/react-player/pull/2004)
+- fix: upgrade player deps [`a68f29d`](https://github.com/cookpete/react-player/commit/a68f29d7b0d5dbcbb544e989e89c73203451b933)
+
+#### [v3.3.3](https://github.com/cookpete/react-player/compare/v3.3.2...v3.3.3)
+
+> 19 September 2025
+
+- fix: upgrade deps + fix hls config bug [`#1977`](https://github.com/cookpete/react-player/issues/1977)
+- chore(release): 3.3.3 [`e09d35f`](https://github.com/cookpete/react-player/commit/e09d35f591551ca0eb7895d5b15dbb489d732cdd)
+
+#### [v3.3.2](https://github.com/cookpete/react-player/compare/v3.3.1...v3.3.2)
+
+> 25 August 2025
+
+- fix: prevent React warnings for unknown event handler properties [`#1970`](https://github.com/cookpete/react-player/pull/1970)
+- docs: the demo source in README.md [`#1979`](https://github.com/cookpete/react-player/pull/1979)
+- Fix: Add share URLs to TikTok pattern matching [`#1973`](https://github.com/cookpete/react-player/pull/1973)
+- MIGRATING.md: Fix broken link to demo app [`#1969`](https://github.com/cookpete/react-player/pull/1969)
+- chore(release): 3.3.2 [`a9d43f1`](https://github.com/cookpete/react-player/commit/a9d43f1504ae37f0ee06c44edf913ea56faa638d)
+
+#### [v3.3.1](https://github.com/cookpete/react-player/compare/v3.3.0...v3.3.1)
+
+> 16 July 2025
+
+- fix: merge circular dependency [`#1964`](https://github.com/cookpete/react-player/pull/1964)
+- chore(release): 3.3.1 [`26001ec`](https://github.com/cookpete/react-player/commit/26001ec8c32d91cededfcaed026955fc4de2157b)
+
+#### [v3.3.0](https://github.com/cookpete/react-player/compare/v3.2.1...v3.3.0)
+
+> 16 July 2025
+
+- feat: add tiktok support [`#1961`](https://github.com/cookpete/react-player/pull/1961)
+- feat: add tiktok support (#1961) [`#1193`](https://github.com/cookpete/react-player/issues/1193)
+- chore(release): 3.3.0 [`6c3a830`](https://github.com/cookpete/react-player/commit/6c3a83060ce7c91c42f1619822318a6b7d81ed27)
+
+#### [v3.2.1](https://github.com/cookpete/react-player/compare/v3.2.0...v3.2.1)
+
+> 15 July 2025
+
+- fix: muted prop bug [`#1959`](https://github.com/cookpete/react-player/pull/1959)
+- fix: muted prop bug (#1959) [`#1957`](https://github.com/cookpete/react-player/issues/1957)
+- chore(release): 3.2.1 [`d72301f`](https://github.com/cookpete/react-player/commit/d72301f15fb77795c1e741fe1a5935dbf2d41be9)
+
+#### [v3.2.0](https://github.com/cookpete/react-player/compare/v3.1.0...v3.2.0)
+
+> 11 July 2025
+
+- feat: add Spotify and Twitch support [`#1956`](https://github.com/cookpete/react-player/pull/1956)
+- chore(release): 3.2.0 [`d650eaa`](https://github.com/cookpete/react-player/commit/d650eaac904c29ca84fd825a6b0e72c2fe6bb27e)
+
+#### [v3.1.0](https://github.com/cookpete/react-player/compare/v3.0.0...v3.1.0)
+
+> 2 July 2025
+
+- docs: Add a Youtube playlist example [`#1946`](https://github.com/cookpete/react-player/pull/1946)
+- feat: add YT playlist support [`#1947`](https://github.com/cookpete/react-player/pull/1947)
+- chore(release): 3.1.0 [`a315b5f`](https://github.com/cookpete/react-player/commit/a315b5fb32f7364ed9af75d65314b15a1ec16133)
+
+### [v3.0.0](https://github.com/cookpete/react-player/compare/v3.0.0-beta.4...v3.0.0)
+
+> 27 June 2025
+
+- docs: add custom player controls section & example [`#1942`](https://github.com/cookpete/react-player/pull/1942)
+- chore(release): 3.0.0 [`ddd6303`](https://github.com/cookpete/react-player/commit/ddd6303f5be1dfa722e01e8a35ad932bcf8948ff)
+
+#### [v3.0.0-beta.4](https://github.com/cookpete/react-player/compare/v3.0.0-beta.3...v3.0.0-beta.4)
+
+> 26 June 2025
+
+- fix: upgrade media element dependencies [`#1941`](https://github.com/cookpete/react-player/pull/1941)
+- chore(release): 3.0.0-beta.4 [`6fa7049`](https://github.com/cookpete/react-player/commit/6fa70490006df3429d1a36aca42527182cb537aa)
+
+#### [v3.0.0-beta.3](https://github.com/cookpete/react-player/compare/v3.0.0-beta.2...v3.0.0-beta.3)
+
+> 19 May 2025
+
+- fix: prevent infinite recursion in deepmerge by extracting children prop [`#1933`](https://github.com/cookpete/react-player/pull/1933)
+- chore(release): 3.0.0-beta.3 [`d2f7578`](https://github.com/cookpete/react-player/commit/d2f75781a88bb8f9aef750f6b1e5860bc229426f)
+
+#### [v3.0.0-beta.2](https://github.com/cookpete/react-player/compare/v3.0.0-beta.1...v3.0.0-beta.2)
+
+> 8 May 2025
+
+- fix: playing prop bug [`#1932`](https://github.com/cookpete/react-player/pull/1932)
+- chore(release): 3.0.0-beta.2 [`aba61fa`](https://github.com/cookpete/react-player/commit/aba61fa57638dbcf961d5a77eee026004e5ce0fc)
+
+#### [v3.0.0-beta.1](https://github.com/cookpete/react-player/compare/v3.0.0-beta.0...v3.0.0-beta.1)
+
+> 8 May 2025
+
+- fix: upgrade media elements [`#1929`](https://github.com/cookpete/react-player/pull/1929)
+- fix: add `slot` and other media attrs [`#1931`](https://github.com/cookpete/react-player/pull/1931)
+- chore(release): 3.0.0-beta.1 [`af90316`](https://github.com/cookpete/react-player/commit/af903164c80114d4072d61c4944cd2c3a3a8d188)
+- fix: support React 19 [`a26d253`](https://github.com/cookpete/react-player/commit/a26d2538fd1284321ba2af6ded7d490506b24b8c)
+- docs: fix formatting issues [`8545cb3`](https://github.com/cookpete/react-player/commit/8545cb3c85abd1d8e5af1ecb45b06ab2baced9e3)
+
+#### [v3.0.0-beta.0](https://github.com/cookpete/react-player/compare/v2.16.1...v3.0.0-beta.0)
+
+> 8 May 2025
+
+- feat!: v3 refactor [`#1886`](https://github.com/cookpete/react-player/pull/1886)
+- chore: Small readme update [`#1884`](https://github.com/cookpete/react-player/pull/1884)
+- chore(release): 3.0.0-beta.0 [`693caed`](https://github.com/cookpete/react-player/commit/693caed3ad1e1b32162bf0cad338bdb48625afd2)
+- docs: fix `src` instead of `url` prop [`b0084f7`](https://github.com/cookpete/react-player/commit/b0084f78d6637df642ebf0f471967b59cbd58c8d)
+
+#### [v2.16.1](https://github.com/cookpete/react-player/compare/v2.16.0...v2.16.1)
+
+> 10 July 2025
+
+- chore(release): 2.16.1 [`71efe92`](https://github.com/cookpete/react-player/commit/71efe9297ff8813d1f11790a92ae42e12152d394)
+- fix: Mixcloud URL (#1953) [`47a8c49`](https://github.com/cookpete/react-player/commit/47a8c495ad80c0b629ab6254fc27c00ad5874f79)
+
+#### [v2.16.0](https://github.com/cookpete/react-player/compare/v2.15.1...v2.16.0)
+
+> 9 April 2024
+
+- feat: add Mux + hls.js support back in [`#1769`](https://github.com/cookpete/react-player/pull/1769)
+- chore(release): 2.16.0 [`795b196`](https://github.com/cookpete/react-player/commit/795b19614977fbe2b89f6fd14503d1bfb121a722)
+
+#### [v2.15.1](https://github.com/cookpete/react-player/compare/v2.15.0...v2.15.1)
+
+> 2 March 2024
+
+- fix: dynamic Mux import [`#1758`](https://github.com/cookpete/react-player/pull/1758)
+- docs: fix demo URL [`#1752`](https://github.com/cookpete/react-player/pull/1752)
+- docs: readme updates, next-video callout [`#1751`](https://github.com/cookpete/react-player/pull/1751)
+- fix: dynamic Mux import (#1758) [`#1755`](https://github.com/cookpete/react-player/issues/1755)
+- chore(release): 2.15.1 [`4d7fcb5`](https://github.com/cookpete/react-player/commit/4d7fcb52ac5cc431347e4f4b0e08ac6d0b0825b5)
+
+#### [v2.15.0](https://github.com/cookpete/react-player/compare/v2.14.1...v2.15.0)
+
+> 28 February 2024
+
+- chore(cd): remove --changelog b/c auto-changelog [`#1750`](https://github.com/cookpete/react-player/pull/1750)
+- feat: add Mux player [`#1748`](https://github.com/cookpete/react-player/pull/1748)
+- chore(github-pages): add demo preview [`#1747`](https://github.com/cookpete/react-player/pull/1747)
+- chore: remove unneeded config files [`#1744`](https://github.com/cookpete/react-player/pull/1744)
+- Add aria-label to Preview component [`#1705`](https://github.com/cookpete/react-player/pull/1705)
+- Add Deno-specific browser check [`#1632`](https://github.com/cookpete/react-player/pull/1632)
+- docs: fix badges [`#1735`](https://github.com/cookpete/react-player/pull/1735)
+- chore(release): 2.15.0 [`6dfff1c`](https://github.com/cookpete/react-player/commit/6dfff1c8055388c9a0f8e59d58bf4ecd4cfdf013)
+
+#### [v2.14.1](https://github.com/cookpete/react-player/compare/v2.14.0...v2.14.1)
+
+> 19 December 2023
+
+- fix: cjs interop require default pita [`#1722`](https://github.com/cookpete/react-player/pull/1722)
+- docs(CHANGELOG): 2.14.1 [`921b0e0`](https://github.com/cookpete/react-player/commit/921b0e01148925f048716435333fcdc9ce2df24a)
+- chore(release): 2.14.1 [`8ca9747`](https://github.com/cookpete/react-player/commit/8ca974794db1c7f8cacf4ae1580671548cdf5491)
+- chore: npm ignore unneeded folders [`678f466`](https://github.com/cookpete/react-player/commit/678f466553d36dc02dfe2b926a31e8694b746842)
+
+#### [v2.14.0](https://github.com/cookpete/react-player/compare/v2.13.0...v2.14.0)
+
+> 14 December 2023
+
+- fix: repo url [`#1709`](https://github.com/cookpete/react-player/pull/1709)
+- fix: pkg repository.url [`#1708`](https://github.com/cookpete/react-player/pull/1708)
+- chore: add CD workflow [`#1706`](https://github.com/cookpete/react-player/pull/1706)
+- chore: use Node matrix with 16.x, 18.x, 20.x [`#1688`](https://github.com/cookpete/react-player/pull/1688)
+- docs: update demo App.js link [`#1689`](https://github.com/cookpete/react-player/pull/1689)
+- fix: modernize build using esbuild [`#1684`](https://github.com/cookpete/react-player/pull/1684)
+- docs(CHANGELOG): 2.14.0 [`e018c42`](https://github.com/cookpete/react-player/commit/e018c4255dee89a1684f2fff8b1cb4db81ad2cce)
+- chore(release): 2.14.0 [`1496f67`](https://github.com/cookpete/react-player/commit/1496f679fcefae26ecb5b1ea77c75b36f401dd90)
+
+#### [v2.13.0](https://github.com/cookpete/react-player/compare/v2.12.0...v2.13.0)
+
+> 5 September 2023
+
+- Fix #1604 - FilePlayer does not work if I passed an array of urls [`#1612`](https://github.com/cookpete/react-player/pull/1612)
+- fix: `src` sttribute become "undefinded" if `url` is an array [`#1648`](https://github.com/cookpete/react-player/pull/1648)
+- Adding keepPlaying to other player types [`#1639`](https://github.com/cookpete/react-player/pull/1639)
+- CI [`#1654`](https://github.com/cookpete/react-player/pull/1654)
+- Swap out broken youtube URL [`#1659`](https://github.com/cookpete/react-player/pull/1659)
+- Add keepPlaying to seekTo [`#1620`](https://github.com/cookpete/react-player/pull/1620)
+- Added forceDisableHls option for FilePlayer [`#1625`](https://github.com/cookpete/react-player/pull/1625)
+- added onPlaybackQualityChange prop [`#1636`](https://github.com/cookpete/react-player/pull/1636)
+- Update the list of supported YouTube domains [`#1599`](https://github.com/cookpete/react-player/pull/1599)
+- Fix #1604 - FilePlayer does not work if I passed an array of urls (#1612) [`#1604`](https://github.com/cookpete/react-player/issues/1604)
+- Support Wisita URLs with query params [`#1591`](https://github.com/cookpete/react-player/issues/1591)
+- Support vimeo manage links [`#1593`](https://github.com/cookpete/react-player/issues/1593)
+- Update readme [`90237f5`](https://github.com/cookpete/react-player/commit/90237f51d43fc63870b0e6d0c86f4497f97ca586)
+
+#### [v2.12.0](https://github.com/cookpete/react-player/compare/v2.11.2...v2.12.0)
+
+> 7 March 2023
+
+- Added Vimeo Muteability [`#1588`](https://github.com/cookpete/react-player/pull/1588)
+- Add forceSafariHLS option for FilePlayer [`#1560`](https://github.com/cookpete/react-player/pull/1560)
+- fix: standalone has side effects [`#1586`](https://github.com/cookpete/react-player/pull/1586)
+- Update DASH example [`#1589`](https://github.com/cookpete/react-player/issues/1589)
+- Support live youtube URLs [`#1580`](https://github.com/cookpete/react-player/issues/1580)
+
+#### [v2.11.2](https://github.com/cookpete/react-player/compare/v2.11.1...v2.11.2)
+
+> 10 February 2023
+
+- Remove module property from package.json [`#1574`](https://github.com/cookpete/react-player/issues/1574)
+
+#### [v2.11.1](https://github.com/cookpete/react-player/compare/v2.11.0...v2.11.1)
+
+> 8 February 2023
+
+- Update light prop usage re: new feature in PR#1405 [`#1510`](https://github.com/cookpete/react-player/pull/1510)
+- Extending valid DailyMotion URL regex Fix #1430 [`#1516`](https://github.com/cookpete/react-player/pull/1516)
+- Add `"sideEffects": false` to `package.json` [`#1524`](https://github.com/cookpete/react-player/pull/1524)
+- responsive CSS fix [`#1533`](https://github.com/cookpete/react-player/pull/1533)
+- add unbundled es6 build with jsx file extensions [`#1537`](https://github.com/cookpete/react-player/pull/1537)
+- Replace Vimeo default preview thumbnail [`#1553`](https://github.com/cookpete/react-player/pull/1553)
+- fix typo [`#1558`](https://github.com/cookpete/react-player/pull/1558)
+- fix: empty src attr in StrictMode [`#1538`](https://github.com/cookpete/react-player/pull/1538)
+- Extending valid DailyMotion URL regex Fix #1430 (#1516) [`#1430`](https://github.com/cookpete/react-player/issues/1430)
+
+#### [v2.11.0](https://github.com/cookpete/react-player/compare/v2.10.1...v2.11.0)
+
+> 17 September 2022
+
+- Add event playbackratechange on vimeo player [`#1502`](https://github.com/cookpete/react-player/pull/1502)
+- feat: allow auto play on mixcloud player [`#1467`](https://github.com/cookpete/react-player/pull/1467)
+- Fix onProgress not firing in Strict Mode [`#1465`](https://github.com/cookpete/react-player/pull/1465)
+- Generate a file `dist/ReactPlayer.standalone-module.js` ES6 module [`#1425`](https://github.com/cookpete/react-player/pull/1425)
+- ability to pass a component in light prop [`#1405`](https://github.com/cookpete/react-player/pull/1405)
+- (fix): clear video src to prevent old video from continue to load [`#1360`](https://github.com/cookpete/react-player/pull/1360)
+- apply interface onProgressProps at base.d.ts [`#1342`](https://github.com/cookpete/react-player/pull/1342)
+- Do not pass wrapper ref to custom wrappers [`#1476`](https://github.com/cookpete/react-player/issues/1476)
+- Update readme [`e955a2c`](https://github.com/cookpete/react-player/commit/e955a2c9ca760196859926d08431cacdf585a214)
+- Update browserslist [`dc68dba`](https://github.com/cookpete/react-player/commit/dc68dbad77d4f66a94f5f7c910a67e12672ae4e9)
+- Remove patreon supporter [`4e5d334`](https://github.com/cookpete/react-player/commit/4e5d3341cc91b88666128b4e5c6c8925b273d342)
+
+#### [v2.10.1](https://github.com/cookpete/react-player/compare/v2.10.0...v2.10.1)
+
+> 7 May 2022
+
+- don't stack event listeners [`#1186`](https://github.com/cookpete/react-player/pull/1186)
+- Add flvjs error handling, pass it to props onError method. [`#1426`](https://github.com/cookpete/react-player/pull/1426)
+- Allow parameters after entry_id on kaltura [`#1432`](https://github.com/cookpete/react-player/pull/1432)
+- adds support for youtube short urls [`#1438`](https://github.com/cookpete/react-player/pull/1438)
+- Prevent double load bug in strict mode [`#1439`](https://github.com/cookpete/react-player/issues/1439) [`#1450`](https://github.com/cookpete/react-player/pull/1450)
+- Use allow rather than allowFullScreen [`#1444`](https://github.com/cookpete/react-player/issues/1444)
+- yarn audit fix [`9ad5f38`](https://github.com/cookpete/react-player/commit/9ad5f387e78458ae4ebe776c20d1befa9760d023)
+- Fix Player tests [`30314c7`](https://github.com/cookpete/react-player/commit/30314c71d6455d3249b2f472f62754941a92abf6)
+- Remove email from package.json [`646e62e`](https://github.com/cookpete/react-player/commit/646e62eb0ef1c3b7e980b55f416f7d8845482af7)
+
+#### [v2.10.0](https://github.com/cookpete/react-player/compare/v2.9.0...v2.10.0)
+
+> 18 March 2022
+
+- Added .m4b extension to AUDIO_EXTENSIONS [`#1415`](https://github.com/cookpete/react-player/pull/1415)
+- Adjust listener for kaltura [`#1226`](https://github.com/cookpete/react-player/pull/1226)
+- update default HLS version to latest release [`#1402`](https://github.com/cookpete/react-player/pull/1402)
+- Make pre-publish.js ES5 compatible [`#1393`](https://github.com/cookpete/react-player/pull/1393)
+- fix: Add exception handling when seekTo is called with amount value 0 [`#1372`](https://github.com/cookpete/react-player/pull/1372)
+- Add onSeek support to Twitch player [`#1354`](https://github.com/cookpete/react-player/pull/1354)
+- Add attributes in FacebookConfig type [`#1351`](https://github.com/cookpete/react-player/pull/1351)
+- handle setPlaybackRate error [`#1223`](https://github.com/cookpete/react-player/pull/1223)
+- Add onPlaybackRateChange callback prop [`#1224`](https://github.com/cookpete/react-player/pull/1224)
+- Ability to pass null to previewTabIndex [`#1256`](https://github.com/cookpete/react-player/pull/1256)
+- Add media attribute to source tag in file player [`#1269`](https://github.com/cookpete/react-player/pull/1269)
+- fix: don't defer MediaStream [`#1230`](https://github.com/cookpete/react-player/pull/1230)
+- add title attribute to vimeo iframe [`#1229`](https://github.com/cookpete/react-player/pull/1229)
+- Add oEmbedUrl as changeable prop [`#1333`](https://github.com/cookpete/react-player/pull/1333)
+- update video extenstions to accept media fragments for time [`#1213`](https://github.com/cookpete/react-player/pull/1213)
+- Add type for wrapper in base.d.ts [`#1234`](https://github.com/cookpete/react-player/pull/1234)
+- Make facebook config type properties optional [`#1314`](https://github.com/cookpete/react-player/pull/1314)
+- Add disableDeferredLoading prop [`#1396`](https://github.com/cookpete/react-player/issues/1396)
+- Support new vimeo external link format [`#1399`](https://github.com/cookpete/react-player/issues/1399)
+- Tweak Vidyard pattern [`#1373`](https://github.com/cookpete/react-player/issues/1373)
+- Adjust listener for kaltura (#1226) [`#1202`](https://github.com/cookpete/react-player/issues/1202)
+- Update caniuse-lite [`9f6adcd`](https://github.com/cookpete/react-player/commit/9f6adcdc37304242d7c328a9df85b67bf8281614)
+- Fix kaltura test [`0f512c2`](https://github.com/cookpete/react-player/commit/0f512c20472a2955882e324e7a17d0d970a75fa7)
+
+#### [v2.9.0](https://github.com/cookpete/react-player/compare/v2.8.2...v2.9.0)
+
+> 17 February 2021
+
+- Adds previewTabIndex property to light mode [`#1169`](https://github.com/cookpete/react-player/pull/1169)
+- Update YouTube URL pattern (#1170) [`#1171`](https://github.com/cookpete/react-player/pull/1171)
+- Support Kaltura's HTML5 player [`#1082`](https://github.com/cookpete/react-player/pull/1082)
+- Fix suspense check for nextjs [`#1165`](https://github.com/cookpete/react-player/issues/1165)
+- Add kaltura player types [`b1e1053`](https://github.com/cookpete/react-player/commit/b1e105342f4eecf76927241f2ebddd456202bdae)
+
+#### [v2.8.2](https://github.com/cookpete/react-player/compare/v2.8.1...v2.8.2)
+
+> 26 January 2021
+
+- fix: ensure lazy typedefs mirror defaults [`#1153`](https://github.com/cookpete/react-player/pull/1153)
+- fix: nullify srcObject instead of calling removeAttribute [`#1145`](https://github.com/cookpete/react-player/pull/1145)
+- updated basic types with fallback [`#1144`](https://github.com/cookpete/react-player/pull/1144)
+- Update wistia url pattern [`#1149`](https://github.com/cookpete/react-player/issues/1149)
+- fix: ensure lazy typedefs mirror defaults (#1153) [`#1146`](https://github.com/cookpete/react-player/issues/1146)
+
+#### [v2.8.1](https://github.com/cookpete/react-player/compare/v2.8.0...v2.8.1)
+
+> 20 January 2021
+
+- fix: remove srcObject attribute if next uri is not a MediaStream [`#1121`](https://github.com/cookpete/react-player/pull/1121)
+- Add onClickPreview [`#1131`](https://github.com/cookpete/react-player/pull/1131)
+- Added types for single players [`#953`](https://github.com/cookpete/react-player/issues/953)
+- yarn upgrade [`0c7dd4a`](https://github.com/cookpete/react-player/commit/0c7dd4a78728f54a53a15b2af1f0087d18ac99e4)
+- Fix clean script [`9a448b1`](https://github.com/cookpete/react-player/commit/9a448b13151575e5ce18da8c57fc134a39f12d7d)
+
+#### [v2.8.0](https://github.com/cookpete/react-player/compare/v2.7.2...v2.8.0)
+
+> 20 January 2021
+
+- added soundcloud playlist preview button for demo page so developers can know it also supports sc playlists [`#1113`](https://github.com/cookpete/react-player/pull/1113)
+- Add missing FLV props to TS defs [`#1122`](https://github.com/cookpete/react-player/pull/1122)
+- FEAT: customize fallback through props for lazy loading [`#1133`](https://github.com/cookpete/react-player/pull/1133)
+- Add onClickPreview [`#1131`](https://github.com/cookpete/react-player/pull/1131)
+- Added types for single players [`#953`](https://github.com/cookpete/react-player/issues/953)
+- Add custom control support to Wistia [`#1125`](https://github.com/cookpete/react-player/issues/1125)
+- Fix facebook muted logic [`#1127`](https://github.com/cookpete/react-player/issues/1127)
+- yarn upgrade [`b21c908`](https://github.com/cookpete/react-player/commit/b21c908d70f06404528e1b74bfdfb155e0e5e617)
+
+#### [v2.7.2](https://github.com/cookpete/react-player/compare/v2.7.1...v2.7.2)
+
+> 16 December 2020
+
+- fix: add playIcon prop to TS declaration [`#1084`](https://github.com/cookpete/react-player/pull/1084)
+
+#### [v2.7.1](https://github.com/cookpete/react-player/compare/v2.7.0...v2.7.1)
+
+> 16 December 2020
+
+- Improve youtube playlist regex [`#1088`](https://github.com/cookpete/react-player/issues/1088)
+
+#### [v2.7.0](https://github.com/cookpete/react-player/compare/v2.6.2...v2.7.0)
+
+> 16 November 2020
+
+- Parse start time from twitch url [`#1046`](https://github.com/cookpete/react-player/pull/1046)
+- Add explicit comment to set muted to true for autoplay [`#1036`](https://github.com/cookpete/react-player/pull/1036)
+- Updates the default version of dash.js, hls.js [`#1056`](https://github.com/cookpete/react-player/pull/1056)
+- Fix canPlayFile to support blob uri, fix #1023 [`#1041`](https://github.com/cookpete/react-player/pull/1041)
+- Update CONTRIBUTING.md [`#1017`](https://github.com/cookpete/react-player/pull/1017)
+- Use hls.js manifest parsed event for onReady [`#1066`](https://github.com/cookpete/react-player/issues/1066)
+- Add config.facebook.attributes [`#1071`](https://github.com/cookpete/react-player/issues/1071)
+- Prevent errors when updating without a player [`#1052`](https://github.com/cookpete/react-player/issues/1052) [`#1074`](https://github.com/cookpete/react-player/issues/1074)
+- Add support for youtube live channel urls [`#1033`](https://github.com/cookpete/react-player/issues/1033)
+- Fix canPlayFile to support blob uri, fix #1023 (#1041) [`#1023`](https://github.com/cookpete/react-player/issues/1023)
+- Add console warning when using youtube embedOptions.events [`#1016`](https://github.com/cookpete/react-player/issues/1016)
+- Add support for fb.watch URLs [`#1061`](https://github.com/cookpete/react-player/issues/1061)
+- Run yarn-audit-fix [`0c1bfd1`](https://github.com/cookpete/react-player/commit/0c1bfd1259a90df68bc9dd5e1f7558404c4a7345)
+- Fix tests [`8e8c107`](https://github.com/cookpete/react-player/commit/8e8c107da5464082ba1bd9383b3711adb317f8b3)
+- Adjust blob util [`f9c5429`](https://github.com/cookpete/react-player/commit/f9c54297344808e9da4291cbe5607344159f5342)
+
+#### [v2.6.2](https://github.com/cookpete/react-player/compare/v2.6.1...v2.6.2)
+
+> 8 September 2020
+
+- Add twitch config interface [`#996`](https://github.com/cookpete/react-player/pull/996)
+- Fix iPad Pro detection [`#1005`](https://github.com/CookPete/react-player/pull/1005) [`#1004`](https://github.com/CookPete/react-player/pull/1004)
+
+#### [v2.6.1](https://github.com/cookpete/react-player/compare/v2.6.0...v2.6.1)
+
+> 21 August 2020
+
+- Fixes youtube player playsinline variable type [`#989`](https://github.com/cookpete/react-player/pull/989)
+- Add descriptive text to Controls section [`#982`](https://github.com/cookpete/react-player/pull/982)
+- added missing type for 'getSecondsLoaded' [`#977`](https://github.com/cookpete/react-player/pull/977)
+- Fix single player import logic [`#993`](https://github.com/CookPete/react-player/issues/993)
+- Remove gitads banner [`cea0c38`](https://github.com/cookpete/react-player/commit/cea0c3813455d686fea41a820e0e2a13b91b13d4)
+- Tweak vimeo controls readme wording [`c05cf93`](https://github.com/cookpete/react-player/commit/c05cf932cbfd431196fed0c6dba9ce5d11c43840)
+- Tweak gitads copy [`e252438`](https://github.com/cookpete/react-player/commit/e252438052e4ef1452a1e73c9b776e5a403fe691)
+
+#### [v2.6.0](https://github.com/cookpete/react-player/compare/v2.5.0...v2.6.0)
+
+> 23 July 2020
+
+- Make force disabling PIP dependent on prop [`#964`](https://github.com/cookpete/react-player/pull/964)
+- vimeo: listen for bufferring events and handle with matching callbacks [`#975`](https://github.com/cookpete/react-player/pull/975)
+- Call onLoaded when file streaming SDKs have loaded [`#976`](https://github.com/CookPete/react-player/issues/976)
+- yarn upgrade [`05ae217`](https://github.com/cookpete/react-player/commit/05ae21741f0963d6cb8be317b67879270de229ba)
+- Add gitads banner to readme [`6840e35`](https://github.com/cookpete/react-player/commit/6840e3567339c2c5833b230919e1c639d0c6629c)
+
+#### [v2.5.0](https://github.com/cookpete/react-player/compare/v2.4.0...v2.5.0)
+
+> 3 July 2020
+
+- Add support for FLV files [`#958`](https://github.com/CookPete/react-player/issues/958)
+- Fix single player imports on IE11 [`#954`](https://github.com/CookPete/react-player/issues/954)
+
+#### [v2.4.0](https://github.com/cookpete/react-player/compare/v2.3.1...v2.4.0)
+
+> 28 June 2020
+
+- Hide wistia controls with controls prop [`#937`](https://github.com/cookpete/react-player/pull/937)
+- Add Cloudflare Stream support to file player [`#944`](https://github.com/CookPete/react-player/pull/944)
+- Fix sample files [`#948`](https://github.com/CookPete/react-player/issues/948)
+
+#### [v2.3.1](https://github.com/cookpete/react-player/compare/v2.3.0...v2.3.1)
+
+> 13 June 2020
+
+- dash deprecated method fix for different versions. [`#933`](https://github.com/cookpete/react-player/pull/933)
+- wistia config types updated [`#931`](https://github.com/cookpete/react-player/pull/931)
+- Tweak .npmignore [`2204c7e`](https://github.com/cookpete/react-player/commit/2204c7ef26345fc140a51d3b0670030cb3972d32)
+
+#### [v2.3.0](https://github.com/cookpete/react-player/compare/v2.2.0...v2.3.0)
+
+> 11 June 2020
+
+- Add Wistia player id to support multiple players [`#905`](https://github.com/cookpete/react-player/pull/905)
+- Copy typings into lazy dir before publish [`#918`](https://github.com/CookPete/react-player/issues/918)
+- Add basic caching of preview thumbnails [`#927`](https://github.com/CookPete/react-player/issues/927)
+- Fix SDK fetching when `exports` exists in global scope [`#921`](https://github.com/CookPete/react-player/issues/921)
+- Bump packages [`b92031a`](https://github.com/cookpete/react-player/commit/b92031aa5bf485396713de1d38c60d08edc80131)
+- Remove bower info from readme [`c66a1c7`](https://github.com/cookpete/react-player/commit/c66a1c753b00aa4c0709dabfa121515dab04359f)
+- Fix wistia tests [`85af252`](https://github.com/cookpete/react-player/commit/85af252a3b6756d839da49413b85fbcc324b0b43)
+
+#### [v2.2.0](https://github.com/cookpete/react-player/compare/v2.1.1...v2.2.0)
+
+> 7 June 2020
+
+- Move lazy loading players to react-player/lazy [`#912`](https://github.com/CookPete/react-player/issues/912) [`#907`](https://github.com/CookPete/react-player/issues/907) [`#865`](https://github.com/CookPete/react-player/issues/865) [`#910`](https://github.com/CookPete/react-player/issues/910) [`#902`](https://github.com/CookPete/react-player/issues/902)
+- Support array of youtube urls [`#906`](https://github.com/CookPete/react-player/issues/906)
+- The return of single player imports [`45635ef`](https://github.com/cookpete/react-player/commit/45635ef2d31c12c84f6d008e6420a9224fc5a0e3)
+- Move canPlay logic into patterns.js [`45369bb`](https://github.com/cookpete/react-player/commit/45369bb21e54a51fd0fafc32dcd357726ae27af8)
+- Add preview chunk name [`17b28ca`](https://github.com/cookpete/react-player/commit/17b28caa35fc361d18f7e3041c3be8eeaddbdfff)
+
+#### [v2.1.1](https://github.com/cookpete/react-player/compare/v2.1.0...v2.1.1)
+
+> 31 May 2020
+
+- Correct typings for onReady [`#884`](https://github.com/CookPete/react-player/issues/884)
+- Add webpackChunkName to dynamic imports [`#899`](https://github.com/CookPete/react-player/issues/899)
+- Add patreon info to readme [`c4c597f`](https://github.com/cookpete/react-player/commit/c4c597f8e4c16ca3de2314fe9de45e363e3fd71b)
+
+#### [v2.1.0](https://github.com/cookpete/react-player/compare/v2.0.1...v2.1.0)
+
+> 23 May 2020
+
+- Match YouTube User Uploads [`#877`](https://github.com/cookpete/react-player/pull/877)
+- Destroy previous vidyard player before creating new one [`#894`](https://github.com/cookpete/react-player/pull/894)
+- Improve light mode a11y [`#878`](https://github.com/CookPete/react-player/issues/878)
+- Prevent Soundcloud onPause right before onEnded [`#879`](https://github.com/CookPete/react-player/issues/879)
+- Prevent unwanted Vidyard autoplay [`#887`](https://github.com/CookPete/react-player/issues/887)
+- Add onUnstarted youtube config option [`#888`](https://github.com/CookPete/react-player/issues/888)
+- Reset hls and dash before loading new url [`#892`](https://github.com/CookPete/react-player/issues/892) [`#874`](https://github.com/CookPete/react-player/pull/874)
+- Support youtube-nocookie.com [`#896`](https://github.com/CookPete/react-player/issues/896) [`#272`](https://github.com/CookPete/react-player/issues/272) [`#557`](https://github.com/CookPete/react-player/pull/557)
+- Fix youtube fragment looping [`#897`](https://github.com/CookPete/react-player/issues/897)
+- Prevent dynamic import transforms to fix lazy loading [`#886`](https://github.com/CookPete/react-player/issues/886)
+- Fix youtube example playlist [`fcf4657`](https://github.com/cookpete/react-player/commit/fcf4657a5b767fa11f573d1f671350d65df3399a)
+
+#### [v2.0.1](https://github.com/cookpete/react-player/compare/v2.0.0...v2.0.1)
+
+> 28 April 2020
+
+- Adds the missing default data for the selected player [`#864`](https://github.com/cookpete/react-player/pull/864)
+- Only try and disablePIP on unmount if player is ready [`#849`](https://github.com/CookPete/react-player/issues/849)
+- Prevent Suspense being rendering during SSR [`#738`](https://github.com/CookPete/react-player/issues/738) [`#865`](https://github.com/CookPete/react-player/issues/865)
+- Match twitch channel pattern case-insensitive [`#860`](https://github.com/CookPete/react-player/issues/860)
+- Rename refs to references [`#868`](https://github.com/CookPete/react-player/pull/868) [`#866`](https://github.com/CookPete/react-player/pull/866) [`#867`](https://github.com/CookPete/react-player/issues/867) [`#861`](https://github.com/CookPete/react-player/issues/861)
+- Use file player for soundcloud hosted audio files [`#811`](https://github.com/CookPete/react-player/issues/811)
+
+### [v2.0.0](https://github.com/cookpete/react-player/compare/v1.15.3...v2.0.0)
+
+> 25 April 2020
+
+- **Breaking change:** Use lazy players [`1752b8d`](https://github.com/cookpete/react-player/commit/1752b8dc5b034910530325c1a3068c044c196f84)
+- **Breaking change:** Remove preload support [`1baa227`](https://github.com/cookpete/react-player/commit/1baa227843e4424998ef22735e8b969cfa817b5e)
+- **Breaking change:** Remove legacy config props [`9339efa`](https://github.com/cookpete/react-player/commit/9339efa3c23434189763af4a4e6c052eda74a467)
+
+#### [v1.15.3](https://github.com/cookpete/react-player/compare/v1.15.2...v1.15.3)
+
+> 25 March 2020
+
+- fix for soundcloud direct file link [`#803`](https://github.com/cookpete/react-player/pull/803)
+- Update documented default hls.js version to 0.13.1 [`#806`](https://github.com/cookpete/react-player/pull/806)
+- Fix hls sdk url [`#826`](https://github.com/CookPete/react-player/pull/826)
+- Use proxy methods in wistia player [`#805`](https://github.com/CookPete/react-player/issues/805)
+- Move hls destroy from stop to unmount [`#817`](https://github.com/CookPete/react-player/issues/817)
+- Update vimeo readme links [`#819`](https://github.com/CookPete/react-player/issues/819)
+- Bump packages [`013c9a8`](https://github.com/cookpete/react-player/commit/013c9a884dbe507ee381d593f5337142377a7e59)
+- Remove dist test page [`763bb15`](https://github.com/cookpete/react-player/commit/763bb15935a11331cec4b794f7ecab7629836c52)
+- Add FUNDING.yml [`e708e8e`](https://github.com/cookpete/react-player/commit/e708e8e8b233e25497f4a7ba6f8e2218d854ec01)
+
+#### [v1.15.2](https://github.com/cookpete/react-player/compare/v1.15.1...v1.15.2)
+
+> 2 February 2020
+
+- Move @ava/babel to devDependencies [`#794`](https://github.com/cookpete/react-player/pull/794)
+- Update yarn.lock [`da79e77`](https://github.com/cookpete/react-player/commit/da79e7740b9167ce66d0e3feb04ab6777df2fc2f)
+- Update facebook regex to match story URLs [`94172f2`](https://github.com/cookpete/react-player/commit/94172f2ca63116cf57026dc24034040397bea600)
+
+#### [v1.15.1](https://github.com/cookpete/react-player/compare/v1.15.0...v1.15.1)
+
+> 2 February 2020
+
+- Update facebook regex [`#793`](https://github.com/CookPete/react-player/issues/793)
+
+#### [v1.15.0](https://github.com/cookpete/react-player/compare/v1.14.2...v1.15.0)
+
+> 31 January 2020
+
+- Bump handlebars from 4.2.0 to 4.5.3 [`#771`](https://github.com/cookpete/react-player/pull/771)
+- Add showPreview() method to ReactPlayer typings [`#785`](https://github.com/cookpete/react-player/pull/785)
+- Add playerId override to facebook and twitch players [`#788`](https://github.com/CookPete/react-player/issues/788)
+- Relax facebook regex [`#778`](https://github.com/CookPete/react-player/issues/778)
+- Update hls.js CDN and version [`#758`](https://github.com/CookPete/react-player/pull/758) [`#768`](https://github.com/CookPete/react-player/issues/768) [`#779`](https://github.com/CookPete/react-player/issues/779)
+- Bump packages [`8c037ab`](https://github.com/cookpete/react-player/commit/8c037abaf4abecd1ca0793d62b6dafc9c257f57d)
+- Bump packages [`9c59c13`](https://github.com/cookpete/react-player/commit/9c59c133a0b05a6f6e75b8bb3cae4498495ab0da)
+- Migrate to terser-webpack-plugin [`83fd60d`](https://github.com/cookpete/react-player/commit/83fd60dba110a7f14f1b7003f194d67f16fba7c5)
+
+#### [v1.14.2](https://github.com/cookpete/react-player/compare/v1.14.1...v1.14.2)
+
+> 20 November 2019
+
+- Support to set custom facebook version [`#745`](https://github.com/cookpete/react-player/pull/745)
+
+#### [v1.14.1](https://github.com/cookpete/react-player/compare/v1.14.0...v1.14.1)
+
+> 11 November 2019
+
+- Ignore React nodes in isEqual [`#740`](https://github.com/CookPete/react-player/issues/740)
+
+#### [v1.14.0](https://github.com/cookpete/react-player/compare/v1.13.0...v1.14.0)
+
+> 6 November 2019
+
+- fixes #733 [`#736`](https://github.com/cookpete/react-player/pull/736)
+- Add PIP support for Safari [`#716`](https://github.com/cookpete/react-player/pull/716)
+- Properly delete SDK requests [`#718`](https://github.com/cookpete/react-player/pull/718)
+- Pass dash.js errors through to onError callback [`#732`](https://github.com/CookPete/react-player/issues/732)
+- Use https SDK urls by default [`#728`](https://github.com/CookPete/react-player/issues/728)
+- Add playIcon prop [`#730`](https://github.com/CookPete/react-player/issues/730)
+- fixes #733 (#736) [`#733`](https://github.com/cookpete/react-player/issues/733)
+- Tweak Twitch controls bug comment [`987a18b`](https://github.com/cookpete/react-player/commit/987a18b7ad18dc522ad39ae940c745ea8b756cbc)
+
+#### [v1.13.0](https://github.com/cookpete/react-player/compare/v1.12.0...v1.13.0)
+
+> 19 September 2019
+
+- Delete SDK requests array after loading error [`#711`](https://github.com/cookpete/react-player/pull/711)
+- Add typedef support for MediaStream url source [`#674`](https://github.com/cookpete/react-player/pull/674)
+- Add readme note about SDK overrides [`#605`](https://github.com/CookPete/react-player/issues/605)
+- Use proxy methods for FilePlayer listeners [`#616`](https://github.com/CookPete/react-player/issues/616)
+- Add pip support info to readme [`#694`](https://github.com/CookPete/react-player/issues/694)
+- Add controls support to Twitch and Vimeo [`#687`](https://github.com/CookPete/react-player/pull/687)
+- Remove default black backgrounds [`#673`](https://github.com/CookPete/react-player/pull/673)
+- Fix demo file paths [`#697`](https://github.com/CookPete/react-player/issues/697)
+- Bump packages [`4c4e0b5`](https://github.com/cookpete/react-player/commit/4c4e0b5fb3321d1454017426d8adf2bb37ce1ac8)
+- Bump packages [`9d39d92`](https://github.com/cookpete/react-player/commit/9d39d92b9883f6b27e268889e4d2f087dd47f225)
+
+#### [v1.12.0](https://github.com/cookpete/react-player/compare/v1.11.2...v1.12.0)
+
+> 18 August 2019
+
+- Migrate to componentDidUpdate [`#651`](https://github.com/CookPete/react-player/issues/651) [`#696`](https://github.com/CookPete/react-player/issues/696) [`#692`](https://github.com/CookPete/react-player/pull/692) [`#693`](https://github.com/CookPete/react-player/pull/693)
+- Overhaul development config [`#695`](https://github.com/CookPete/react-player/issues/695)
+- Lint fixes [`ae0f230`](https://github.com/cookpete/react-player/commit/ae0f230dbe36cb95c3fe39e22687d69599185ad5)
+- Do not always call setPlaybackRate on play [`2b59631`](https://github.com/cookpete/react-player/commit/2b59631fedc9acbb9ce685d28b04a8125b60071a)
+- Remove old testing config from travis [`f91c737`](https://github.com/cookpete/react-player/commit/f91c7371b09013148409ada569280865bf9d3cc4)
+
+#### [v1.11.2](https://github.com/cookpete/react-player/compare/v1.11.1...v1.11.2)
+
+> 10 August 2019
+
+- Fix preload display logic [`#675`](https://github.com/CookPete/react-player/issues/675)
+- Add showPreview instance method [`#679`](https://github.com/CookPete/react-player/issues/679)
+- Hide preview thumbnail when light changes to false [`#680`](https://github.com/CookPete/react-player/issues/680)
+- Add playbackRate support to Vimeo [`#681`](https://github.com/CookPete/react-player/issues/681)
+- Fix Vimeo fast switch bug [`#683`](https://github.com/CookPete/react-player/issues/683)
+
+#### [v1.11.1](https://github.com/cookpete/react-player/compare/v1.11.0...v1.11.1)
+
+> 13 June 2019
+
+- Do not use vimeo API to play vimeo hosted video files. [`#597`](https://github.com/cookpete/react-player/pull/597)
+- Catches error on Vimeo play() [`#645`](https://github.com/cookpete/react-player/pull/645)
+- Update Meteor section in readme [`#647`](https://github.com/cookpete/react-player/pull/647)
+- [d.ts] Fix typing of arguments of onError handler [`#655`](https://github.com/cookpete/react-player/pull/655)
+- Fix twitch permanent loading state when stream is offline [`#657`](https://github.com/cookpete/react-player/pull/657)
+- Fix an issue with setting state in the Preview component after being unmounted. [`#658`](https://github.com/cookpete/react-player/pull/658)
+- Prevent double inline styles being applied [`#609`](https://github.com/CookPete/react-player/issues/609)
+- Fix onProgress for infinite duration streams [`#503`](https://github.com/CookPete/react-player/issues/503)
+- Fix light mode poster not updating [`#646`](https://github.com/CookPete/react-player/issues/646)
+- Fix youtube looping [`#530`](https://github.com/CookPete/react-player/issues/530) [`#639`](https://github.com/CookPete/react-player/issues/639) [`#662`](https://github.com/CookPete/react-player/pull/662)
+- Fix multiple onError params not being passed through [`#627`](https://github.com/CookPete/react-player/issues/627)
+
+#### [v1.11.0](https://github.com/cookpete/react-player/compare/v1.10.0...v1.11.0)
+
+> 10 April 2019
+
+- Soundcloud - fix autoplay delegation [`#614`](https://github.com/cookpete/react-player/pull/614)
+- Implemented onBufferEnd cb prop for FilePlayer, YouTube and Facebook [`#615`](https://github.com/cookpete/react-player/pull/615)
+- Add on error callback to wistia player [`#617`](https://github.com/cookpete/react-player/pull/617)
+- align typings for seekTo method with code [`#619`](https://github.com/cookpete/react-player/pull/619)
+- Really really small typo in README.md [`#606`](https://github.com/cookpete/react-player/pull/606)
+- Add issue template [`ba6c274`](https://github.com/cookpete/react-player/commit/ba6c2747f18c5d005866b88bca58a9f2342611a1)
+
+#### [v1.10.0](https://github.com/cookpete/react-player/compare/v1.9.3...v1.10.0)
+
+> 24 March 2019
+
+- Add playsinline support to vimeo [`#574`](https://github.com/CookPete/react-player/issues/574)
+- Use normal wrapper for light mode [`#584`](https://github.com/CookPete/react-player/issues/584)
+- Pass controls prop through to preload players [`#587`](https://github.com/CookPete/react-player/issues/587)
+- Add Soundcloud preload to props files [`#588`](https://github.com/CookPete/react-player/issues/588)
+- Add type parameter to seekTo method [`#591`](https://github.com/CookPete/react-player/issues/591)
+- Set isLoading to false after error [`#595`](https://github.com/CookPete/react-player/issues/595)
+- Unbind wistia player events correctly [`#594`](https://github.com/CookPete/react-player/issues/594)
+
+#### [v1.9.3](https://github.com/cookpete/react-player/compare/v1.9.2...v1.9.3)
+
+> 27 January 2019
+
+- Bump auto-changelog [`3486039`](https://github.com/cookpete/react-player/commit/3486039e99a7fb784df54830ffa136408477d55b)
+
+#### [v1.9.2](https://github.com/cookpete/react-player/compare/v1.9.1...v1.9.2)
+
+> 27 January 2019
+
+- Support player setLoop methods [`#560`](https://github.com/CookPete/react-player/issues/560)
+- Upgrade screenfull [`#560`](https://github.com/CookPete/react-player/issues/560)
+
+#### [v1.9.1](https://github.com/cookpete/react-player/compare/v1.9.0...v1.9.1)
+
+> 25 January 2019
+
+- Use https for noembed fetching [`#558`](https://github.com/CookPete/react-player/issues/558) [`#448`](https://github.com/CookPete/react-player/issues/448)
+- Add controls toggle and light mode to demo app [`0ba5b71`](https://github.com/cookpete/react-player/commit/0ba5b719d561021b6918e5bbd981278710e4ddec)
+- Show preview when switching from non-light to light [`4a39dc4`](https://github.com/cookpete/react-player/commit/4a39dc4c52092f65b374651f54e02b8aca6eff76)
+
+#### [v1.9.0](https://github.com/cookpete/react-player/compare/v1.8.0...v1.9.0)
+
+> 24 January 2019
+
+- Allows wrapper proptype to be a ForwardRef component [`#556`](https://github.com/cookpete/react-player/pull/556)
+- playsinline for Android wechat [`#544`](https://github.com/cookpete/react-player/pull/544)
+- Fix broken URL for standalone script [`#546`](https://github.com/cookpete/react-player/pull/546)
+- Accept youtube.com/playlist?list= URLs [`#541`](https://github.com/cookpete/react-player/pull/541)
+- Add youtube embedOptions config option [`#557`](https://github.com/CookPete/react-player/pull/557) [`#272`](https://github.com/CookPete/react-player/issues/272)
+- Bump deepmerge [`7722679`](https://github.com/cookpete/react-player/commit/77226796f9542a59bde28be6bfbd74f24f994d16)
+- Youtube playlist fixes [`04bf181`](https://github.com/cookpete/react-player/commit/04bf181a3d27856a86ef81b8c141b7bf68947198)
+
+#### [v1.8.0](https://github.com/cookpete/react-player/compare/v1.7.1...v1.8.0)
+
+> 19 December 2018
+
+- Add light prop [`#448`](https://github.com/CookPete/react-player/issues/448)
+
+#### [v1.7.1](https://github.com/cookpete/react-player/compare/v1.7.0...v1.7.1)
+
+> 5 December 2018
+
+- Parse youtube playlist from URL list param [`#318`](https://github.com/CookPete/react-player/issues/318)
+- Loop youtube playlists correctly [`#530`](https://github.com/CookPete/react-player/issues/530)
+- Fix dist build [`29fb971`](https://github.com/cookpete/react-player/commit/29fb971efae61ae90b66fca07f2bc36c55b7cc21)
+- Update npmignore [`32e8286`](https://github.com/cookpete/react-player/commit/32e8286e81a03879e13dd0e0b3647ffd2bfd2248)
+
+#### [v1.7.0](https://github.com/cookpete/react-player/compare/v1.6.6...v1.7.0)
+
+> 17 November 2018
+
+- Support Chrome Picture In Picture (PIP) mode [`#504`](https://github.com/cookpete/react-player/pull/504)
+- Typings - label in TrackProps [`#489`](https://github.com/cookpete/react-player/pull/489)
+- fix: fix onProgress callback not firing during iOS live streams [`#497`](https://github.com/cookpete/react-player/pull/497)
+- Update vimeo preload URL [`#509`](https://github.com/cookpete/react-player/pull/509)
+- add absent methods signature [`#507`](https://github.com/cookpete/react-player/pull/507)
+- Add hlsVersion and dashVersion file config [`#513`](https://github.com/CookPete/react-player/pull/513)
+- Export single player exports to main file [`#421`](https://github.com/CookPete/react-player/issues/421)
+- Refresh vimeo duration on play [`#514`](https://github.com/CookPete/react-player/issues/514)
+- Use PLAYING event instead of PLAY for Twitch player [`#498`](https://github.com/CookPete/react-player/issues/498)
+- Do not call onEnded when looping [`#496`](https://github.com/CookPete/react-player/issues/496)
+- Prevent singlePlayer from returning null when forcing via config [`#500`](https://github.com/CookPete/react-player/issues/500)
+
+#### [v1.6.6](https://github.com/cookpete/react-player/compare/v1.6.5...v1.6.6)
+
+> 20 September 2018
+
+- Add coverage to npmignore [`580e21c`](https://github.com/cookpete/react-player/commit/580e21c60842492b325d039fa0361fd547cb79ed)
+
+#### [v1.6.5](https://github.com/cookpete/react-player/compare/v1.6.4...v1.6.5)
+
+> 20 September 2018
+
+- Fix: signal multiple sources change to the browser [`#482`](https://github.com/cookpete/react-player/pull/482)
+- Check null before accessing FilePlayer properties [`#465`](https://github.com/cookpete/react-player/pull/465)
+- Adds hlsOptions to FileConfig def [`#483`](https://github.com/cookpete/react-player/pull/483)
+- Updated hls.js documentation link in README.md [`#440`](https://github.com/cookpete/react-player/pull/440)
+- Prevent YouTube from playing after seekTo when paused [`#437`](https://github.com/CookPete/react-player/issues/437)
+- Fix facebook iframe visibility bug [`#455`](https://github.com/CookPete/react-player/issues/455)
+- Update dailymotion regex [`#438`](https://github.com/CookPete/react-player/issues/438)
+- Fix issues with non-embeddable Facebook videos [`48401ab`](https://github.com/cookpete/react-player/commit/48401abdfc3f08675fddd8a130588cc53faf2e5b)
+- Enable partial line coverage with codecov [`488f82d`](https://github.com/cookpete/react-player/commit/488f82da421ac9a27c2e52137767d19cc7f47a3e)
+- Run tests before versioning [`4055469`](https://github.com/cookpete/react-player/commit/405546969a3fc6f26ee72b2b47a752c284b2835d)
+
+#### [v1.6.4](https://github.com/cookpete/react-player/compare/v1.6.3...v1.6.4)
+
+> 7 June 2018
+
+- YouTube videos not forwarding `end` param [`#420`](https://github.com/cookpete/react-player/pull/420)
+
+#### [v1.6.3](https://github.com/cookpete/react-player/compare/v1.6.2...v1.6.3)
+
+> 6 June 2018
+
+- Set FilePlayer autoPlay correctly [`#405`](https://github.com/CookPete/react-player/issues/405)
+- Tidy up start and end timestamp logic [`#412`](https://github.com/CookPete/react-player/issues/412)
+- Improve MediaStream guards [`#415`](https://github.com/CookPete/react-player/issues/415)
+- Overhaul tests [`4bd78e0`](https://github.com/cookpete/react-player/commit/4bd78e0acbd4dd3399582564d0a0686b616361b0)
+- Remove requirement for window global [`9618272`](https://github.com/cookpete/react-player/commit/9618272e6e4b518e493d3130b96dd2ebeb97b506)
+- Player component tweaks [`1ac1480`](https://github.com/cookpete/react-player/commit/1ac148019e67ed75f31885a201755ec065c2f581)
+
+#### [v1.6.2](https://github.com/cookpete/react-player/compare/v1.6.1...v1.6.2)
+
+> 27 May 2018
+
+- Pass instance through to onReady callback [`#407`](https://github.com/CookPete/react-player/issues/407)
+- Mute preload players [`16f5fcb`](https://github.com/cookpete/react-player/commit/16f5fcb6bfdda69702d0741c7587218cf7f62d6f)
+
+#### [v1.6.1](https://github.com/cookpete/react-player/compare/v1.6.0...v1.6.1)
+
+> 20 May 2018
+
+- Bump HLS.js [`#403`](https://github.com/cookpete/react-player/pull/403)
+
+#### [v1.6.0](https://github.com/cookpete/react-player/compare/v1.5.1...v1.6.0)
+
+> 17 May 2018
+
+- Add support for MediaStream objects [`#398`](https://github.com/CookPete/react-player/issues/398)
+- Prevent errors when switching URLs whilst loading [`#377`](https://github.com/CookPete/react-player/issues/377)
+- Prevent loading SDKs multiple times [`#391`](https://github.com/CookPete/react-player/issues/391)
+
+#### [v1.5.1](https://github.com/cookpete/react-player/compare/v1.5.0...v1.5.1)
+
+> 15 May 2018
+
+- Add proper mute support to fix autoplay [`#395`](https://github.com/CookPete/react-player/issues/395) [`#389`](https://github.com/CookPete/react-player/issues/389)
+- Mute player for tests [`58c6a58`](https://github.com/cookpete/react-player/commit/58c6a58d45cfb09517e1023495036dcf66bf3f5f)
+- Fix vimeo config options property [`a645eee`](https://github.com/cookpete/react-player/commit/a645eeead7793bd57ff64dbe3bec0c2077cb8a25)
+- Skip soundcloud tests [`3958f8d`](https://github.com/cookpete/react-player/commit/3958f8dea68aba7d641b5292f7aacf001d18123f)
+
+#### [v1.5.0](https://github.com/cookpete/react-player/compare/v1.4.0...v1.5.0)
+
+> 23 April 2018
+
+- Fix FilePlayer getSecondsLoaded [`#380`](https://github.com/cookpete/react-player/pull/380)
+- Add support for dropbox files [`#379`](https://github.com/CookPete/react-player/issues/379)
+- Tidy up getSecondsLoaded [`93351f9`](https://github.com/cookpete/react-player/commit/93351f92b7841cd6f99cf805bf3922d46fdec2cc)
+- Update readme [`de639e4`](https://github.com/cookpete/react-player/commit/de639e41915ecc315f5a84a535d936c455d653e2)
+
+#### [v1.4.0](https://github.com/cookpete/react-player/compare/v1.3.2...v1.4.0)
+
+> 11 April 2018
+
+- Add support for custom players [`#364`](https://github.com/cookpete/react-player/pull/364)
+- Add instance methods to single player imports [`#376`](https://github.com/CookPete/react-player/issues/376)
+- Fix tests [`597bf33`](https://github.com/cookpete/react-player/commit/597bf332b839c89b91aae4934b0e324bd43d635f)
+
+#### [v1.3.2](https://github.com/cookpete/react-player/compare/v1.3.1...v1.3.2)
+
+> 5 April 2018
+
+- Render video element when poster is set [`#369`](https://github.com/CookPete/react-player/issues/369)
+- Add https to Twitch SDK URL [`#367`](https://github.com/CookPete/react-player/issues/367)
+- Add forceVideo option for FilePlayer [`a743396`](https://github.com/cookpete/react-player/commit/a74339606a6c7c773ea11d1eee1f43dde859a53b)
+- Remove migration note [`308bca9`](https://github.com/cookpete/react-player/commit/308bca9af64f04382a1f3d141942860c85372fc2)
+
+#### [v1.3.1](https://github.com/cookpete/react-player/compare/v1.3.0...v1.3.1)
+
+> 22 March 2018
+
+- Fix file player load sequence on iOS [`#340`](https://github.com/CookPete/react-player/issues/340)
+- Do not use Vimeo player for vimeo.com file paths [`#358`](https://github.com/CookPete/react-player/issues/358)
+
+#### [v1.3.0](https://github.com/cookpete/react-player/compare/v1.2.1...v1.3.0)
+
> 15 March 2018
-- Include Mixcloud in README [`#342`](https://github.com/CookPete/react-player/pull/342)
+
+- Include Mixcloud in README [`#342`](https://github.com/cookpete/react-player/pull/342)
- Add support for twitch player options [`#343`](https://github.com/CookPete/react-player/issues/343)
- Add single player wrapper div [`#346`](https://github.com/CookPete/react-player/issues/346)
- Loosen up the vimeo URL pattern [`#349`](https://github.com/CookPete/react-player/issues/349) [`#348`](https://github.com/CookPete/react-player/pull/348)
- Pass through HLS errors to onError [`#354`](https://github.com/CookPete/react-player/issues/354) [`#355`](https://github.com/CookPete/react-player/pull/355)
- Set volume to null by default [`#357`](https://github.com/CookPete/react-player/issues/357)
-- Escape dots in URL patterns [`129a179`](https://github.com/CookPete/react-player/commit/129a179ba64e67554f79af44855450c203cab948)
-- Tweak tests [`3b92c4a`](https://github.com/CookPete/react-player/commit/3b92c4af5a5d551f2598174d1da9377476c4ed87)
-- Unmute facebook player when ready [`a672ee1`](https://github.com/CookPete/react-player/commit/a672ee1d4e1ea0e5a5b473bf76bc644caf5606d6)
+- Escape dots in URL patterns [`129a179`](https://github.com/cookpete/react-player/commit/129a179ba64e67554f79af44855450c203cab948)
+- Tweak tests [`3b92c4a`](https://github.com/cookpete/react-player/commit/3b92c4af5a5d551f2598174d1da9377476c4ed87)
+- Unmute facebook player when ready [`a672ee1`](https://github.com/cookpete/react-player/commit/a672ee1d4e1ea0e5a5b473bf76bc644caf5606d6)
+
+#### [v1.2.1](https://github.com/cookpete/react-player/compare/v1.2.0...v1.2.1)
-#### [v1.2.1](https://github.com/CookPete/react-player/compare/v1.2.0...v1.2.1)
> 26 February 2018
+
- Add progressInterval logic back in to onProgress [`#339`](https://github.com/CookPete/react-player/issues/339)
-- Skip mixcloud tests [`34b51a4`](https://github.com/CookPete/react-player/commit/34b51a4dad80cf2f0dc5cbef82cc5fe041397f7c)
+- Skip mixcloud tests [`34b51a4`](https://github.com/cookpete/react-player/commit/34b51a4dad80cf2f0dc5cbef82cc5fe041397f7c)
+
+#### [v1.2.0](https://github.com/cookpete/react-player/compare/v1.1.3...v1.2.0)
-#### [v1.2.0](https://github.com/CookPete/react-player/compare/v1.1.3...v1.2.0)
> 23 February 2018
-- Fixes the onPause event propogation [`#336`](https://github.com/CookPete/react-player/pull/336)
-- Support custom wrappers [`#334`](https://github.com/CookPete/react-player/pull/334)
+
+- Fixes the onPause event propogation [`#336`](https://github.com/cookpete/react-player/pull/336)
+- Support custom wrappers [`#334`](https://github.com/cookpete/react-player/pull/334)
- Add Mixcloud player [`#335`](https://github.com/CookPete/react-player/issues/335)
- Add support for importing single players [`#311`](https://github.com/CookPete/react-player/issues/311)
-- Move onProgress logic into Player component [`42a030e`](https://github.com/CookPete/react-player/commit/42a030e6cfa721eb15c6af2b27c828160ebcae25)
+- Move onProgress logic into Player component [`42a030e`](https://github.com/cookpete/react-player/commit/42a030e6cfa721eb15c6af2b27c828160ebcae25)
+
+#### [v1.1.3](https://github.com/cookpete/react-player/compare/v1.1.2...v1.1.3)
-#### [v1.1.3](https://github.com/CookPete/react-player/compare/v1.1.2...v1.1.3)
> 21 February 2018
-- Match YouTube URL with extra parameters [`#332`](https://github.com/CookPete/react-player/pull/332)
+
+- Match YouTube URL with extra parameters [`#332`](https://github.com/cookpete/react-player/pull/332)
- Update mp3 example [`#330`](https://github.com/CookPete/react-player/issues/330)
- Update stored config when props change [`#329`](https://github.com/CookPete/react-player/issues/329)
- Pass through all source props when using array of objects [`#333`](https://github.com/CookPete/react-player/issues/333)
-- Skip wistia tests [`6e536d1`](https://github.com/CookPete/react-player/commit/6e536d11d339f4eb4e62cc6fc448c0597bc276b7)
-- Fix soundcloud canPlay test [`1f158d1`](https://github.com/CookPete/react-player/commit/1f158d1b8bb353553ea5680ed9041db26055da53)
+- Skip wistia tests [`6e536d1`](https://github.com/cookpete/react-player/commit/6e536d11d339f4eb4e62cc6fc448c0597bc276b7)
+- Fix soundcloud canPlay test [`1f158d1`](https://github.com/cookpete/react-player/commit/1f158d1b8bb353553ea5680ed9041db26055da53)
+
+#### [v1.1.2](https://github.com/cookpete/react-player/compare/v1.1.1...v1.1.2)
-#### [v1.1.2](https://github.com/CookPete/react-player/compare/v1.1.1...v1.1.2)
> 8 February 2018
+
- Add config.file.hlsOptions [`#325`](https://github.com/CookPete/react-player/issues/325) [`#319`](https://github.com/CookPete/react-player/issues/319)
- Send any soundcloud URL to the widget [`#322`](https://github.com/CookPete/react-player/issues/322) [`#324`](https://github.com/CookPete/react-player/pull/324)
- Change progressFrequency to progressInterval [`#317`](https://github.com/CookPete/react-player/issues/317)
- Guard against navigator not being available [`#315`](https://github.com/CookPete/react-player/issues/315)
-- Update hls, dash and streamable SDKs [`22dd274`](https://github.com/CookPete/react-player/commit/22dd274d20a15e664ac20f448289e529684e9444)
+- Update hls, dash and streamable SDKs [`22dd274`](https://github.com/cookpete/react-player/commit/22dd274d20a15e664ac20f448289e529684e9444)
+
+#### [v1.1.1](https://github.com/cookpete/react-player/compare/v1.1.0...v1.1.1)
-#### [v1.1.1](https://github.com/CookPete/react-player/compare/v1.1.0...v1.1.1)
> 18 January 2018
-- Skip unreliable tests [`81c8a0b`](https://github.com/CookPete/react-player/commit/81c8a0bf389634604e245fe4211b07f44bbcfd9d)
-- Update readme [`cf8a93f`](https://github.com/CookPete/react-player/commit/cf8a93fd39534cc2a72182675e3274a1cdad9ffb)
-#### [v1.1.0](https://github.com/CookPete/react-player/compare/v1.0.0...v1.1.0)
+- Skip unreliable tests [`81c8a0b`](https://github.com/cookpete/react-player/commit/81c8a0bf389634604e245fe4211b07f44bbcfd9d)
+- Update readme [`cf8a93f`](https://github.com/cookpete/react-player/commit/cf8a93fd39534cc2a72182675e3274a1cdad9ffb)
+
+#### [v1.1.0](https://github.com/cookpete/react-player/compare/v1.0.0...v1.1.0)
+
> 18 January 2018
-- Tidy up readme [`5befbfa`](https://github.com/CookPete/react-player/commit/5befbfab44313a48d7770cf00f3cda200ebc3bbb)
-- Add standalone player [`4ffd201`](https://github.com/CookPete/react-player/commit/4ffd20112f18c2c7b3c25e39c283f8cfe9be88fc)
-- Use px values for default width and height [`b430ad6`](https://github.com/CookPete/react-player/commit/b430ad63c2f42a22322aefa7784e120120543236)
-#### [v1.0.0](https://github.com/CookPete/react-player/compare/v1.0.0-beta.7...v1.0.0)
+- Tidy up readme [`5befbfa`](https://github.com/cookpete/react-player/commit/5befbfab44313a48d7770cf00f3cda200ebc3bbb)
+- Add standalone player [`4ffd201`](https://github.com/cookpete/react-player/commit/4ffd20112f18c2c7b3c25e39c283f8cfe9be88fc)
+- Update description and keywords [`0194b43`](https://github.com/cookpete/react-player/commit/0194b43758fccbbda755d13d9eb0d2a4a80aba77)
+
+### [v1.0.0](https://github.com/cookpete/react-player/compare/v1.0.0-beta.7...v1.0.0)
+
> 17 January 2018
-- Do not load hls.js on iOS [`#293`](https://github.com/CookPete/react-player/pull/293)
+
+- Do not load hls.js on iOS [`#293`](https://github.com/cookpete/react-player/pull/293)
- Better prop comparison for shouldComponentUpdate [`#302`](https://github.com/CookPete/react-player/issues/302)
- Less aggressive URL matching [`#297`](https://github.com/CookPete/react-player/issues/297)
- Remove vidme player [`#294`](https://github.com/CookPete/react-player/issues/294)
-- Skip DailyMotion volume tests [`324e9c5`](https://github.com/CookPete/react-player/commit/324e9c5fb90844f56429735c5c31a046b41260e8)
-- Update readme [`62e6049`](https://github.com/CookPete/react-player/commit/62e604944ce8e79b83098b0e3aea202c0f7191cf)
-- Skip volume change tests [`d90d5da`](https://github.com/CookPete/react-player/commit/d90d5da72ef59f5161a87a324ec934e2512d6047)
+- Bump packages [`7050614`](https://github.com/cookpete/react-player/commit/7050614360bbdfb7f68c3e6c2b6fd5057c23015c)
+- Bump packages [`c309053`](https://github.com/cookpete/react-player/commit/c30905356e59a3a71a8821df827cee72e3c5ec3f)
+- Use postcss-loader in favour of sass-loader [`d691af4`](https://github.com/cookpete/react-player/commit/d691af41555871e0163fbc1a70702f784087a645)
+
+#### [v1.0.0-beta.7](https://github.com/cookpete/react-player/compare/v1.0.0-beta.6...v1.0.0-beta.7)
-#### [v1.0.0-beta.7](https://github.com/CookPete/react-player/compare/v1.0.0-beta.6...v1.0.0-beta.7)
> 14 December 2017
-- Refactor player tests [`e2b6de6`](https://github.com/CookPete/react-player/commit/e2b6de61dad6802e59b438df5e0f19537857066b)
-- Bump auto-changelog [`30227b8`](https://github.com/CookPete/react-player/commit/30227b837b3d6f294b51afa42916d8f3d9622ee6)
-- Use latest node in travis [`5b1eb1b`](https://github.com/CookPete/react-player/commit/5b1eb1be4359eb125d2a577c695ace0258f04ecf)
-#### [v1.0.0-beta.6](https://github.com/CookPete/react-player/compare/v1.0.0-beta.5...v1.0.0-beta.6)
+- Refactor player tests [`e2b6de6`](https://github.com/cookpete/react-player/commit/e2b6de61dad6802e59b438df5e0f19537857066b)
+- Add more tests [`d8b79db`](https://github.com/cookpete/react-player/commit/d8b79db444494b6061583e6496fde5542ead69b8)
+- Fix getInternalPlayer method [`bbed43f`](https://github.com/cookpete/react-player/commit/bbed43f6db3fd5de84cfeeae2172d9a64df1e852)
+
+#### [v1.0.0-beta.6](https://github.com/cookpete/react-player/compare/v1.0.0-beta.5...v1.0.0-beta.6)
+
> 5 December 2017
-- Vimeo On Demand URL Support [`#289`](https://github.com/CookPete/react-player/pull/289)
+
+- Vimeo On Demand URL Support [`#289`](https://github.com/cookpete/react-player/pull/289)
- Use index keys for FilePlayer source array [`#276`](https://github.com/CookPete/react-player/issues/276)
-- Add more tests [`2e88e5e`](https://github.com/CookPete/react-player/commit/2e88e5e771fe4c6fc08ff681820e62e5b7d45fec)
-- Bump auto-changelog [`cd26b44`](https://github.com/CookPete/react-player/commit/cd26b44ea7a10b6430329f935c57fd017b5b3f64)
-- Remove unused stop method [`a1b6a6e`](https://github.com/CookPete/react-player/commit/a1b6a6ee978c0677dbc5f03085b0d36331bac11a)
+- Add more tests [`2e88e5e`](https://github.com/cookpete/react-player/commit/2e88e5e771fe4c6fc08ff681820e62e5b7d45fec)
+- Add url switch tests [`78c483c`](https://github.com/cookpete/react-player/commit/78c483c09ee64ca27bffbddbd0583165082caf8d)
+- Bump auto-changelog [`cd26b44`](https://github.com/cookpete/react-player/commit/cd26b44ea7a10b6430329f935c57fd017b5b3f64)
+
+#### [v1.0.0-beta.5](https://github.com/cookpete/react-player/compare/v1.0.0-beta.4...v1.0.0-beta.5)
-#### [v1.0.0-beta.5](https://github.com/CookPete/react-player/compare/v1.0.0-beta.4...v1.0.0-beta.5)
> 10 November 2017
+
- Set internal isPlaying flag to false on ended [`#271`](https://github.com/CookPete/react-player/issues/271)
-- Bump auto-changelog [`e246e43`](https://github.com/CookPete/react-player/commit/e246e43ae227867a1b468bbfa7948bcb2e647c5b)
+- Bump auto-changelog [`e246e43`](https://github.com/cookpete/react-player/commit/e246e43ae227867a1b468bbfa7948bcb2e647c5b)
+
+#### [v1.0.0-beta.4](https://github.com/cookpete/react-player/compare/v1.0.0-beta.3...v1.0.0-beta.4)
-#### [v1.0.0-beta.4](https://github.com/CookPete/react-player/compare/v1.0.0-beta.3...v1.0.0-beta.4)
> 8 November 2017
-- Update twitch URL pattern [`#267`](https://github.com/CookPete/react-player/issues/267)
+
+- Update twitch URL pattern [`#267`](https://github.com/cookpete/react-player/issues/267)
- Retain player order to prevent weird iframe behaviour when switching players [`#264`](https://github.com/CookPete/react-player/issues/264) [`#265`](https://github.com/CookPete/react-player/issues/265)
-#### [v1.0.0-beta.3](https://github.com/CookPete/react-player/compare/v1.0.0-beta.2...v1.0.0-beta.3)
+#### [v1.0.0-beta.3](https://github.com/cookpete/react-player/compare/v1.0.0-beta.2...v1.0.0-beta.3)
+
> 30 October 2017
-- Tweak version script [`00d88ea`](https://github.com/CookPete/react-player/commit/00d88ea5cd27f94c0b0f030f002ad221adb8cedf)
-#### [v1.0.0-beta.2](https://github.com/CookPete/react-player/compare/v1.0.0-beta.1...v1.0.0-beta.2)
+- Tweak version script [`00d88ea`](https://github.com/cookpete/react-player/commit/00d88ea5cd27f94c0b0f030f002ad221adb8cedf)
+
+#### [v1.0.0-beta.2](https://github.com/cookpete/react-player/compare/v1.0.0-beta.1...v1.0.0-beta.2)
+
> 30 October 2017
+
- Add Soundcloud preload support [`#262`](https://github.com/CookPete/react-player/pull/262)
-- Use MIT license [`dd5a0ac`](https://github.com/CookPete/react-player/commit/dd5a0ac64d997aac5e81252ed591b07f9e4835a2)
-- Fix isPlaying bug [`193f3dd`](https://github.com/CookPete/react-player/commit/193f3dde5cec068e5ec1379d9e789e9c5aa2edfd)
+- Use MIT license [`dd5a0ac`](https://github.com/cookpete/react-player/commit/dd5a0ac64d997aac5e81252ed591b07f9e4835a2)
+- Fix isPlaying bug [`193f3dd`](https://github.com/cookpete/react-player/commit/193f3dde5cec068e5ec1379d9e789e9c5aa2edfd)
+
+#### [v1.0.0-beta.1](https://github.com/cookpete/react-player/compare/v1.0.0-beta.0...v1.0.0-beta.1)
-#### [v1.0.0-beta.1](https://github.com/CookPete/react-player/compare/v1.0.0-beta.0...v1.0.0-beta.1)
> 28 October 2017
-- Use latest auto-changelog [`d3401dc`](https://github.com/CookPete/react-player/commit/d3401dcb4d9b613bfb6c5413f808243061c9ee25)
-- Bump packages [`c381cc2`](https://github.com/CookPete/react-player/commit/c381cc2f17fffc9ecd6c6ac664e419d2f67453ab)
-- Prevent errors when unmounting before SDK loads [`979e639`](https://github.com/CookPete/react-player/commit/979e639b8f8faca50509c692d1688e7eb39fef50)
-#### [v1.0.0-beta.0](https://github.com/CookPete/react-player/compare/v0.25.3...v1.0.0-beta.0)
+- Use latest auto-changelog [`d3401dc`](https://github.com/cookpete/react-player/commit/d3401dcb4d9b613bfb6c5413f808243061c9ee25)
+- Bump packages [`c381cc2`](https://github.com/cookpete/react-player/commit/c381cc2f17fffc9ecd6c6ac664e419d2f67453ab)
+- Prevent errors when unmounting before SDK loads [`979e639`](https://github.com/cookpete/react-player/commit/979e639b8f8faca50509c692d1688e7eb39fef50)
+
+#### [v1.0.0-beta.0](https://github.com/cookpete/react-player/compare/v0.25.3...v1.0.0-beta.0)
+
> 26 October 2017
-- Refactor player rendering [`91d1542`](https://github.com/CookPete/react-player/commit/91d15424065575d759885e9b0f8969c8b1f4a7b4)
-- Update tests [`9b4d1c4`](https://github.com/CookPete/react-player/commit/9b4d1c4da466010e0d9f8a99f725b4e0c96db615)
-#### [v0.25.3](https://github.com/CookPete/react-player/compare/v0.25.2...v0.25.3)
+- Refactor player rendering [`91d1542`](https://github.com/cookpete/react-player/commit/91d15424065575d759885e9b0f8969c8b1f4a7b4)
+- Update tests [`9b4d1c4`](https://github.com/cookpete/react-player/commit/9b4d1c4da466010e0d9f8a99f725b4e0c96db615)
+
+#### [v0.25.3](https://github.com/cookpete/react-player/compare/v0.25.2...v0.25.3)
+
> 26 October 2017
-- Loop when player is running [`#257`](https://github.com/CookPete/react-player/pull/257)
-- properly destroy HLS.JS and / or DASH.JS instances [`#254`](https://github.com/CookPete/react-player/pull/254)
-- Fix preloading [`6dd81ba`](https://github.com/CookPete/react-player/commit/6dd81ba4f8e9335e1bd2d15b47cd8d6403b35a3b)
-- Update readme [`d5ba064`](https://github.com/CookPete/react-player/commit/d5ba064a42f3b0abfa4c0d78324305ef20120f54)
-#### [v0.25.2](https://github.com/CookPete/react-player/compare/v0.25.1...v0.25.2)
+- Loop when player is running [`#257`](https://github.com/cookpete/react-player/pull/257)
+- properly destroy HLS.JS and / or DASH.JS instances [`#254`](https://github.com/cookpete/react-player/pull/254)
+- Fix preloading [`6dd81ba`](https://github.com/cookpete/react-player/commit/6dd81ba4f8e9335e1bd2d15b47cd8d6403b35a3b)
+- Update readme [`d5ba064`](https://github.com/cookpete/react-player/commit/d5ba064a42f3b0abfa4c0d78324305ef20120f54)
+
+#### [v0.25.2](https://github.com/cookpete/react-player/compare/v0.25.1...v0.25.2)
+
> 17 October 2017
-- tweak Vimeo duration logic [`#251`](https://github.com/CookPete/react-player/pull/251)
-- Bump packages [`bf40e5f`](https://github.com/CookPete/react-player/commit/bf40e5fce5653df79f245588440f7b2f20f9a6cb)
-- Fix dash autoplay logic [`4e3545e`](https://github.com/CookPete/react-player/commit/4e3545ef8f0e1b46b4a1dcab0c4881c4e507b7f8)
-#### [v0.25.1](https://github.com/CookPete/react-player/compare/v0.25.0...v0.25.1)
+- tweak Vimeo duration logic [`#251`](https://github.com/cookpete/react-player/pull/251)
+- Bump packages [`bf40e5f`](https://github.com/cookpete/react-player/commit/bf40e5fce5653df79f245588440f7b2f20f9a6cb)
+- Fix dash autoplay logic [`4e3545e`](https://github.com/cookpete/react-player/commit/4e3545ef8f0e1b46b4a1dcab0c4881c4e507b7f8)
+
+#### [v0.25.1](https://github.com/cookpete/react-player/compare/v0.25.0...v0.25.1)
+
> 17 October 2017
-- Update typings for onProgress callback [`#246`](https://github.com/CookPete/react-player/pull/246)
-- Fix parameter name for Vimeo player configuration [`#243`](https://github.com/CookPete/react-player/pull/243)
+
+- Update typings for onProgress callback [`#246`](https://github.com/cookpete/react-player/pull/246)
+- Fix parameter name for Vimeo player configuration [`#243`](https://github.com/cookpete/react-player/pull/243)
- Add passthrough prop support to typings [`#247`](https://github.com/CookPete/react-player/issues/247)
- Fix Vimeo duration logic [`#250`](https://github.com/CookPete/react-player/issues/250)
-- fix parameter name for Vimeo player configuration [`f810221`](https://github.com/CookPete/react-player/commit/f8102218dd901e0e49a0d8301f5f38d73b92af92)
+- fix parameter name for Vimeo player configuration [`f810221`](https://github.com/cookpete/react-player/commit/f8102218dd901e0e49a0d8301f5f38d73b92af92)
+
+#### [v0.25.0](https://github.com/cookpete/react-player/compare/v0.24.6...v0.25.0)
-#### [v0.25.0](https://github.com/CookPete/react-player/compare/v0.24.6...v0.25.0)
> 4 October 2017
-- Update polyfill info [`#239`](https://github.com/CookPete/react-player/issues/239)
-- Use React 16 for demo [`#241`](https://github.com/CookPete/react-player/issues/241)
-- Tweak vimeo player logic [`#240`](https://github.com/CookPete/react-player/issues/240)
-- Bump packages [`a31ab1c`](https://github.com/CookPete/react-player/commit/a31ab1c4d7f2e783c129db938367fb7a44da4d8f)
-- Update scripts and config file names [`920c602`](https://github.com/CookPete/react-player/commit/920c6024ec1a2ed703f557e2d71ccc406026053b)
-- Update typings [`a4cf4a0`](https://github.com/CookPete/react-player/commit/a4cf4a0c554e4b50fd6a93a79f84b6ad808ec7d0)
-
-#### [v0.24.6](https://github.com/CookPete/react-player/compare/v0.24.5...v0.24.6)
+
+- Update polyfill info [`#239`](https://github.com/cookpete/react-player/issues/239)
+- Use React 16 for demo [`#241`](https://github.com/cookpete/react-player/issues/241)
+- Tweak vimeo player logic [`#240`](https://github.com/cookpete/react-player/issues/240)
+- Bump packages [`a31ab1c`](https://github.com/cookpete/react-player/commit/a31ab1c4d7f2e783c129db938367fb7a44da4d8f)
+- Update scripts and config file names [`920c602`](https://github.com/cookpete/react-player/commit/920c6024ec1a2ed703f557e2d71ccc406026053b)
+- Remove promise and fetch polyfills from browser build [`a33238c`](https://github.com/cookpete/react-player/commit/a33238cb83493fefc83d01b38551ef5df9d33783)
+
+#### [v0.24.6](https://github.com/cookpete/react-player/compare/v0.24.5...v0.24.6)
+
> 28 September 2017
+
- Make getInternalPlayer more flexible [`#238`](https://github.com/CookPete/react-player/issues/238)
-#### [v0.24.5](https://github.com/CookPete/react-player/compare/v0.24.4...v0.24.5)
+#### [v0.24.5](https://github.com/cookpete/react-player/compare/v0.24.4...v0.24.5)
+
> 16 September 2017
+
- Update Streamable player to use player.js [`#237`](https://github.com/CookPete/react-player/issues/237)
-- Bump auto-changelog [`84ad345`](https://github.com/CookPete/react-player/commit/84ad345c926bf7fc47b0c61e77aea4c517cbd028)
-- Remove unnecessary stop logic from soundcloud [`f478f1a`](https://github.com/CookPete/react-player/commit/f478f1a3c29cfd8c95c4f49a17ddd05b1b042bc7)
-- Skip Streamable tests [`f210f93`](https://github.com/CookPete/react-player/commit/f210f93f5670d605b95887d4f44a8a22c9e42eee)
+- Bump auto-changelog [`84ad345`](https://github.com/cookpete/react-player/commit/84ad345c926bf7fc47b0c61e77aea4c517cbd028)
+- Remove unnecessary stop logic from soundcloud [`f478f1a`](https://github.com/cookpete/react-player/commit/f478f1a3c29cfd8c95c4f49a17ddd05b1b042bc7)
+- Skip Streamable tests [`f210f93`](https://github.com/cookpete/react-player/commit/f210f93f5670d605b95887d4f44a8a22c9e42eee)
+
+#### [v0.24.4](https://github.com/cookpete/react-player/compare/v0.24.3...v0.24.4)
-#### [v0.24.4](https://github.com/CookPete/react-player/compare/v0.24.3...v0.24.4)
> 14 September 2017
-- Updated TypeScript typings [`#235`](https://github.com/CookPete/react-player/pull/235)
-- Prevent warnings when unmounting preloading players [`4c4d2ec`](https://github.com/CookPete/react-player/commit/4c4d2ecb2ba624bffe211cb041a97b1c42da9cc1)
-#### [v0.24.3](https://github.com/CookPete/react-player/compare/v0.24.2...v0.24.3)
+- Updated TypeScript typings [`#235`](https://github.com/cookpete/react-player/pull/235)
+- Prevent warnings when unmounting preloading players [`4c4d2ec`](https://github.com/cookpete/react-player/commit/4c4d2ecb2ba624bffe211cb041a97b1c42da9cc1)
+
+#### [v0.24.3](https://github.com/cookpete/react-player/compare/v0.24.2...v0.24.3)
+
> 14 September 2017
-- update of DOM listeners in FilePlayer when audio/video tags was switched [`#234`](https://github.com/CookPete/react-player/pull/234)
-- Refactor progress logic [`f1b12e2`](https://github.com/CookPete/react-player/commit/f1b12e22262236b6c514c13de3534b8e4ede3f67)
-- Bump packages [`aa2c174`](https://github.com/CookPete/react-player/commit/aa2c1746774266502031d10aff5331ecb6cc491a)
-- Fix class names [`a286b64`](https://github.com/CookPete/react-player/commit/a286b64ec28030b96dce4bacd1357f9a6899fd9b)
-#### [v0.24.2](https://github.com/CookPete/react-player/compare/v0.24.1...v0.24.2)
+- update of DOM listeners in FilePlayer when audio/video tags was switched [`#234`](https://github.com/cookpete/react-player/pull/234)
+- Use callPlayer util for player methods [`c760655`](https://github.com/cookpete/react-player/commit/c760655b26fbf3c01a129665861dc25661d91f7d)
+- Refactor progress logic [`f1b12e2`](https://github.com/cookpete/react-player/commit/f1b12e22262236b6c514c13de3534b8e4ede3f67)
+- Clean up tests [`717397e`](https://github.com/cookpete/react-player/commit/717397e2010a7c2a9d2bbb543e3390ee9be94e9c)
+
+#### [v0.24.2](https://github.com/cookpete/react-player/compare/v0.24.1...v0.24.2)
+
> 11 September 2017
-- Add getConfig tests [`f7eb2b5`](https://github.com/CookPete/react-player/commit/f7eb2b55929842523377bda20d80b62eb6c9a7d1)
-- Add preload config tests [`d368ae2`](https://github.com/CookPete/react-player/commit/d368ae2ac92d693f7d69d6f9afc1701ded7cca5a)
-- Render preload players even when url is null [`1531190`](https://github.com/CookPete/react-player/commit/15311909d048b1aff2fda1b7ccb26ce2d376da02)
-#### [v0.24.1](https://github.com/CookPete/react-player/compare/v0.24.0...v0.24.1)
+- Add codecov support [`bc30340`](https://github.com/cookpete/react-player/commit/bc30340ce5da9299635bda0a1ad8560af9214516)
+- Add getConfig tests [`f7eb2b5`](https://github.com/cookpete/react-player/commit/f7eb2b55929842523377bda20d80b62eb6c9a7d1)
+- Player test tweaks [`c0ee179`](https://github.com/cookpete/react-player/commit/c0ee179cc61e316ca2f1f705bf53c65b304206a0)
+
+#### [v0.24.1](https://github.com/cookpete/react-player/compare/v0.24.0...v0.24.1)
+
> 9 September 2017
-- Add util tests [`586f179`](https://github.com/CookPete/react-player/commit/586f1794d14fc2acb5760ed0f123447def4cf69c)
-- Refactor onDuration logic [`31c1dac`](https://github.com/CookPete/react-player/commit/31c1dacfcd3ac0936a5df1838a75421b9e681eb8)
-- Suppress dash.js logs [`75710e4`](https://github.com/CookPete/react-player/commit/75710e4bcf2485e3a23c365649d9e920241ba602)
-#### [v0.24.0](https://github.com/CookPete/react-player/compare/v0.23.0...v0.24.0)
+- Refactor player tests [`4551f25`](https://github.com/cookpete/react-player/commit/4551f25041a24b9efdc7587ec2a3c98a2fc26094)
+- Refactor player rendering logic [`2b62811`](https://github.com/cookpete/react-player/commit/2b62811bbb00333e52b93c4d1635cb78fbc67c51)
+- Add util tests [`586f179`](https://github.com/cookpete/react-player/commit/586f1794d14fc2acb5760ed0f123447def4cf69c)
+
+#### [v0.24.0](https://github.com/cookpete/react-player/compare/v0.23.0...v0.24.0)
+
> 9 September 2017
-- Use single config prop [`#71`](https://github.com/CookPete/react-player/issues/71)
+
+- Use single config prop [`#71`](https://github.com/cookpete/react-player/issues/71)
- Fix webpack production config [`#231`](https://github.com/CookPete/react-player/issues/231)
-- Readme tweaks [`c0071f2`](https://github.com/CookPete/react-player/commit/c0071f2f987384ff4a8d188bf98a54f03eb42ea8)
-- Set production env variable for browser builds [`1e7c23a`](https://github.com/CookPete/react-player/commit/1e7c23a9a22deca95a3d46390d95338d6b61eed1)
-- Add getInternalPlayer method [`bbee417`](https://github.com/CookPete/react-player/commit/bbee41758fbeeea44702d36a2c9e67e2b6206d1a)
+- Remove legacy Soundcloud player [`a55ef3c`](https://github.com/cookpete/react-player/commit/a55ef3c963d46a2cb1b1a7d71ba0d66ef3edcb20)
+- Readme tweaks [`c0071f2`](https://github.com/cookpete/react-player/commit/c0071f2f987384ff4a8d188bf98a54f03eb42ea8)
+- Bring back static canPlay util [`f4861d7`](https://github.com/cookpete/react-player/commit/f4861d714da0be1ec9f8c10c00342a6f9efdef41)
+
+#### [v0.23.0](https://github.com/cookpete/react-player/compare/v0.22.0...v0.23.0)
-#### [v0.23.0](https://github.com/CookPete/react-player/compare/v0.22.0...v0.23.0)
> 8 September 2017
-- Soundcloud: use Widget API instead of HTTP API [`#199`](https://github.com/CookPete/react-player/pull/199)
-- Fixed broken TypeScript type definitions [`#230`](https://github.com/CookPete/react-player/pull/230)
-- Refactor development setup [`81df2a8`](https://github.com/CookPete/react-player/commit/81df2a8c929e4a7d4c10d5c6606964d6d7bf5f1e)
-- Update bower ignore patterns [`7c28561`](https://github.com/CookPete/react-player/commit/7c28561379180f5abb85fc5956bcb53beca43b36)
-- Skip SoundCloud player tests [`ad751d1`](https://github.com/CookPete/react-player/commit/ad751d12c2f98f9f43ecd1d9692c86ce6597c02d)
-#### [v0.22.0](https://github.com/CookPete/react-player/compare/v0.21.0...v0.22.0)
+- Soundcloud: use Widget API instead of HTTP API [`#199`](https://github.com/cookpete/react-player/pull/199)
+- Fixed broken TypeScript type definitions [`#230`](https://github.com/cookpete/react-player/pull/230)
+- Refactor development setup [`81df2a8`](https://github.com/cookpete/react-player/commit/81df2a8c929e4a7d4c10d5c6606964d6d7bf5f1e)
+- Use Widget instead of Soundcloud API [`4ea29f9`](https://github.com/cookpete/react-player/commit/4ea29f95c642b56b05464a5baab5cbe1fdb28e5a)
+- Tidy up Soundcloud player [`d0947e2`](https://github.com/cookpete/react-player/commit/d0947e256a7998a76820239eca5fabc28783bc91)
+
+#### [v0.22.0](https://github.com/cookpete/react-player/compare/v0.21.0...v0.22.0)
+
> 3 September 2017
-- Move SDK loading logic into getSDK util [`318c9e9`](https://github.com/CookPete/react-player/commit/318c9e93cc55b00d939ab28ecaefce3467ef8440)
-- Add sourcemap config to uglify plugin [`901dfbf`](https://github.com/CookPete/react-player/commit/901dfbf101e0d26f9c685088ad9a9b4d318d9950)
-- Update vidme example URL [`ad7b335`](https://github.com/CookPete/react-player/commit/ad7b3356ec85ba68d6696e867512177efc33beba)
-#### [v0.21.0](https://github.com/CookPete/react-player/compare/v0.20.0...v0.21.0)
+- Move SDK loading logic into getSDK util [`318c9e9`](https://github.com/cookpete/react-player/commit/318c9e93cc55b00d939ab28ecaefce3467ef8440)
+- Add Twitch player [`288c18d`](https://github.com/cookpete/react-player/commit/288c18ddd582a9cd8b629216041a0166d4c23987)
+- Add sourcemap config to uglify plugin [`901dfbf`](https://github.com/cookpete/react-player/commit/901dfbf101e0d26f9c685088ad9a9b4d318d9950)
+
+#### [v0.21.0](https://github.com/cookpete/react-player/compare/v0.20.0...v0.21.0)
+
> 2 September 2017
+
- Add muted prop [`#221`](https://github.com/CookPete/react-player/issues/221)
- Add onSeek prop [`#222`](https://github.com/CookPete/react-player/issues/222)
-- Add missing typings [`8d1295e`](https://github.com/CookPete/react-player/commit/8d1295e6796ec31b66cfe5f6ef1694d8cafdad9e)
-- Update demo videos [`26411b9`](https://github.com/CookPete/react-player/commit/26411b9a29ddcdbb8fec9f8e244860d59f23601b)
-- Add missing propTypes [`9ffc996`](https://github.com/CookPete/react-player/commit/9ffc9969b58c04010acfb4a41b405eae4123a6ac)
+- Tweak Wistia player load logic [`b0e725c`](https://github.com/cookpete/react-player/commit/b0e725cc7a5c964ba17f3422ebf7406f409f0a60)
+- Add missing typings [`8d1295e`](https://github.com/cookpete/react-player/commit/8d1295e6796ec31b66cfe5f6ef1694d8cafdad9e)
+- Update demo videos [`26411b9`](https://github.com/cookpete/react-player/commit/26411b9a29ddcdbb8fec9f8e244860d59f23601b)
+
+#### [v0.20.0](https://github.com/cookpete/react-player/compare/v0.19.1...v0.20.0)
-#### [v0.20.0](https://github.com/CookPete/react-player/compare/v0.19.1...v0.20.0)
> 27 July 2017
+
- Allow seekTo to accept number of seconds [`#75`](https://github.com/CookPete/react-player/issues/75)
- Pass errors when playing files through to onError callback [`#200`](https://github.com/CookPete/react-player/issues/200)
- Add support for subtitle tracks in FilePlayer [`#214`](https://github.com/CookPete/react-player/issues/214)
- Unmute facebook video when setting volume [`#215`](https://github.com/CookPete/react-player/issues/215)
-- Bump packages [`8e9e57b`](https://github.com/CookPete/react-player/commit/8e9e57b37f18ec4358bc5bc940f5f7aed2f59a19)
+- Bump packages [`8e9e57b`](https://github.com/cookpete/react-player/commit/8e9e57b37f18ec4358bc5bc940f5f7aed2f59a19)
+
+#### [v0.19.1](https://github.com/cookpete/react-player/compare/v0.19.0...v0.19.1)
-#### [v0.19.1](https://github.com/CookPete/react-player/compare/v0.19.0...v0.19.1)
> 17 July 2017
-- More accurate played fraction for Wistia [`#201`](https://github.com/CookPete/react-player/pull/201)
-#### [v0.19.0](https://github.com/CookPete/react-player/compare/v0.18.0...v0.19.0)
+- More accurate played fraction for Wistia [`#201`](https://github.com/cookpete/react-player/pull/201)
+
+#### [v0.19.0](https://github.com/cookpete/react-player/compare/v0.18.0...v0.19.0)
+
> 13 July 2017
+
- Detatch HLS media when stopping [`#212`](https://github.com/CookPete/react-player/issues/212)
- Add wistia player options [`#198`](https://github.com/CookPete/react-player/pull/198)
- Pass through auto or falsey width and height to FilePlayer [`#211`](https://github.com/CookPete/react-player/issues/211)
- Only use add-module-exports plugin for bower build [`#193`](https://github.com/CookPete/react-player/issues/193) [`#196`](https://github.com/CookPete/react-player/pull/196)
-- Bump packages [`7372bcb`](https://github.com/CookPete/react-player/commit/7372bcba6c737e195a3df1d772622f5324cff619)
-- Remove need for findDOMNode in Vimeo player [`f6abc06`](https://github.com/CookPete/react-player/commit/f6abc065deb0d526706170c91436f344de8ddc88)
-- Add streaming tools to readme [`adf1338`](https://github.com/CookPete/react-player/commit/adf1338f709bdb6eab5486b57f6bfbc2b9df3122)
+- Bump packages [`7372bcb`](https://github.com/cookpete/react-player/commit/7372bcba6c737e195a3df1d772622f5324cff619)
+- Remove need for findDOMNode in Vimeo player [`f6abc06`](https://github.com/cookpete/react-player/commit/f6abc065deb0d526706170c91436f344de8ddc88)
+- Add streaming tools to readme [`adf1338`](https://github.com/cookpete/react-player/commit/adf1338f709bdb6eab5486b57f6bfbc2b9df3122)
+
+#### [v0.18.0](https://github.com/cookpete/react-player/compare/v0.17.2...v0.18.0)
-#### [v0.18.0](https://github.com/CookPete/react-player/compare/v0.17.2...v0.18.0)
> 9 May 2017
-- Add support for HLS and DASH streams [`c28c7ff`](https://github.com/CookPete/react-player/commit/c28c7ff637298e6d9ecee588741980b9e0481bfc)
-- Bump packages [`6f8da1f`](https://github.com/CookPete/react-player/commit/6f8da1f1f6f643953d0e5c97635addf320c80da7)
-#### [v0.17.2](https://github.com/CookPete/react-player/compare/v0.17.1...v0.17.2)
+- Add support for HLS and DASH streams [`c28c7ff`](https://github.com/cookpete/react-player/commit/c28c7ff637298e6d9ecee588741980b9e0481bfc)
+- Bump packages [`6f8da1f`](https://github.com/cookpete/react-player/commit/6f8da1f1f6f643953d0e5c97635addf320c80da7)
+
+#### [v0.17.2](https://github.com/cookpete/react-player/compare/v0.17.1...v0.17.2)
+
> 7 May 2017
+
- Add forceAudio to fileConfig [`#188`](https://github.com/CookPete/react-player/issues/188)
-#### [v0.17.1](https://github.com/CookPete/react-player/compare/v0.17.0...v0.17.1)
+#### [v0.17.1](https://github.com/cookpete/react-player/compare/v0.17.0...v0.17.1)
+
> 5 May 2017
-- Fix initial loading bug for Private Vimeo videos [`#187`](https://github.com/CookPete/react-player/pull/187)
-- Fix initial loading bug for Private Vimeo videos [`ff8a449`](https://github.com/CookPete/react-player/commit/ff8a449546121be7bfd6f3bb357d9dc06a94fcaa)
-#### [v0.17.0](https://github.com/CookPete/react-player/compare/v0.16.0...v0.17.0)
+- Fix initial loading bug for Private Vimeo videos [`#187`](https://github.com/cookpete/react-player/pull/187)
+
+#### [v0.17.0](https://github.com/cookpete/react-player/compare/v0.16.0...v0.17.0)
+
> 30 April 2017
+
- Add support for m.youtube.com [`#186`](https://github.com/CookPete/react-player/issues/186)
- Add support for multiple file sources [`#81`](https://github.com/CookPete/react-player/issues/81)
-- Remove need for Vimeo player IDs [`214a7af`](https://github.com/CookPete/react-player/commit/214a7afebaf00cd3c5b0af06cc63efb0786bd439)
+- Remove need for Vimeo player IDs [`214a7af`](https://github.com/cookpete/react-player/commit/214a7afebaf00cd3c5b0af06cc63efb0786bd439)
+
+#### [v0.16.0](https://github.com/cookpete/react-player/compare/v0.15.0...v0.16.0)
-#### [v0.16.0](https://github.com/CookPete/react-player/compare/v0.15.0...v0.16.0)
> 27 April 2017
-- Apply all non-valid props to the wrapper element [`#183`](https://github.com/CookPete/react-player/pull/183)
+
+- Apply all non-valid props to the wrapper element [`#183`](https://github.com/cookpete/react-player/pull/183)
- Ensure YouTube player is in DOM when stopping [`#180`](https://github.com/CookPete/react-player/pull/180)
- Use new Vimeo player API [`#142`](https://github.com/CookPete/react-player/pull/142)
- Fix FilePlayer seekTo bug [`#149`](https://github.com/CookPete/react-player/pull/149)
- Add Facebook player [`#109`](https://github.com/CookPete/react-player/issues/109)
- Apply all non-valid props to the wrapper element [`#167`](https://github.com/CookPete/react-player/issues/167)
-- DailyMotion tweaks [`64f3cd3`](https://github.com/CookPete/react-player/commit/64f3cd3add0ec6dcea3a0980963676e3b8aa12f0)
-- Bump babel-loader [`478c2c3`](https://github.com/CookPete/react-player/commit/478c2c3e987bb849d7e00ffc613f4cac5f3fd949)
-- Add Facebook to readme and package description [`ad9c472`](https://github.com/CookPete/react-player/commit/ad9c47217871bd8502d4951dbee2f73f66a561c5)
+- Added DailyMotion support. [`71dcda6`](https://github.com/cookpete/react-player/commit/71dcda6c3d0d1705760f3196fd28810be5e86109)
+- DailyMotion tweaks [`64f3cd3`](https://github.com/cookpete/react-player/commit/64f3cd3add0ec6dcea3a0980963676e3b8aa12f0)
+- Bump babel-loader [`478c2c3`](https://github.com/cookpete/react-player/commit/478c2c3e987bb849d7e00ffc613f4cac5f3fd949)
+
+#### [v0.15.0](https://github.com/cookpete/react-player/compare/v0.14.3...v0.15.0)
-#### [v0.15.0](https://github.com/CookPete/react-player/compare/v0.14.3...v0.15.0)
> 14 April 2017
+
- Add vidmeConfig with choice of video format [`#162`](https://github.com/CookPete/react-player/issues/162)
- Call player.load() when loading files [`#177`](https://github.com/CookPete/react-player/issues/177)
- Add getCurrentTime and getDuration methods [`#178`](https://github.com/CookPete/react-player/issues/178)
- Use prop-types library [`#179`](https://github.com/CookPete/react-player/issues/179)
- Add loadedSeconds and playedSeconds to onProgress [`#164`](https://github.com/CookPete/react-player/issues/164)
- Add playsinline prop [`#148`](https://github.com/CookPete/react-player/issues/148)
-- Bump packages [`41aac30`](https://github.com/CookPete/react-player/commit/41aac30d82255e2a530c0e131c5a615f2ca6e394)
-- Bump snazzy [`90c60b3`](https://github.com/CookPete/react-player/commit/90c60b3722b81f15bfab3cc926153b7bb66631af)
-- Fix test duration error [`0e8f08e`](https://github.com/CookPete/react-player/commit/0e8f08e6ba32f7f3f8ec73fcc7bb6a0b77b9cd52)
+- Bump packages [`41aac30`](https://github.com/cookpete/react-player/commit/41aac30d82255e2a530c0e131c5a615f2ca6e394)
+- Update to standard 10 [`1371cbc`](https://github.com/cookpete/react-player/commit/1371cbc344b7b932a4579de23c188dad02f2bdcb)
+- Bump snazzy [`90c60b3`](https://github.com/cookpete/react-player/commit/90c60b3722b81f15bfab3cc926153b7bb66631af)
+
+#### [v0.14.3](https://github.com/cookpete/react-player/compare/v0.14.2...v0.14.3)
-#### [v0.14.3](https://github.com/CookPete/react-player/compare/v0.14.2...v0.14.3)
> 21 February 2017
-- Add assertion for canPlay with https://vimeo [`#141`](https://github.com/CookPete/react-player/pull/141)
-- Use npm 4.x on travis [`#143`](https://github.com/CookPete/react-player/pull/143)
-- Use ubuntu 14.04 for travis [`#144`](https://github.com/CookPete/react-player/pull/144)
-- fixed width & height of video when it is in fullscreen mode [`#151`](https://github.com/CookPete/react-player/pull/151)
-- update webpack to 2.2.1 [`#156`](https://github.com/CookPete/react-player/pull/156)
+
+- Add assertion for canPlay with https://vimeo [`#141`](https://github.com/cookpete/react-player/pull/141)
+- Use npm 4.x on travis [`#143`](https://github.com/cookpete/react-player/pull/143)
+- Use ubuntu 14.04 for travis [`#144`](https://github.com/cookpete/react-player/pull/144)
+- fixed width & height of video when it is in fullscreen mode [`#151`](https://github.com/cookpete/react-player/pull/151)
+- update webpack to 2.2.1 [`#156`](https://github.com/cookpete/react-player/pull/156)
- Fix vidme url regex [`#158`](https://github.com/CookPete/react-player/issues/158)
-- Bump packages [`92b9315`](https://github.com/CookPete/react-player/commit/92b9315f02f2b364b6cd59146e5c03587464cc5a)
-- Minor code style fixes [`b39b1ec`](https://github.com/CookPete/react-player/commit/b39b1ec05690610a091bdf229de03d71782ea059)
-- Add assertion for making sure canPlay is valid for https://vimeo [`0f55002`](https://github.com/CookPete/react-player/commit/0f550029c92754c193cb5b4adb835d960c2af1fe)
+- Bump packages [`92b9315`](https://github.com/cookpete/react-player/commit/92b9315f02f2b364b6cd59146e5c03587464cc5a)
+- Minor code style fixes [`b39b1ec`](https://github.com/cookpete/react-player/commit/b39b1ec05690610a091bdf229de03d71782ea059)
+- Add assertion for making sure canPlay is valid for https://vimeo [`0f55002`](https://github.com/cookpete/react-player/commit/0f550029c92754c193cb5b4adb835d960c2af1fe)
+
+#### [v0.14.2](https://github.com/cookpete/react-player/compare/v0.14.1...v0.14.2)
-#### [v0.14.2](https://github.com/CookPete/react-player/compare/v0.14.1...v0.14.2)
> 14 February 2017
+
- Fix youtube player vars config usage [`#152`](https://github.com/CookPete/react-player/issues/152)
- Fix npm prepublish script on windows [`#139`](https://github.com/CookPete/react-player/issues/139)
-- fixed width & height of video when it is in fullscreen mode [`f966a15`](https://github.com/CookPete/react-player/commit/f966a15c2e2221359eee54e0753e8f0906e670fd)
-- Use cross-env for build scripts [`a6191cf`](https://github.com/CookPete/react-player/commit/a6191cf1d0c14453c88deccfc81db63a60a3a1e0)
+- Use cross-env for build scripts [`a6191cf`](https://github.com/cookpete/react-player/commit/a6191cf1d0c14453c88deccfc81db63a60a3a1e0)
+
+#### [v0.14.1](https://github.com/cookpete/react-player/compare/v0.14.0...v0.14.1)
-#### [v0.14.1](https://github.com/CookPete/react-player/compare/v0.14.0...v0.14.1)
> 1 January 2017
+
- Use video element for ogg files [`#137`](https://github.com/CookPete/react-player/issues/137)
-#### [v0.14.0](https://github.com/CookPete/react-player/compare/v0.13.0...v0.14.0)
+#### [v0.14.0](https://github.com/cookpete/react-player/compare/v0.13.0...v0.14.0)
+
> 26 December 2016
-- Wistia support [`#133`](https://github.com/CookPete/react-player/pull/133)
-- Add yarn.lock [`690d031`](https://github.com/CookPete/react-player/commit/690d031a72a9057ee9313a05892f92343845593e)
-- Tidy up Wistia player [`9c82bfd`](https://github.com/CookPete/react-player/commit/9c82bfd332076fabb5e549e6e2c97cc7d6666a03)
-- Bump node-sass [`9d4689e`](https://github.com/CookPete/react-player/commit/9d4689ee8da2016d942b23e5a2b74d9df0d4e19c)
-#### [v0.13.0](https://github.com/CookPete/react-player/compare/v0.12.1...v0.13.0)
+- Wistia support [`#133`](https://github.com/cookpete/react-player/pull/133)
+- Add yarn.lock [`690d031`](https://github.com/cookpete/react-player/commit/690d031a72a9057ee9313a05892f92343845593e)
+- Tidy up Wistia player [`9c82bfd`](https://github.com/cookpete/react-player/commit/9c82bfd332076fabb5e549e6e2c97cc7d6666a03)
+- Bump node-sass [`9d4689e`](https://github.com/cookpete/react-player/commit/9d4689ee8da2016d942b23e5a2b74d9df0d4e19c)
+
+#### [v0.13.0](https://github.com/cookpete/react-player/compare/v0.12.1...v0.13.0)
+
> 12 December 2016
-- PlaybackRate change feature [`#123`](https://github.com/CookPete/react-player/pull/123)
-- Fix onProgress non-reporting if playing prop is not set. [`#127`](https://github.com/CookPete/react-player/pull/127)
-- Add additional audio file extensions to regex [`#131`](https://github.com/CookPete/react-player/pull/131)
-- Use node 6 on travis [`#130`](https://github.com/CookPete/react-player/pull/130)
+
+- PlaybackRate change feature [`#123`](https://github.com/cookpete/react-player/pull/123)
+- Fix onProgress non-reporting if playing prop is not set. [`#127`](https://github.com/cookpete/react-player/pull/127)
+- Add additional audio file extensions to regex [`#131`](https://github.com/cookpete/react-player/pull/131)
+- Use node 6 on travis [`#130`](https://github.com/cookpete/react-player/pull/130)
- Add typescript definition file [`#134`](https://github.com/CookPete/react-player/issues/134)
-- [feature] Change PlaybackRate [`d28c309`](https://github.com/CookPete/react-player/commit/d28c309529f59d961238d549c3391af7ea08a44f)
-- Fix incorrect duration calculation in demo app. [`4114677`](https://github.com/CookPete/react-player/commit/411467726be66f7f5d7fdba826da76323ef6883f)
-- Add playbackRate prop to readme [`b674882`](https://github.com/CookPete/react-player/commit/b6748821837315903c56a213c1a970d399840267)
+- [feature] Change PlaybackRate [`d28c309`](https://github.com/cookpete/react-player/commit/d28c309529f59d961238d549c3391af7ea08a44f)
+- Fix incorrect duration calculation in demo app. [`4114677`](https://github.com/cookpete/react-player/commit/411467726be66f7f5d7fdba826da76323ef6883f)
+- Remove unnecessary escape characters [`ec078d1`](https://github.com/cookpete/react-player/commit/ec078d12a06730f5665b5e1786eb60751817a4f0)
+
+#### [v0.12.1](https://github.com/cookpete/react-player/compare/v0.12.0...v0.12.1)
-#### [v0.12.1](https://github.com/CookPete/react-player/compare/v0.12.0...v0.12.1)
> 19 November 2016
-- Add fullscreen example to demo [`563252b`](https://github.com/CookPete/react-player/commit/563252be94cafd5d973271f56c91fda4b1f87e4f)
-- Fullscreen youtube player fix [`83e8e60`](https://github.com/CookPete/react-player/commit/83e8e60a018e85bb27aa907360142f0a63761d54)
-#### [v0.12.0](https://github.com/CookPete/react-player/compare/v0.11.0...v0.12.0)
+- Add fullscreen example to demo [`563252b`](https://github.com/cookpete/react-player/commit/563252be94cafd5d973271f56c91fda4b1f87e4f)
+- Fullscreen youtube player fix [`83e8e60`](https://github.com/cookpete/react-player/commit/83e8e60a018e85bb27aa907360142f0a63761d54)
+
+#### [v0.12.0](https://github.com/cookpete/react-player/compare/v0.11.0...v0.12.0)
+
> 10 October 2016
-- Pass DOM node to YouTube Player instead of ID [`#111`](https://github.com/CookPete/react-player/pull/111)
-- update all dependencies [`#107`](https://github.com/CookPete/react-player/pull/107)
+
+- Pass DOM node to YouTube Player instead of ID [`#111`](https://github.com/cookpete/react-player/pull/111)
+- update all dependencies [`#107`](https://github.com/cookpete/react-player/pull/107)
- Add showArtwork option to soundcloud config [`#108`](https://github.com/CookPete/react-player/issues/108)
-- Add Vidme support [`609ee08`](https://github.com/CookPete/react-player/commit/609ee0845199879141dd89b20d3fbc996c20fdee)
-- Remove anonymous ref callback functions [`26aec63`](https://github.com/CookPete/react-player/commit/26aec63f05bfeba28536645dba5f0cbf0c5891a8)
-- Tidy up youtube ref usage [`79b1691`](https://github.com/CookPete/react-player/commit/79b1691fc4c490ceed494ba6d7dcfbfd93bdf7b2)
+- Tidy up code [`0f18e71`](https://github.com/cookpete/react-player/commit/0f18e712935dfe50dafb4f40b3794e7150c4b476)
+- Add Vidme support [`609ee08`](https://github.com/cookpete/react-player/commit/609ee0845199879141dd89b20d3fbc996c20fdee)
+- Remove anonymous ref callback functions [`26aec63`](https://github.com/cookpete/react-player/commit/26aec63f05bfeba28536645dba5f0cbf0c5891a8)
+
+#### [v0.11.0](https://github.com/cookpete/react-player/compare/v0.10.0...v0.11.0)
-#### [v0.11.0](https://github.com/CookPete/react-player/compare/v0.10.0...v0.11.0)
> 26 September 2016
+
- Add onReady prop [`#106`](https://github.com/CookPete/react-player/issues/106)
-#### [v0.10.0](https://github.com/CookPete/react-player/compare/v0.9.0...v0.10.0)
+#### [v0.10.0](https://github.com/cookpete/react-player/compare/v0.9.0...v0.10.0)
+
> 25 September 2016
-- Add `hidden` prop to ReactPlayer [`#102`](https://github.com/CookPete/react-player/pull/102)
+
+- Add `hidden` prop to ReactPlayer [`#102`](https://github.com/cookpete/react-player/pull/102)
- Use mounted property to prevent setting state when unmounted [`#105`](https://github.com/CookPete/react-player/issues/105)
- Update onProgress logic to still report loaded amounts when paused [`#94`](https://github.com/CookPete/react-player/issues/94)
-- Use ref callbacks instead of ref strings [`6c16ba0`](https://github.com/CookPete/react-player/commit/6c16ba0f44d0403ae3e089ca1dafed0077b095e7)
-- Only fire FilePlayer onPause when mounted [`2e1170c`](https://github.com/CookPete/react-player/commit/2e1170c18697d3de23d347a25c771ba14807c2ff)
-- No longer pause FilePlayer when stopping [`5e6f9d2`](https://github.com/CookPete/react-player/commit/5e6f9d2b57a3d728ce8da0edb9e2634e3601cca4)
+- Remove brackets from single param arrow functions [`ab24d08`](https://github.com/cookpete/react-player/commit/ab24d085b4ad72bb6e0c9ea43ca59e69be0d88f3)
+- Add Streamable player [`ff6a300`](https://github.com/cookpete/react-player/commit/ff6a3006ec8960d51a884762ce2f767857ec01cf)
+- Use ref callbacks instead of ref strings [`6c16ba0`](https://github.com/cookpete/react-player/commit/6c16ba0f44d0403ae3e089ca1dafed0077b095e7)
+
+#### [v0.9.0](https://github.com/cookpete/react-player/compare/v0.8.0...v0.9.0)
-#### [v0.9.0](https://github.com/CookPete/react-player/compare/v0.8.0...v0.9.0)
> 9 August 2016
+
- Ensure YouTube SDK is loaded before resolving promise [`#88`](https://github.com/CookPete/react-player/issues/88)
- Fix looping behaviour [`#91`](https://github.com/CookPete/react-player/issues/91)
- Add style prop [`#92`](https://github.com/CookPete/react-player/issues/92)
-- Skip tests before versioning [`ed6cab0`](https://github.com/CookPete/react-player/commit/ed6cab0cc983efaf0ef8813b77a0a3a407091726)
+- Skip tests before versioning [`ed6cab0`](https://github.com/cookpete/react-player/commit/ed6cab0cc983efaf0ef8813b77a0a3a407091726)
+
+#### [v0.8.0](https://github.com/cookpete/react-player/compare/v0.7.5...v0.8.0)
-#### [v0.8.0](https://github.com/CookPete/react-player/compare/v0.7.5...v0.8.0)
> 29 July 2016
-- Add support for non-es5 compatible browsers [`#87`](https://github.com/CookPete/react-player/pull/87)
-- Render FilePlayer by default [`8d249ce`](https://github.com/CookPete/react-player/commit/8d249cedb234f63e59858840a5ea40b899632177)
-- Bump packages [`2d43659`](https://github.com/CookPete/react-player/commit/2d436592fedbba4b92653e1f929d5a31ccf3b14d)
-#### [v0.7.5](https://github.com/CookPete/react-player/compare/v0.7.4...v0.7.5)
+- Add support for non-es5 compatible browsers [`#87`](https://github.com/cookpete/react-player/pull/87)
+- Render FilePlayer by default [`8d249ce`](https://github.com/cookpete/react-player/commit/8d249cedb234f63e59858840a5ea40b899632177)
+- Add babel es3 plugins [`26abe2c`](https://github.com/cookpete/react-player/commit/26abe2ccb66e9677a20baa5f6a0da64262f53ef8)
+- Bump packages [`2d43659`](https://github.com/cookpete/react-player/commit/2d436592fedbba4b92653e1f929d5a31ccf3b14d)
+
+#### [v0.7.5](https://github.com/cookpete/react-player/compare/v0.7.4...v0.7.5)
+
> 27 July 2016
+
- Always send both played and loaded values in progress events [`#79`](https://github.com/CookPete/react-player/issues/79)
- Add RTSP stream support to FilePlayer [`#83`](https://github.com/CookPete/react-player/issues/83)
- Move initial setVolume to onStart [`#82`](https://github.com/CookPete/react-player/issues/82)
- Update player when width or height changes [`#84`](https://github.com/CookPete/react-player/issues/84)
-- Stop progress loop on pause [`180039b`](https://github.com/CookPete/react-player/commit/180039b19b3975e7e0ecae1202ccb304d829fba7)
-- Add babel es3 plugins [`26abe2c`](https://github.com/CookPete/react-player/commit/26abe2ccb66e9677a20baa5f6a0da64262f53ef8)
+- Stop progress loop on pause [`180039b`](https://github.com/cookpete/react-player/commit/180039b19b3975e7e0ecae1202ccb304d829fba7)
+
+#### [v0.7.4](https://github.com/cookpete/react-player/compare/v0.7.3...v0.7.4)
-#### [v0.7.4](https://github.com/CookPete/react-player/compare/v0.7.3...v0.7.4)
> 23 June 2016
+
- Pause FilePlayer when stopping [`#78`](https://github.com/CookPete/react-player/issues/78)
-#### [v0.7.3](https://github.com/CookPete/react-player/compare/v0.7.2...v0.7.3)
+#### [v0.7.3](https://github.com/cookpete/react-player/compare/v0.7.2...v0.7.3)
+
> 21 June 2016
-- Pass fileConfig down correctly [`1dffcca`](https://github.com/CookPete/react-player/commit/1dffccafca1f3440068a66e661a1fced9cde1593)
-#### [v0.7.2](https://github.com/CookPete/react-player/compare/v0.7.1...v0.7.2)
+- Pass fileConfig down correctly [`1dffcca`](https://github.com/cookpete/react-player/commit/1dffccafca1f3440068a66e661a1fced9cde1593)
+
+#### [v0.7.2](https://github.com/cookpete/react-player/compare/v0.7.1...v0.7.2)
+
> 3 June 2016
+
- Add m4v and m4a extensions to filePlayer [`#72`](https://github.com/CookPete/react-player/issues/72)
- Fix onDuration being called with null [`#52`](https://github.com/CookPete/react-player/issues/52)
-- Rename seekOnReady to seekOnPlay [`91f7344`](https://github.com/CookPete/react-player/commit/91f73449e835c5e7bda30889e909510118f8c84f)
-- Add failing onDuration test [`564243e`](https://github.com/CookPete/react-player/commit/564243e19449326eab30c163f9ffb82678fcf502)
-- Nest media switching test in a describe block [`2fe8806`](https://github.com/CookPete/react-player/commit/2fe8806996b915f59d5105b2f304018152c75a0b)
+- Rename seekOnReady to seekOnPlay [`91f7344`](https://github.com/cookpete/react-player/commit/91f73449e835c5e7bda30889e909510118f8c84f)
+- Add failing onDuration test [`564243e`](https://github.com/cookpete/react-player/commit/564243e19449326eab30c163f9ffb82678fcf502)
+- Nest media switching test in a describe block [`2fe8806`](https://github.com/cookpete/react-player/commit/2fe8806996b915f59d5105b2f304018152c75a0b)
+
+#### [v0.7.1](https://github.com/cookpete/react-player/compare/v0.7.0...v0.7.1)
-#### [v0.7.1](https://github.com/CookPete/react-player/compare/v0.7.0...v0.7.1)
> 1 June 2016
-- Update supported file type regex [`#68`](https://github.com/CookPete/react-player/pull/68)
-- Update README.md links [`#66`](https://github.com/CookPete/react-player/pull/66)
-- Tweak example usage [`eff2623`](https://github.com/CookPete/react-player/commit/eff2623b302312116ff0a6bd2e60aca04f2473e6)
-- make file extensions case insensitive [`6f0f346`](https://github.com/CookPete/react-player/commit/6f0f34682106bafa40b9a68de2d77d4f9425b1f5)
-- Add .mov to supported video file types [`0bd811e`](https://github.com/CookPete/react-player/commit/0bd811e4d376ec673b72bc67ececc9b1d4e912aa)
-#### [v0.7.0](https://github.com/CookPete/react-player/compare/v0.6.0...v0.7.0)
+- Update supported file type regex [`#68`](https://github.com/cookpete/react-player/pull/68)
+- Update README.md links [`#66`](https://github.com/cookpete/react-player/pull/66)
+- Tweak example usage [`eff2623`](https://github.com/cookpete/react-player/commit/eff2623b302312116ff0a6bd2e60aca04f2473e6)
+- make file extensions case insensitive [`6f0f346`](https://github.com/cookpete/react-player/commit/6f0f34682106bafa40b9a68de2d77d4f9425b1f5)
+- Update supported media readme [`c37e87e`](https://github.com/cookpete/react-player/commit/c37e87ee92665facf96e0d9c08ca5dfc654b99ec)
+
+#### [v0.7.0](https://github.com/cookpete/react-player/compare/v0.6.0...v0.7.0)
+
> 21 May 2016
+
- Use filePlayer for SoundCloud tracks [`#64`](https://github.com/CookPete/react-player/issues/64)
-- Add controls prop [`9a2ae22`](https://github.com/CookPete/react-player/commit/9a2ae229283e0c41ceea62ba01cdac243cf2bb82)
-- Tidy up filePlayer [`79c2d5a`](https://github.com/CookPete/react-player/commit/79c2d5a16f999628493c3ac7ce052960ae5be67a)
-- Skip FilePlayer onError test [`c4ed490`](https://github.com/CookPete/react-player/commit/c4ed49093f307ea7c844987d1f9e398a4dea5596)
+- Add controls prop [`9a2ae22`](https://github.com/cookpete/react-player/commit/9a2ae229283e0c41ceea62ba01cdac243cf2bb82)
+- Tidy up filePlayer [`79c2d5a`](https://github.com/cookpete/react-player/commit/79c2d5a16f999628493c3ac7ce052960ae5be67a)
+- Skip FilePlayer onError test [`c4ed490`](https://github.com/cookpete/react-player/commit/c4ed49093f307ea7c844987d1f9e398a4dea5596)
+
+#### [v0.6.0](https://github.com/cookpete/react-player/compare/v0.5.8...v0.6.0)
-#### [v0.6.0](https://github.com/CookPete/react-player/compare/v0.5.8...v0.6.0)
> 19 May 2016
+
- Add filePlayer config prop [`#62`](https://github.com/CookPete/react-player/issues/62)
- Add loop prop [`#57`](https://github.com/CookPete/react-player/issues/57)
- Add onStart prop [`#61`](https://github.com/CookPete/react-player/issues/61)
- Use fetch-jsonp for SoundCloud resolve endpoint [`#24`](https://github.com/CookPete/react-player/issues/24) [`#47`](https://github.com/CookPete/react-player/issues/47)
-- Remove class property semicolons [`0c8070d`](https://github.com/CookPete/react-player/commit/0c8070dbac394d40268b2df505672fbbd8befc2a)
-- Remove arrow function brackets [`cb71f30`](https://github.com/CookPete/react-player/commit/cb71f30975407638445e1038a1ee45edce73b021)
-- Bump packages [`fe8a871`](https://github.com/CookPete/react-player/commit/fe8a871a16996c3b9e31e044fa4e0b88bc5a2d22)
+- Remove class property semicolons [`0c8070d`](https://github.com/cookpete/react-player/commit/0c8070dbac394d40268b2df505672fbbd8befc2a)
+- Remove arrow function brackets [`cb71f30`](https://github.com/cookpete/react-player/commit/cb71f30975407638445e1038a1ee45edce73b021)
+- Add contribution guidelines [`16f515d`](https://github.com/cookpete/react-player/commit/16f515ddf693c18d5b5916b3f85ffb0cca551e3c)
+
+#### [v0.5.8](https://github.com/cookpete/react-player/compare/v0.5.7...v0.5.8)
-#### [v0.5.8](https://github.com/CookPete/react-player/compare/v0.5.7...v0.5.8)
> 19 April 2016
+
- Bump packages [`#56`](https://github.com/CookPete/react-player/issues/56)
-- Better canPlay test grouping [`f528ade`](https://github.com/CookPete/react-player/commit/f528ade2ef7a8403c3a517fa52818dce6f07f6f7)
-- Fix test descriptions [`0ce6c6b`](https://github.com/CookPete/react-player/commit/0ce6c6b252a61253bc1851ab822668c91b3dfc46)
-- Increase onPause test delay [`2449cf7`](https://github.com/CookPete/react-player/commit/2449cf75a5d166313296000b73abc60f28cfa160)
+- Better canPlay test grouping [`f528ade`](https://github.com/cookpete/react-player/commit/f528ade2ef7a8403c3a517fa52818dce6f07f6f7)
+- Move all tests to Karma [`bbefce0`](https://github.com/cookpete/react-player/commit/bbefce019a8620829c6f663d6536a15caa587ea1)
+- Add footer to demo [`546678c`](https://github.com/cookpete/react-player/commit/546678c33c2ea1331ed7f63712f40687c83b73be)
+
+#### [v0.5.7](https://github.com/cookpete/react-player/compare/v0.5.6...v0.5.7)
-#### [v0.5.7](https://github.com/CookPete/react-player/compare/v0.5.6...v0.5.7)
> 13 April 2016
-- Pass on error event [`#48`](https://github.com/CookPete/react-player/pull/48)
-- Add FilePlayer support for urls with query string [`#45`](https://github.com/CookPete/react-player/pull/45)
+
+- Pass on error event [`#48`](https://github.com/cookpete/react-player/pull/48)
+- Add FilePlayer support for urls with query string [`#45`](https://github.com/cookpete/react-player/pull/45)
- Add progressFrequency prop [`#50`](https://github.com/CookPete/react-player/issues/50)
- Only include played amount in onProgress when playing [`#51`](https://github.com/CookPete/react-player/issues/51)
-- Pass on event including error message and code onError [`#44`](https://github.com/CookPete/react-player/issues/44)
-- Add default props to readme [`2abb25e`](https://github.com/CookPete/react-player/commit/2abb25e68b6e5caa7d68e3cbfeab63789add2728)
-- Specify https in YouTube SDK location [`c05bd9d`](https://github.com/CookPete/react-player/commit/c05bd9dff3a8595c5bb2e53c33ddaf8db8c894de)
-- Add shameless rplayr plug to readme [`93e84a4`](https://github.com/CookPete/react-player/commit/93e84a47ece7ec5447e2f927b18d4338de9c674b)
+- Pass on event including error message and code onError [`#44`](https://github.com/cookpete/react-player/issues/44)
+- Add default props to readme [`2abb25e`](https://github.com/cookpete/react-player/commit/2abb25e68b6e5caa7d68e3cbfeab63789add2728)
+- Ignore dist when linting [`1740ca6`](https://github.com/cookpete/react-player/commit/1740ca6cb58d8b6f274074f364e385f2b107292b)
+- Specify https in YouTube SDK location [`c05bd9d`](https://github.com/cookpete/react-player/commit/c05bd9dff3a8595c5bb2e53c33ddaf8db8c894de)
+
+#### [v0.5.6](https://github.com/cookpete/react-player/compare/v0.5.5...v0.5.6)
-#### [v0.5.6](https://github.com/CookPete/react-player/compare/v0.5.5...v0.5.6)
> 8 March 2016
+
- Fix bower support [`#42`](https://github.com/CookPete/react-player/issues/42)
- Update readme with mobile considerations [`#41`](https://github.com/CookPete/react-player/issues/41)
-- Remove comments from production builds [`03a4e22`](https://github.com/CookPete/react-player/commit/03a4e22a80f8c64fdc31acc33829b88ac15c85d5)
-- Fix browser build [`78463b2`](https://github.com/CookPete/react-player/commit/78463b2592a12eac990673a991aada66f86b1434)
-- Bump karma-mocha-reporter [`98bc28a`](https://github.com/CookPete/react-player/commit/98bc28a9d9200f6ce0d4545abc352481701839cd)
+- Remove comments from production builds [`03a4e22`](https://github.com/cookpete/react-player/commit/03a4e22a80f8c64fdc31acc33829b88ac15c85d5)
+- Fix browser build [`78463b2`](https://github.com/cookpete/react-player/commit/78463b2592a12eac990673a991aada66f86b1434)
+- Bump karma-mocha-reporter [`98bc28a`](https://github.com/cookpete/react-player/commit/98bc28a9d9200f6ce0d4545abc352481701839cd)
+
+#### [v0.5.5](https://github.com/cookpete/react-player/compare/v0.5.4...v0.5.5)
-#### [v0.5.5](https://github.com/CookPete/react-player/compare/v0.5.4...v0.5.5)
> 29 February 2016
+
- Add browser build [`#35`](https://github.com/CookPete/react-player/issues/35) [`#38`](https://github.com/CookPete/react-player/issues/38)
- Add promise and fetch polyfills to build [`#39`](https://github.com/CookPete/react-player/issues/39)
-- Add bower.json [`e95ee66`](https://github.com/CookPete/react-player/commit/e95ee66ffeeeb50bcf2e7666c1b90fa2676d6688)
-- Update license in package.json to match LICENSE file [`6f1d021`](https://github.com/CookPete/react-player/commit/6f1d0210a9a8920f5a7e2e0ea3c2f20f5b2d2945)
-- Bump snazzy [`f3d3050`](https://github.com/CookPete/react-player/commit/f3d3050aec264a54c4a251bfed20f1600b8ffe1d)
+- Update standard code style [`7231c45`](https://github.com/cookpete/react-player/commit/7231c458fb0af80370f308d3d77aab71c226aac6)
+- Add bower.json [`e95ee66`](https://github.com/cookpete/react-player/commit/e95ee66ffeeeb50bcf2e7666c1b90fa2676d6688)
+- Add react-component keyword [`fb50625`](https://github.com/cookpete/react-player/commit/fb506250f35efaa228f34d49ad67f2a0a1a36d44)
+
+#### [v0.5.4](https://github.com/cookpete/react-player/compare/v0.5.3...v0.5.4)
-#### [v0.5.4](https://github.com/CookPete/react-player/compare/v0.5.3...v0.5.4)
> 3 February 2016
-- Remove the need for array.find polyfill [`7aa4719`](https://github.com/CookPete/react-player/commit/7aa471943def19d9e9b0abab3cf1172cb1db1cb1)
-- Bump and move array.prototype.find [`736ef37`](https://github.com/CookPete/react-player/commit/736ef376055dafbc6a6cd668f0897a4de0bcf663)
-- Add sshpass to travis [`84f889e`](https://github.com/CookPete/react-player/commit/84f889e861348db36577685be608e66fa4c2ad12)
-#### [v0.5.3](https://github.com/CookPete/react-player/compare/v0.5.2...v0.5.3)
+- Remove the need for array.find polyfill [`7aa4719`](https://github.com/cookpete/react-player/commit/7aa471943def19d9e9b0abab3cf1172cb1db1cb1)
+- Add demo deployment to travis build [`60bcaf6`](https://github.com/cookpete/react-player/commit/60bcaf6aa7c0b100a514c495ff521a42cdfe1235)
+- Tweak YouTube default playerVars [`b99e6d9`](https://github.com/cookpete/react-player/commit/b99e6d94e7534e7a8d8e434eaf4473b4ca480601)
+
+#### [v0.5.3](https://github.com/cookpete/react-player/compare/v0.5.2...v0.5.3)
+
> 26 January 2016
-- Better karma test grouping [`8a3d4e8`](https://github.com/CookPete/react-player/commit/8a3d4e83944466945002634c84a1c1bfa5035fd9)
-- Cache SoundCloud song data requests [`27f002f`](https://github.com/CookPete/react-player/commit/27f002f6438c92a06cc48c93e59fbb8ecf42b056)
-- Bump whatwg-fetch [`0bed37b`](https://github.com/CookPete/react-player/commit/0bed37b27167cff72b385aeee304324162080e8a)
-#### [v0.5.2](https://github.com/CookPete/react-player/compare/v0.5.1...v0.5.2)
+- Support YouTube start time param [`7908463`](https://github.com/cookpete/react-player/commit/7908463d2dc1d3f59910432edd45460da152d426)
+- Better karma test grouping [`8a3d4e8`](https://github.com/cookpete/react-player/commit/8a3d4e83944466945002634c84a1c1bfa5035fd9)
+- Better SoundCloud error handling [`bce57af`](https://github.com/cookpete/react-player/commit/bce57af06f3296587f75dea7e5a87d4da2c8e6a9)
+
+#### [v0.5.2](https://github.com/cookpete/react-player/compare/v0.5.1...v0.5.2)
+
> 25 January 2016
+
- Vimeo fullscreen support [`#33`](https://github.com/CookPete/react-player/issues/33)
-- Tweak readme [`a741b2c`](https://github.com/CookPete/react-player/commit/a741b2c381dae449916895ce13f81e14dccf3afa)
-- Add preload to propTypes [`ad05a91`](https://github.com/CookPete/react-player/commit/ad05a91622fd050b69f290720a7a7fe9b8881df7)
+- Tweak readme [`a741b2c`](https://github.com/cookpete/react-player/commit/a741b2c381dae449916895ce13f81e14dccf3afa)
+- Add preload to propTypes [`ad05a91`](https://github.com/cookpete/react-player/commit/ad05a91622fd050b69f290720a7a7fe9b8881df7)
+
+#### [v0.5.1](https://github.com/cookpete/react-player/compare/v0.5.0...v0.5.1)
-#### [v0.5.1](https://github.com/CookPete/react-player/compare/v0.5.0...v0.5.1)
> 21 January 2016
+
- Move onDuration callback from onReady to onPlay [`#31`](https://github.com/CookPete/react-player/issues/31)
-- Destructure state in demo render method [`6ed327d`](https://github.com/CookPete/react-player/commit/6ed327db830a9b0ea98acf111b94122b6f4c8418)
-- Add simple Duration component to improve demo [`d42c6d3`](https://github.com/CookPete/react-player/commit/d42c6d3c4c1e323e8d856b0a2b2c95e526d55e81)
-- Change onProgress frequency to 1 second [`45746d9`](https://github.com/CookPete/react-player/commit/45746d96ebef9a290fca4a88deaeaa83843ca4ad)
+- Destructure state in demo render method [`6ed327d`](https://github.com/cookpete/react-player/commit/6ed327db830a9b0ea98acf111b94122b6f4c8418)
+- Add simple Duration component to improve demo [`d42c6d3`](https://github.com/cookpete/react-player/commit/d42c6d3c4c1e323e8d856b0a2b2c95e526d55e81)
+- Change onProgress frequency to 1 second [`45746d9`](https://github.com/cookpete/react-player/commit/45746d96ebef9a290fca4a88deaeaa83843ca4ad)
+
+#### [v0.5.0](https://github.com/cookpete/react-player/compare/v0.4.2...v0.5.0)
-#### [v0.5.0](https://github.com/CookPete/react-player/compare/v0.4.2...v0.5.0)
> 14 January 2016
+
- Add onDuration prop [`#28`](https://github.com/CookPete/react-player/issues/28)
-- Ensure YouTube player calls onReady on subsequent loads [`3a997bb`](https://github.com/CookPete/react-player/commit/3a997bb63878ccff551a12e8e076f63b8cf208a3)
-- Ensure vimeo player has duration before calling onReady [`8b31a8f`](https://github.com/CookPete/react-player/commit/8b31a8ff77aa57b611996670b9b09d2d9b9aeae8)
-- Add live demo to readme [`4aa8a29`](https://github.com/CookPete/react-player/commit/4aa8a292f2e3ee20f79e4a815d09f353da6a553d)
+- Ensure YouTube player calls onReady on subsequent loads [`3a997bb`](https://github.com/cookpete/react-player/commit/3a997bb63878ccff551a12e8e076f63b8cf208a3)
+- Ensure vimeo player has duration before calling onReady [`8b31a8f`](https://github.com/cookpete/react-player/commit/8b31a8ff77aa57b611996670b9b09d2d9b9aeae8)
+- Add live demo to readme [`4aa8a29`](https://github.com/cookpete/react-player/commit/4aa8a292f2e3ee20f79e4a815d09f353da6a553d)
+
+#### [v0.4.2](https://github.com/cookpete/react-player/compare/v0.4.1...v0.4.2)
-#### [v0.4.2](https://github.com/CookPete/react-player/compare/v0.4.1...v0.4.2)
> 11 January 2016
+
- Add semicolons to class properties [`#27`](https://github.com/CookPete/react-player/issues/27)
- Limit Travis to just basic tests [`#26`](https://github.com/CookPete/react-player/issues/26)
-- Bump packages [`21f03b2`](https://github.com/CookPete/react-player/commit/21f03b2309951456c86567c1ff254628814af224)
+- Bump packages [`21f03b2`](https://github.com/cookpete/react-player/commit/21f03b2309951456c86567c1ff254628814af224)
+
+#### [v0.4.1](https://github.com/cookpete/react-player/compare/v0.4.0...v0.4.1)
-#### [v0.4.1](https://github.com/CookPete/react-player/compare/v0.4.0...v0.4.1)
> 11 January 2016
-- Add more files to .npmignore [`1cd8052`](https://github.com/CookPete/react-player/commit/1cd80526d32a5b060208b3d1e7883adcfcd7cfe6)
-- Update auto-changelog [`1cebd28`](https://github.com/CookPete/react-player/commit/1cebd28b25d66713204b5920052c8979d84c234d)
-- Fix npm badge link [`f6a146b`](https://github.com/CookPete/react-player/commit/f6a146b3904934dcd10287100400e54aeeb50541)
-#### [v0.4.0](https://github.com/CookPete/react-player/compare/v0.3.7...v0.4.0)
+- Add more files to .npmignore [`1cd8052`](https://github.com/cookpete/react-player/commit/1cd80526d32a5b060208b3d1e7883adcfcd7cfe6)
+- Update auto-changelog [`1cebd28`](https://github.com/cookpete/react-player/commit/1cebd28b25d66713204b5920052c8979d84c234d)
+- Fix npm badge link [`f6a146b`](https://github.com/cookpete/react-player/commit/f6a146b3904934dcd10287100400e54aeeb50541)
+
+#### [v0.4.0](https://github.com/cookpete/react-player/compare/v0.3.7...v0.4.0)
+
> 9 January 2016
-- Use react-transform development setup [`#25`](https://github.com/CookPete/react-player/pull/25)
+
+- Use react-transform development setup [`#25`](https://github.com/cookpete/react-player/pull/25)
- Add basic karma testing [`#22`](https://github.com/CookPete/react-player/issues/22)
- Rebase on react-transform-boilerplate [`#8`](https://github.com/CookPete/react-player/issues/8)
-- Add styles and various fixes to the demo app [`0b16606`](https://github.com/CookPete/react-player/commit/0b16606615252a2584f6380912208b11b1df81c4)
-- Separate demo files [`c7230e7`](https://github.com/CookPete/react-player/commit/c7230e71d69d4e06b4de266c692b457e7a7c421f)
-- Fix FilePlayer width and height [`97eb231`](https://github.com/CookPete/react-player/commit/97eb2312e4faa4cd221119c502cf17825b603f6c)
+- Add styles and various fixes to the demo app [`0b16606`](https://github.com/cookpete/react-player/commit/0b16606615252a2584f6380912208b11b1df81c4)
+- Use a partial shrinkwrap to limit babel packages to 6.3 [`e9bcd72`](https://github.com/cookpete/react-player/commit/e9bcd72a16554231d0b9079944b3b99934011fbc)
+- Separate demo files [`c7230e7`](https://github.com/cookpete/react-player/commit/c7230e71d69d4e06b4de266c692b457e7a7c421f)
+
+#### [v0.3.7](https://github.com/cookpete/react-player/compare/v0.3.6...v0.3.7)
-#### [v0.3.7](https://github.com/CookPete/react-player/compare/v0.3.6...v0.3.7)
> 4 January 2016
+
- When seeking before player is ready, store value and seek later [`#19`](https://github.com/CookPete/react-player/issues/19)
-- Remove redundant soundcloud player options [`647fa9e`](https://github.com/CookPete/react-player/commit/647fa9ef1eb0150dd322614ad74b339439830b50)
-- Prevent IndexSizeError in FilePlayer [`ba31958`](https://github.com/CookPete/react-player/commit/ba31958aeaf11da9a0ef56915db311b3c5881181)
-- Fix FilePlayer not loading on mount [`00f9671`](https://github.com/CookPete/react-player/commit/00f9671a12bf09d0160653391a680165d6098adf)
+- Remove redundant soundcloud player options [`647fa9e`](https://github.com/cookpete/react-player/commit/647fa9ef1eb0150dd322614ad74b339439830b50)
+- Prevent IndexSizeError in FilePlayer [`ba31958`](https://github.com/cookpete/react-player/commit/ba31958aeaf11da9a0ef56915db311b3c5881181)
+- Fix FilePlayer not loading on mount [`00f9671`](https://github.com/cookpete/react-player/commit/00f9671a12bf09d0160653391a680165d6098adf)
+
+#### [v0.3.6](https://github.com/cookpete/react-player/compare/v0.3.5...v0.3.6)
-#### [v0.3.6](https://github.com/CookPete/react-player/compare/v0.3.5...v0.3.6)
> 4 January 2016
-- Ensure volume on subsequent youtube loads [`5895663`](https://github.com/CookPete/react-player/commit/58956633754073e0c3d9316da9cadfd4a49a823c)
-#### [v0.3.5](https://github.com/CookPete/react-player/compare/v0.3.4...v0.3.5)
+- Ensure volume on subsequent youtube loads [`5895663`](https://github.com/cookpete/react-player/commit/58956633754073e0c3d9316da9cadfd4a49a823c)
+
+#### [v0.3.5](https://github.com/cookpete/react-player/compare/v0.3.4...v0.3.5)
+
> 4 January 2016
-- Fix YouTube onReady bugs [`#21`](https://github.com/CookPete/react-player/pull/21)
+
+- Fix YouTube onReady bugs [`#21`](https://github.com/cookpete/react-player/pull/21)
- Set isReady before setVolume in onReady [`#23`](https://github.com/CookPete/react-player/issues/23)
- Handle YouTube URL change during SDK load [`#20`](https://github.com/CookPete/react-player/issues/20)
-- Tidy up YouTube code [`64c952f`](https://github.com/CookPete/react-player/commit/64c952f31ca5397a13fbdbd35e3485dd2dbfc466)
-- Lint and test before versioning [`fdf2fa3`](https://github.com/CookPete/react-player/commit/fdf2fa39136b1286d0859af9b86cc253b9354743)
+- Tidy up YouTube code [`64c952f`](https://github.com/cookpete/react-player/commit/64c952f31ca5397a13fbdbd35e3485dd2dbfc466)
+- Lint and test before versioning [`fdf2fa3`](https://github.com/cookpete/react-player/commit/fdf2fa39136b1286d0859af9b86cc253b9354743)
+
+#### [v0.3.4](https://github.com/cookpete/react-player/compare/v0.3.3...v0.3.4)
-#### [v0.3.4](https://github.com/CookPete/react-player/compare/v0.3.3...v0.3.4)
> 3 January 2016
-- Update readme badges [`6d0503c`](https://github.com/CookPete/react-player/commit/6d0503c7d6706063394301af61db342caeff9272)
-- Fix YouTube pause guard [`1f8d372`](https://github.com/CookPete/react-player/commit/1f8d3720239353c496db3076b306cc52e99607dd)
-#### [v0.3.3](https://github.com/CookPete/react-player/compare/v0.3.2...v0.3.3)
+- Update readme badges [`6d0503c`](https://github.com/cookpete/react-player/commit/6d0503c7d6706063394301af61db342caeff9272)
+- Fix YouTube pause guard [`1f8d372`](https://github.com/cookpete/react-player/commit/1f8d3720239353c496db3076b306cc52e99607dd)
+
+#### [v0.3.3](https://github.com/cookpete/react-player/compare/v0.3.2...v0.3.3)
+
> 2 January 2016
-- Stronger guards for YouTube player methods [`f18792a`](https://github.com/CookPete/react-player/commit/f18792a2da3167f775d48481aa8eae150b747d4d)
-#### [v0.3.2](https://github.com/CookPete/react-player/compare/v0.3.1...v0.3.2)
+- Stronger guards for YouTube player methods [`f18792a`](https://github.com/cookpete/react-player/commit/f18792a2da3167f775d48481aa8eae150b747d4d)
+
+#### [v0.3.2](https://github.com/cookpete/react-player/compare/v0.3.1...v0.3.2)
+
> 2 January 2016
+
- Use explicit isReady property to guard player methods [`#18`](https://github.com/CookPete/react-player/issues/18)
-- Improve progress logic [`b0b3040`](https://github.com/CookPete/react-player/commit/b0b304049847d9568585bc11399fa6cfa4cab5dc)
-- Start using auto-changelog [`373b698`](https://github.com/CookPete/react-player/commit/373b698a49f2f35a37084fa3e59e4d0a7af971db)
-- Add onProgress propType [`3f22681`](https://github.com/CookPete/react-player/commit/3f22681bcba3ad5c10ed1516abdcfb3bf6b8bad8)
+- Improve progress logic [`b0b3040`](https://github.com/cookpete/react-player/commit/b0b304049847d9568585bc11399fa6cfa4cab5dc)
+- Remove propTypes and defaultProps from players [`796edd1`](https://github.com/cookpete/react-player/commit/796edd129a6aaea148dcd72ea897321e66cae0c1)
+- Start using auto-changelog [`373b698`](https://github.com/cookpete/react-player/commit/373b698a49f2f35a37084fa3e59e4d0a7af971db)
+
+#### [v0.3.1](https://github.com/cookpete/react-player/compare/v0.3.0...v0.3.1)
-#### [v0.3.1](https://github.com/CookPete/react-player/compare/v0.3.0...v0.3.1)
> 27 December 2015
+
- Use displayNames for players [`#17`](https://github.com/CookPete/react-player/issues/17)
-- Fix changelog link [`f82b351`](https://github.com/CookPete/react-player/commit/f82b351aa6008d2cbb2e3bd95859d8a90a8e49d9)
+- Fix changelog link [`f82b351`](https://github.com/cookpete/react-player/commit/f82b351aa6008d2cbb2e3bd95859d8a90a8e49d9)
-#### [v0.3.0](https://github.com/CookPete/react-player/compare/v0.2.1...v0.3.0)
-> 24 December 2015
-- Prime players to enable autoplay when out of focus [`#13`](https://github.com/CookPete/react-player/pull/13)
+#### [v0.3.0](https://github.com/cookpete/react-player/compare/v0.2.1...v0.3.0)
+
+> 25 December 2015
+
+- Prime players to enable autoplay when out of focus [`#13`](https://github.com/cookpete/react-player/pull/13)
- Enable multiple YouTube players [`#15`](https://github.com/CookPete/react-player/issues/15)
- Prime Youtube and Vimeo players with a blank video [`#7`](https://github.com/CookPete/react-player/issues/7)
-- Move defaultProps to separate props file [`90ef334`](https://github.com/CookPete/react-player/commit/90ef33485369fc7892d11b2e4da04ffb64df1e99)
-- Move progress logic from players to top level component [`17fbef8`](https://github.com/CookPete/react-player/commit/17fbef87e82889f01d8257900f7edc55b05918a2)
-- Clean up shouldComponentUpdate logic [`430307e`](https://github.com/CookPete/react-player/commit/430307eed07e17ac690e4cdf55e28ebb14854e5e)
+- Move defaultProps to separate props file [`90ef334`](https://github.com/cookpete/react-player/commit/90ef33485369fc7892d11b2e4da04ffb64df1e99)
+- Always render every player [`158fdde`](https://github.com/cookpete/react-player/commit/158fdde54b6188c9f9ca3034e9cb5bcc3fe3ff69)
+- Move progress logic from players to top level component [`17fbef8`](https://github.com/cookpete/react-player/commit/17fbef87e82889f01d8257900f7edc55b05918a2)
+
+#### [v0.2.1](https://github.com/cookpete/react-player/compare/v0.2.0...v0.2.1)
-#### [v0.2.1](https://github.com/CookPete/react-player/compare/v0.2.0...v0.2.1)
> 13 November 2015
+
- Remove autoplay and only play if props.playing is true when ready [`#10`](https://github.com/CookPete/react-player/issues/10)
-- Be a bit more const-friendly [`a15700a`](https://github.com/CookPete/react-player/commit/a15700ac95349037ea6f4d9f52fddeff9530bbf5)
-- Better npm publish cleanup scripts [`821be95`](https://github.com/CookPete/react-player/commit/821be95265fb774e904c24ff553997b94b7b2e42)
-- Add onError support to FilePlayer [`63f1660`](https://github.com/CookPete/react-player/commit/63f1660890c8d4f6ce8912537167bc4fdf621020)
+- Be a bit more const-friendly [`a15700a`](https://github.com/cookpete/react-player/commit/a15700ac95349037ea6f4d9f52fddeff9530bbf5)
+- Better npm publish cleanup scripts [`821be95`](https://github.com/cookpete/react-player/commit/821be95265fb774e904c24ff553997b94b7b2e42)
+- Add onError support to FilePlayer [`63f1660`](https://github.com/cookpete/react-player/commit/63f1660890c8d4f6ce8912537167bc4fdf621020)
+
+#### [v0.2.0](https://github.com/cookpete/react-player/compare/v0.1.0...v0.2.0)
-#### [v0.2.0](https://github.com/CookPete/react-player/compare/v0.1.0...v0.2.0)
> 6 November 2015
-- Configuration [`#4`](https://github.com/CookPete/react-player/pull/4)
+
+- Configuration [`#4`](https://github.com/cookpete/react-player/pull/4)
- Abort SoundCloud streaming if url changes during requests [`#6`](https://github.com/CookPete/react-player/issues/6)
-- Add dependency checks to readme [`46cb86c`](https://github.com/CookPete/react-player/commit/46cb86c6c3b8d40714e53ef5c70833abeba85faf)
-- Add lint to travis scripts [`f06732c`](https://github.com/CookPete/react-player/commit/f06732c17c89c27d8c4fbe38bb8a6ca40cc01b7e)
-- Lint fix [`73fb9cf`](https://github.com/CookPete/react-player/commit/73fb9cf2d6a2dd4662113e3984643369ea2589e4)
+- pass configuration options to players via props [`f1395d1`](https://github.com/cookpete/react-player/commit/f1395d134a05b36db1736179e0b58ac9bc6bd76c)
+- Add change log [`28dfdad`](https://github.com/cookpete/react-player/commit/28dfdad7983f51a1c5271cbcfc6971d43fd78108)
+- Update readme [`e99df95`](https://github.com/cookpete/react-player/commit/e99df95a0aea6cd0ad151fa063678244b10f05af)
+
+#### [v0.1.0](https://github.com/cookpete/react-player/compare/v0.0.8...v0.1.0)
-#### [v0.1.0](https://github.com/CookPete/react-player/compare/v0.0.8...v0.1.0)
> 19 October 2015
-- Add very basic shallow rendering tests [`7beccbe`](https://github.com/CookPete/react-player/commit/7beccbec2746029ef068d3f990fcc349257092f6)
-- Vimeo player improvements [`d308aa6`](https://github.com/CookPete/react-player/commit/d308aa62c70d902f95c1184d704f54ee1fcc98d3)
-- Update React to v0.14 [`6cd433f`](https://github.com/CookPete/react-player/commit/6cd433f530efca0156f43dffdfd4e01cc9f149d5)
-#### [v0.0.8](https://github.com/CookPete/react-player/compare/v0.0.7...v0.0.8)
+- Add FilePlayer for HTML5 media files [`66482d5`](https://github.com/cookpete/react-player/commit/66482d51c38f3967c378160e31fcd29a28ec4616)
+- Add very basic shallow rendering tests [`7beccbe`](https://github.com/cookpete/react-player/commit/7beccbec2746029ef068d3f990fcc349257092f6)
+- Vimeo player improvements [`d308aa6`](https://github.com/cookpete/react-player/commit/d308aa62c70d902f95c1184d704f54ee1fcc98d3)
+
+#### [v0.0.8](https://github.com/cookpete/react-player/compare/v0.0.7...v0.0.8)
+
> 20 September 2015
+
- Use findDOMNode [`#3`](https://github.com/CookPete/react-player/issues/3)
-- Add basic unit tests for static canPlay method [`f1cde2c`](https://github.com/CookPete/react-player/commit/f1cde2c4fd6a939e944e82621908c26814a4b88b)
-- Improve SoundCloud URL regex [`3c4c5fa`](https://github.com/CookPete/react-player/commit/3c4c5fabc4f7440cd9931bd984174baf0f62dcce)
+- Add basic unit tests for static canPlay method [`f1cde2c`](https://github.com/cookpete/react-player/commit/f1cde2c4fd6a939e944e82621908c26814a4b88b)
+- Improve SoundCloud URL regex [`3c4c5fa`](https://github.com/cookpete/react-player/commit/3c4c5fabc4f7440cd9931bd984174baf0f62dcce)
+
+#### [v0.0.7](https://github.com/cookpete/react-player/compare/v0.0.6...v0.0.7)
-#### [v0.0.7](https://github.com/CookPete/react-player/compare/v0.0.6...v0.0.7)
> 10 September 2015
+
- Guard against no iframe contentWindow in Vimeo player [`#2`](https://github.com/CookPete/react-player/pull/2)
- Set correct initial state in ReactPlayer [`#2`](https://github.com/CookPete/react-player/pull/2)
-- Stop soundcloud track before playing another [`61bc61e`](https://github.com/CookPete/react-player/commit/61bc61e56fc5c7c2550d2a5e36bc072ae447329b)
+- Stop soundcloud track before playing another [`61bc61e`](https://github.com/cookpete/react-player/commit/61bc61e56fc5c7c2550d2a5e36bc072ae447329b)
+
+#### [v0.0.6](https://github.com/cookpete/react-player/compare/v0.0.5...v0.0.6)
-#### [v0.0.6](https://github.com/CookPete/react-player/compare/v0.0.5...v0.0.6)
> 31 August 2015
-- Use shouldComponentUpdate to prevent unnecessary rendering [`b7ca5a6`](https://github.com/CookPete/react-player/commit/b7ca5a66ff91578a49da76c5efeac5ddd45959db)
-- Fix onProgress bug [`1bf018e`](https://github.com/CookPete/react-player/commit/1bf018ed5db4474ee9ba1f103e6df77983565875)
-#### [v0.0.5](https://github.com/CookPete/react-player/compare/v0.0.4...v0.0.5)
+- Use shouldComponentUpdate to prevent unnecessary rendering [`b7ca5a6`](https://github.com/cookpete/react-player/commit/b7ca5a66ff91578a49da76c5efeac5ddd45959db)
+- Fix onProgress bug [`1bf018e`](https://github.com/cookpete/react-player/commit/1bf018ed5db4474ee9ba1f103e6df77983565875)
+
+#### [v0.0.5](https://github.com/cookpete/react-player/compare/v0.0.4...v0.0.5)
+
> 27 August 2015
-- Use external propTypes file [`225dfa0`](https://github.com/CookPete/react-player/commit/225dfa073e63206dca65202ce3cf4f23e56c84db)
-- Add onError support [`df8dc61`](https://github.com/CookPete/react-player/commit/df8dc61582af5202e3eeb8d6141465be5ed1bf84)
-- Add .npmignore [`81adedc`](https://github.com/CookPete/react-player/commit/81adedc585e4cf0b6380ccb08f3ff613e7eed6c6)
-#### [v0.0.4](https://github.com/CookPete/react-player/compare/v0.0.3...v0.0.4)
+- Use external propTypes file [`225dfa0`](https://github.com/cookpete/react-player/commit/225dfa073e63206dca65202ce3cf4f23e56c84db)
+- Add onError support [`df8dc61`](https://github.com/cookpete/react-player/commit/df8dc61582af5202e3eeb8d6141465be5ed1bf84)
+- Add .npmignore [`81adedc`](https://github.com/cookpete/react-player/commit/81adedc585e4cf0b6380ccb08f3ff613e7eed6c6)
+
+#### [v0.0.4](https://github.com/cookpete/react-player/compare/v0.0.3...v0.0.4)
+
> 27 August 2015
+
- Add Array.find() polyfill [`#1`](https://github.com/CookPete/react-player/issues/1)
- Add fetch polyfill libraries to package.json [`#1`](https://github.com/CookPete/react-player/issues/1)
-#### [v0.0.3](https://github.com/CookPete/react-player/compare/v0.0.2...v0.0.3)
+#### [v0.0.3](https://github.com/cookpete/react-player/compare/v0.0.2...v0.0.3)
+
> 26 August 2015
-- Update build script [`c9b627f`](https://github.com/CookPete/react-player/commit/c9b627ff9a2e146822d169c89b4ea265f2296f8e)
-- Update readme [`2ec1b86`](https://github.com/CookPete/react-player/commit/2ec1b86aad52e8bf3080d607e140762e4e268216)
+
+- Update build script [`c9b627f`](https://github.com/cookpete/react-player/commit/c9b627ff9a2e146822d169c89b4ea265f2296f8e)
+- Update readme [`2ec1b86`](https://github.com/cookpete/react-player/commit/2ec1b86aad52e8bf3080d607e140762e4e268216)
#### v0.0.2
+
> 24 August 2015
-- Move react package to dev and peer dependencies [`f42ea0c`](https://github.com/CookPete/react-player/commit/f42ea0c73683d4c6e486a89684b4d6bb633a6969)
-- First commit [`a4deecf`](https://github.com/CookPete/react-player/commit/a4deecfa421645e8e79ac9e33debe64d5b028dae)
+- First commit [`a4deecf`](https://github.com/cookpete/react-player/commit/a4deecfa421645e8e79ac9e33debe64d5b028dae)
+- Move react package to dev and peer dependencies [`f42ea0c`](https://github.com/cookpete/react-player/commit/f42ea0c73683d4c6e486a89684b4d6bb633a6969)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 255c8010a..ada2e14c5 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -14,7 +14,7 @@ open http://localhost:3000
## `dist` files
-There is **no need** to build or commit files in `dist` after making changes. The `dist` files are only there for [bower](http://bower.io) support, and there is very little point in polluting every commit or pull request with the changes. The `dist` files will be automatically built and commmited when new versions are released, so your changes will be included then.
+There is **no need** to build or commit files in `dist` after making changes. The `dist` files are only there for [bower](http://bower.io) support, and there is very little point in polluting every commit or pull request with the changes. The `dist` files will be automatically built and committed when new versions are released, so your changes will be included then.
## Linting
diff --git a/LICENSE.md b/LICENSE.md
index 8fb1c5cf4..c19d990b4 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,6 +1,6 @@
The MIT License
-Copyright (c) 2017 Pete Cook http://cookpete.com
+Copyright © Pete Cook http://cookpete.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/MIGRATING.md b/MIGRATING.md
new file mode 100644
index 000000000..6ed6a3f0c
--- /dev/null
+++ b/MIGRATING.md
@@ -0,0 +1,153 @@
+## Migrating to `v3.0`
+
+Breaking changes are in 🔥 __bold and on fire__.
+
+### Some player providers are not supported yet
+
+Since `v3.0` is a new architecture not all providers have been updated.
+It is recommended to keep using `v2` and vote to add this provider to `v3` in [discussions](https://github.com/cookpete/react-player/discussions).
+These include:
+
+ - `Dailymotion`
+ - `SoundCloud`
+ - `Streamable`
+ - `Twitch`
+ - `Facebook`
+ - `Mixcloud`
+ - `Kaltura`
+
+### Lazy players
+
+As of `v3.0` all the players are lazy loaded by default.
+Due to the use of `lazy` and `Suspense`, 🔥 __React 16.6 or later is now required__.
+
+### Player props
+
+As of `v3.0` some player props are renamed to be closer to the native
+[HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement) naming.
+
+- 🔥 __`url` => `src`__
+- 🔥 __`playsinline` => `playsInline`__
+- 🔥 __`progressInterval`__ deprecated
+- 🔥 __`stopOnUnmount`__ deprecated
+- 🔥 __`wrapper`__ is `undefined` by default. Set to `div` if you want a wrapper element.
+
+### Player instance methods
+
+As of `v3.0` use [`ref`](https://react.dev/learn/manipulating-the-dom-with-refs) to call instance methods on the player. See [the demo app](examples/react/src/App.tsx) for an example of this. Since `v3`, the instance methods aim to be 🔥 __compatible
+with the [HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement) interface__.
+
+### Player callback props
+
+As of `v3.0` some player callback props are renamed to be closer to the native
+[HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement) event naming.
+
+- 🔥 __`onProgress` => `onTimeUpdate` and `onProgress`__
+- 🔥 __`onDuration` => `onDurationChange`__
+- 🔥 __`onPlaybackRateChange` => `onRateChange`__
+- 🔥 __`onSeek` => `onSeeking` and `onSeeked`__
+- 🔥 __`onBuffer` => `onWaiting`__
+- 🔥 __`onBufferEnd` => `onPlaying`__
+- 🔥 __`onEnablePIP` => `onEnterPictureInPicture`__
+- 🔥 __`onDisablePIP` => `onLeavePictureInPicture`__
+
+
+## Migrating to `v2.0`
+
+Breaking changes are in 🔥 __bold and on fire__.
+
+### Lazy players
+
+As of `v2.2`, if your build system supports `import()` statements, use `react-player/lazy` to [lazy load](https://reactjs.org/docs/code-splitting.html#reactlazy) the appropriate player for the `url` you pass in. This adds several `reactPlayer` chunks to your output, but reduces your main bundle size.
+
+Due to the use of `lazy` and `Suspense`, 🔥 __React 16.6 or later is now required__.
+
+```jsx
+// Before
+import ReactPlayer from 'react-player'
+
+// After
+import ReactPlayer from 'react-player/lazy'
+```
+
+Lazy players were the default import in `v2.1`, but moved to `react-player/lazy` in `v2.2` to avoid causing problems with common build systems.
+
+### Single player imports
+
+As of `v2.2`, the 🔥 __location of single player imports has changed__. Single players are not available in `v2.0` and `v2.1`.
+
+```jsx
+// Before
+import ReactPlayer from 'react-player/lib/players/YouTube'
+
+// After
+import ReactPlayer from 'react-player/youtube'
+```
+
+### Preloading
+
+The `preload` config option was originally added to solve a [very specific use case](https://github.com/CookPete/react-player/issues/7) a very long time ago. Modern browsers are trending towards disabling autoplay by default, which makes the preload behaviour quite useless. The implementation was also quite hacky, and added to the bundle size for a feature that seems to be very rarely used. For this reason, 🔥 __the `preload` option has been removed__.
+
+### The `config` prop
+
+🔥 __Deprecated config props have been removed.__ Previously these props still worked, but with a console warning.
+
+```jsx
+// Before
+
+
+// After
+
+```
+
+It is also worth noting that you no longer need to use separate config keys for different players. For example, if you are only ever using one type of `url` you can put player-specific options directly inside `config`.
+
+```jsx
+// Before
+
+
+// After
+
+```
+
+### `onReady` is invoked with the player instance
+
+Previously, instance methods would be called using [refs](https://reactjs.org/docs/refs-and-the-dom.html). They still can, but in v2.0, `onReady` is called with the ReactPlayer instance, giving you the option of storing the instance and calling methods on it. This is especially useful when using `getInternalPlayer`.
+
+```jsx
+// Before
+class Player extends Component {
+ ref = player => {
+ this.player = player // Store a player that may not be ready for methods
+ this.player.getInternalPlayer() // Returns null if player is not ready
+ }
+ handleReady = () => {
+ this.player.getInternalPlayer() // Internal player now ready
+ }
+ render () {
+ return (
+
+ )
+ }
+}
+
+// After
+class Player extends Component {
+ handleReady = player => {
+ this.player = player // Store a player that is ready for methods
+ this.player.getInternalPlayer() // Internal player now ready
+ }
+ render () {
+ return (
+
+ )
+ }
+}
diff --git a/README.md b/README.md
index 0ba0fde70..2731f1ee4 100644
--- a/README.md
+++ b/README.md
@@ -3,79 +3,78 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
- A React component for playing a variety of URLs, including file paths, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia, Mixcloud, and DailyMotion. Not using React? No problem.
+ A React component for playing a variety of URLs, including file paths, HLS, DASH, YouTube, Vimeo, Wistia and Mux.
-#### Migrating to `1.0.0`
+---
-All existing implementations of `ReactPlayer` should still work without any changes after migrating. The major changes are to how the component works internally. Keep an eye out for bugs and [raise an issue](https://github.com/CookPete/react-player/issues/new) if one doesn’t already exist.
+> Version 3 of ReactPlayer is a major update with a new architecture and many new features. It is not backwards compatible with v2, so please see the [migration guide](MIGRATING.md) for details.
+
+
+> Using Next.js and need to handle video upload/processing? Check out [next-video](https://github.com/muxinc/next-video).
+
+### ✨ The future of ReactPlayer
+
+Maintenance of ReactPlayer is being taken over by [Mux](https://www.mux.com). Mux is a [video api](https://www.mux.com/video-api) for developers. The team at Mux have worked on many highly respected projects and are committed to improving video tooling for developers.
+
+ReactPlayer will remain open source, but with a higher rate of fixes and releases over time. Thanks to everyone in the community for your ongoing support.
### Usage
```bash
-npm install react-player --save
-# or
-yarn add react-player
+npm install react-player # or yarn add react-player
```
-```js
-import React, { Component } from 'react'
+```jsx
+import React from 'react'
import ReactPlayer from 'react-player'
-class App extends Component {
- render () {
- return
- }
-}
+// Render a YouTube video player
+
```
-Demo page: [`https://cookpete.com/react-player`](https://cookpete.com/react-player)
+If your build system supports `import()` statements and code splitting enable this to lazy load the appropriate player for the `src` you pass in. This adds several `reactPlayer` chunks to your output, but reduces your main bundle size.
-The component parses a URL and loads in the appropriate markup and external SDKs to play media from [various sources](#supported-media). [Props](#props) can be passed in to control playback and react to events such as buffering or media ending. See [the demo source](https://github.com/CookPete/react-player/blob/master/src/demo/App.js) for a full example.
+Demo page: [`https://cookpete.github.io/react-player`](https://cookpete.github.io/react-player)
-For platforms like [Meteor](https://www.meteor.com) without direct use of `npm` modules, a minified version of `ReactPlayer` is located in `dist` after installing. To generate this file yourself, checkout the repo and run `npm run build:dist`.
+The component parses a URL and loads in the appropriate markup and external SDKs to play media from [various sources](#supported-media). [Props](#props) can be passed in to control playback and react to events such as buffering or media ending. See [the demo source](https://github.com/cookpete/react-player/blob/master/examples/react/src/App.tsx) for a full example.
-#### Polyfills
+For platforms without direct use of `npm` modules, a minified version of `ReactPlayer` is located in `dist` after installing. To generate this file yourself, checkout the repo and run `npm run build:dist`.
-* If you are using `npm` and need to support [browsers without `Promise`](http://caniuse.com/#feat=promises) you will need a [`Promise` polyfill](https://github.com/stefanpenner/es6-promise).
-* To support IE11 you will need to use [`babel-polyfill`](https://babeljs.io/docs/usage/polyfill) or a similar ES2015+ polyfill.
+#### Autoplay
+
+As of Chrome 66, [videos must be `muted` in order to play automatically](https://www.theverge.com/2018/3/22/17150870/google-chrome-autoplay-videos-sound-mute-update). Some players, like Facebook, cannot be unmuted until the user interacts with the video, so you may want to enable `controls` to allow users to unmute videos themselves. Please set `muted={true}`.
### Props
Prop | Description | Default
---- | ----------- | -------
-`url` | The url of a video or song to play
-`playing` | Set to `true` or `false` to pause or play the media | `false`
+`src` | The url of a video or song to play | `undefined`
+`playing` | Set to `true` or `false` to play or pause the media | `undefined`
+`preload` | Applies the `preload` attribute where supported | `undefined`
+`playsInline` | Applies the `playsInline` attribute where supported | `false`
+`disableRemotePlayback` | Applies the `disableRemotePlayback` attribute where supported | `false`
+`crossOrigin` | Applies the `crossOrigin` attribute where supported | `undefined`
`loop` | Set to `true` or `false` to loop the media | `false`
-`controls` | Set to `true` or `false` to display native player controls ◦ Vimeo, Twitch and Wistia player will always display controls | `false`
-`volume` | Set the volume of the player, between `0` and `1` ◦ `null` uses default volume on all players [`#357`](https://github.com/CookPete/react-player/issues/357) | `null`
-`muted` | Mutes the player ◦ Only works if `volume` is set | `false`
+`controls` | Set to `true` or `false` to display native player controls. ◦ For Vimeo videos, hiding controls must be enabled by the video owner. | `false`
+`volume` | Set the volume of the player, between `0` and `1` ◦ `null` uses default volume on all players [`#357`](https://github.com/cookpete/react-player/issues/357) | `null`
+`muted` | Mutes the player | `false`
`playbackRate` | Set the playback rate of the player ◦ Only supported by YouTube, Wistia, and file paths | `1`
-`width` | Set the width of the player | `640px`
-`height` | Set the height of the player | `360px`
+`pip` | Set to `true` or `false` to enable or disable [picture-in-picture mode](https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture) ◦ Only available when playing file URLs in [certain browsers](https://caniuse.com/#feat=picture-in-picture) | `false`
+`width` | Set the width of the player | `320px`
+`height` | Set the height of the player | `180px`
`style` | Add [inline styles](https://facebook.github.io/react/tips/inline-styles.html) to the root element | `{}`
-`progressInterval` | The time between `onProgress` callbacks, in milliseconds | `1000`
-`playsinline` | Applies the `playsinline` attribute where supported | `false`
-`wrapper` | Element or component to use as the container element | `div`
-`config` | Override options for the various players, see [config prop](#config-prop)
+`light` | Set to `true` to show just the video thumbnail, which loads the full player on click ◦ Pass in an image URL to override the preview image | `false`
+`fallback` | Element or component to use as a fallback if you are using lazy loading | `null`
+`wrapper` | Element or component to use as the container element | `null`
+`playIcon` | Element or component to use as the play icon in light mode
+`previewTabIndex` | Set the tab index to be used on light mode | `0`
#### Callback props
@@ -83,175 +82,181 @@ Callback props take a function that gets fired on various player events:
Prop | Description
---- | -----------
+`onClickPreview` | Called when user clicks the `light` mode preview
`onReady` | Called when media is loaded and ready to play. If `playing` is set to `true`, media will play immediately
`onStart` | Called when media starts playing
-`onPlay` | Called when media starts or resumes playing after pausing or buffering
-`onProgress` | Callback containing `played` and `loaded` progress as a fraction, and `playedSeconds` and `loadedSeconds` in seconds ◦ eg `{ played: 0.12, playedSeconds: 11.3, loaded: 0.34, loadedSeconds: 16.7 }`
-`onDuration` | Callback containing duration of the media, in seconds
+`onPlay` | Called when the `playing` prop is set to true
+`onPlaying` | Called when media actually starts playing
+`onProgress` | Called when media data is loaded
+`onTimeUpdate` | Called when the media's current time changes
+`onDurationChange` | Callback containing duration of the media, in seconds
`onPause` | Called when media is paused
-`onBuffer` | Called when media starts buffering
-`onSeek` | Called when media seeks with `seconds` parameter
-`onEnded` | Called when media finishes playing
+`onWaiting` | Called when media is buffering and waiting for more data
+`onSeeking` | Called when media is seeking
+`onSeeked` | Called when media has finished seeking
+`onRateChange` | Called when playback rate of the player changed ◦ Only supported by YouTube, Vimeo ([if enabled](https://developer.vimeo.com/player/sdk/reference#playbackratechange)), Wistia, and file paths
+`onEnded` | Called when media finishes playing ◦ Does not fire when `loop` is set to `true`
`onError` | Called when an error occurs whilst attempting to play media
+`onEnterPictureInPicture` | Called when entering picture-in-picture mode
+`onLeavePictureInPicture` | Called when leaving picture-in-picture mode
#### Config prop
-As of version `0.24`, there is a single `config` prop to override the settings for the various players. If you are migrating from an earlier version, you must move all the old config props inside `config`:
+There is a single `config` prop to override settings for each type of player:
```jsx
```
-The old style [config props](https://github.com/CookPete/react-player/tree/v0.23.0#config-props) still work but will produce a console warning:
-
-```jsx
-
-```
-
Settings for each player live under different keys:
Key | Options
--- | -------
-`youtube` | `playerVars`: Override the [default player vars](https://developers.google.com/youtube/player_parameters?playerVersion=HTML5) `preload`: Used for [preloading](#preloading)
-`facebook` | `appId`: Your own [Facebook app ID](https://developers.facebook.com/docs/apps/register#app-id)
-`soundcloud` | `options`: Override the [default player options](https://developers.soundcloud.com/docs/api/html5-widget#params) `preload`: Used for [preloading](#preloading)
-`vimeo` | `playerOptions`: Override the [default params](https://developer.vimeo.com/player/embedding#universal-parameters) `preload`: Used for [preloading](#preloading)
-`wistia` | `options`: Override the [default player options](https://wistia.com/doc/embed-options#options_list)
-`mixcloud` | `options`: Override the [default player options](https://www.mixcloud.com/developers/widget/#methods)
-`dailymotion` | `params`: Override the [default player vars](https://developer.dailymotion.com/player#player-parameters) `preload`: Used for [preloading](#preloading)
-`twitch` | `options`: Override the [default player options](https://dev.twitch.tv/docs/embed)
-`file` | `attributes`: Apply [element attributes](https://developer.mozilla.org/en/docs/Web/HTML/Element/video#Attributes) `forceAudio`: Always render an `` element `forceHLS`: Use [hls.js](https://github.com/video-dev/hls.js) for HLS streams `forceDASH`: Always use [dash.js](https://github.com/Dash-Industry-Forum/dash.js) for DASH streams `hlsOptions`: Override the [default `hls.js` options](https://github.com/video-dev/hls.js/blob/master/doc/API.md#fine-tuning)
-
-##### Preloading
-
-When `preload` is set to `true` for players that support it, a short, silent video is played in the background when `ReactPlayer` first mounts. This fixes a [bug](https://github.com/CookPete/react-player/issues/7) where videos would not play when loaded in a background browser tab.
+`youtube` | https://developers.google.com/youtube/player_parameters#Parameters
+`vimeo` | https://developer.vimeo.com/player/sdk/embed
+`hls` | https://github.com/video-dev/hls.js/blob/master/docs/API.md#fine-tuning
### Methods
#### Static Methods
Method | Description
----- | -----------
-`ReactPlayer.canPlay(url)` | Determine if a URL can be played. This does *not* detect media that is unplayable due to privacy settings, streaming permissions, etc. In that case, the `onError` prop will be invoked after attemping to play. Any URL that does not match any patterns will fall back to a native HTML5 media player.
+------ | -----------
+`ReactPlayer.canPlay(src)` | Determine if a URL can be played. This does *not* detect media that is unplayable due to privacy settings, streaming permissions, etc. In that case, the `onError` prop will be invoked after attempting to play. Any URL that does not match any patterns will fall back to a native HTML5 media player.
+`ReactPlayer.addCustomPlayer(CustomPlayer)` | Add a custom player. See [Adding custom players](#adding-custom-players)
+`ReactPlayer.removeCustomPlayers()` | Remove any players that have been added using `addCustomPlayer()`
#### Instance Methods
-Use [`ref`](https://facebook.github.io/react/docs/refs-and-the-dom.html) to call instance methods on the player. See [the demo app](src/demo/App.js) for an example of this.
-
-Method | Description
----- | -----------
-`seekTo(amount)` | Seek to the given number of seconds, or fraction if `amount` is between `0` and `1`
-`getCurrentTime()` | Returns the number of seconds that has been played ◦ Returns `null` if duration is unavailable
-`getDuration()` | Returns the duration (in seconds) of the currently playing media ◦ Returns `null` if duration is unavailable
-`getInternalPlayer()` | Returns the internal player of whatever is currently playing ◦ eg the [YouTube player instance](https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player), or the [``](https://developer.mozilla.org/en/docs/Web/HTML/Element/video) element when playing a video file ◦ Use `getInternalPlayer('hls')` to get the [hls.js](https://github.com/video-dev/hls.js) player ◦ Use `getInternalPlayer('dash')` to get the [dash.js](https://github.com/Dash-Industry-Forum/dash.js) player ◦ Returns `null` if the internal player is unavailable
+Use [`ref`](https://react.dev/learn/manipulating-the-dom-with-refs) to call instance methods on the player. See [the demo app](examples/react/src/App.js) for an example of this. Since `v3`, the instance methods aim to be compatible
+with the [HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement) interface.
### Advanced Usage
-#### Responsive player
+#### Custom player controls
-Set `width` and `height` to `100%` and wrap the player in a [fixed aspect ratio box](https://css-tricks.com/aspect-ratio-boxes) to get a responsive player:
+By default ReactPlayer is a chromeless player. By setting the `controls` prop to `true`, you can enable the native controls for the player. However, the controls will look different for each player. The ones based on HTML5 media players will look like the native controls for that browser, while the ones based on third-party players will look like the native controls for that player.
-```js
-class ResponsivePlayer extends Component {
- render () {
- return (
-
-
-
- )
- }
-}
+```jsx
+
```
-```css
-.player-wrapper {
- position: relative;
- padding-top: 56.25% /* Player ratio: 100 / (1280 / 720) */
-}
-
-.react-player {
- position: absolute;
- top: 0;
- left: 0;
+If you like to add your own custom controls in a convenient way, you can use
+[Media Chrome](https://github.com/muxinc/media-chrome). Media Chrome is a library that provides a set of UI components that can be used to quickly build custom media controls.
+
+##### Simple example ([Codesandbox](https://codesandbox.io/p/sandbox/react-player-media-chrome-simple-nl3pg4))
+
+```tsx
+import ReactPlayer from "react-player";
+import {
+ MediaController,
+ MediaControlBar,
+ MediaTimeRange,
+ MediaTimeDisplay,
+ MediaVolumeRange,
+ MediaPlaybackRateButton,
+ MediaPlayButton,
+ MediaSeekBackwardButton,
+ MediaSeekForwardButton,
+ MediaMuteButton,
+ MediaFullscreenButton,
+} from "media-chrome/react";
+
+export default function Player() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
}
```
-See [`jsFiddle` example](https://jsfiddle.net/e6w3rtj1/)
+#### Light player
-#### Single player imports
+The `light` prop will render a video thumbnail with simple play icon, and only load the full player once a user has interacted with the image. [Noembed](https://noembed.com) is used to fetch thumbnails for a video URL. Note that automatic thumbnail fetching for Facebook, Wistia, Mixcloud and file URLs are not supported, and ongoing support for other URLs is not guaranteed.
-If you are only ever playing a single type of URL, you can import individual players to keep your bundle size down:
+If you want to pass in your own thumbnail to use, set `light` to the image URL rather than `true`.
-```jsx
-import YouTubePlayer from 'react-player/lib/players/YouTube'
+You can also pass a component through the `light` prop:
-
+```jsx
+ } />
```
-See a list of available players [here](https://github.com/CookPete/react-player/tree/master/src/players).
+The styles for the preview image and play icon can be overridden by targeting the CSS classes `react-player__preview`, `react-player__shadow` and `react-player__play-icon`.
-#### Standalone player
+#### Responsive player
-If you aren’t using React, you can still render a player using the standalone library:
+Set `width` to `100%`, `height` to `auto` and add an `aspectRatio` like `16 / 9` to get a responsive player:
-```html
-
-
+}
```
-See [`jsFiddle` example](https://jsfiddle.net/krkcvx9s/)
+#### Adding custom players
-#### Using Bower
+If you have your own player that is compatible with ReactPlayer’s internal architecture, you can add it using `addCustomPlayer`:
-```bash
-bower install react-player --save
+```javascript
+import YourOwnPlayer from './somewhere';
+ReactPlayer.addCustomPlayer(YourOwnPlayer);
```
-```html
-
-
-
-
+Use `removeCustomPlayers` to clear all custom players:
+
+```javascript
+ReactPlayer.removeCustomPlayers();
```
+It is your responsibility to ensure that custom players keep up with any internal changes to ReactPlayer in later versions.
+
#### Mobile considerations
Due to various restrictions, `ReactPlayer` is not guaranteed to function properly on mobile devices. The [YouTube player documentation](https://developers.google.com/youtube/iframe_api_reference), for example, explains that [certain mobile browsers require user interaction](https://developers.google.com/youtube/iframe_api_reference#Mobile_considerations) before playing:
@@ -260,60 +265,55 @@ Due to various restrictions, `ReactPlayer` is not guaranteed to function properl
#### Multiple Sources and Tracks
-When playing file paths, an array of sources can be passed to the `url` prop to render multiple `` tags.
+Since `v3` if the player supports multiple sources and / or tracks, it works the same as the native
+`` elements in the HTML `` or `` element.
```jsx
-
+
+
+
+
+
+
+
```
-You can also specify a `type` for each source by using objects with `src` and `type` properties.
+### Migrating to `v3`
-```jsx
-
-```
+ReactPlayer `v3` is a major update with a new architecture and many new features. It is not backwards compatible with `v2`, so please see the [migration guide](MIGRATING.md) for details.
-[``](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track) elements for subtitles can be added using `fileConfig`:
+Some providers have not been updated for `v3`, it is recommended to keep using `v2` and vote to add this provider to `v3` in [discussions](https://github.com/cookpete/react-player/discussions)
-```jsx
-
-```
+### Migrating to `v2`
+
+ReactPlayer `v2` changes single player imports and adds lazy loading players. Support for `preload` has also been removed, plus some other changes. See [`MIGRATING.md`](/MIGRATING.md) for information.
### Supported media
+* [Supported file types](https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats) are playing using [``](https://developer.mozilla.org/en/docs/Web/HTML/Element/video) or [``](https://developer.mozilla.org/en/docs/Web/HTML/Element/audio) elements
+* HLS streams are played using [`hls.js`](https://github.com/video-dev/hls.js)
+* DASH streams are played using [`dash.js`](https://github.com/Dash-Industry-Forum/dash.js)
+* Mux videos use the [``](https://github.com/muxinc/elements/blob/main/packages/mux-player/README.md) element
* YouTube videos use the [YouTube iFrame Player API](https://developers.google.com/youtube/iframe_api_reference)
-* Facebook videos use the [Facebook Embedded Video Player API](https://developers.facebook.com/docs/plugins/embedded-video-player/api)
-* SoundCloud tracks use the [SoundCloud Widget API](https://developers.soundcloud.com/docs/api/html5-widget)
-* Streamable videos use [`Player.js`](https://github.com/embedly/player.js)
-* Vidme videos are [no longer supported](https://medium.com/vidme/goodbye-for-now-120b40becafa)
-* Vimeo videos use the [Vimeo Player API](https://developer.vimeo.com/player/js-api)
+* Vimeo videos use the [Vimeo Player API](https://developer.vimeo.com/player/sdk)
* Wistia videos use the [Wistia Player API](https://wistia.com/doc/player-api)
-* Twitch videos use the [Twitch Interactive Frames API](https://dev.twitch.tv/docs/embed#interactive-frames-for-live-streams-and-vods)
-* DailyMotion videos use the [DailyMotion Player API](https://developer.dailymotion.com/player)
-* [Supported file types](https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats) are playing using [``](https://developer.mozilla.org/en/docs/Web/HTML/Element/video) or [``](https://developer.mozilla.org/en/docs/Web/HTML/Element/audio) elements
- * HLS streams are played using [`hls.js`](https://github.com/video-dev/hls.js)
- * DASH streams are played using [`dash.js`](https://github.com/Dash-Industry-Forum/dash.js)
### Contributing
-See the [contribution guidelines](https://github.com/CookPete/react-player/blob/master/CONTRIBUTING.md) before creating a pull request.
+See the [contribution guidelines](https://github.com/cookpete/react-player/blob/master/CONTRIBUTING.md) before creating a pull request.
### Thanks
-- Many thanks to [Kostya Luchankin](https://github.com/phationmationion) for help overhauling the player inheritance patterns.
-- Thanks to anyone who has [contributed](https://github.com/CookPete/react-player/graphs/contributors).
+- Thanks to anyone who has [contributed](https://github.com/cookpete/react-player/graphs/contributors).
+- Big thanks to my [Patreon](https://patreon.com/cookpete) supporters!
+
+
diff --git a/biome.json b/biome.json
new file mode 100644
index 000000000..2d55f7394
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,9 @@
+{
+ "files": {
+ "include": ["src/**/*.js", "src/**/*.jsx", "src/**/*.ts", "src/**/*.tsx"],
+ "ignore": ["dist/**"]
+ },
+ "formatter": {
+ "indentStyle": "space"
+ }
+}
diff --git a/bower.json b/bower.json
deleted file mode 100644
index 48db91351..000000000
--- a/bower.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "name": "react-player",
- "description": "A React component for playing a variety of URLs, including file paths, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia and DailyMotion",
- "main": "dist/ReactPlayer.js",
- "authors": [
- "Pete Cook (http://github.com/cookpete)"
- ],
- "license": "MIT",
- "keywords": [
- "react",
- "media",
- "player",
- "video",
- "audio",
- "youtube",
- "facebook",
- "twitch",
- "soundcloud",
- "streamable",
- "vimeo",
- "wistia",
- "dailymotion",
- "hls",
- "dash",
- "react-component"
- ],
- "homepage": "https://github.com/CookPete/react-player",
- "moduleType": [
- "globals"
- ],
- "ignore": [
- "*",
- "!dist/*",
- "!package.json",
- "!CHANGELOG.md",
- "!README.md",
- "!LICENSE.md"
- ],
- "dependencies": {
- "react": "*"
- }
-}
diff --git a/codecov.yml b/codecov.yml
index 5516323f9..fbbe8ccbd 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -1,5 +1,8 @@
comment: false
coverage:
+ parsers:
+ javascript:
+ enable_partials: yes
status:
project:
default:
diff --git a/dist/ReactPlayer.js b/dist/ReactPlayer.js
deleted file mode 100644
index 43da370b3..000000000
--- a/dist/ReactPlayer.js
+++ /dev/null
@@ -1,2 +0,0 @@
-var ReactPlayer=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=10)}([function(e,t){e.exports=React},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){var t=e.match(k);if(t){var n=t[1];if(n.match(O))return i(n);if(_.test(n))return parseInt(n,10)}return 0}function i(e){for(var t=0,n=O.exec(e);null!==n;){var r=n,o=v(r,3),a=o[1],i=o[2];"h"===i&&(t+=60*parseInt(a,10)*60),"m"===i&&(t+=60*parseInt(a,10)),"s"===i&&(t+=parseInt(a,10)),n=O.exec(e)}return t}function l(){return Math.random().toString(36).substr(2,5)}function u(e){return Object.keys(e).map(function(t){return t+"="+e[t]}).join("&")}function s(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){return!0};return window[t]&&r(window[t])?Promise.resolve(window[t]):new Promise(function(r,o){if(n){var a=window[n];window[n]=function(){a&&a(),r(window[t])}}(0,m.default)(e,function(e){e&&o(e),n||r(window[t])})})}function c(e,t,n){var r=(0,P.default)(t.config,e.config),a=!0,i=!1,l=void 0;try{for(var u,s=w.DEPRECATED_CONFIG_PROPS[Symbol.iterator]();!(a=(u=s.next()).done);a=!0){var c=u.value;if(e[c]){var p=c.replace(/Config$/,"");if(r=(0,P.default)(r,o({},p,e[c])),n){var f="ReactPlayer: %c"+c+" %cis deprecated, please use the config prop instead – https://github.com/CookPete/react-player#config-prop";console.warn(f,"font-weight: bold","")}}}}catch(e){i=!0,l=e}finally{try{!a&&s.return&&s.return()}finally{if(i)throw l}}return r}function p(e){for(var t,n=arguments.length,r=Array(n>1?n-1:0),o=1;o1?r-1:0),a=1;a0&&e<1){var n=this.player.getDuration();return n?void this.player.seekTo(n*e):void console.warn("ReactPlayer: could not seek using fraction – duration not yet available")}this.player.seekTo(e)}},{key:"render",value:function(){var e=this.props.activePlayer;return s.default.createElement(e,i({},this.props,{ref:this.ref,onReady:this.onReady,onPlay:this.onPlay,onPause:this.onPause,onEnded:this.onEnded}))}}]),t}(u.Component);p.displayName="Player",p.propTypes=c.propTypes,p.defaultProps=c.defaultProps,t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0}),t.YouTube=void 0;var l=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"player";return n.player?n.player.getInternalPlayer(e):null},n.seekTo=function(e){if(!n.player)return null;n.player.seekTo(e)},n.wrapperRef=function(e){n.wrapper=e},n.activePlayerRef=function(e){n.player=e},r=t,i(n,r)}return l(ReactPlayer,e),s(ReactPlayer,[{key:"componentDidMount",value:function(){if(this.props.progressFrequency){console.warn("ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead","font-weight: bold","","font-weight: bold","")}}},{key:"shouldComponentUpdate",value:function(e){return!(0,y.isEqual)(this.props,e)}},{key:"componentWillUpdate",value:function(e){this.config=(0,y.getConfig)(e,f.defaultProps)}},{key:"getActivePlayer",value:function(e){var t=!0,n=!1,r=void 0;try{for(var o,a=h.default[Symbol.iterator]();!(t=(o=a.next()).done);t=!0){var i=o.value;if(i.canPlay(e))return i}}catch(e){n=!0,r=e}finally{try{!t&&a.return&&a.return()}finally{if(n)throw r}}return m.FilePlayer}},{key:"renderActivePlayer",value:function(e){if(!e)return null;var t=this.getActivePlayer(e);return p.default.createElement(b.default,u({},this.props,{key:t.displayName,ref:this.activePlayerRef,config:this.config,activePlayer:t}))}},{key:"sortPlayers",value:function(e,t){return e&&t?e.key 2 && arguments[2] !== undefined ? arguments[2] : null;\n var isLoaded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {\n return true;\n };\n\n if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {\n return Promise.resolve(window[sdkGlobal]);\n }\n return new Promise(function (resolve, reject) {\n if (sdkReady) {\n var previousOnReady = window[sdkReady];\n window[sdkReady] = function () {\n if (previousOnReady) previousOnReady();\n resolve(window[sdkGlobal]);\n };\n }\n (0, _loadScript2['default'])(url, function (err) {\n if (err) reject(err);\n if (!sdkReady) {\n resolve(window[sdkGlobal]);\n }\n });\n });\n}\n\nfunction getConfig(props, defaultProps, showWarning) {\n var config = (0, _deepmerge2['default'])(defaultProps.config, props.config);\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _props.DEPRECATED_CONFIG_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var p = _step.value;\n\n if (props[p]) {\n var key = p.replace(/Config$/, '');\n config = (0, _deepmerge2['default'])(config, _defineProperty({}, key, props[p]));\n if (showWarning) {\n var link = 'https://github.com/CookPete/react-player#config-prop';\n var message = 'ReactPlayer: %c' + p + ' %cis deprecated, please use the config prop instead \\u2013 ' + link;\n console.warn(message, 'font-weight: bold', '');\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return config;\n}\n\nfunction omit(object) {\n var _ref;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var omitKeys = (_ref = []).concat.apply(_ref, arrays);\n var output = {};\n var keys = Object.keys(object);\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = keys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var key = _step2.value;\n\n if (omitKeys.indexOf(key) === -1) {\n output[key] = object[key];\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2['return']) {\n _iterator2['return']();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return output;\n}\n\nfunction callPlayer(method) {\n var _player;\n\n // Util method for calling a method on this.player\n // but guard against errors and console.warn instead\n if (!this.player || !this.player[method]) {\n var message = 'ReactPlayer: ' + this.constructor.displayName + ' player could not call %c' + method + '%c \\u2013 ';\n if (!this.player) {\n message += 'The player was not available';\n } else if (!this.player[method]) {\n message += 'The method was not available';\n }\n console.warn(message, 'font-weight: bold', '');\n return null;\n }\n\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return (_player = this.player)[method].apply(_player, args);\n}\n\nfunction isObject(val) {\n return val !== null && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object';\n}\n\n// Deep comparison of two objects but ignoring\n// functions, for use in shouldComponentUpdate\nfunction isEqual(a, b) {\n if (typeof a === 'function' && typeof b === 'function') {\n return true;\n }\n if (a instanceof Array && b instanceof Array) {\n if (a.length !== b.length) {\n return false;\n }\n for (var i = 0; i !== a.length; i++) {\n if (!isEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n if (isObject(a) && isObject(b)) {\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = Object.keys(a)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var key = _step3.value;\n\n if (!isEqual(a[key], b[key])) {\n return false;\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3['return']) {\n _iterator3['return']();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n return true;\n }\n return a === b;\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports['default'] = createSinglePlayer;\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _props2 = __webpack_require__(3);\n\nvar _utils = __webpack_require__(1);\n\nvar _Player = __webpack_require__(4);\n\nvar _Player2 = _interopRequireDefault(_Player);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SUPPORTED_PROPS = Object.keys(_props2.propTypes);\n\nfunction createSinglePlayer(activePlayer) {\n var _class, _temp2;\n\n return _temp2 = _class = function (_Component) {\n _inherits(SinglePlayer, _Component);\n\n function SinglePlayer() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, SinglePlayer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = SinglePlayer.__proto__ || Object.getPrototypeOf(SinglePlayer)).call.apply(_ref, [this].concat(args))), _this), _this.ref = function (player) {\n _this.player = player;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(SinglePlayer, [{\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps) {\n return !(0, _utils.isEqual)(this.props, nextProps);\n }\n }, {\n key: 'componentWillUpdate',\n value: function componentWillUpdate(nextProps) {\n this.config = (0, _utils.getConfig)(nextProps, _props2.defaultProps);\n }\n }, {\n key: 'render',\n value: function render() {\n if (!activePlayer.canPlay(this.props.url)) {\n return null;\n }\n var _props = this.props,\n style = _props.style,\n width = _props.width,\n height = _props.height,\n Wrapper = _props.wrapper;\n\n var otherProps = (0, _utils.omit)(this.props, SUPPORTED_PROPS, _props2.DEPRECATED_CONFIG_PROPS);\n return _react2['default'].createElement(\n Wrapper,\n _extends({ style: _extends({}, style, { width: width, height: height }) }, otherProps),\n _react2['default'].createElement(_Player2['default'], _extends({}, this.props, {\n ref: this.ref,\n activePlayer: activePlayer,\n config: (0, _utils.getConfig)(this.props, _props2.defaultProps)\n }))\n );\n }\n }]);\n\n return SinglePlayer;\n }(_react.Component), _class.displayName = activePlayer.displayName + 'Player', _class.propTypes = _props2.propTypes, _class.defaultProps = _props2.defaultProps, _class.canPlay = activePlayer.canPlay, _temp2;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DEPRECATED_CONFIG_PROPS = exports.defaultProps = exports.propTypes = undefined;\n\nvar _propTypes = __webpack_require__(11);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar string = _propTypes2['default'].string,\n bool = _propTypes2['default'].bool,\n number = _propTypes2['default'].number,\n array = _propTypes2['default'].array,\n oneOfType = _propTypes2['default'].oneOfType,\n shape = _propTypes2['default'].shape,\n object = _propTypes2['default'].object,\n func = _propTypes2['default'].func;\nvar propTypes = exports.propTypes = {\n url: oneOfType([string, array]),\n playing: bool,\n loop: bool,\n controls: bool,\n volume: number,\n muted: bool,\n playbackRate: number,\n width: oneOfType([string, number]),\n height: oneOfType([string, number]),\n style: object,\n progressInterval: number,\n playsinline: bool,\n wrapper: oneOfType([string, func]),\n config: shape({\n soundcloud: shape({\n options: object\n }),\n youtube: shape({\n playerVars: object,\n preload: bool\n }),\n facebook: shape({\n appId: string\n }),\n dailymotion: shape({\n params: object,\n preload: bool\n }),\n vimeo: shape({\n iframeParams: object,\n preload: bool\n }),\n file: shape({\n attributes: object,\n tracks: array,\n forceAudio: bool,\n forceHLS: bool,\n forceDASH: bool,\n hlsOptions: object\n }),\n wistia: shape({\n options: object\n }),\n mixcloud: shape({\n options: object\n }),\n twitch: shape({\n options: object\n })\n }),\n onReady: func,\n onStart: func,\n onPlay: func,\n onPause: func,\n onBuffer: func,\n onEnded: func,\n onError: func,\n onDuration: func,\n onSeek: func,\n onProgress: func\n};\n\nvar defaultProps = exports.defaultProps = {\n playing: false,\n loop: false,\n controls: false,\n volume: null,\n muted: false,\n playbackRate: 1,\n width: '640px',\n height: '360px',\n style: {},\n progressInterval: 1000,\n playsinline: false,\n wrapper: 'div',\n config: {\n soundcloud: {\n options: {\n visual: true, // Undocumented, but makes player fill container and look better\n buying: false,\n liking: false,\n download: false,\n sharing: false,\n show_comments: false,\n show_playcount: false\n }\n },\n youtube: {\n playerVars: {\n autoplay: 0,\n playsinline: 1,\n showinfo: 0,\n rel: 0,\n iv_load_policy: 3,\n modestbranding: 1\n },\n preload: false\n },\n facebook: {\n appId: '1309697205772819'\n },\n dailymotion: {\n params: {\n api: 1,\n 'endscreen-enable': false\n },\n preload: false\n },\n vimeo: {\n playerOptions: {\n autopause: false,\n autoplay: false,\n byline: false,\n portrait: false,\n title: false\n },\n preload: false\n },\n file: {\n attributes: {},\n tracks: [],\n forceAudio: false,\n forceHLS: false,\n forceDASH: false,\n hlsOptions: {}\n },\n wistia: {\n options: {}\n },\n mixcloud: {\n options: {\n hide_cover: 1\n }\n },\n twitch: {\n options: {}\n }\n },\n onReady: function onReady() {},\n onStart: function onStart() {},\n onPlay: function onPlay() {},\n onPause: function onPause() {},\n onBuffer: function onBuffer() {},\n onEnded: function onEnded() {},\n onError: function onError() {},\n onDuration: function onDuration() {},\n onSeek: function onSeek() {},\n onProgress: function onProgress() {}\n};\n\nvar DEPRECATED_CONFIG_PROPS = exports.DEPRECATED_CONFIG_PROPS = ['soundcloudConfig', 'youtubeConfig', 'facebookConfig', 'dailymotionConfig', 'vimeoConfig', 'fileConfig', 'wistiaConfig'];\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _props2 = __webpack_require__(3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SEEK_ON_PLAY_EXPIRY = 5000;\n\nvar Player = function (_Component) {\n _inherits(Player, _Component);\n\n function Player() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Player);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Player.__proto__ || Object.getPrototypeOf(Player)).call.apply(_ref, [this].concat(args))), _this), _this.mounted = false, _this.isReady = false, _this.isPlaying = false, _this.isLoading = true, _this.startOnPlay = true, _this.seekOnPlay = null, _this.onDurationCalled = false, _this.getInternalPlayer = function (key) {\n if (!_this.player) return null;\n return _this.player[key];\n }, _this.progress = function () {\n if (_this.props.url && _this.player && _this.isReady) {\n var playedSeconds = _this.getCurrentTime() || 0;\n var loadedSeconds = _this.getSecondsLoaded();\n var duration = _this.getDuration();\n if (duration) {\n var progress = {\n playedSeconds: playedSeconds,\n played: playedSeconds / duration\n };\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds;\n progress.loaded = loadedSeconds / duration;\n }\n // Only call onProgress if values have changed\n if (progress.played !== _this.prevPlayed || progress.loaded !== _this.prevLoaded) {\n _this.props.onProgress(progress);\n }\n _this.prevPlayed = progress.played;\n _this.prevLoaded = progress.loaded;\n }\n }\n _this.progressTimeout = setTimeout(_this.progress, _this.props.progressFrequency || _this.props.progressInterval);\n }, _this.onReady = function () {\n if (!_this.mounted) return;\n _this.isReady = true;\n _this.isLoading = false;\n var _this$props = _this.props,\n onReady = _this$props.onReady,\n playing = _this$props.playing,\n volume = _this$props.volume,\n muted = _this$props.muted;\n\n onReady();\n if (muted || volume !== null) {\n _this.player.setVolume(muted ? 0 : volume);\n }\n if (playing) {\n _this.player.play();\n }\n _this.onDurationCheck();\n }, _this.onPlay = function () {\n _this.isPlaying = true;\n _this.isLoading = false;\n var _this$props2 = _this.props,\n onStart = _this$props2.onStart,\n onPlay = _this$props2.onPlay,\n playbackRate = _this$props2.playbackRate;\n\n if (_this.startOnPlay) {\n if (_this.player.setPlaybackRate) {\n _this.player.setPlaybackRate(playbackRate);\n }\n onStart();\n _this.startOnPlay = false;\n }\n onPlay();\n if (_this.seekOnPlay) {\n _this.seekTo(_this.seekOnPlay);\n _this.seekOnPlay = null;\n }\n _this.onDurationCheck();\n }, _this.onPause = function (e) {\n _this.isPlaying = false;\n if (!_this.isLoading) {\n _this.props.onPause(e);\n }\n }, _this.onEnded = function () {\n var _this$props3 = _this.props,\n activePlayer = _this$props3.activePlayer,\n loop = _this$props3.loop,\n onEnded = _this$props3.onEnded;\n\n if (activePlayer.loopOnEnded && loop) {\n _this.seekTo(0);\n }\n if (!loop) {\n _this.isPlaying = false;\n }\n onEnded();\n }, _this.onDurationCheck = function () {\n clearTimeout(_this.durationCheckTimeout);\n var duration = _this.getDuration();\n if (duration) {\n if (!_this.onDurationCalled) {\n _this.props.onDuration(duration);\n _this.onDurationCalled = true;\n }\n } else {\n _this.durationCheckTimeout = setTimeout(_this.onDurationCheck, 100);\n }\n }, _this.ref = function (player) {\n if (player) {\n _this.player = player;\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n } // Track playing state internally to prevent bugs\n // Use isLoading to prevent onPause when switching URL\n\n\n _createClass(Player, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.mounted = true;\n this.player.load(this.props.url);\n this.progress();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.progressTimeout);\n if (this.isReady) {\n this.player.stop();\n }\n this.mounted = false;\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // Invoke player methods based on incoming props\n var _props = this.props,\n url = _props.url,\n playing = _props.playing,\n volume = _props.volume,\n muted = _props.muted,\n playbackRate = _props.playbackRate;\n\n if (url !== nextProps.url) {\n this.isLoading = true;\n this.startOnPlay = true;\n this.onDurationCalled = false;\n this.player.load(nextProps.url, this.isReady);\n }\n if (!playing && nextProps.playing && !this.isPlaying) {\n this.player.play();\n }\n if (playing && !nextProps.playing && this.isPlaying) {\n this.player.pause();\n }\n if (nextProps.volume !== null) {\n if (volume !== nextProps.volume && !nextProps.muted) {\n this.player.setVolume(nextProps.volume);\n }\n if (muted !== nextProps.muted) {\n this.player.setVolume(nextProps.muted ? 0 : nextProps.volume);\n }\n }\n if (playbackRate !== nextProps.playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(nextProps.playbackRate);\n }\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n if (!this.isReady) return null;\n return this.player.getDuration();\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n if (!this.isReady) return null;\n return this.player.getCurrentTime();\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n if (!this.isReady) return null;\n return this.player.getSecondsLoaded();\n }\n }, {\n key: 'seekTo',\n value: function seekTo(amount) {\n var _this2 = this;\n\n // When seeking before player is ready, store value and seek later\n if (!this.isReady && amount !== 0) {\n this.seekOnPlay = amount;\n setTimeout(function () {\n _this2.seekOnPlay = null;\n }, SEEK_ON_PLAY_EXPIRY);\n return;\n }\n if (amount > 0 && amount < 1) {\n // Convert fraction to seconds based on duration\n var duration = this.player.getDuration();\n if (!duration) {\n console.warn('ReactPlayer: could not seek using fraction – duration not yet available');\n return;\n }\n this.player.seekTo(duration * amount);\n return;\n }\n this.player.seekTo(amount);\n }\n }, {\n key: 'render',\n value: function render() {\n var Player = this.props.activePlayer;\n return _react2['default'].createElement(Player, _extends({}, this.props, {\n ref: this.ref,\n onReady: this.onReady,\n onPlay: this.onPlay,\n onPause: this.onPause,\n onEnded: this.onEnded\n }));\n }\n }]);\n\n return Player;\n}(_react.Component);\n\nPlayer.displayName = 'Player';\nPlayer.propTypes = _props2.propTypes;\nPlayer.defaultProps = _props2.defaultProps;\nexports['default'] = Player;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.YouTube = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://www.youtube.com/iframe_api';\nvar SDK_GLOBAL = 'YT';\nvar SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady';\nvar MATCH_URL = /(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})/;\n\nvar YouTube = exports.YouTube = function (_Component) {\n _inherits(YouTube, _Component);\n\n function YouTube() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, YouTube);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = YouTube.__proto__ || Object.getPrototypeOf(YouTube)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.onStateChange = function (_ref2) {\n var data = _ref2.data;\n var _this$props = _this.props,\n onPlay = _this$props.onPlay,\n onPause = _this$props.onPause,\n onBuffer = _this$props.onBuffer,\n onEnded = _this$props.onEnded,\n onReady = _this$props.onReady;\n var _window$SDK_GLOBAL$Pl = window[SDK_GLOBAL].PlayerState,\n PLAYING = _window$SDK_GLOBAL$Pl.PLAYING,\n PAUSED = _window$SDK_GLOBAL$Pl.PAUSED,\n BUFFERING = _window$SDK_GLOBAL$Pl.BUFFERING,\n ENDED = _window$SDK_GLOBAL$Pl.ENDED,\n CUED = _window$SDK_GLOBAL$Pl.CUED;\n\n if (data === PLAYING) onPlay();\n if (data === PAUSED) onPause();\n if (data === BUFFERING) onBuffer();\n if (data === ENDED) onEnded();\n if (data === CUED) onReady();\n }, _this.ref = function (container) {\n _this.container = container;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(YouTube, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n var _props = this.props,\n playsinline = _props.playsinline,\n controls = _props.controls,\n config = _props.config,\n _onError = _props.onError;\n\n var id = url && url.match(MATCH_URL)[1];\n if (isReady) {\n this.player.cueVideoById({\n videoId: id,\n startSeconds: (0, _utils.parseStartTime)(url)\n });\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, function (YT) {\n return YT.loaded;\n }).then(function (YT) {\n if (!_this2.container) return;\n _this2.player = new YT.Player(_this2.container, {\n width: '100%',\n height: '100%',\n videoId: id,\n playerVars: _extends({\n controls: controls ? 1 : 0,\n start: (0, _utils.parseStartTime)(url),\n origin: window.location.origin,\n playsinline: playsinline\n }, config.youtube.playerVars),\n events: {\n onReady: _this2.props.onReady,\n onStateChange: _this2.onStateChange,\n onError: function onError(event) {\n return _onError(event.data);\n }\n }\n });\n }, _onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('playVideo');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pauseVideo');\n }\n }, {\n key: 'stop',\n value: function stop() {\n if (!document.body.contains(this.callPlayer('getIframe'))) return;\n this.callPlayer('stopVideo');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(amount) {\n this.callPlayer('seekTo', amount);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction * 100);\n }\n }, {\n key: 'setPlaybackRate',\n value: function setPlaybackRate(rate) {\n this.callPlayer('setPlaybackRate', rate);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('getDuration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('getCurrentTime');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.callPlayer('getVideoLoadedFraction') * this.getDuration();\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%'\n }, this.props.style);\n return _react2['default'].createElement(\n 'div',\n { style: style },\n _react2['default'].createElement('div', { ref: this.ref })\n );\n }\n }]);\n\n return YouTube;\n}(_react.Component);\n\nYouTube.displayName = 'YouTube';\n\nYouTube.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nYouTube.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(YouTube);\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SoundCloud = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://w.soundcloud.com/player/api.js';\nvar SDK_GLOBAL = 'SC';\nvar MATCH_URL = /(soundcloud\\.com|snd\\.sc)\\/.+$/;\n\nvar SoundCloud = exports.SoundCloud = function (_Component) {\n _inherits(SoundCloud, _Component);\n\n function SoundCloud() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, SoundCloud);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = SoundCloud.__proto__ || Object.getPrototypeOf(SoundCloud)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.fractionLoaded = null, _this.ref = function (iframe) {\n _this.iframe = iframe;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(SoundCloud, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (SC) {\n if (!_this2.iframe) return;\n var _SC$Widget$Events = SC.Widget.Events,\n PLAY = _SC$Widget$Events.PLAY,\n PLAY_PROGRESS = _SC$Widget$Events.PLAY_PROGRESS,\n PAUSE = _SC$Widget$Events.PAUSE,\n FINISH = _SC$Widget$Events.FINISH,\n ERROR = _SC$Widget$Events.ERROR;\n\n if (!isReady) {\n _this2.player = SC.Widget(_this2.iframe);\n _this2.player.bind(PLAY, _this2.props.onPlay);\n _this2.player.bind(PAUSE, _this2.props.onPause);\n _this2.player.bind(PLAY_PROGRESS, function (e) {\n _this2.currentTime = e.currentPosition / 1000;\n _this2.fractionLoaded = e.loadedProgress;\n });\n _this2.player.bind(FINISH, function () {\n return _this2.props.onEnded();\n });\n _this2.player.bind(ERROR, function (e) {\n return _this2.props.onError(e);\n });\n }\n _this2.player.load(url, _extends({}, _this2.props.config.soundcloud.options, {\n callback: function callback() {\n _this2.player.getDuration(function (duration) {\n _this2.duration = duration / 1000;\n _this2.props.onReady();\n });\n }\n }));\n });\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seekTo', seconds * 1000);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction * 100);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.fractionLoaded * this.duration;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%'\n }, this.props.style);\n return _react2['default'].createElement('iframe', {\n ref: this.ref,\n src: 'https://w.soundcloud.com/player/?url=' + encodeURIComponent(this.props.url),\n style: style,\n frameBorder: 0\n });\n }\n }]);\n\n return SoundCloud;\n}(_react.Component);\n\nSoundCloud.displayName = 'SoundCloud';\n\nSoundCloud.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nSoundCloud.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(SoundCloud);\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Vimeo = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://player.vimeo.com/api/player.js';\nvar SDK_GLOBAL = 'Vimeo';\nvar MATCH_URL = /vimeo\\.com\\//;\n\nvar Vimeo = exports.Vimeo = function (_Component) {\n _inherits(Vimeo, _Component);\n\n function Vimeo() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Vimeo);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Vimeo.__proto__ || Object.getPrototypeOf(Vimeo)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.secondsLoaded = null, _this.ref = function (container) {\n _this.container = container;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Vimeo, [{\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n this.duration = null;\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Vimeo) {\n if (!_this2.container) return;\n _this2.player = new Vimeo.Player(_this2.container, _extends({}, _this2.props.config.vimeo.playerOptions, {\n url: url,\n loop: _this2.props.loop\n }));\n _this2.player.ready().then(function () {\n var iframe = _this2.container.querySelector('iframe');\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n })['catch'](_this2.props.onError);\n _this2.player.on('loaded', function () {\n _this2.props.onReady();\n _this2.player.getDuration().then(function (duration) {\n _this2.duration = duration;\n });\n });\n _this2.player.on('play', _this2.props.onPlay);\n _this2.player.on('pause', _this2.props.onPause);\n _this2.player.on('seeked', function (e) {\n return _this2.props.onSeek(e.seconds);\n });\n _this2.player.on('ended', _this2.props.onEnded);\n _this2.player.on('error', _this2.props.onError);\n _this2.player.on('timeupdate', function (_ref2) {\n var seconds = _ref2.seconds;\n\n _this2.currentTime = seconds;\n });\n _this2.player.on('progress', function (_ref3) {\n var seconds = _ref3.seconds;\n\n _this2.secondsLoaded = seconds;\n });\n }, this.props.onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.callPlayer('unload');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('setCurrentTime', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.secondsLoaded;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n backgroundColor: 'black'\n }, this.props.style);\n return _react2['default'].createElement('div', {\n key: this.props.url,\n ref: this.ref,\n style: style\n });\n }\n }]);\n\n return Vimeo;\n}(_react.Component);\n\nVimeo.displayName = 'Vimeo';\n\nVimeo.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nexports['default'] = (0, _singlePlayer2['default'])(Vimeo);\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DailyMotion = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://api.dmcdn.net/all.js';\nvar SDK_GLOBAL = 'DM';\nvar SDK_GLOBAL_READY = 'dmAsyncInit';\nvar MATCH_URL = /dailymotion\\.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n\nvar DailyMotion = exports.DailyMotion = function (_Component) {\n _inherits(DailyMotion, _Component);\n\n function DailyMotion() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, DailyMotion);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DailyMotion.__proto__ || Object.getPrototypeOf(DailyMotion)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.onDurationChange = function () {\n var duration = _this.getDuration();\n _this.props.onDuration(duration);\n }, _this.ref = function (container) {\n _this.container = container;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(DailyMotion, [{\n key: 'parseId',\n value: function parseId(url) {\n var m = url.match(MATCH_URL);\n return m[4] || m[2];\n }\n }, {\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n var _props = this.props,\n controls = _props.controls,\n config = _props.config,\n onError = _props.onError,\n playing = _props.playing;\n\n var id = this.parseId(url);\n if (this.player) {\n this.player.load(id, {\n start: (0, _utils.parseStartTime)(url),\n autoplay: playing\n });\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, function (DM) {\n return DM.player;\n }).then(function (DM) {\n if (!_this2.container) return;\n var Player = DM.player;\n _this2.player = new Player(_this2.container, {\n width: '100%',\n height: '100%',\n video: id,\n params: _extends({\n controls: controls,\n autoplay: _this2.props.playing,\n start: (0, _utils.parseStartTime)(url),\n origin: window.location.origin\n }, config.dailymotion.params),\n events: {\n apiready: _this2.props.onReady,\n seeked: function seeked() {\n return _this2.props.onSeek(_this2.player.currentTime);\n },\n video_end: _this2.props.onEnded,\n durationchange: _this2.onDurationChange,\n pause: _this2.props.onPause,\n playing: _this2.props.onPlay,\n waiting: _this2.props.onBuffer,\n error: function error(event) {\n return onError(event);\n }\n }\n });\n }, onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.player.duration || null;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.player.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.player.bufferedTime;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%',\n backgroundColor: 'black'\n }, this.props.style);\n return _react2['default'].createElement(\n 'div',\n { style: style },\n _react2['default'].createElement('div', { ref: this.ref })\n );\n }\n }]);\n\n return DailyMotion;\n}(_react.Component);\n\nDailyMotion.displayName = 'DailyMotion';\n\nDailyMotion.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nDailyMotion.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(DailyMotion);\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FilePlayer = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AUDIO_EXTENSIONS = /\\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i;\nvar VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)($|\\?)/i;\nvar HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nvar HLS_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.8.9/hls.min.js';\nvar HLS_GLOBAL = 'Hls';\nvar DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nvar DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.6.5/dash.all.min.js';\nvar DASH_GLOBAL = 'dashjs';\n\nfunction canPlay(url) {\n if (url instanceof Array) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = url[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var item = _step.value;\n\n if (typeof item === 'string' && canPlay(item)) {\n return true;\n }\n if (canPlay(item.src)) {\n return true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return false;\n }\n return AUDIO_EXTENSIONS.test(url) || VIDEO_EXTENSIONS.test(url) || HLS_EXTENSIONS.test(url) || DASH_EXTENSIONS.test(url);\n}\n\nvar FilePlayer = exports.FilePlayer = function (_Component) {\n _inherits(FilePlayer, _Component);\n\n function FilePlayer() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, FilePlayer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = FilePlayer.__proto__ || Object.getPrototypeOf(FilePlayer)).call.apply(_ref, [this].concat(args))), _this), _this.onSeek = function (e) {\n _this.props.onSeek(e.target.currentTime);\n }, _this.renderSource = function (source, index) {\n if (typeof source === 'string') {\n return _react2['default'].createElement('source', { key: index, src: source });\n }\n return _react2['default'].createElement('source', _extends({ key: index }, source));\n }, _this.renderTrack = function (track, index) {\n return _react2['default'].createElement('track', _extends({ key: index }, track));\n }, _this.ref = function (player) {\n _this.player = player;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(FilePlayer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.addListeners();\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(nextProps)) {\n this.removeListeners();\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {\n this.addListeners();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.removeListeners();\n }\n }, {\n key: 'addListeners',\n value: function addListeners() {\n var _props = this.props,\n onReady = _props.onReady,\n onPlay = _props.onPlay,\n onPause = _props.onPause,\n onEnded = _props.onEnded,\n onError = _props.onError,\n playsinline = _props.playsinline;\n\n this.player.addEventListener('canplay', onReady);\n this.player.addEventListener('play', onPlay);\n this.player.addEventListener('pause', onPause);\n this.player.addEventListener('seeked', this.onSeek);\n this.player.addEventListener('ended', onEnded);\n this.player.addEventListener('error', onError);\n if (playsinline) {\n this.player.setAttribute('playsinline', '');\n this.player.setAttribute('webkit-playsinline', '');\n }\n }\n }, {\n key: 'removeListeners',\n value: function removeListeners() {\n var _props2 = this.props,\n onReady = _props2.onReady,\n onPlay = _props2.onPlay,\n onPause = _props2.onPause,\n onEnded = _props2.onEnded,\n onError = _props2.onError;\n\n this.player.removeEventListener('canplay', onReady);\n this.player.removeEventListener('play', onPlay);\n this.player.removeEventListener('pause', onPause);\n this.player.removeEventListener('seeked', this.onSeek);\n this.player.removeEventListener('ended', onEnded);\n this.player.removeEventListener('error', onError);\n }\n }, {\n key: 'shouldUseAudio',\n value: function shouldUseAudio(props) {\n return AUDIO_EXTENSIONS.test(props.url) || props.config.file.forceAudio;\n }\n }, {\n key: 'shouldUseHLS',\n value: function shouldUseHLS(url) {\n var iOS = typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n return HLS_EXTENSIONS.test(url) && !iOS || this.props.config.file.forceHLS;\n }\n }, {\n key: 'shouldUseDASH',\n value: function shouldUseDASH(url) {\n return DASH_EXTENSIONS.test(url) || this.props.config.file.forceDASH;\n }\n }, {\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n if (this.shouldUseHLS(url)) {\n (0, _utils.getSDK)(HLS_SDK_URL, HLS_GLOBAL).then(function (Hls) {\n _this2.hls = new Hls(_this2.props.config.file.hlsOptions);\n _this2.hls.on(Hls.Events.ERROR, function (e, data) {\n _this2.props.onError(e, data, _this2.hls, Hls);\n });\n _this2.hls.loadSource(url);\n _this2.hls.attachMedia(_this2.player);\n });\n }\n if (this.shouldUseDASH(url)) {\n (0, _utils.getSDK)(DASH_SDK_URL, DASH_GLOBAL).then(function (dashjs) {\n _this2.dash = dashjs.MediaPlayer().create();\n _this2.dash.initialize(_this2.player, url, _this2.props.playing);\n _this2.dash.getDebug().setLogToBrowserConsole(false);\n });\n }\n }\n }, {\n key: 'play',\n value: function play() {\n var promise = this.player.play();\n if (promise) {\n promise['catch'](this.props.onError);\n }\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.player.pause();\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.player.removeAttribute('src');\n if (this.hls) {\n this.hls.destroy();\n }\n if (this.dash) {\n this.dash.reset();\n }\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.player.currentTime = seconds;\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.player.volume = fraction;\n }\n }, {\n key: 'setPlaybackRate',\n value: function setPlaybackRate(rate) {\n this.player.playbackRate = rate;\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.player.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.player.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n if (this.player.buffered.length === 0) return 0;\n return this.player.buffered.end(0);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props3 = this.props,\n url = _props3.url,\n loop = _props3.loop,\n controls = _props3.controls,\n config = _props3.config,\n width = _props3.width,\n height = _props3.height;\n\n var useAudio = this.shouldUseAudio(this.props);\n var useHLS = this.shouldUseHLS(url);\n var useDASH = this.shouldUseDASH(url);\n var Element = useAudio ? 'audio' : 'video';\n var src = url instanceof Array || useHLS || useDASH ? undefined : url;\n var style = {\n width: !width || width === 'auto' ? width : '100%',\n height: !height || height === 'auto' ? height : '100%'\n };\n return _react2['default'].createElement(\n Element,\n _extends({\n ref: this.ref,\n src: src,\n style: style,\n preload: 'auto',\n controls: controls,\n loop: loop\n }, config.file.attributes),\n url instanceof Array && url.map(this.renderSource),\n config.file.tracks.map(this.renderTrack)\n );\n }\n }]);\n\n return FilePlayer;\n}(_react.Component);\n\nFilePlayer.displayName = 'FilePlayer';\nFilePlayer.canPlay = canPlay;\nexports['default'] = (0, _singlePlayer2['default'])(FilePlayer);\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _props2 = __webpack_require__(3);\n\nvar _utils = __webpack_require__(1);\n\nvar _players = __webpack_require__(18);\n\nvar _players2 = _interopRequireDefault(_players);\n\nvar _Player3 = __webpack_require__(4);\n\nvar _Player4 = _interopRequireDefault(_Player3);\n\nvar _FilePlayer = __webpack_require__(9);\n\nvar _preload = __webpack_require__(24);\n\nvar _preload2 = _interopRequireDefault(_preload);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SUPPORTED_PROPS = Object.keys(_props2.propTypes);\n\nvar ReactPlayer = function (_Component) {\n _inherits(ReactPlayer, _Component);\n\n function ReactPlayer() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, ReactPlayer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ReactPlayer.__proto__ || Object.getPrototypeOf(ReactPlayer)).call.apply(_ref, [this].concat(args))), _this), _this.config = (0, _utils.getConfig)(_this.props, _props2.defaultProps, true), _this.getDuration = function () {\n if (!_this.player) return null;\n return _this.player.getDuration();\n }, _this.getCurrentTime = function () {\n if (!_this.player) return null;\n return _this.player.getCurrentTime();\n }, _this.getInternalPlayer = function () {\n var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'player';\n\n if (!_this.player) return null;\n return _this.player.getInternalPlayer(key);\n }, _this.seekTo = function (fraction) {\n if (!_this.player) return null;\n _this.player.seekTo(fraction);\n }, _this.wrapperRef = function (wrapper) {\n _this.wrapper = wrapper;\n }, _this.activePlayerRef = function (player) {\n _this.player = player;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(ReactPlayer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.props.progressFrequency) {\n var message = 'ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead';\n console.warn(message, 'font-weight: bold', '', 'font-weight: bold', '');\n }\n }\n }, {\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps) {\n return !(0, _utils.isEqual)(this.props, nextProps);\n }\n }, {\n key: 'componentWillUpdate',\n value: function componentWillUpdate(nextProps) {\n this.config = (0, _utils.getConfig)(nextProps, _props2.defaultProps);\n }\n }, {\n key: 'getActivePlayer',\n value: function getActivePlayer(url) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _players2['default'][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _Player = _step.value;\n\n if (_Player.canPlay(url)) {\n return _Player;\n }\n }\n // Fall back to FilePlayer if nothing else can play the URL\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return _FilePlayer.FilePlayer;\n }\n }, {\n key: 'renderActivePlayer',\n value: function renderActivePlayer(url) {\n if (!url) return null;\n var activePlayer = this.getActivePlayer(url);\n return _react2['default'].createElement(_Player4['default'], _extends({}, this.props, {\n key: activePlayer.displayName,\n ref: this.activePlayerRef,\n config: this.config,\n activePlayer: activePlayer\n }));\n }\n }, {\n key: 'sortPlayers',\n value: function sortPlayers(a, b) {\n // Retain player order to prevent weird iframe behaviour when switching players\n if (a && b) {\n return a.key < b.key ? -1 : 1;\n }\n return 0;\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n url = _props.url,\n style = _props.style,\n width = _props.width,\n height = _props.height,\n Wrapper = _props.wrapper;\n\n var otherProps = (0, _utils.omit)(this.props, SUPPORTED_PROPS, _props2.DEPRECATED_CONFIG_PROPS);\n var activePlayer = this.renderActivePlayer(url);\n var preloadPlayers = (0, _preload2['default'])(url, this.config);\n var players = [activePlayer].concat(_toConsumableArray(preloadPlayers)).sort(this.sortPlayers);\n return _react2['default'].createElement(\n Wrapper,\n _extends({ ref: this.wrapperRef, style: _extends({}, style, { width: width, height: height }) }, otherProps),\n players\n );\n }\n }]);\n\n return ReactPlayer;\n}(_react.Component);\n\nReactPlayer.displayName = 'ReactPlayer';\nReactPlayer.propTypes = _props2.propTypes;\nReactPlayer.defaultProps = _props2.defaultProps;\n\nReactPlayer.canPlay = function (url) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = _players2['default'][Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _Player2 = _step2.value;\n\n if (_Player2.canPlay(url)) {\n return true;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2['return']) {\n _iterator2['return']();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return false;\n};\n\nexports['default'] = ReactPlayer;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (false) {\n var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\n var isValidElement = function isValidElement(object) {\n return (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = __webpack_require__(12)();\n}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar emptyFunction = __webpack_require__(13);\nvar invariant = __webpack_require__(14);\nvar ReactPropTypesSecret = __webpack_require__(15);\n\nmodule.exports = function () {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (false) {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function load(src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var script = document.createElement('script');\n\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n\n opts = opts || {};\n cb = cb || function () {};\n\n script.type = opts.type || 'text/javascript';\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true;\n script.src = src;\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs);\n }\n\n if (opts.text) {\n script.text = '' + opts.text;\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd;\n onend(script, cb);\n\n // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script);\n};\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd(script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null;\n cb(null, script);\n };\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null;\n cb(new Error('Failed to load ' + this.src), script);\n };\n}\n\nfunction ieOnEnd(script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return;\n this.onreadystatechange = null;\n cb(null, script); // there is no way to catch loading errors in IE8\n };\n}\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value) && !isSpecial(value);\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object';\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]' || stringValue === '[object Date]' || isReactElement(value);\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol['for'];\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol['for']('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {};\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, optionsArgument) {\n\tvar clone = !optionsArgument || optionsArgument.clone !== false;\n\n\treturn clone && isMergeableObject(value) ? deepmerge(emptyTarget(value), value, optionsArgument) : value;\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n\treturn target.concat(source).map(function (element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, optionsArgument);\n\t});\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n\tvar destination = {};\n\tif (isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function (key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], optionsArgument);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function (key) {\n\t\tif (!isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], optionsArgument);\n\t\t} else {\n\t\t\tdestination[key] = deepmerge(target[key], source[key], optionsArgument);\n\t\t}\n\t});\n\treturn destination;\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar options = optionsArgument || { arrayMerge: defaultArrayMerge };\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, optionsArgument);\n\t} else if (sourceIsArray) {\n\t\tvar arrayMerge = options.arrayMerge || defaultArrayMerge;\n\t\treturn arrayMerge(target, source, optionsArgument);\n\t} else {\n\t\treturn mergeObject(target, source, optionsArgument);\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array');\n\t}\n\n\treturn array.reduce(function (prev, next) {\n\t\treturn deepmerge(prev, next, optionsArgument);\n\t}, {});\n};\n\nvar deepmerge_1 = deepmerge;\n\nexports['default'] = deepmerge_1;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _YouTube = __webpack_require__(5);\n\nvar _SoundCloud = __webpack_require__(6);\n\nvar _Vimeo = __webpack_require__(7);\n\nvar _Facebook = __webpack_require__(19);\n\nvar _Streamable = __webpack_require__(20);\n\nvar _Wistia = __webpack_require__(21);\n\nvar _Twitch = __webpack_require__(22);\n\nvar _DailyMotion = __webpack_require__(8);\n\nvar _Mixcloud = __webpack_require__(23);\n\nvar _FilePlayer = __webpack_require__(9);\n\nexports['default'] = [_YouTube.YouTube, _SoundCloud.SoundCloud, _Vimeo.Vimeo, _Facebook.Facebook, _Streamable.Streamable, _Wistia.Wistia, _Twitch.Twitch, _DailyMotion.DailyMotion, _Mixcloud.Mixcloud, _FilePlayer.FilePlayer];\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Facebook = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//connect.facebook.net/en_US/sdk.js';\nvar SDK_GLOBAL = 'FB';\nvar SDK_GLOBAL_READY = 'fbAsyncInit';\nvar MATCH_URL = /facebook\\.com\\/([^/?].+\\/)?video(s|\\.php)[/?].*$/;\nvar PLAYER_ID_PREFIX = 'facebook-player-';\n\nvar Facebook = exports.Facebook = function (_Component) {\n _inherits(Facebook, _Component);\n\n function Facebook() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Facebook);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Facebook.__proto__ || Object.getPrototypeOf(Facebook)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.playerID = PLAYER_ID_PREFIX + (0, _utils.randomString)(), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Facebook, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n if (isReady) {\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(function (FB) {\n return FB.XFBML.parse();\n });\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(function (FB) {\n FB.init({\n appId: _this2.props.config.facebook.appId,\n xfbml: true,\n version: 'v2.5'\n });\n FB.Event.subscribe('xfbml.ready', function (msg) {\n if (msg.type === 'video' && msg.id === _this2.playerID) {\n _this2.player = msg.instance;\n _this2.player.subscribe('startedPlaying', _this2.props.onPlay);\n _this2.player.subscribe('paused', _this2.props.onPause);\n _this2.player.subscribe('finishedPlaying', _this2.props.onEnded);\n _this2.player.subscribe('startedBuffering', _this2.props.onBuffer);\n _this2.player.subscribe('error', _this2.props.onError);\n _this2.callPlayer('unmute');\n _this2.props.onReady();\n }\n });\n });\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n if (fraction !== 0) {\n this.callPlayer('unmute');\n }\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('getDuration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('getCurrentPosition');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = {\n width: '100%',\n height: '100%',\n backgroundColor: 'black'\n };\n return _react2['default'].createElement('div', {\n style: style,\n id: this.playerID,\n className: 'fb-video',\n 'data-href': this.props.url,\n 'data-allowfullscreen': 'true',\n 'data-controls': !this.props.controls ? 'false' : undefined\n });\n }\n }]);\n\n return Facebook;\n}(_react.Component);\n\nFacebook.displayName = 'Facebook';\n\nFacebook.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nFacebook.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(Facebook);\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Streamable = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//cdn.embed.ly/player-0.1.0.min.js';\nvar SDK_GLOBAL = 'playerjs';\nvar MATCH_URL = /streamable\\.com\\/([a-z0-9]+)$/;\n\nvar Streamable = exports.Streamable = function (_Component) {\n _inherits(Streamable, _Component);\n\n function Streamable() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Streamable);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Streamable.__proto__ || Object.getPrototypeOf(Streamable)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.secondsLoaded = null, _this.ref = function (iframe) {\n _this.iframe = iframe;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Streamable, [{\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (playerjs) {\n if (!_this2.iframe) return;\n _this2.player = new playerjs.Player(_this2.iframe);\n _this2.player.setLoop(_this2.props.loop);\n _this2.player.on('ready', _this2.props.onReady);\n _this2.player.on('play', _this2.props.onPlay);\n _this2.player.on('pause', _this2.props.onPause);\n _this2.player.on('seeked', _this2.props.onSeek);\n _this2.player.on('ended', _this2.props.onEnded);\n _this2.player.on('error', _this2.props.onError);\n _this2.player.on('timeupdate', function (_ref2) {\n var duration = _ref2.duration,\n seconds = _ref2.seconds;\n\n _this2.duration = duration;\n _this2.currentTime = seconds;\n });\n _this2.player.on('buffered', function (_ref3) {\n var percent = _ref3.percent;\n\n if (_this2.duration) {\n _this2.secondsLoaded = _this2.duration * percent;\n }\n });\n }, this.props.onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('setCurrentTime', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction * 100);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.secondsLoaded;\n }\n }, {\n key: 'render',\n value: function render() {\n var id = this.props.url.match(MATCH_URL)[1];\n var style = {\n width: '100%',\n height: '100%'\n };\n return _react2['default'].createElement('iframe', {\n ref: this.ref,\n src: 'https://streamable.com/o/' + id,\n frameBorder: '0',\n scrolling: 'no',\n style: style,\n allowFullScreen: true\n });\n }\n }]);\n\n return Streamable;\n}(_react.Component);\n\nStreamable.displayName = 'Streamable';\n\nStreamable.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nexports['default'] = (0, _singlePlayer2['default'])(Streamable);\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Wistia = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//fast.wistia.com/assets/external/E-v1.js';\nvar SDK_GLOBAL = 'Wistia';\nvar MATCH_URL = /(?:wistia\\.com|wi\\.st)\\/(?:medias|embed)\\/(.*)$/;\n\nvar Wistia = exports.Wistia = function (_Component) {\n _inherits(Wistia, _Component);\n\n function Wistia() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Wistia);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Wistia.__proto__ || Object.getPrototypeOf(Wistia)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Wistia, [{\n key: 'getID',\n value: function getID(url) {\n return url && url.match(MATCH_URL)[1];\n }\n }, {\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n var _props = this.props,\n controls = _props.controls,\n _onReady = _props.onReady,\n onPlay = _props.onPlay,\n onPause = _props.onPause,\n onSeek = _props.onSeek,\n onEnded = _props.onEnded,\n config = _props.config;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function () {\n window._wq = window._wq || [];\n window._wq.push({\n id: _this2.getID(url),\n options: _extends({\n controlsVisibleOnLoad: controls\n }, config.wistia.options),\n onReady: function onReady(player) {\n _this2.player = player;\n _this2.player.bind('play', onPlay);\n _this2.player.bind('pause', onPause);\n _this2.player.bind('seek', onSeek);\n _this2.player.bind('end', onEnded);\n _onReady();\n }\n });\n });\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.callPlayer('remove');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('time', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('volume', fraction);\n }\n }, {\n key: 'setPlaybackRate',\n value: function setPlaybackRate(rate) {\n this.callPlayer('playbackRate', rate);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('duration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('time');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var id = this.getID(this.props.url);\n var className = 'wistia_embed wistia_async_' + id;\n var style = {\n width: '100%',\n height: '100%'\n };\n return _react2['default'].createElement('div', { key: id, className: className, style: style });\n }\n }]);\n\n return Wistia;\n}(_react.Component);\n\nWistia.displayName = 'Wistia';\n\nWistia.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nWistia.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(Wistia);\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Twitch = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//player.twitch.tv/js/embed/v1.js';\nvar SDK_GLOBAL = 'Twitch';\nvar MATCH_VIDEO_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/videos\\/(\\d+)($|\\?)/;\nvar MATCH_CHANNEL_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-z0-9_]+)($|\\?)/;\nvar PLAYER_ID_PREFIX = 'twitch-player-';\n\nvar Twitch = exports.Twitch = function (_Component) {\n _inherits(Twitch, _Component);\n\n function Twitch() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Twitch);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Twitch.__proto__ || Object.getPrototypeOf(Twitch)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.playerID = PLAYER_ID_PREFIX + (0, _utils.randomString)(), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Twitch, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n var _props = this.props,\n playsinline = _props.playsinline,\n onError = _props.onError,\n config = _props.config;\n\n var isChannel = MATCH_CHANNEL_URL.test(url);\n var id = isChannel ? url.match(MATCH_CHANNEL_URL)[1] : url.match(MATCH_VIDEO_URL)[1];\n if (isReady) {\n if (isChannel) {\n this.player.setChannel(id);\n } else {\n this.player.setVideo('v' + id);\n }\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Twitch) {\n _this2.player = new Twitch.Player(_this2.playerID, _extends({\n video: isChannel ? '' : id,\n channel: isChannel ? id : '',\n height: '100%',\n width: '100%',\n playsinline: playsinline,\n autoplay: _this2.props.playing\n }, config.twitch.options));\n var _Twitch$Player = Twitch.Player,\n READY = _Twitch$Player.READY,\n PLAY = _Twitch$Player.PLAY,\n PAUSE = _Twitch$Player.PAUSE,\n ENDED = _Twitch$Player.ENDED;\n\n _this2.player.addEventListener(READY, _this2.props.onReady);\n _this2.player.addEventListener(PLAY, _this2.props.onPlay);\n _this2.player.addEventListener(PAUSE, _this2.props.onPause);\n _this2.player.addEventListener(ENDED, _this2.props.onEnded);\n }, onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.callPlayer('pause');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('getDuration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('getCurrentTime');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = {\n width: '100%',\n height: '100%'\n };\n return _react2['default'].createElement('div', { style: style, id: this.playerID });\n }\n }]);\n\n return Twitch;\n}(_react.Component);\n\nTwitch.displayName = 'Twitch';\n\nTwitch.canPlay = function (url) {\n return MATCH_VIDEO_URL.test(url) || MATCH_CHANNEL_URL.test(url);\n};\n\nTwitch.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(Twitch);\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Mixcloud = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//widget.mixcloud.com/media/js/widgetApi.js';\nvar SDK_GLOBAL = 'Mixcloud';\nvar MATCH_URL = /mixcloud\\.com\\/([^/]+\\/[^/]+)/;\n\nvar Mixcloud = exports.Mixcloud = function (_Component) {\n _inherits(Mixcloud, _Component);\n\n function Mixcloud() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Mixcloud);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Mixcloud.__proto__ || Object.getPrototypeOf(Mixcloud)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.secondsLoaded = null, _this.ref = function (iframe) {\n _this.iframe = iframe;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Mixcloud, [{\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Mixcloud) {\n _this2.player = Mixcloud.PlayerWidget(_this2.iframe);\n _this2.player.ready.then(function () {\n _this2.player.events.play.on(_this2.props.onPlay);\n _this2.player.events.pause.on(_this2.props.onPause);\n _this2.player.events.ended.on(_this2.props.onEnded);\n _this2.player.events.error.on(_this2.props.error);\n _this2.player.events.progress.on(function (seconds, duration) {\n _this2.currentTime = seconds;\n _this2.duration = duration;\n });\n _this2.props.onReady();\n });\n }, this.props.onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n // No volume support\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n url = _props.url,\n config = _props.config;\n\n var id = url.match(MATCH_URL)[1];\n var style = {\n width: '100%',\n height: '100%'\n };\n var query = (0, _utils.queryString)(_extends({}, config.mixcloud.options, {\n feed: '/' + id + '/'\n }));\n // We have to give the iframe a key here to prevent a\n // weird dialog appearing when loading a new track\n return _react2['default'].createElement('iframe', {\n key: id,\n ref: this.ref,\n style: style,\n src: 'https://www.mixcloud.com/widget/iframe/?' + query,\n frameBorder: '0'\n });\n }\n }]);\n\n return Mixcloud;\n}(_react.Component);\n\nMixcloud.displayName = 'Mixcloud';\n\nMixcloud.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nexports['default'] = (0, _singlePlayer2['default'])(Mixcloud);\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = renderPreloadPlayers;\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Player = __webpack_require__(4);\n\nvar _Player2 = _interopRequireDefault(_Player);\n\nvar _YouTube = __webpack_require__(5);\n\nvar _SoundCloud = __webpack_require__(6);\n\nvar _Vimeo = __webpack_require__(7);\n\nvar _DailyMotion = __webpack_require__(8);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar PRELOAD_PLAYERS = [{\n Player: _YouTube.YouTube,\n configKey: 'youtube',\n url: 'https://www.youtube.com/watch?v=GlCmAC4MHek'\n}, {\n Player: _SoundCloud.SoundCloud,\n configKey: 'soundcloud',\n url: 'https://soundcloud.com/seucheu/john-cage-433-8-bit-version'\n}, {\n Player: _Vimeo.Vimeo,\n configKey: 'vimeo',\n url: 'https://vimeo.com/127250231'\n}, {\n Player: _DailyMotion.DailyMotion,\n configKey: 'dailymotion',\n url: 'http://www.dailymotion.com/video/xqdpyk'\n}];\n\nfunction renderPreloadPlayers(url, config) {\n var players = [];\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = PRELOAD_PLAYERS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var player = _step.value;\n\n if (!player.Player.canPlay(url) && config[player.configKey].preload) {\n players.push(_react2['default'].createElement(_Player2['default'], {\n key: player.Player.displayName,\n activePlayer: player.Player,\n url: player.url,\n playing: true,\n style: { display: 'none' }\n }));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return players;\n}\nmodule.exports = exports['default'];\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ReactPlayer.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 10);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 67216d17a27af2ef36cb","module.exports = React;\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"React\"\n// module id = 0\n// module chunks = 0","import loadScript from 'load-script'\r\nimport merge from 'deepmerge'\r\n\r\nimport { DEPRECATED_CONFIG_PROPS } from './props'\r\n\r\nconst MATCH_START_QUERY = /[?](?:start|t)=([0-9hms]+)/\r\nconst MATCH_START_STAMP = /(\\d+)(h|m|s)/g\r\nconst MATCH_NUMERIC = /^\\d+$/\r\n\r\n// Parse YouTube URL for a start time param, ie ?t=1h14m30s\r\n// and return the start time in seconds\r\nexport function parseStartTime (url) {\r\n const match = url.match(MATCH_START_QUERY)\r\n if (match) {\r\n const stamp = match[1]\r\n if (stamp.match(MATCH_START_STAMP)) {\r\n return parseStartStamp(stamp)\r\n }\r\n if (MATCH_NUMERIC.test(stamp)) {\r\n return parseInt(stamp, 10)\r\n }\r\n }\r\n return 0\r\n}\r\n\r\nfunction parseStartStamp (stamp) {\r\n let seconds = 0\r\n let array = MATCH_START_STAMP.exec(stamp)\r\n while (array !== null) {\r\n const [, count, period] = array\r\n if (period === 'h') seconds += parseInt(count, 10) * 60 * 60\r\n if (period === 'm') seconds += parseInt(count, 10) * 60\r\n if (period === 's') seconds += parseInt(count, 10)\r\n array = MATCH_START_STAMP.exec(stamp)\r\n }\r\n return seconds\r\n}\r\n\r\n// http://stackoverflow.com/a/38622545\r\nexport function randomString () {\r\n return Math.random().toString(36).substr(2, 5)\r\n}\r\n\r\nexport function queryString (object) {\r\n return Object\r\n .keys(object)\r\n .map(key => `${key}=${object[key]}`)\r\n .join('&')\r\n}\r\n\r\n// Util function to load an external SDK\r\n// or return the SDK if it is already loaded\r\nexport function getSDK (url, sdkGlobal, sdkReady = null, isLoaded = () => true) {\r\n if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {\r\n return Promise.resolve(window[sdkGlobal])\r\n }\r\n return new Promise((resolve, reject) => {\r\n if (sdkReady) {\r\n const previousOnReady = window[sdkReady]\r\n window[sdkReady] = function () {\r\n if (previousOnReady) previousOnReady()\r\n resolve(window[sdkGlobal])\r\n }\r\n }\r\n loadScript(url, err => {\r\n if (err) reject(err)\r\n if (!sdkReady) {\r\n resolve(window[sdkGlobal])\r\n }\r\n })\r\n })\r\n}\r\n\r\nexport function getConfig (props, defaultProps, showWarning) {\r\n let config = merge(defaultProps.config, props.config)\r\n for (let p of DEPRECATED_CONFIG_PROPS) {\r\n if (props[p]) {\r\n const key = p.replace(/Config$/, '')\r\n config = merge(config, { [key]: props[p] })\r\n if (showWarning) {\r\n const link = 'https://github.com/CookPete/react-player#config-prop'\r\n const message = `ReactPlayer: %c${p} %cis deprecated, please use the config prop instead – ${link}`\r\n console.warn(message, 'font-weight: bold', '')\r\n }\r\n }\r\n }\r\n return config\r\n}\r\n\r\nexport function omit (object, ...arrays) {\r\n const omitKeys = [].concat(...arrays)\r\n const output = {}\r\n const keys = Object.keys(object)\r\n for (let key of keys) {\r\n if (omitKeys.indexOf(key) === -1) {\r\n output[key] = object[key]\r\n }\r\n }\r\n return output\r\n}\r\n\r\nexport function callPlayer (method, ...args) {\r\n // Util method for calling a method on this.player\r\n // but guard against errors and console.warn instead\r\n if (!this.player || !this.player[method]) {\r\n let message = `ReactPlayer: ${this.constructor.displayName} player could not call %c${method}%c – `\r\n if (!this.player) {\r\n message += 'The player was not available'\r\n } else if (!this.player[method]) {\r\n message += 'The method was not available'\r\n }\r\n console.warn(message, 'font-weight: bold', '')\r\n return null\r\n }\r\n return this.player[method](...args)\r\n}\r\n\r\nexport function isObject (val) {\r\n return val !== null && typeof val === 'object'\r\n}\r\n\r\n// Deep comparison of two objects but ignoring\r\n// functions, for use in shouldComponentUpdate\r\nexport function isEqual (a, b) {\r\n if (typeof a === 'function' && typeof b === 'function') {\r\n return true\r\n }\r\n if (a instanceof Array && b instanceof Array) {\r\n if (a.length !== b.length) {\r\n return false\r\n }\r\n for (let i = 0; i !== a.length; i++) {\r\n if (!isEqual(a[i], b[i])) {\r\n return false\r\n }\r\n }\r\n return true\r\n }\r\n if (isObject(a) && isObject(b)) {\r\n if (Object.keys(a).length !== Object.keys(b).length) {\r\n return false\r\n }\r\n for (let key of Object.keys(a)) {\r\n if (!isEqual(a[key], b[key])) {\r\n return false\r\n }\r\n }\r\n return true\r\n }\r\n return a === b\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","import React, { Component } from 'react'\r\n\r\nimport { propTypes, defaultProps, DEPRECATED_CONFIG_PROPS } from './props'\r\nimport { getConfig, omit, isEqual } from './utils'\r\nimport Player from './Player'\r\n\r\nconst SUPPORTED_PROPS = Object.keys(propTypes)\r\n\r\nexport default function createSinglePlayer (activePlayer) {\r\n return class SinglePlayer extends Component {\r\n static displayName = `${activePlayer.displayName}Player`\r\n static propTypes = propTypes\r\n static defaultProps = defaultProps\r\n static canPlay = activePlayer.canPlay\r\n\r\n shouldComponentUpdate (nextProps) {\r\n return !isEqual(this.props, nextProps)\r\n }\r\n componentWillUpdate (nextProps) {\r\n this.config = getConfig(nextProps, defaultProps)\r\n }\r\n ref = player => {\r\n this.player = player\r\n }\r\n render () {\r\n if (!activePlayer.canPlay(this.props.url)) {\r\n return null\r\n }\r\n const { style, width, height, wrapper: Wrapper } = this.props\r\n const otherProps = omit(this.props, SUPPORTED_PROPS, DEPRECATED_CONFIG_PROPS)\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/singlePlayer.js","import PropTypes from 'prop-types'\r\n\r\nconst { string, bool, number, array, oneOfType, shape, object, func } = PropTypes\r\n\r\nexport const propTypes = {\r\n url: oneOfType([ string, array ]),\r\n playing: bool,\r\n loop: bool,\r\n controls: bool,\r\n volume: number,\r\n muted: bool,\r\n playbackRate: number,\r\n width: oneOfType([ string, number ]),\r\n height: oneOfType([ string, number ]),\r\n style: object,\r\n progressInterval: number,\r\n playsinline: bool,\r\n wrapper: oneOfType([ string, func ]),\r\n config: shape({\r\n soundcloud: shape({\r\n options: object\r\n }),\r\n youtube: shape({\r\n playerVars: object,\r\n preload: bool\r\n }),\r\n facebook: shape({\r\n appId: string\r\n }),\r\n dailymotion: shape({\r\n params: object,\r\n preload: bool\r\n }),\r\n vimeo: shape({\r\n iframeParams: object,\r\n preload: bool\r\n }),\r\n file: shape({\r\n attributes: object,\r\n tracks: array,\r\n forceAudio: bool,\r\n forceHLS: bool,\r\n forceDASH: bool,\r\n hlsOptions: object\r\n }),\r\n wistia: shape({\r\n options: object\r\n }),\r\n mixcloud: shape({\r\n options: object\r\n }),\r\n twitch: shape({\r\n options: object\r\n })\r\n }),\r\n onReady: func,\r\n onStart: func,\r\n onPlay: func,\r\n onPause: func,\r\n onBuffer: func,\r\n onEnded: func,\r\n onError: func,\r\n onDuration: func,\r\n onSeek: func,\r\n onProgress: func\r\n}\r\n\r\nexport const defaultProps = {\r\n playing: false,\r\n loop: false,\r\n controls: false,\r\n volume: null,\r\n muted: false,\r\n playbackRate: 1,\r\n width: '640px',\r\n height: '360px',\r\n style: {},\r\n progressInterval: 1000,\r\n playsinline: false,\r\n wrapper: 'div',\r\n config: {\r\n soundcloud: {\r\n options: {\r\n visual: true, // Undocumented, but makes player fill container and look better\r\n buying: false,\r\n liking: false,\r\n download: false,\r\n sharing: false,\r\n show_comments: false,\r\n show_playcount: false\r\n }\r\n },\r\n youtube: {\r\n playerVars: {\r\n autoplay: 0,\r\n playsinline: 1,\r\n showinfo: 0,\r\n rel: 0,\r\n iv_load_policy: 3,\r\n modestbranding: 1\r\n },\r\n preload: false\r\n },\r\n facebook: {\r\n appId: '1309697205772819'\r\n },\r\n dailymotion: {\r\n params: {\r\n api: 1,\r\n 'endscreen-enable': false\r\n },\r\n preload: false\r\n },\r\n vimeo: {\r\n playerOptions: {\r\n autopause: false,\r\n autoplay: false,\r\n byline: false,\r\n portrait: false,\r\n title: false\r\n },\r\n preload: false\r\n },\r\n file: {\r\n attributes: {},\r\n tracks: [],\r\n forceAudio: false,\r\n forceHLS: false,\r\n forceDASH: false,\r\n hlsOptions: {}\r\n },\r\n wistia: {\r\n options: {}\r\n },\r\n mixcloud: {\r\n options: {\r\n hide_cover: 1\r\n }\r\n },\r\n twitch: {\r\n options: {}\r\n }\r\n },\r\n onReady: function () {},\r\n onStart: function () {},\r\n onPlay: function () {},\r\n onPause: function () {},\r\n onBuffer: function () {},\r\n onEnded: function () {},\r\n onError: function () {},\r\n onDuration: function () {},\r\n onSeek: function () {},\r\n onProgress: function () {}\r\n}\r\n\r\nexport const DEPRECATED_CONFIG_PROPS = [\r\n 'soundcloudConfig',\r\n 'youtubeConfig',\r\n 'facebookConfig',\r\n 'dailymotionConfig',\r\n 'vimeoConfig',\r\n 'fileConfig',\r\n 'wistiaConfig'\r\n]\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/props.js","import React, { Component } from 'react'\r\n\r\nimport { propTypes, defaultProps } from './props'\r\n\r\nconst SEEK_ON_PLAY_EXPIRY = 5000\r\n\r\nexport default class Player extends Component {\r\n static displayName = 'Player'\r\n static propTypes = propTypes\r\n static defaultProps = defaultProps\r\n mounted = false\r\n isReady = false\r\n isPlaying = false // Track playing state internally to prevent bugs\r\n isLoading = true // Use isLoading to prevent onPause when switching URL\r\n startOnPlay = true\r\n seekOnPlay = null\r\n onDurationCalled = false\r\n componentDidMount () {\r\n this.mounted = true\r\n this.player.load(this.props.url)\r\n this.progress()\r\n }\r\n componentWillUnmount () {\r\n clearTimeout(this.progressTimeout)\r\n if (this.isReady) {\r\n this.player.stop()\r\n }\r\n this.mounted = false\r\n }\r\n componentWillReceiveProps (nextProps) {\r\n // Invoke player methods based on incoming props\r\n const { url, playing, volume, muted, playbackRate } = this.props\r\n if (url !== nextProps.url) {\r\n this.isLoading = true\r\n this.startOnPlay = true\r\n this.onDurationCalled = false\r\n this.player.load(nextProps.url, this.isReady)\r\n }\r\n if (!playing && nextProps.playing && !this.isPlaying) {\r\n this.player.play()\r\n }\r\n if (playing && !nextProps.playing && this.isPlaying) {\r\n this.player.pause()\r\n }\r\n if (nextProps.volume !== null) {\r\n if (volume !== nextProps.volume && !nextProps.muted) {\r\n this.player.setVolume(nextProps.volume)\r\n }\r\n if (muted !== nextProps.muted) {\r\n this.player.setVolume(nextProps.muted ? 0 : nextProps.volume)\r\n }\r\n }\r\n if (playbackRate !== nextProps.playbackRate && this.player.setPlaybackRate) {\r\n this.player.setPlaybackRate(nextProps.playbackRate)\r\n }\r\n }\r\n getDuration () {\r\n if (!this.isReady) return null\r\n return this.player.getDuration()\r\n }\r\n getCurrentTime () {\r\n if (!this.isReady) return null\r\n return this.player.getCurrentTime()\r\n }\r\n getSecondsLoaded () {\r\n if (!this.isReady) return null\r\n return this.player.getSecondsLoaded()\r\n }\r\n getInternalPlayer = (key) => {\r\n if (!this.player) return null\r\n return this.player[key]\r\n }\r\n progress = () => {\r\n if (this.props.url && this.player && this.isReady) {\r\n const playedSeconds = this.getCurrentTime() || 0\r\n const loadedSeconds = this.getSecondsLoaded()\r\n const duration = this.getDuration()\r\n if (duration) {\r\n const progress = {\r\n playedSeconds,\r\n played: playedSeconds / duration\r\n }\r\n if (loadedSeconds !== null) {\r\n progress.loadedSeconds = loadedSeconds\r\n progress.loaded = loadedSeconds / duration\r\n }\r\n // Only call onProgress if values have changed\r\n if (progress.played !== this.prevPlayed || progress.loaded !== this.prevLoaded) {\r\n this.props.onProgress(progress)\r\n }\r\n this.prevPlayed = progress.played\r\n this.prevLoaded = progress.loaded\r\n }\r\n }\r\n this.progressTimeout = setTimeout(this.progress, this.props.progressFrequency || this.props.progressInterval)\r\n }\r\n seekTo (amount) {\r\n // When seeking before player is ready, store value and seek later\r\n if (!this.isReady && amount !== 0) {\r\n this.seekOnPlay = amount\r\n setTimeout(() => {\r\n this.seekOnPlay = null\r\n }, SEEK_ON_PLAY_EXPIRY)\r\n return\r\n }\r\n if (amount > 0 && amount < 1) {\r\n // Convert fraction to seconds based on duration\r\n const duration = this.player.getDuration()\r\n if (!duration) {\r\n console.warn('ReactPlayer: could not seek using fraction – duration not yet available')\r\n return\r\n }\r\n this.player.seekTo(duration * amount)\r\n return\r\n }\r\n this.player.seekTo(amount)\r\n }\r\n onReady = () => {\r\n if (!this.mounted) return\r\n this.isReady = true\r\n this.isLoading = false\r\n const { onReady, playing, volume, muted } = this.props\r\n onReady()\r\n if (muted || volume !== null) {\r\n this.player.setVolume(muted ? 0 : volume)\r\n }\r\n if (playing) {\r\n this.player.play()\r\n }\r\n this.onDurationCheck()\r\n }\r\n onPlay = () => {\r\n this.isPlaying = true\r\n this.isLoading = false\r\n const { onStart, onPlay, playbackRate } = this.props\r\n if (this.startOnPlay) {\r\n if (this.player.setPlaybackRate) {\r\n this.player.setPlaybackRate(playbackRate)\r\n }\r\n onStart()\r\n this.startOnPlay = false\r\n }\r\n onPlay()\r\n if (this.seekOnPlay) {\r\n this.seekTo(this.seekOnPlay)\r\n this.seekOnPlay = null\r\n }\r\n this.onDurationCheck()\r\n }\r\n onPause = (e) => {\r\n this.isPlaying = false\r\n if (!this.isLoading) {\r\n this.props.onPause(e)\r\n }\r\n }\r\n onEnded = () => {\r\n const { activePlayer, loop, onEnded } = this.props\r\n if (activePlayer.loopOnEnded && loop) {\r\n this.seekTo(0)\r\n }\r\n if (!loop) {\r\n this.isPlaying = false\r\n }\r\n onEnded()\r\n }\r\n onDurationCheck = () => {\r\n clearTimeout(this.durationCheckTimeout)\r\n const duration = this.getDuration()\r\n if (duration) {\r\n if (!this.onDurationCalled) {\r\n this.props.onDuration(duration)\r\n this.onDurationCalled = true\r\n }\r\n } else {\r\n this.durationCheckTimeout = setTimeout(this.onDurationCheck, 100)\r\n }\r\n }\r\n ref = player => {\r\n if (player) {\r\n this.player = player\r\n }\r\n }\r\n render () {\r\n const Player = this.props.activePlayer\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/Player.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, parseStartTime } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://www.youtube.com/iframe_api'\r\nconst SDK_GLOBAL = 'YT'\r\nconst SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady'\r\nconst MATCH_URL = /(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})/\r\n\r\nexport class YouTube extends Component {\r\n static displayName = 'YouTube'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n load (url, isReady) {\r\n const { playsinline, controls, config, onError } = this.props\r\n const id = url && url.match(MATCH_URL)[1]\r\n if (isReady) {\r\n this.player.cueVideoById({\r\n videoId: id,\r\n startSeconds: parseStartTime(url)\r\n })\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, YT => YT.loaded).then(YT => {\r\n if (!this.container) return\r\n this.player = new YT.Player(this.container, {\r\n width: '100%',\r\n height: '100%',\r\n videoId: id,\r\n playerVars: {\r\n controls: controls ? 1 : 0,\r\n start: parseStartTime(url),\r\n origin: window.location.origin,\r\n playsinline: playsinline,\r\n ...config.youtube.playerVars\r\n },\r\n events: {\r\n onReady: this.props.onReady,\r\n onStateChange: this.onStateChange,\r\n onError: event => onError(event.data)\r\n }\r\n })\r\n }, onError)\r\n }\r\n onStateChange = ({ data }) => {\r\n const { onPlay, onPause, onBuffer, onEnded, onReady } = this.props\r\n const { PLAYING, PAUSED, BUFFERING, ENDED, CUED } = window[SDK_GLOBAL].PlayerState\r\n if (data === PLAYING) onPlay()\r\n if (data === PAUSED) onPause()\r\n if (data === BUFFERING) onBuffer()\r\n if (data === ENDED) onEnded()\r\n if (data === CUED) onReady()\r\n }\r\n play () {\r\n this.callPlayer('playVideo')\r\n }\r\n pause () {\r\n this.callPlayer('pauseVideo')\r\n }\r\n stop () {\r\n if (!document.body.contains(this.callPlayer('getIframe'))) return\r\n this.callPlayer('stopVideo')\r\n }\r\n seekTo (amount) {\r\n this.callPlayer('seekTo', amount)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction * 100)\r\n }\r\n setPlaybackRate (rate) {\r\n this.callPlayer('setPlaybackRate', rate)\r\n }\r\n getDuration () {\r\n return this.callPlayer('getDuration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('getCurrentTime')\r\n }\r\n getSecondsLoaded () {\r\n return this.callPlayer('getVideoLoadedFraction') * this.getDuration()\r\n }\r\n ref = container => {\r\n this.container = container\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n ...this.props.style\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(YouTube)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/YouTube.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://w.soundcloud.com/player/api.js'\r\nconst SDK_GLOBAL = 'SC'\r\nconst MATCH_URL = /(soundcloud\\.com|snd\\.sc)\\/.+$/\r\n\r\nexport class SoundCloud extends Component {\r\n static displayName = 'SoundCloud'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n fractionLoaded = null\r\n load (url, isReady) {\r\n getSDK(SDK_URL, SDK_GLOBAL).then(SC => {\r\n if (!this.iframe) return\r\n const { PLAY, PLAY_PROGRESS, PAUSE, FINISH, ERROR } = SC.Widget.Events\r\n if (!isReady) {\r\n this.player = SC.Widget(this.iframe)\r\n this.player.bind(PLAY, this.props.onPlay)\r\n this.player.bind(PAUSE, this.props.onPause)\r\n this.player.bind(PLAY_PROGRESS, e => {\r\n this.currentTime = e.currentPosition / 1000\r\n this.fractionLoaded = e.loadedProgress\r\n })\r\n this.player.bind(FINISH, () => this.props.onEnded())\r\n this.player.bind(ERROR, e => this.props.onError(e))\r\n }\r\n this.player.load(url, {\r\n ...this.props.config.soundcloud.options,\r\n callback: () => {\r\n this.player.getDuration(duration => {\r\n this.duration = duration / 1000\r\n this.props.onReady()\r\n })\r\n }\r\n })\r\n })\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seekTo', seconds * 1000)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction * 100)\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.fractionLoaded * this.duration\r\n }\r\n ref = iframe => {\r\n this.iframe = iframe\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n ...this.props.style\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(SoundCloud)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/SoundCloud.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://player.vimeo.com/api/player.js'\r\nconst SDK_GLOBAL = 'Vimeo'\r\nconst MATCH_URL = /vimeo\\.com\\//\r\n\r\nexport class Vimeo extends Component {\r\n static displayName = 'Vimeo'\r\n static canPlay = url => MATCH_URL.test(url)\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n secondsLoaded = null\r\n load (url) {\r\n this.duration = null\r\n getSDK(SDK_URL, SDK_GLOBAL).then(Vimeo => {\r\n if (!this.container) return\r\n this.player = new Vimeo.Player(this.container, {\r\n ...this.props.config.vimeo.playerOptions,\r\n url,\r\n loop: this.props.loop\r\n })\r\n this.player.ready().then(() => {\r\n const iframe = this.container.querySelector('iframe')\r\n iframe.style.width = '100%'\r\n iframe.style.height = '100%'\r\n }).catch(this.props.onError)\r\n this.player.on('loaded', () => {\r\n this.props.onReady()\r\n this.player.getDuration().then(duration => {\r\n this.duration = duration\r\n })\r\n })\r\n this.player.on('play', this.props.onPlay)\r\n this.player.on('pause', this.props.onPause)\r\n this.player.on('seeked', e => this.props.onSeek(e.seconds))\r\n this.player.on('ended', this.props.onEnded)\r\n this.player.on('error', this.props.onError)\r\n this.player.on('timeupdate', ({ seconds }) => {\r\n this.currentTime = seconds\r\n })\r\n this.player.on('progress', ({ seconds }) => {\r\n this.secondsLoaded = seconds\r\n })\r\n }, this.props.onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n this.callPlayer('unload')\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('setCurrentTime', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.secondsLoaded\r\n }\r\n ref = container => {\r\n this.container = container\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden',\r\n backgroundColor: 'black',\r\n ...this.props.style\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Vimeo)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Vimeo.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, parseStartTime } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://api.dmcdn.net/all.js'\r\nconst SDK_GLOBAL = 'DM'\r\nconst SDK_GLOBAL_READY = 'dmAsyncInit'\r\nconst MATCH_URL = /dailymotion\\.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/\r\n\r\nexport class DailyMotion extends Component {\r\n static displayName = 'DailyMotion'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n parseId (url) {\r\n const m = url.match(MATCH_URL)\r\n return m[4] || m[2]\r\n }\r\n load (url) {\r\n const { controls, config, onError, playing } = this.props\r\n const id = this.parseId(url)\r\n if (this.player) {\r\n this.player.load(id, {\r\n start: parseStartTime(url),\r\n autoplay: playing\r\n })\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, DM => DM.player).then(DM => {\r\n if (!this.container) return\r\n const Player = DM.player\r\n this.player = new Player(this.container, {\r\n width: '100%',\r\n height: '100%',\r\n video: id,\r\n params: {\r\n controls: controls,\r\n autoplay: this.props.playing,\r\n start: parseStartTime(url),\r\n origin: window.location.origin,\r\n ...config.dailymotion.params\r\n },\r\n events: {\r\n apiready: this.props.onReady,\r\n seeked: () => this.props.onSeek(this.player.currentTime),\r\n video_end: this.props.onEnded,\r\n durationchange: this.onDurationChange,\r\n pause: this.props.onPause,\r\n playing: this.props.onPlay,\r\n waiting: this.props.onBuffer,\r\n error: event => onError(event)\r\n }\r\n })\r\n }, onError)\r\n }\r\n onDurationChange = () => {\r\n const duration = this.getDuration()\r\n this.props.onDuration(duration)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.player.duration || null\r\n }\r\n getCurrentTime () {\r\n return this.player.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.player.bufferedTime\r\n }\r\n ref = container => {\r\n this.container = container\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: 'black',\r\n ...this.props.style\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(DailyMotion)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/DailyMotion.js","import React, { Component } from 'react'\r\n\r\nimport { getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst AUDIO_EXTENSIONS = /\\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i\r\nconst VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)($|\\?)/i\r\nconst HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i\r\nconst HLS_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.8.9/hls.min.js'\r\nconst HLS_GLOBAL = 'Hls'\r\nconst DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i\r\nconst DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.6.5/dash.all.min.js'\r\nconst DASH_GLOBAL = 'dashjs'\r\n\r\nfunction canPlay (url) {\r\n if (url instanceof Array) {\r\n for (let item of url) {\r\n if (typeof item === 'string' && canPlay(item)) {\r\n return true\r\n }\r\n if (canPlay(item.src)) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n return (\r\n AUDIO_EXTENSIONS.test(url) ||\r\n VIDEO_EXTENSIONS.test(url) ||\r\n HLS_EXTENSIONS.test(url) ||\r\n DASH_EXTENSIONS.test(url)\r\n )\r\n}\r\n\r\nexport class FilePlayer extends Component {\r\n static displayName = 'FilePlayer'\r\n static canPlay = canPlay\r\n\r\n componentDidMount () {\r\n this.addListeners()\r\n }\r\n componentWillReceiveProps (nextProps) {\r\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(nextProps)) {\r\n this.removeListeners()\r\n }\r\n }\r\n componentDidUpdate (prevProps) {\r\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {\r\n this.addListeners()\r\n }\r\n }\r\n componentWillUnmount () {\r\n this.removeListeners()\r\n }\r\n addListeners () {\r\n const { onReady, onPlay, onPause, onEnded, onError, playsinline } = this.props\r\n this.player.addEventListener('canplay', onReady)\r\n this.player.addEventListener('play', onPlay)\r\n this.player.addEventListener('pause', onPause)\r\n this.player.addEventListener('seeked', this.onSeek)\r\n this.player.addEventListener('ended', onEnded)\r\n this.player.addEventListener('error', onError)\r\n if (playsinline) {\r\n this.player.setAttribute('playsinline', '')\r\n this.player.setAttribute('webkit-playsinline', '')\r\n }\r\n }\r\n removeListeners () {\r\n const { onReady, onPlay, onPause, onEnded, onError } = this.props\r\n this.player.removeEventListener('canplay', onReady)\r\n this.player.removeEventListener('play', onPlay)\r\n this.player.removeEventListener('pause', onPause)\r\n this.player.removeEventListener('seeked', this.onSeek)\r\n this.player.removeEventListener('ended', onEnded)\r\n this.player.removeEventListener('error', onError)\r\n }\r\n onSeek = e => {\r\n this.props.onSeek(e.target.currentTime)\r\n }\r\n shouldUseAudio (props) {\r\n return AUDIO_EXTENSIONS.test(props.url) || props.config.file.forceAudio\r\n }\r\n shouldUseHLS (url) {\r\n const iOS =\r\n typeof navigator !== 'undefined' &&\r\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\r\n !window.MSStream\r\n return (HLS_EXTENSIONS.test(url) && !iOS) || this.props.config.file.forceHLS\r\n }\r\n shouldUseDASH (url) {\r\n return DASH_EXTENSIONS.test(url) || this.props.config.file.forceDASH\r\n }\r\n load (url) {\r\n if (this.shouldUseHLS(url)) {\r\n getSDK(HLS_SDK_URL, HLS_GLOBAL).then(Hls => {\r\n this.hls = new Hls(this.props.config.file.hlsOptions)\r\n this.hls.on(Hls.Events.ERROR, (e, data) => {\r\n this.props.onError(e, data, this.hls, Hls)\r\n })\r\n this.hls.loadSource(url)\r\n this.hls.attachMedia(this.player)\r\n })\r\n }\r\n if (this.shouldUseDASH(url)) {\r\n getSDK(DASH_SDK_URL, DASH_GLOBAL).then(dashjs => {\r\n this.dash = dashjs.MediaPlayer().create()\r\n this.dash.initialize(this.player, url, this.props.playing)\r\n this.dash.getDebug().setLogToBrowserConsole(false)\r\n })\r\n }\r\n }\r\n play () {\r\n const promise = this.player.play()\r\n if (promise) {\r\n promise.catch(this.props.onError)\r\n }\r\n }\r\n pause () {\r\n this.player.pause()\r\n }\r\n stop () {\r\n this.player.removeAttribute('src')\r\n if (this.hls) {\r\n this.hls.destroy()\r\n }\r\n if (this.dash) {\r\n this.dash.reset()\r\n }\r\n }\r\n seekTo (seconds) {\r\n this.player.currentTime = seconds\r\n }\r\n setVolume (fraction) {\r\n this.player.volume = fraction\r\n }\r\n setPlaybackRate (rate) {\r\n this.player.playbackRate = rate\r\n }\r\n getDuration () {\r\n return this.player.duration\r\n }\r\n getCurrentTime () {\r\n return this.player.currentTime\r\n }\r\n getSecondsLoaded () {\r\n if (this.player.buffered.length === 0) return 0\r\n return this.player.buffered.end(0)\r\n }\r\n renderSource = (source, index) => {\r\n if (typeof source === 'string') {\r\n return \r\n }\r\n return \r\n }\r\n renderTrack = (track, index) => {\r\n return \r\n }\r\n ref = player => {\r\n this.player = player\r\n }\r\n render () {\r\n const { url, loop, controls, config, width, height } = this.props\r\n const useAudio = this.shouldUseAudio(this.props)\r\n const useHLS = this.shouldUseHLS(url)\r\n const useDASH = this.shouldUseDASH(url)\r\n const Element = useAudio ? 'audio' : 'video'\r\n const src = url instanceof Array || useHLS || useDASH ? undefined : url\r\n const style = {\r\n width: !width || width === 'auto' ? width : '100%',\r\n height: !height || height === 'auto' ? height : '100%'\r\n }\r\n return (\r\n \r\n {url instanceof Array &&\r\n url.map(this.renderSource)\r\n }\r\n {config.file.tracks.map(this.renderTrack)}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(FilePlayer)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/FilePlayer.js","import React, { Component } from 'react'\r\n\r\nimport { propTypes, defaultProps, DEPRECATED_CONFIG_PROPS } from './props'\r\nimport { getConfig, omit, isEqual } from './utils'\r\nimport players from './players'\r\nimport Player from './Player'\r\nimport { FilePlayer } from './players/FilePlayer'\r\nimport renderPreloadPlayers from './preload'\r\n\r\nconst SUPPORTED_PROPS = Object.keys(propTypes)\r\n\r\nexport default class ReactPlayer extends Component {\r\n static displayName = 'ReactPlayer'\r\n static propTypes = propTypes\r\n static defaultProps = defaultProps\r\n static canPlay = url => {\r\n for (let Player of players) {\r\n if (Player.canPlay(url)) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n config = getConfig(this.props, defaultProps, true)\r\n componentDidMount () {\r\n if (this.props.progressFrequency) {\r\n const message = 'ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead'\r\n console.warn(message, 'font-weight: bold', '', 'font-weight: bold', '')\r\n }\r\n }\r\n shouldComponentUpdate (nextProps) {\r\n return !isEqual(this.props, nextProps)\r\n }\r\n componentWillUpdate (nextProps) {\r\n this.config = getConfig(nextProps, defaultProps)\r\n }\r\n getDuration = () => {\r\n if (!this.player) return null\r\n return this.player.getDuration()\r\n }\r\n getCurrentTime = () => {\r\n if (!this.player) return null\r\n return this.player.getCurrentTime()\r\n }\r\n getInternalPlayer = (key = 'player') => {\r\n if (!this.player) return null\r\n return this.player.getInternalPlayer(key)\r\n }\r\n seekTo = fraction => {\r\n if (!this.player) return null\r\n this.player.seekTo(fraction)\r\n }\r\n getActivePlayer (url) {\r\n for (let Player of players) {\r\n if (Player.canPlay(url)) {\r\n return Player\r\n }\r\n }\r\n // Fall back to FilePlayer if nothing else can play the URL\r\n return FilePlayer\r\n }\r\n wrapperRef = wrapper => {\r\n this.wrapper = wrapper\r\n }\r\n activePlayerRef = player => {\r\n this.player = player\r\n }\r\n renderActivePlayer (url) {\r\n if (!url) return null\r\n const activePlayer = this.getActivePlayer(url)\r\n return (\r\n \r\n )\r\n }\r\n sortPlayers (a, b) {\r\n // Retain player order to prevent weird iframe behaviour when switching players\r\n if (a && b) {\r\n return a.key < b.key ? -1 : 1\r\n }\r\n return 0\r\n }\r\n render () {\r\n const { url, style, width, height, wrapper: Wrapper } = this.props\r\n const otherProps = omit(this.props, SUPPORTED_PROPS, DEPRECATED_CONFIG_PROPS)\r\n const activePlayer = this.renderActivePlayer(url)\r\n const preloadPlayers = renderPreloadPlayers(url, this.config)\r\n const players = [ activePlayer, ...preloadPlayers ].sort(this.sortPlayers)\r\n return (\r\n \r\n {players}\r\n \r\n )\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/ReactPlayer.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/prop-types/index.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/prop-types/factoryWithThrowingShims.js","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fbjs/lib/emptyFunction.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fbjs/lib/invariant.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/prop-types/lib/ReactPropTypesSecret.js","\nmodule.exports = function load (src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0]\n var script = document.createElement('script')\n\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n opts = opts || {}\n cb = cb || function() {}\n\n script.type = opts.type || 'text/javascript'\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true\n script.src = src\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs)\n }\n\n if (opts.text) {\n script.text = '' + opts.text\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd\n onend(script, cb)\n\n // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script)\n}\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd (script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null\n cb(null, script)\n }\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null\n cb(new Error('Failed to load ' + this.src), script)\n }\n}\n\nfunction ieOnEnd (script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return\n this.onreadystatechange = null\n cb(null, script) // there is no way to catch loading errors in IE8\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/load-script/index.js","var isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, optionsArgument) {\n\tvar clone = !optionsArgument || optionsArgument.clone !== false;\n\n\treturn (clone && isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, optionsArgument)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, optionsArgument)\n\t})\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n\tvar destination = {};\n\tif (isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], optionsArgument);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], optionsArgument);\n\t\t} else {\n\t\t\tdestination[key] = deepmerge(target[key], source[key], optionsArgument);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar options = optionsArgument || { arrayMerge: defaultArrayMerge };\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, optionsArgument)\n\t} else if (sourceIsArray) {\n\t\tvar arrayMerge = options.arrayMerge || defaultArrayMerge;\n\t\treturn arrayMerge(target, source, optionsArgument)\n\t} else {\n\t\treturn mergeObject(target, source, optionsArgument)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, optionsArgument)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nexport default deepmerge_1;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/deepmerge/dist/es.js","import { YouTube } from './YouTube'\r\nimport { SoundCloud } from './SoundCloud'\r\nimport { Vimeo } from './Vimeo'\r\nimport { Facebook } from './Facebook'\r\nimport { Streamable } from './Streamable'\r\nimport { Wistia } from './Wistia'\r\nimport { Twitch } from './Twitch'\r\nimport { DailyMotion } from './DailyMotion'\r\nimport { Mixcloud } from './Mixcloud'\r\nimport { FilePlayer } from './FilePlayer'\r\n\r\nexport default [\r\n YouTube,\r\n SoundCloud,\r\n Vimeo,\r\n Facebook,\r\n Streamable,\r\n Wistia,\r\n Twitch,\r\n DailyMotion,\r\n Mixcloud,\r\n FilePlayer\r\n]\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/index.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, randomString } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//connect.facebook.net/en_US/sdk.js'\r\nconst SDK_GLOBAL = 'FB'\r\nconst SDK_GLOBAL_READY = 'fbAsyncInit'\r\nconst MATCH_URL = /facebook\\.com\\/([^/?].+\\/)?video(s|\\.php)[/?].*$/\r\nconst PLAYER_ID_PREFIX = 'facebook-player-'\r\n\r\nexport class Facebook extends Component {\r\n static displayName = 'Facebook'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n playerID = PLAYER_ID_PREFIX + randomString()\r\n load (url, isReady) {\r\n if (isReady) {\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => FB.XFBML.parse())\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => {\r\n FB.init({\r\n appId: this.props.config.facebook.appId,\r\n xfbml: true,\r\n version: 'v2.5'\r\n })\r\n FB.Event.subscribe('xfbml.ready', msg => {\r\n if (msg.type === 'video' && msg.id === this.playerID) {\r\n this.player = msg.instance\r\n this.player.subscribe('startedPlaying', this.props.onPlay)\r\n this.player.subscribe('paused', this.props.onPause)\r\n this.player.subscribe('finishedPlaying', this.props.onEnded)\r\n this.player.subscribe('startedBuffering', this.props.onBuffer)\r\n this.player.subscribe('error', this.props.onError)\r\n this.callPlayer('unmute')\r\n this.props.onReady()\r\n }\r\n })\r\n })\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n if (fraction !== 0) {\r\n this.callPlayer('unmute')\r\n }\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.callPlayer('getDuration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('getCurrentPosition')\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: 'black'\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Facebook)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Facebook.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//cdn.embed.ly/player-0.1.0.min.js'\r\nconst SDK_GLOBAL = 'playerjs'\r\nconst MATCH_URL = /streamable\\.com\\/([a-z0-9]+)$/\r\n\r\nexport class Streamable extends Component {\r\n static displayName = 'Streamable'\r\n static canPlay = url => MATCH_URL.test(url)\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n secondsLoaded = null\r\n load (url) {\r\n getSDK(SDK_URL, SDK_GLOBAL).then(playerjs => {\r\n if (!this.iframe) return\r\n this.player = new playerjs.Player(this.iframe)\r\n this.player.setLoop(this.props.loop)\r\n this.player.on('ready', this.props.onReady)\r\n this.player.on('play', this.props.onPlay)\r\n this.player.on('pause', this.props.onPause)\r\n this.player.on('seeked', this.props.onSeek)\r\n this.player.on('ended', this.props.onEnded)\r\n this.player.on('error', this.props.onError)\r\n this.player.on('timeupdate', ({ duration, seconds }) => {\r\n this.duration = duration\r\n this.currentTime = seconds\r\n })\r\n this.player.on('buffered', ({ percent }) => {\r\n if (this.duration) {\r\n this.secondsLoaded = this.duration * percent\r\n }\r\n })\r\n }, this.props.onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('setCurrentTime', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction * 100)\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.secondsLoaded\r\n }\r\n ref = iframe => {\r\n this.iframe = iframe\r\n }\r\n render () {\r\n const id = this.props.url.match(MATCH_URL)[1]\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Streamable)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Streamable.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//fast.wistia.com/assets/external/E-v1.js'\r\nconst SDK_GLOBAL = 'Wistia'\r\nconst MATCH_URL = /(?:wistia\\.com|wi\\.st)\\/(?:medias|embed)\\/(.*)$/\r\n\r\nexport class Wistia extends Component {\r\n static displayName = 'Wistia'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n getID (url) {\r\n return url && url.match(MATCH_URL)[1]\r\n }\r\n load (url) {\r\n const { controls, onReady, onPlay, onPause, onSeek, onEnded, config } = this.props\r\n getSDK(SDK_URL, SDK_GLOBAL).then(() => {\r\n window._wq = window._wq || []\r\n window._wq.push({\r\n id: this.getID(url),\r\n options: {\r\n controlsVisibleOnLoad: controls,\r\n ...config.wistia.options\r\n },\r\n onReady: player => {\r\n this.player = player\r\n this.player.bind('play', onPlay)\r\n this.player.bind('pause', onPause)\r\n this.player.bind('seek', onSeek)\r\n this.player.bind('end', onEnded)\r\n onReady()\r\n }\r\n })\r\n })\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n this.callPlayer('remove')\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('time', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('volume', fraction)\r\n }\r\n setPlaybackRate (rate) {\r\n this.callPlayer('playbackRate', rate)\r\n }\r\n getDuration () {\r\n return this.callPlayer('duration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('time')\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n render () {\r\n const id = this.getID(this.props.url)\r\n const className = `wistia_embed wistia_async_${id}`\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Wistia)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Wistia.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, randomString } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//player.twitch.tv/js/embed/v1.js'\r\nconst SDK_GLOBAL = 'Twitch'\r\nconst MATCH_VIDEO_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/videos\\/(\\d+)($|\\?)/\r\nconst MATCH_CHANNEL_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-z0-9_]+)($|\\?)/\r\nconst PLAYER_ID_PREFIX = 'twitch-player-'\r\n\r\nexport class Twitch extends Component {\r\n static displayName = 'Twitch'\r\n static canPlay = url => MATCH_VIDEO_URL.test(url) || MATCH_CHANNEL_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n playerID = PLAYER_ID_PREFIX + randomString()\r\n load (url, isReady) {\r\n const { playsinline, onError, config } = this.props\r\n const isChannel = MATCH_CHANNEL_URL.test(url)\r\n const id = isChannel ? url.match(MATCH_CHANNEL_URL)[1] : url.match(MATCH_VIDEO_URL)[1]\r\n if (isReady) {\r\n if (isChannel) {\r\n this.player.setChannel(id)\r\n } else {\r\n this.player.setVideo('v' + id)\r\n }\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL).then(Twitch => {\r\n this.player = new Twitch.Player(this.playerID, {\r\n video: isChannel ? '' : id,\r\n channel: isChannel ? id : '',\r\n height: '100%',\r\n width: '100%',\r\n playsinline: playsinline,\r\n autoplay: this.props.playing,\r\n ...config.twitch.options\r\n })\r\n const { READY, PLAY, PAUSE, ENDED } = Twitch.Player\r\n this.player.addEventListener(READY, this.props.onReady)\r\n this.player.addEventListener(PLAY, this.props.onPlay)\r\n this.player.addEventListener(PAUSE, this.props.onPause)\r\n this.player.addEventListener(ENDED, this.props.onEnded)\r\n }, onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n this.callPlayer('pause')\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.callPlayer('getDuration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('getCurrentTime')\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Twitch)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Twitch.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, queryString } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//widget.mixcloud.com/media/js/widgetApi.js'\r\nconst SDK_GLOBAL = 'Mixcloud'\r\nconst MATCH_URL = /mixcloud\\.com\\/([^/]+\\/[^/]+)/\r\n\r\nexport class Mixcloud extends Component {\r\n static displayName = 'Mixcloud'\r\n static canPlay = url => MATCH_URL.test(url)\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n secondsLoaded = null\r\n load (url) {\r\n getSDK(SDK_URL, SDK_GLOBAL).then(Mixcloud => {\r\n this.player = Mixcloud.PlayerWidget(this.iframe)\r\n this.player.ready.then(() => {\r\n this.player.events.play.on(this.props.onPlay)\r\n this.player.events.pause.on(this.props.onPause)\r\n this.player.events.ended.on(this.props.onEnded)\r\n this.player.events.error.on(this.props.error)\r\n this.player.events.progress.on((seconds, duration) => {\r\n this.currentTime = seconds\r\n this.duration = duration\r\n })\r\n this.props.onReady()\r\n })\r\n }, this.props.onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n // No volume support\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n ref = iframe => {\r\n this.iframe = iframe\r\n }\r\n render () {\r\n const { url, config } = this.props\r\n const id = url.match(MATCH_URL)[1]\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n const query = queryString({\r\n ...config.mixcloud.options,\r\n feed: `/${id}/`\r\n })\r\n // We have to give the iframe a key here to prevent a\r\n // weird dialog appearing when loading a new track\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Mixcloud)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Mixcloud.js","import React from 'react'\r\n\r\nimport Player from './Player'\r\nimport { YouTube } from './players/YouTube'\r\nimport { SoundCloud } from './players/SoundCloud'\r\nimport { Vimeo } from './players/Vimeo'\r\nimport { DailyMotion } from './players/DailyMotion'\r\n\r\nconst PRELOAD_PLAYERS = [\r\n {\r\n Player: YouTube,\r\n configKey: 'youtube',\r\n url: 'https://www.youtube.com/watch?v=GlCmAC4MHek'\r\n },\r\n {\r\n Player: SoundCloud,\r\n configKey: 'soundcloud',\r\n url: 'https://soundcloud.com/seucheu/john-cage-433-8-bit-version'\r\n },\r\n {\r\n Player: Vimeo,\r\n configKey: 'vimeo',\r\n url: 'https://vimeo.com/127250231'\r\n },\r\n {\r\n Player: DailyMotion,\r\n configKey: 'dailymotion',\r\n url: 'http://www.dailymotion.com/video/xqdpyk'\r\n }\r\n]\r\n\r\nexport default function renderPreloadPlayers (url, config) {\r\n const players = []\r\n\r\n for (let player of PRELOAD_PLAYERS) {\r\n if (!player.Player.canPlay(url) && config[player.configKey].preload) {\r\n players.push(\r\n \r\n )\r\n }\r\n }\r\n\r\n return players\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/preload.js"],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/ReactPlayer.standalone.js b/dist/ReactPlayer.standalone.js
deleted file mode 100644
index 83c814634..000000000
--- a/dist/ReactPlayer.standalone.js
+++ /dev/null
@@ -1,2 +0,0 @@
-var renderReactPlayer=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t,n){"use strict";e.exports=n(15)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){var t=e.match(k);if(t){var n=t[1];if(n.match(E))return i(n);if(w.test(n))return parseInt(n,10)}return 0}function i(e){for(var t=0,n=E.exec(e);null!==n;){var r=n,o=m(r,3),a=o[1],i=o[2];"h"===i&&(t+=60*parseInt(a,10)*60),"m"===i&&(t+=60*parseInt(a,10)),"s"===i&&(t+=parseInt(a,10)),n=E.exec(e)}return t}function l(){return Math.random().toString(36).substr(2,5)}function u(e){return Object.keys(e).map(function(t){return t+"="+e[t]}).join("&")}function s(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){return!0};return window[t]&&r(window[t])?Promise.resolve(window[t]):new Promise(function(r,o){if(n){var a=window[n];window[n]=function(){a&&a(),r(window[t])}}(0,g.default)(e,function(e){e&&o(e),n||r(window[t])})})}function c(e,t,n){var r=(0,P.default)(t.config,e.config),a=!0,i=!1,l=void 0;try{for(var u,s=C.DEPRECATED_CONFIG_PROPS[Symbol.iterator]();!(a=(u=s.next()).done);a=!0){var c=u.value;if(e[c]){var p=c.replace(/Config$/,"");if(r=(0,P.default)(r,o({},p,e[c])),n){var f="ReactPlayer: %c"+c+" %cis deprecated, please use the config prop instead – https://github.com/CookPete/react-player#config-prop";console.warn(f,"font-weight: bold","")}}}}catch(e){i=!0,l=e}finally{try{!a&&s.return&&s.return()}finally{if(i)throw l}}return r}function p(e){for(var t,n=arguments.length,r=Array(n>1?n-1:0),o=1;o1?r-1:0),a=1;a0&&e<1){var n=this.player.getDuration();return n?void this.player.seekTo(n*e):void console.warn("ReactPlayer: could not seek using fraction – duration not yet available")}this.player.seekTo(e)}},{key:"render",value:function(){var e=this.props.activePlayer;return s.default.createElement(e,i({},this.props,{ref:this.ref,onReady:this.onReady,onPlay:this.onPlay,onPause:this.onPause,onEnded:this.onEnded}))}}]),t}(u.Component);p.displayName="Player",p.propTypes=c.propTypes,p.defaultProps=c.defaultProps,t.default=p,e.exports=t.default},function(e,t,n){"use strict";function r(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var o=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,l,u=r(e),s=1;sR.length&&R.push(e)}function f(e,t,n,o){var a=void 0===e?"undefined":v(e);if("undefined"!==a&&"boolean"!==a||(e=null),null===e||"string"===a||"number"===a||"object"===a&&e.$$typeof===N)return n(o,e,""===t?"."+d(e,0):t),1;var i=0;if(t=""===t?".":t+":",Array.isArray(e))for(var l=0;l=K(e.last.priorityLevel,t))n=e.last;else for(e=e.first;null!==e&&0>=K(e.priorityLevel,t);)n=e,e=e.next;return n}function Q(e,t){var n=e.alternate,r=e.updateQueue;null===r&&(r=e.updateQueue=$()),null!==n?null===(e=n.updateQueue)&&(e=n.updateQueue=$()):e=null,Mr=r,Lr=e!==r?e:null;var o=Mr;n=Lr;var a=q(o,t),i=null!==a?a.next:o.first;return null===n?(Y(o,t,a,i),null):(r=q(n,t),e=null!==r?r.next:n.first,Y(o,t,a,i),i===e&&null!==i||a===r&&null!==a?(null===r&&(n.first=t),null===e&&(n.last=null),null):(t={priorityLevel:t.priorityLevel,partialState:t.partialState,callback:t.callback,isReplace:t.isReplace,isForced:t.isForced,isTopLevelUnmount:t.isTopLevelUnmount,next:null},Y(n,t,r,e),t))}function G(e,t,n,r){return e=e.partialState,"function"==typeof e?e.call(t,n,r):e}function X(e,t,n){e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=n}function Z(e){return e.tag===Br&&null!=e.type.childContextTypes}function J(e,t){var n=e.stateNode,o=e.type.childContextTypes;if("function"!=typeof n.getChildContext)return t;n=n.getChildContext();for(var a in n)a in o||r("108",f(e)||"Unknown",a);return gt({},t,n)}function ee(e,t,n){this.tag=e,this.key=t,this.stateNode=this.type=null,this.sibling=this.child=this.return=null,this.index=0,this.memoizedState=this.updateQueue=this.memoizedProps=this.pendingProps=this.ref=null,this.internalContextTag=n,this.effectTag=co,this.lastEffect=this.firstEffect=this.nextEffect=null,this.pendingWorkPriority=uo,this.alternate=null}function te(e,t,n){var o=void 0;return"function"==typeof e?(o=e.prototype&&e.prototype.isReactComponent?new ee(eo,t,n):new ee(Jr,t,n),o.type=e):"string"==typeof e?(o=new ee(no,t,n),o.type=e):"object"===(void 0===e?"undefined":ht(e))&&null!==e&&"number"==typeof e.tag?o=e:r("130",null==e?e:void 0===e?"undefined":ht(e),""),o}function ne(e){return null===e||void 0===e?null:(e=Wo&&e[Wo]||e["@@iterator"],"function"==typeof e?e:null)}function re(e,t){var n=t.ref;if(null!==n&&"function"!=typeof n){if(t._owner){t=t._owner;var o=void 0;t&&("number"==typeof t.tag?(t.tag!==Io&&r("110"),o=t.stateNode):o=t.getPublicInstance()),o||r("147",n);var a=""+n;return null!==e&&null!==e.ref&&e.ref._stringRef===a?e.ref:(e=function(e){var t=o.refs===Ct?o.refs={}:o.refs;null===e?delete t[a]:t[a]=e},e._stringRef=a,e)}"string"!=typeof n&&r("148"),t._owner||r("149",n)}return n}function oe(e,t){"textarea"!==e.type&&r("31","[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t,"")}function ae(e,t){function n(n,r){if(t){if(!e){if(null===r.alternate)return;r=r.alternate}var o=n.lastEffect;null!==o?(o.nextEffect=r,n.lastEffect=r):n.firstEffect=n.lastEffect=r,r.nextEffect=null,r.effectTag=Vo}}function o(e,r){if(!t)return null;for(;null!==r;)n(e,r),r=r.sibling;return null}function a(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function i(t,n){return e?(t=wo(t,n),t.index=0,t.sibling=null,t):(t.pendingWorkPriority=n,t.effectTag=Uo,t.index=0,t.sibling=null,t)}function l(e,n,r){return e.index=r,t?null!==(r=e.alternate)?(r=r.index,rf?(d=p,p=null):d=p.sibling;var y=m(e,p,i[f],u);if(null===y){null===p&&(p=d);break}t&&p&&null===y.alternate&&n(e,p),r=l(y,r,f),null===c?s=y:c.sibling=y,c=y,p=d}if(f===i.length)return o(e,p),s;if(null===p){for(;fd?(y=f,f=null):y=f.sibling;var b=m(e,f,g.value,s);if(null===b){f||(f=y);break}t&&f&&null===b.alternate&&n(e,f),i=l(b,i,d),null===p?c=b:p.sibling=b,p=b,f=y}if(g.done)return o(e,f),c;if(null===f){for(;!g.done;d++,g=u.next())null!==(g=h(e,g.value,s))&&(i=l(g,i,d),null===p?c=g:p.sibling=g,p=g);return c}for(f=a(e,f);!g.done;d++,g=u.next())null!==(g=v(f,e,d,g.value,s))&&(t&&null!==g.alternate&&f.delete(null===g.key?d:g.key),i=l(g,i,d),null===p?c=g:p.sibling=g,p=g);return t&&f.forEach(function(t){return n(e,t)}),c}return function(e,t,a,l){var s="object"===(void 0===a?"undefined":ht(a))&&null!==a;if(s)switch(a.$$typeof){case Bo:e:{var c=a.key;for(s=t;null!==s;){if(s.key===c){if(s.type===a.type){o(e,s.sibling),t=i(s,l),t.ref=re(s,a),t.pendingProps=a.props,t.return=e,e=t;break e}o(e,s);break}n(e,s),s=s.sibling}l=_o(a,e.internalContextTag,l),l.ref=re(t,a),l.return=e,e=l}return u(e);case Co:e:{for(s=a.key;null!==t;){if(t.key===s){if(t.tag===Mo){o(e,t.sibling),t=i(t,l),t.pendingProps=a,t.return=e,e=t;break e}o(e,t);break}n(e,t),t=t.sibling}a=Oo(a,e.internalContextTag,l),a.return=e,e=a}return u(e);case ko:e:{if(null!==t){if(t.tag===Lo){o(e,t.sibling),t=i(t,l),t.type=a.value,t.return=e,e=t;break e}o(e,t)}t=xo(a,e.internalContextTag,l),t.type=a.value,t.return=e,e=t}return u(e);case Eo:e:{for(s=a.key;null!==t;){if(t.key===s){if(t.tag===Fo&&t.stateNode.containerInfo===a.containerInfo&&t.stateNode.implementation===a.implementation){o(e,t.sibling),t=i(t,l),t.pendingProps=a.children||[],t.return=e,e=t;break e}o(e,t);break}n(e,t),t=t.sibling}a=No(a,e.internalContextTag,l),a.return=e,e=a}return u(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==t&&t.tag===Ao?(o(e,t.sibling),t=i(t,l),t.pendingProps=a,t.return=e,e=t):(o(e,t),a=So(a,e.internalContextTag,l),a.return=e,e=a),u(e);if(Do(a))return g(e,t,a,l);if(ne(a))return b(e,t,a,l);if(s&&oe(e,a),void 0===a)switch(e.tag){case Io:case Ro:a=e.type,r("152",a.displayName||a.name||"Component")}return o(e,t)}}function ie(e,t,n,o){function a(e,t){t.updater=i,e.stateNode=t,Qt.set(t,e)}var i={isMounted:aa,enqueueSetState:function(n,r,o){n=Qt.get(n);var a=t(n,!1);ea(n,r,void 0===o?null:o,a),e(n,a)},enqueueReplaceState:function(n,r,o){n=Qt.get(n);var a=t(n,!1);ta(n,r,void 0===o?null:o,a),e(n,a)},enqueueForceUpdate:function(n,r){n=Qt.get(n);var o=t(n,!1);na(n,void 0===r?null:r,o),e(n,o)}};return{adoptClassInstance:a,constructClassInstance:function(e,t){var n=e.type,r=Zo(e),o=Jo(e),i=o?Xo(e,r):Ct;return t=new n(t,i),a(e,t),o&&Go(e,r,i),t},mountClassInstance:function(e,t){var n=e.alternate,o=e.stateNode,a=o.state||null,l=e.pendingProps;l||r("158");var u=Zo(e);o.props=l,o.state=a,o.refs=Ct,o.context=Xo(e,u),Or.enableAsyncSubtreeAPI&&null!=e.type&&null!=e.type.prototype&&!0===e.type.prototype.unstable_isAsyncReactComponent&&(e.internalContextTag|=Qo),"function"==typeof o.componentWillMount&&(u=o.state,o.componentWillMount(),u!==o.state&&i.enqueueReplaceState(o,o.state,null),null!==(u=e.updateQueue)&&(o.state=ra(n,e,u,o,a,l,t))),"function"==typeof o.componentDidMount&&(e.effectTag|=qo)},updateClassInstance:function(e,t,a){var l=t.stateNode;l.props=t.memoizedProps,l.state=t.memoizedState;var u=t.memoizedProps,s=t.pendingProps;s||null==(s=u)&&r("159");var c=l.context,p=Zo(t);if(p=Xo(t,p),"function"!=typeof l.componentWillReceiveProps||u===s&&c===p||(c=l.state,l.componentWillReceiveProps(s,p),l.state!==c&&i.enqueueReplaceState(l,l.state,null)),c=t.memoizedState,a=null!==t.updateQueue?ra(e,t,t.updateQueue,l,c,s,a):c,!(u!==s||c!==a||oa()||null!==t.updateQueue&&t.updateQueue.hasForceUpdate))return"function"!=typeof l.componentDidUpdate||u===e.memoizedProps&&c===e.memoizedState||(t.effectTag|=qo),!1;var f=s;if(null===u||null!==t.updateQueue&&t.updateQueue.hasForceUpdate)f=!0;else{var d=t.stateNode,y=t.type;f="function"==typeof d.shouldComponentUpdate?d.shouldComponentUpdate(f,a,p):!y.prototype||!y.prototype.isPureReactComponent||(!kt(u,f)||!kt(c,a))}return f?("function"==typeof l.componentWillUpdate&&l.componentWillUpdate(s,a,p),"function"==typeof l.componentDidUpdate&&(t.effectTag|=qo)):("function"!=typeof l.componentDidUpdate||u===e.memoizedProps&&c===e.memoizedState||(t.effectTag|=qo),n(t,s),o(t,a)),l.props=s,l.state=a,l.context=p,f}}}function le(e,t,n,o,a){function i(e,t,n){l(e,t,n,t.pendingWorkPriority)}function l(e,t,n,r){t.child=null===e?ia(t,t.child,n,r):e.child===t.child?la(t,t.child,n,r):ua(t,t.child,n,r)}function u(e,t){var n=t.ref;null===n||e&&e.ref===n||(t.effectTag|=Aa)}function s(e,t,n,r){if(u(e,t),!n)return r&&ma(t,!1),p(e,t);n=t.stateNode,Fa.current=t;var o=n.render();return t.effectTag|=Na,i(e,t,o),t.memoizedState=n.state,t.memoizedProps=n.props,r&&ma(t,!0),t.child}function c(e){var t=e.stateNode;t.pendingContext?ha(e,t.pendingContext,t.pendingContext!==t.context):t.context&&ha(e,t.context,!1),v(e,t.containerInfo)}function p(e,t){return sa(e,t),t.child}function f(e,t){switch(t.tag){case Pa:c(t);break;case ba:ya(t);break;case Ea:v(t,t.stateNode.containerInfo)}return null}var d=e.shouldSetTextContent,y=e.useSyncScheduling,h=e.shouldDeprioritizeSubtree,m=t.pushHostContext,v=t.pushHostContainer,g=n.enterHydrationState,b=n.resetHydrationState,P=n.tryToClaimNextHydratableInstance;e=ie(o,a,function(e,t){e.memoizedProps=t},function(e,t){e.memoizedState=t});var C=e.adoptClassInstance,k=e.constructClassInstance,E=e.mountClassInstance,w=e.updateClassInstance;return{beginWork:function(e,t,n){if(t.pendingWorkPriority===Oa||t.pendingWorkPriority>n)return f(e,t);switch(t.tag){case va:null!==e&&r("155");var o=t.type,a=t.pendingProps,l=fa(t);return l=pa(t,l),o=o(a,l),t.effectTag|=Na,"object"===(void 0===o?"undefined":ht(o))&&null!==o&&"function"==typeof o.render?(t.tag=ba,a=ya(t),C(t,o),E(t,n),t=s(e,t,!0,a)):(t.tag=ga,i(e,t,o),t.memoizedProps=a,t=t.child),t;case ga:e:{if(a=t.type,n=t.pendingProps,o=t.memoizedProps,da())null===n&&(n=o);else if(null===n||o===n){t=p(e,t);break e}o=fa(t),o=pa(t,o),a=a(n,o),t.effectTag|=Na,i(e,t,a),t.memoizedProps=n,t=t.child}return t;case ba:return a=ya(t),o=void 0,null===e?t.stateNode?r("153"):(k(t,t.pendingProps),E(t,n),o=!0):o=w(e,t,n),s(e,t,o,a);case Pa:return c(t),o=t.updateQueue,null!==o?(a=t.memoizedState,o=ca(e,t,o,null,a,null,n),a===o?(b(),t=p(e,t)):(a=o.element,null!==e&&null!==e.child||!g(t)?(b(),i(e,t,a)):(t.effectTag|=Da,t.child=ia(t,t.child,a,n)),t.memoizedState=o,t=t.child)):(b(),t=p(e,t)),t;case Ca:m(t),null===e&&P(t),a=t.type;var _=t.memoizedProps;return o=t.pendingProps,null===o&&null===(o=_)&&r("154"),l=null!==e?e.memoizedProps:null,da()||null!==o&&_!==o?(_=o.children,d(a,o)?_=null:l&&d(a,l)&&(t.effectTag|=Ra),u(e,t),n!==xa&&!y&&h(a,o)?(t.pendingWorkPriority=xa,t=null):(i(e,t,_),t.memoizedProps=o,t=t.child)):t=p(e,t),t;case ka:return null===e&&P(t),e=t.pendingProps,null===e&&(e=t.memoizedProps),t.memoizedProps=e,null;case _a:t.tag=wa;case wa:return n=t.pendingProps,da()?null===n&&null===(n=e&&e.memoizedProps)&&r("154"):null!==n&&t.memoizedProps!==n||(n=t.memoizedProps),a=n.children,o=t.pendingWorkPriority,t.stateNode=null===e?ia(t,t.stateNode,a,o):e.child===t.child?la(t,t.stateNode,a,o):ua(t,t.stateNode,a,o),t.memoizedProps=n,t.stateNode;case Ta:return null;case Ea:e:{if(v(t,t.stateNode.containerInfo),n=t.pendingWorkPriority,a=t.pendingProps,da())null===a&&null==(a=e&&e.memoizedProps)&&r("154");else if(null===a||t.memoizedProps===a){t=p(e,t);break e}null===e?t.child=ua(t,t.child,a,n):i(e,t,a),t.memoizedProps=a,t=t.child}return t;case Sa:e:{if(n=t.pendingProps,da())null===n&&(n=t.memoizedProps);else if(null===n||t.memoizedProps===n){t=p(e,t);break e}i(e,t,n),t.memoizedProps=n,t=t.child}return t;default:r("156")}},beginFailedWork:function(e,t,n){switch(t.tag){case ba:ya(t);break;case Pa:c(t);break;default:r("157")}return t.effectTag|=Ia,null===e?t.child=null:t.child!==e.child&&(t.child=e.child),t.pendingWorkPriority===Oa||t.pendingWorkPriority>n?f(e,t):(t.firstEffect=null,t.lastEffect=null,l(e,t,null,n),t.tag===ba&&(e=t.stateNode,t.memoizedProps=e.props,t.memoizedState=e.state),t.child)}}}function ue(e,t,n){var o=e.createInstance,a=e.createTextInstance,i=e.appendInitialChild,l=e.finalizeInitialChildren,u=e.prepareUpdate,s=t.getRootHostContainer,c=t.popHostContext,p=t.getHostContext,f=t.popHostContainer,d=n.prepareToHydrateHostInstance,y=n.prepareToHydrateHostTextInstance,h=n.popHydrationState;return{completeWork:function(e,t,n){var m=t.pendingProps;switch(null===m?m=t.memoizedProps:t.pendingWorkPriority===Ja&&n!==Ja||(t.pendingProps=null),t.tag){case Ha:return null;case Va:return La(t),null;case Wa:return f(t),ja(t),m=t.stateNode,m.pendingContext&&(m.context=m.pendingContext,m.pendingContext=null),null!==e&&null!==e.child||(h(t),t.effectTag&=~Ga),null;case Ba:c(t),n=s();var v=t.type;if(null!==e&&null!=t.stateNode){var g=e.memoizedProps,b=t.stateNode,P=p();m=u(b,v,g,m,n,P),(t.updateQueue=m)&&(t.effectTag|=Za),e.ref!==t.ref&&(t.effectTag|=Xa)}else{if(!m)return null===t.stateNode&&r("166"),null;if(e=p(),h(t))d(t,n,e)&&(t.effectTag|=Za);else{e=o(v,m,n,e,t);e:for(g=t.child;null!==g;){if(g.tag===Ba||g.tag===za)i(e,g.stateNode);else if(g.tag!==Ka&&null!==g.child){g=g.child;continue}if(g===t)break e;for(;null===g.sibling;){if(null===g.return||g.return===t)break e;g=g.return}g=g.sibling}l(e,v,m,n)&&(t.effectTag|=Za),t.stateNode=e}null!==t.ref&&(t.effectTag|=Xa)}return null;case za:if(e&&null!=t.stateNode)e.memoizedProps!==m&&(t.effectTag|=Za);else{if("string"!=typeof m)return null===t.stateNode&&r("166"),null;e=s(),n=p(),h(t)?y(t)&&(t.effectTag|=Za):t.stateNode=a(m,e,n,t)}return null;case $a:(m=t.memoizedProps)||r("165"),t.tag=Ya,n=[];e:for((v=t.stateNode)&&(v.return=t);null!==v;){if(v.tag===Ba||v.tag===za||v.tag===Ka)r("164");else if(v.tag===qa)n.push(v.type);else if(null!==v.child){v.child.return=v,v=v.child;continue}for(;null===v.sibling;){if(null===v.return||v.return===t)break e;v=v.return}v.sibling.return=v.return,v=v.sibling}return v=m.handler,m=v(m.props,n),t.child=Ma(t,null!==e?e.child:null,m,t.pendingWorkPriority),t.child;case Ya:return t.tag=$a,null;case qa:case Qa:return null;case Ka:return t.effectTag|=Za,f(t),null;case Ua:r("167");default:r("156")}}}}function se(e){return function(t){try{return e(t)}catch(e){}}}function ce(e,t){function n(e){var n=e.ref;if(null!==n)try{n(null)}catch(n){t(e,n)}}function o(e){return e.tag===ai||e.tag===oi||e.tag===li}function a(e){for(var t=e;;)if(l(t),null!==t.child&&t.tag!==li)t.child.return=t,t=t.child;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;t=t.return}t.sibling.return=t.return,t=t.sibling}}function i(e){for(var t=e,n=!1,o=void 0,i=void 0;;){if(!n){n=t.return;e:for(;;){switch(null===n&&r("160"),n.tag){case ai:o=n.stateNode,i=!1;break e;case oi:case li:o=n.stateNode.containerInfo,i=!0;break e}n=n.return}n=!0}if(t.tag===ai||t.tag===ii)a(t),i?v(o,t.stateNode):m(o,t.stateNode);else if(t.tag===li?o=t.stateNode.containerInfo:l(t),null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return;t=t.return,t.tag===li&&(n=!1)}t.sibling.return=t.return,t=t.sibling}}function l(e){switch("function"==typeof ci&&ci(e),e.tag){case ri:n(e);var r=e.stateNode;if("function"==typeof r.componentWillUnmount)try{r.props=e.memoizedProps,r.state=e.memoizedState,r.componentWillUnmount()}catch(n){t(e,n)}break;case ai:n(e);break;case ui:a(e.stateNode);break;case li:i(e)}}var u=e.commitMount,s=e.commitUpdate,c=e.resetTextContent,p=e.commitTextUpdate,f=e.appendChild,d=e.appendChildToContainer,y=e.insertBefore,h=e.insertInContainerBefore,m=e.removeChild,v=e.removeChildFromContainer,g=e.getPublicInstance;return{commitPlacement:function(e){e:{for(var t=e.return;null!==t;){if(o(t)){var n=t;break e}t=t.return}r("160"),n=void 0}var a=t=void 0;switch(n.tag){case ai:t=n.stateNode,a=!1;break;case oi:case li:t=n.stateNode.containerInfo,a=!0;break;default:r("161")}n.effectTag&yi&&(c(t),n.effectTag&=~yi);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||o(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==ai&&n.tag!==ii;){if(n.effectTag&pi)continue t;if(null===n.child||n.tag===li)continue t;n.child.return=n,n=n.child}if(!(n.effectTag&pi)){n=n.stateNode;break e}}for(var i=e;;){if(i.tag===ai||i.tag===ii)n?a?h(t,i.stateNode,n):y(t,i.stateNode,n):a?d(t,i.stateNode):f(t,i.stateNode);else if(i.tag!==li&&null!==i.child){i.child.return=i,i=i.child;continue}if(i===e)break;for(;null===i.sibling;){if(null===i.return||i.return===e)return;i=i.return}i.sibling.return=i.return,i=i.sibling}},commitDeletion:function(e){i(e),e.return=null,e.child=null,e.alternate&&(e.alternate.child=null,e.alternate.return=null)},commitWork:function(e,t){switch(t.tag){case ri:break;case ai:var n=t.stateNode;if(null!=n){var o=t.memoizedProps;e=null!==e?e.memoizedProps:o;var a=t.type,i=t.updateQueue;t.updateQueue=null,null!==i&&s(n,i,a,e,o,t)}break;case ii:null===t.stateNode&&r("162"),n=t.memoizedProps,p(t.stateNode,null!==e?e.memoizedProps:n,n);break;case oi:case li:break;default:r("163")}},commitLifeCycles:function(e,t){switch(t.tag){case ri:var n=t.stateNode;if(t.effectTag&fi)if(null===e)n.props=t.memoizedProps,n.state=t.memoizedState,n.componentDidMount();else{var o=e.memoizedProps;e=e.memoizedState,n.props=t.memoizedProps,n.state=t.memoizedState,n.componentDidUpdate(o,e)}t.effectTag&di&&null!==t.updateQueue&&si(t,t.updateQueue,n);break;case oi:e=t.updateQueue,null!==e&&si(t,e,t.child&&t.child.stateNode);break;case ai:n=t.stateNode,null===e&&t.effectTag&fi&&u(n,t.type,t.memoizedProps,t);break;case ii:case li:break;default:r("163")}},commitAttachRef:function(e){var t=e.ref;if(null!==t){var n=e.stateNode;switch(e.tag){case ai:t(g(n));break;default:t(n)}}},commitDetachRef:function(e){null!==(e=e.ref)&&e(null)}}}function pe(e){function t(e){return e===gi&&r("174"),e}var n=e.getChildHostContext,o=e.getRootHostContext,a=hi(gi),i=hi(gi),l=hi(gi);return{getHostContext:function(){return t(a.current)},getRootHostContainer:function(){return t(l.current)},popHostContainer:function(e){mi(a,e),mi(i,e),mi(l,e)},popHostContext:function(e){i.current===e&&(mi(a,e),mi(i,e))},pushHostContainer:function(e,t){vi(l,t,e),t=o(t),vi(i,e,e),vi(a,t,e)},pushHostContext:function(e){var r=t(l.current),o=t(a.current);r=n(o,e.type,r),o!==r&&(vi(i,e,e),vi(a,r,e))},resetHostContainer:function(){a.current=gi,l.current=gi}}}function fe(e){function t(e,t){var n=wi();n.stateNode=t,n.return=e,n.effectTag=ki,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function n(e,t){switch(e.tag){case bi:return i(t,e.type,e.pendingProps);case Pi:return l(t,e.pendingProps);default:return!1}}function o(e){for(e=e.return;null!==e&&e.tag!==bi&&e.tag!==Ci;)e=e.return;y=e}var a=e.shouldSetTextContent,i=e.canHydrateInstance,l=e.canHydrateTextInstance,u=e.getNextHydratableSibling,s=e.getFirstHydratableChild,c=e.hydrateInstance,p=e.hydrateTextInstance,f=e.didNotHydrateInstance,d=e.didNotFindHydratableInstance;if(e=e.didNotFindHydratableTextInstance,!(i&&l&&u&&s&&c&&p&&f&&d&&e))return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){r("175")},prepareToHydrateHostTextInstance:function(){r("176")},popHydrationState:function(){return!1}};var y=null,h=null,m=!1;return{enterHydrationState:function(e){return h=s(e.stateNode.containerInfo),y=e,m=!0},resetHydrationState:function(){h=y=null,m=!1},tryToClaimNextHydratableInstance:function(e){if(m){var r=h;if(r){if(!n(e,r)){if(!(r=u(r))||!n(e,r))return e.effectTag|=Ei,m=!1,void(y=e);t(y,h)}e.stateNode=r,y=e,h=s(r)}else e.effectTag|=Ei,m=!1,y=e}},prepareToHydrateHostInstance:function(e,t,n){return t=c(e.stateNode,e.type,e.memoizedProps,t,n,e),e.updateQueue=t,null!==t},prepareToHydrateHostTextInstance:function(e){return p(e.stateNode,e.memoizedProps,e)},popHydrationState:function(e){if(e!==y)return!1;if(!m)return o(e),m=!0,!1;var n=e.type;if(e.tag!==bi||"head"!==n&&"body"!==n&&!a(n,e.memoizedProps))for(n=h;n;)t(e,n),n=u(n);return o(e),h=y?u(e.stateNode):null,!0}}}function de(e){function t(){for(;null!==$&&$.current.pendingWorkPriority===Di;){$.isScheduled=!1;var e=$.nextScheduledRoot;if($.nextScheduledRoot=null,$===Y)return Y=$=null,B=Di,null;$=e}e=$;for(var t=null,n=Di;null!==e;)e.current.pendingWorkPriority!==Di&&(n===Di||n>e.current.pendingWorkPriority)&&(n=e.current.pendingWorkPriority,t=e),e=e.nextScheduledRoot;null!==t?(B=n,Ti(),Zi(),k(),W=Oi(t.current,n),t!==oe&&(re=0,oe=t)):(B=Di,oe=W=null)}function n(n){ee=!0,K=null;var o=n.stateNode;if(o.current===n&&r("177"),B!==Ri&&B!==Ii||re++,Si.current=null,n.effectTag>ji)if(null!==n.lastEffect){n.lastEffect.nextEffect=n;var a=n.firstEffect}else a=n;else a=n.firstEffect;for(F(),z=a;null!==z;){var i=!1,l=void 0;try{for(;null!==z;){var u=z.effectTag;if(u&Bi&&e.resetTextContent(z.stateNode),u&$i){var s=z.alternate;null!==s&&R(s)}switch(u&~(zi|Ki|Bi|$i|ji)){case Ui:S(z),z.effectTag&=~Ui;break;case Vi:S(z),z.effectTag&=~Ui,x(z.alternate,z);break;case Hi:x(z.alternate,z);break;case Wi:te=!0,O(z),te=!1}z=z.nextEffect}}catch(e){i=!0,l=e}i&&(null===z&&r("178"),p(z,l),null!==z&&(z=z.nextEffect))}for(M(),o.current=n,z=a;null!==z;){o=!1,a=void 0;try{for(;null!==z;){var c=z.effectTag;if(c&(Hi|zi)&&N(z.alternate,z),c&$i&&D(z),c&Ki)switch(i=z,l=void 0,null!==Q&&(l=Q.get(i),Q.delete(i),null==l&&null!==i.alternate&&(i=i.alternate,l=Q.get(i),Q.delete(i))),null==l&&r("184"),i.tag){case Gi:i.stateNode.componentDidCatch(l.error,{componentStack:l.componentStack});break;case Yi:null===Z&&(Z=l.error);break;default:r("157")}var f=z.nextEffect;z.nextEffect=null,z=f}}catch(e){o=!0,a=e}o&&(null===z&&r("178"),p(z,a),null!==z&&(z=z.nextEffect))}ee=!1,"function"==typeof Ni&&Ni(n.stateNode),X&&(X.forEach(v),X=null),t()}function o(e){for(;;){var t=T(e.alternate,e,B),n=e.return,r=e.sibling,o=e;if(!(o.pendingWorkPriority!==Di&&o.pendingWorkPriority>B)){for(var a=Xi(o),i=o.child;null!==i;)a=xi(a,i.pendingWorkPriority),i=i.sibling;o.pendingWorkPriority=a}if(null!==t)return t;if(null!==n&&(null===n.firstEffect&&(n.firstEffect=e.firstEffect),null!==e.lastEffect&&(null!==n.lastEffect&&(n.lastEffect.nextEffect=e.firstEffect),n.lastEffect=e.lastEffect),e.effectTag>ji&&(null!==n.lastEffect?n.lastEffect.nextEffect=e:n.firstEffect=e,n.lastEffect=e)),null!==r)return r;if(null===n){K=e;break}e=n}return null}function a(e){var t=w(e.alternate,e,B);return null===t&&(t=o(e)),Si.current=null,t}function i(e){var t=_(e.alternate,e,B);return null===t&&(t=o(e)),Si.current=null,t}function l(e){c(Mi,e)}function u(){if(null!==Q&&0e)){L=B;e:for(;;){if(B<=Ii)for(;null!==W&&!(null===(W=a(W))&&(null===K&&r("179"),L=Ii,n(K),L=B,u(),B===Di||B>e||B>Ii)););else if(null!==o)for(;null!==W&&!U;)if(1e||BIi&&!q&&(I(l),q=!0),e=Z,J=U=j=!1,oe=G=Q=Z=null,re=0,null!==e)throw e}function p(e,t){var n=Si.current=null,r=!1,o=!1,a=null;if(e.tag===Yi)n=e,d(e)&&(J=!0);else for(var i=e.return;null!==i&&null===n;){if(i.tag===Gi?"function"==typeof i.stateNode.componentDidCatch&&(r=!0,a=f(i),n=i,o=!0):i.tag===Yi&&(n=i),d(i)){if(te||null!==X&&(X.has(i)||null!==i.alternate&&X.has(i.alternate)))return null;n=null,o=!1}i=i.return}if(null!==n){null===G&&(G=new Set),G.add(n);var l="";i=e;do{e:switch(i.tag){case yo:case ho:case mo:case vo:var u=i._debugOwner,s=i._debugSource,c=f(i),p=null;u&&(p=f(u)),u=s,c="\n in "+(c||"Unknown")+(u?" (at "+u.fileName.replace(/^.*[\\\/]/,"")+":"+u.lineNumber+")":p?" (created by "+p+")":"");break e;default:c=""}l+=c,i=i.return}while(i);i=l,e=f(e),null===Q&&(Q=new Map),t={componentName:e,componentStack:i,error:t,errorBoundary:r?n.stateNode:null,errorBoundaryFound:r,errorBoundaryName:a,willRetry:o},Q.set(n,t);try{console.error(t.error)}catch(e){console.error(e)}return ee?(null===X&&(X=new Set),X.add(n)):v(n),n}return null===Z&&(Z=t),null}function d(e){return null!==G&&(G.has(e)||null!==e.alternate&&G.has(e.alternate))}function y(e,t){return h(e,t,!1)}function h(e,t){re>ne&&(J=!0,r("185")),!j&&t<=B&&(W=null);for(var n=!0;null!==e&&n;){if(n=!1,(e.pendingWorkPriority===Di||e.pendingWorkPriority>t)&&(n=!0,e.pendingWorkPriority=t),null!==e.alternate&&(e.alternate.pendingWorkPriority===Di||e.alternate.pendingWorkPriority>t)&&(n=!0,e.alternate.pendingWorkPriority=t),null===e.return){if(e.tag!==Yi)break;var o=e.stateNode;if(t===Di||o.isScheduled||(o.isScheduled=!0,Y?Y.nextScheduledRoot=o:$=o,Y=o),!j)switch(t){case Ri:V?c(Ri,null):c(Ii,null);break;case Ii:H||r("186");break;default:q||(I(l),q=!0)}}e=e.return}}function m(e,t){var n=L;return n===Di&&(n=!A||e.internalContextTag&Li||t?Fi:Ri),n===Ri&&(j||H)?Ii:n}function v(e){h(e,Ii,!0)}var g=pe(e),b=fe(e),P=g.popHostContainer,C=g.popHostContext,k=g.resetHostContainer,E=le(e,g,b,y,m),w=E.beginWork,_=E.beginFailedWork,T=ue(e,g,b).completeWork;g=ce(e,p);var S=g.commitPlacement,O=g.commitDeletion,x=g.commitWork,N=g.commitLifeCycles,D=g.commitAttachRef,R=g.commitDetachRef,I=e.scheduleDeferredCallback,A=e.useSyncScheduling,F=e.prepareForCommit,M=e.resetAfterCommit,L=Di,j=!1,U=!1,H=!1,V=!1,W=null,B=Di,z=null,K=null,$=null,Y=null,q=!1,Q=null,G=null,X=null,Z=null,J=!1,ee=!1,te=!1,ne=1e3,re=0,oe=null;return{scheduleUpdate:y,getPriorityContext:m,batchedUpdates:function(e,t){var n=H;H=!0;try{return e(t)}finally{H=n,j||H||c(Ii,null)}},unbatchedUpdates:function(e){var t=V,n=H;V=H,H=!1;try{return e()}finally{H=n,V=t}},flushSync:function(e){var t=H,n=L;H=!0,L=Ri;try{return e()}finally{H=t,L=n,j&&r("187"),c(Ii,null)}},deferredUpdates:function(e){var t=L;L=Fi;try{return e()}finally{L=t}}}}function ye(){r("196")}function he(e){return e?(e=Qt.get(e),"number"==typeof e.tag?ye(e):e._processChildContext(e._context)):Ct}function me(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ve(e,t){var n=me(e);e=0;for(var r;n;){if(n.nodeType===il){if(r=e+n.textContent.length,e<=t&&r>=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=me(n)}}function ge(){return!ll&&vt.canUseDOM&&(ll="textContent"in document.documentElement?"textContent":"innerText"),ll}function be(){r("211")}function Pe(){r("212")}function Ce(e){if(null==e)return null;if(e.nodeType===fl)return e;var t=Qt.get(e);if(t)return"number"==typeof t.tag?be(t):Pe(t);"function"==typeof e.render?r("188"):r("213",Object.keys(e))}function ke(e){if(void 0!==e._hostParent)return e._hostParent;if("number"==typeof e.tag){do{e=e.return}while(e&&e.tag!==dl);if(e)return e}return null}function Ee(e,t){for(var n=0,r=e;r;r=ke(r))n++;r=0;for(var o=t;o;o=ke(o))r++;for(;0this.eventPool.length&&this.eventPool.push(e)}function Re(e){e.eventPool=[],e.getPooled=Ne,e.release=De}function Ie(e,t,n,r){return xe.call(this,e,t,n,r)}function Ae(e,t,n,r){return xe.call(this,e,t,n,r)}function Fe(e,t){switch(e){case"topKeyUp":return-1!==kl.indexOf(t.keyCode);case"topKeyDown":return 229!==t.keyCode;case"topKeyPress":case"topMouseDown":case"topBlur":return!0;default:return!1}}function Me(e){return e=e.detail,"object"===(void 0===e?"undefined":ht(e))&&"data"in e?e.data:null}function Le(e,t){switch(e){case"topCompositionEnd":return Me(t);case"topKeyPress":return 32!==t.which?null:(Dl=!0,xl);case"topTextInput":return e=t.data,e===xl&&Dl?null:e;default:return null}}function je(e,t){if(Rl)return"topCompositionEnd"===e||!El&&Fe(e,t)?(e=bl.getData(),bl.reset(),Rl=!1,e):null;switch(e){case"topPaste":return null;case"topKeyPress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=u.hasBooleanValue+u.hasNumericValue+u.hasOverloadedBooleanValue||r("50",i),a.hasOwnProperty(i)&&(u.attributeName=a[i]),o.hasOwnProperty(i)&&(u.attributeNamespace=o[i]),e.hasOwnProperty(i)&&(u.mutationMethod=e[i]),Ft.properties[i]=u}}},Ft={ID_ATTRIBUTE_NAME:"data-reactid",ROOT_ATTRIBUTE_NAME:"data-reactroot",ATTRIBUTE_NAME_START_CHAR:":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD",ATTRIBUTE_NAME_CHAR:":A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040",properties:{},shouldSetAttribute:function(e,t){if(Ft.isReservedProp(e)||!("o"!==e[0]&&"O"!==e[0]||"n"!==e[1]&&"N"!==e[1]))return!1;if(null===t)return!0;switch(void 0===t?"undefined":ht(t)){case"boolean":return Ft.shouldAttributeAcceptBooleanValue(e);case"undefined":case"number":case"string":case"object":return!0;default:return!1}},getPropertyInfo:function(e){return Ft.properties.hasOwnProperty(e)?Ft.properties[e]:null},shouldAttributeAcceptBooleanValue:function(e){if(Ft.isReservedProp(e))return!0;var t=Ft.getPropertyInfo(e);return t?t.hasBooleanValue||t.hasStringBooleanValue||t.hasOverloadedBooleanValue:"data-"===(e=e.toLowerCase().slice(0,5))||"aria-"===e},isReservedProp:function(e){return It.hasOwnProperty(e)},injection:At},Mt=Ft,Lt={IndeterminateComponent:0,FunctionalComponent:1,ClassComponent:2,HostRoot:3,HostPortal:4,HostComponent:5,HostText:6,CoroutineComponent:7,CoroutineHandlerPhase:8,YieldComponent:9,Fragment:10},jt={ELEMENT_NODE:1,TEXT_NODE:3,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_FRAGMENT_NODE:11},Ut=Lt.HostComponent,Ht=Lt.HostText,Vt=jt.ELEMENT_NODE,Wt=jt.COMMENT_NODE,Bt=Mt.ID_ATTRIBUTE_NAME,zt={hasCachedChildNodes:1},Kt=Math.random().toString(36).slice(2),$t="__reactInternalInstance$"+Kt,Yt="__reactEventHandlers$"+Kt,qt={getClosestInstanceFromNode:p,getInstanceFromNode:function(e){var t=e[$t];return t?t.tag===Ut||t.tag===Ht?t:t._hostNode===e?t:null:(t=p(e),null!=t&&t._hostNode===e?t:null)},getNodeFromInstance:function(e){if(e.tag===Ut||e.tag===Ht)return e.stateNode;if(void 0===e._hostNode&&r("33"),e._hostNode)return e._hostNode;for(var t=[];!e._hostNode;)t.push(e),e._hostParent||r("34"),e=e._hostParent;for(;t.length;e=t.pop())c(e,e._hostNode);return e._hostNode},precacheChildNodes:c,precacheNode:s,uncacheNode:function(e){var t=e._hostNode;t&&(delete t[$t],e._hostNode=null)},precacheFiberNode:function(e,t){t[$t]=e},getFiberCurrentPropsFromNode:function(e){return e[Yt]||null},updateFiberProps:function(e,t){e[Yt]=t}},Qt={remove:function(e){e._reactInternalFiber=void 0},get:function(e){return e._reactInternalFiber},has:function(e){return void 0!==e._reactInternalFiber},set:function(e,t){e._reactInternalFiber=t}},Gt={ReactCurrentOwner:mt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner},Xt={NoEffect:0,PerformedWork:1,Placement:2,Update:4,PlacementAndUpdate:6,Deletion:8,ContentReset:16,Callback:32,Err:64,Ref:128},Zt=Lt.HostComponent,Jt=Lt.HostRoot,en=Lt.HostPortal,tn=Lt.HostText,nn=Xt.NoEffect,rn=Xt.Placement,on={isFiberMounted:function(e){return 2===d(e)},isMounted:function(e){return!!(e=Qt.get(e))&&2===d(e)},findCurrentFiberUsingSlowPath:h,findCurrentHostFiber:function(e){if(!(e=h(e)))return null;for(var t=e;;){if(t.tag===Zt||t.tag===tn)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null},findCurrentHostFiberWithNoPortals:function(e){if(!(e=h(e)))return null;for(var t=e;;){if(t.tag===Zt||t.tag===tn)return t;if(t.child&&t.tag!==en)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}},an={_caughtError:null,_hasCaughtError:!1,_rethrowError:null,_hasRethrowError:!1,injection:{injectErrorUtils:function(e){"function"!=typeof e.invokeGuardedCallback&&r("197"),m=e.invokeGuardedCallback}},invokeGuardedCallback:function(e,t,n,r,o,a,i,l,u){m.apply(an,arguments)},invokeGuardedCallbackAndCatchFirstError:function(e,t,n,r,o,a,i,l,u){if(an.invokeGuardedCallback.apply(this,arguments),an.hasCaughtError()){var s=an.clearCaughtError();an._hasRethrowError||(an._hasRethrowError=!0,an._rethrowError=s)}},rethrowCaughtError:function(){return v.apply(an,arguments)},hasCaughtError:function(){return an._hasCaughtError},clearCaughtError:function(){if(an._hasCaughtError){var e=an._caughtError;return an._caughtError=null,an._hasCaughtError=!1,e}r("198")}},ln=an,un={isEndish:function(e){return"topMouseUp"===e||"topTouchEnd"===e||"topTouchCancel"===e},isMoveish:function(e){return"topMouseMove"===e||"topTouchMove"===e},isStartish:function(e){return"topMouseDown"===e||"topTouchStart"===e},executeDirectDispatch:function(e){var t=e._dispatchListeners,n=e._dispatchInstances;return Array.isArray(t)&&r("103"),e.currentTarget=t?un.getNodeFromInstance(n):null,t=t?t(e):null,e.currentTarget=null,e._dispatchListeners=null,e._dispatchInstances=null,t},executeDispatchesInOrder:function(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var o=0;ogn.length&&gn.push(e)}}}},Pn=bn,Cn=null,kn={injection:{injectEventPluginOrder:Rt.injectEventPluginOrder,injectEventPluginsByName:Rt.injectEventPluginsByName},getListener:function(e,t){if("number"==typeof e.tag){var n=e.stateNode;if(!n)return null;var o=sn.getFiberCurrentPropsFromNode(n);if(!o)return null;if(n=o[t],N(t,e.type,o))return null}else{if("string"==typeof(o=e._currentElement)||"number"==typeof o||!e._rootNodeID)return null;if(e=o.props,n=e[t],N(t,o.type,e))return null}return n&&"function"!=typeof n&&r("231",t,void 0===n?"undefined":ht(n)),n},extractEvents:function(e,t,n,r){for(var o,a=Rt.plugins,i=0;in||r.hasOverloadedBooleanValue&&!1===n?Wn.deleteValueForProperty(e,t):r.mustUseProperty?e[r.propertyName]=n:(t=r.attributeName,(o=r.attributeNamespace)?e.setAttributeNS(o,t,""+n):r.hasBooleanValue||r.hasOverloadedBooleanValue&&!0===n?e.setAttribute(t,""):e.setAttribute(t,""+n))}else Wn.setValueForAttribute(e,t,Mt.shouldSetAttribute(t,n)?n:null)},setValueForAttribute:function(e,t,n){F(t)&&(null==n?e.removeAttribute(t):e.setAttribute(t,""+n))},deleteValueForAttribute:function(e,t){e.removeAttribute(t)},deleteValueForProperty:function(e,t){var n=Mt.getPropertyInfo(t);n?(t=n.mutationMethod)?t(e,void 0):n.mustUseProperty?e[n.propertyName]=!n.hasBooleanValue&&"":e.removeAttribute(n.attributeName):e.removeAttribute(t)}},Bn=Wn,zn=Gt.ReactDebugCurrentFrame,Kn={current:null,phase:null,resetCurrentFiber:function(){zn.getCurrentStack=null,Kn.current=null,Kn.phase=null},setCurrentFiber:function(e,t){zn.getCurrentStack=M,Kn.current=e,Kn.phase=t},getCurrentFiberOwnerName:function(){return null},getCurrentFiberStackAddendum:M},$n=Kn,Yn={getHostProps:function(e,t){var n=t.value,r=t.checked;return gt({type:void 0,step:void 0,min:void 0,max:void 0},t,{defaultChecked:void 0,defaultValue:void 0,value:null!=n?n:e._wrapperState.initialValue,checked:null!=r?r:e._wrapperState.initialChecked})},initWrapperState:function(e,t){var n=t.defaultValue;e._wrapperState={initialChecked:null!=t.checked?t.checked:t.defaultChecked,initialValue:null!=t.value?t.value:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}},updateWrapper:function(e,t){var n=t.checked;null!=n&&Bn.setValueForProperty(e,"checked",n||!1),n=t.value,null!=n?0===n&&""===e.value?e.value="0":"number"===t.type?(t=parseFloat(e.value)||0,(n!=t||n==t&&e.value!=n)&&(e.value=""+n)):e.value!==""+n&&(e.value=""+n):(null==t.value&&null!=t.defaultValue&&e.defaultValue!==""+t.defaultValue&&(e.defaultValue=""+t.defaultValue),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked))},postMountWrapper:function(e,t){switch(t.type){case"submit":case"reset":break;case"color":case"date":case"datetime":case"datetime-local":case"month":case"time":case"week":e.value="",e.value=e.defaultValue;break;default:e.value=e.value}t=e.name,""!==t&&(e.name=""),e.defaultChecked=!e.defaultChecked,e.defaultChecked=!e.defaultChecked,""!==t&&(e.name=t)},restoreControlledState:function(e,t){Yn.updateWrapper(e,t);var n=t.name;if("radio"===t.type&&null!=n){for(t=e;t.parentNode;)t=t.parentNode;for(n=t.querySelectorAll("input[name="+JSON.stringify(""+n)+'][type="radio"]'),t=0;t=t.length||r("93"),t=t[0]),n=""+t),null==n&&(n=""),o=n),e._wrapperState={initialValue:""+o}},updateWrapper:function(e,t){var n=t.value;null!=n&&(n=""+n,n!==e.value&&(e.value=n),null==t.defaultValue&&(e.defaultValue=n)),null!=t.defaultValue&&(e.defaultValue=t.defaultValue)},postMountWrapper:function(e){var t=e.textContent;t===e._wrapperState.initialValue&&(e.value=t)},restoreControlledState:function(e,t){Xn.updateWrapper(e,t)}},Zn=Xn,Jn=gt({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}),er={_getTrackerFromNode:function(e){return e._valueTracker},track:function(e){e._valueTracker||(e._valueTracker=V(e))},updateValueIfChanged:function(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=H(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)},stopTracking:function(e){(e=e._valueTracker)&&e.stopTracking()}},tr=Ot.Namespaces,nr=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,o){MSApp.execUnsafeLocalFunction(function(){return e(t,n)})}:e}(function(e,t){if(e.namespaceURI!==tr.svg||"innerHTML"in e)e.innerHTML=t;else for(Ln=Ln||document.createElement("div"),Ln.innerHTML=""+t+" ",t=Ln.firstChild;t.firstChild;)e.appendChild(t.firstChild)}),rr=/["'&<>]/,or=jt.TEXT_NODE;vt.canUseDOM&&("textContent"in document.documentElement||(B=function(e,t){if(e.nodeType===or)e.nodeValue=t;else{if("boolean"==typeof t||"number"==typeof t)t=""+t;else{t=""+t;var n=rr.exec(t);if(n){var r,o="",a=0;for(r=n.index;r<\/script>",e=e.removeChild(e.firstChild)):e="string"==typeof t.is?n.createElement(e,{is:t.is}):n.createElement(e):e=n.createElementNS(r,e),e},createTextNode:function(e,t){return(t.nodeType===ir?t:t.ownerDocument).createTextNode(e)},setInitialProperties:function(e,t,n,r){var o=W(t,n);switch(t){case"iframe":case"object":Nn.trapBubbledEvent("topLoad","load",e);var a=n;break;case"video":case"audio":for(a in fr)fr.hasOwnProperty(a)&&Nn.trapBubbledEvent(a,fr[a],e);a=n;break;case"source":Nn.trapBubbledEvent("topError","error",e),a=n;break;case"img":case"image":Nn.trapBubbledEvent("topError","error",e),Nn.trapBubbledEvent("topLoad","load",e),a=n;break;case"form":Nn.trapBubbledEvent("topReset","reset",e),Nn.trapBubbledEvent("topSubmit","submit",e),a=n;break;case"details":Nn.trapBubbledEvent("topToggle","toggle",e),a=n;break;case"input":qn.initWrapperState(e,n),a=qn.getHostProps(e,n),Nn.trapBubbledEvent("topInvalid","invalid",e),z(r,"onChange");break;case"option":Qn.validateProps(e,n),a=Qn.getHostProps(e,n);break;case"select":Gn.initWrapperState(e,n),a=Gn.getHostProps(e,n),Nn.trapBubbledEvent("topInvalid","invalid",e),z(r,"onChange");break;case"textarea":Zn.initWrapperState(e,n),a=Zn.getHostProps(e,n),Nn.trapBubbledEvent("topInvalid","invalid",e),z(r,"onChange");break;default:a=n}U(t,a);var i,l=a;for(i in l)if(l.hasOwnProperty(i)){var u=l[i];"style"===i?jn.setValueForStyles(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&nr(e,u):"children"===i?"string"==typeof u?ar(e,u):"number"==typeof u&&ar(e,""+u):"suppressContentEditableWarning"!==i&&(sr.hasOwnProperty(i)?null!=u&&z(r,i):o?Bn.setValueForAttribute(e,i,u):null!=u&&Bn.setValueForProperty(e,i,u))}switch(t){case"input":er.track(e),qn.postMountWrapper(e,n);break;case"textarea":er.track(e),Zn.postMountWrapper(e,n);break;case"option":Qn.postMountWrapper(e,n);break;case"select":Gn.postMountWrapper(e,n);break;default:"function"==typeof a.onClick&&(e.onclick=Pt)}},diffProperties:function(e,t,n,r,o){var a=null;switch(t){case"input":n=qn.getHostProps(e,n),r=qn.getHostProps(e,r),a=[];break;case"option":n=Qn.getHostProps(e,n),r=Qn.getHostProps(e,r),a=[];break;case"select":n=Gn.getHostProps(e,n),r=Gn.getHostProps(e,r),a=[];break;case"textarea":n=Zn.getHostProps(e,n),r=Zn.getHostProps(e,r),a=[];break;default:"function"!=typeof n.onClick&&"function"==typeof r.onClick&&(e.onclick=Pt)}U(t,r);var i,l;e=null;for(i in n)if(!r.hasOwnProperty(i)&&n.hasOwnProperty(i)&&null!=n[i])if("style"===i)for(l in t=n[i])t.hasOwnProperty(l)&&(e||(e={}),e[l]="");else"dangerouslySetInnerHTML"!==i&&"children"!==i&&"suppressContentEditableWarning"!==i&&(sr.hasOwnProperty(i)?a||(a=[]):(a=a||[]).push(i,null));for(i in r){var u=r[i];if(t=null!=n?n[i]:void 0,r.hasOwnProperty(i)&&u!==t&&(null!=u||null!=t))if("style"===i)if(t){for(l in t)!t.hasOwnProperty(l)||u&&u.hasOwnProperty(l)||(e||(e={}),e[l]="");for(l in u)u.hasOwnProperty(l)&&t[l]!==u[l]&&(e||(e={}),e[l]=u[l])}else e||(a||(a=[]),a.push(i,e)),e=u;else"dangerouslySetInnerHTML"===i?(u=u?u.__html:void 0,t=t?t.__html:void 0,null!=u&&t!==u&&(a=a||[]).push(i,""+u)):"children"===i?t===u||"string"!=typeof u&&"number"!=typeof u||(a=a||[]).push(i,""+u):"suppressContentEditableWarning"!==i&&(sr.hasOwnProperty(i)?(null!=u&&z(o,i),a||t===u||(a=[])):(a=a||[]).push(i,u))}return e&&(a=a||[]).push("style",e),a},updateProperties:function(e,t,n,r,o){W(n,r),r=W(n,o);for(var a=0;at&&(t=8),Cr=t=K(s.priorityLevel,i);){n.first=s.next,null===n.first&&(n.last=null);var c;s.isReplace?(o=G(s,r,o,a),u=!0):(c=G(s,r,o,a))&&(o=u?gt({},o,c):gt(o,c),u=!1),s.isForced&&(l=!0),null===s.callback||s.isTopLevelUnmount&&null!==s.next||(e=null!==e?e:[],e.push(s.callback),t.effectTag|=Nr),s=s.next}return n.callbackList=e,n.hasForceUpdate=l,null!==n.first||null!==e||l||(t.updateQueue=null),o},commitCallbacks:function(e,t,n){if(null!==(e=t.callbackList))for(t.callbackList=null,t=0;tHr||(e.current=Ur[Hr],Ur[Hr]=null,Hr--)},push:function(e,t){Hr++,Ur[Hr]=e.current,e.current=t},reset:function(){for(;-1 e)?e:t}},fo=po.createHostRootFiber,yo=Lt.IndeterminateComponent,ho=Lt.FunctionalComponent,mo=Lt.ClassComponent,vo=Lt.HostComponent;"function"==typeof Symbol&&Symbol.for?(_r=Symbol.for("react.coroutine"),Tr=Symbol.for("react.yield")):(_r=60104,Tr=60105);var go={createCoroutine:function(e,t,n){var r=3t&&(r=t,t=o,o=r),r=ve(e,o),e=ve(e,t),r&&e){var a=document.createRange();a.setStart(r.node,r.offset),n.removeAllRanges(),o>t?(n.addRange(a),n.extend(e.node,e.offset)):(a.setEnd(e.node,e.offset),n.addRange(a))}}}},sl=jt.ELEMENT_NODE,cl={hasSelectionCapabilities:function(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&"text"===e.type||"textarea"===t||"true"===e.contentEditable)},getSelectionInformation:function(){var e=_t();return{focusedElem:e,selectionRange:cl.hasSelectionCapabilities(e)?cl.getSelection(e):null}},restoreSelection:function(e){var t=_t(),n=e.focusedElem;if(e=e.selectionRange,t!==n&&Et(document.documentElement,n)){for(cl.hasSelectionCapabilities(n)&&cl.setSelection(n,e),t=[],e=n;e=e.parentNode;)e.nodeType===sl&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(wt(n),n=0;n=parseInt(Tl.version(),10))}var Sl=_l,Ol=vt.canUseDOM&&(!El||wl&&8=wl),xl=String.fromCharCode(32),Nl={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown".split(" ")}},Dl=!1,Rl=!1,Il={eventTypes:Nl,extractEvents:function(e,t,n,r){var o;if(El)e:{switch(e){case"topCompositionStart":var a=Nl.compositionStart;break e;case"topCompositionEnd":a=Nl.compositionEnd;break e;case"topCompositionUpdate":a=Nl.compositionUpdate;break e}a=void 0}else Rl?Fe(e,n)&&(a=Nl.compositionEnd):"topKeyDown"===e&&229===n.keyCode&&(a=Nl.compositionStart);return a?(Ol&&(Rl||a!==Nl.compositionStart?a===Nl.compositionEnd&&Rl&&(o=bl.getData()):Rl=bl.initialize(r)),a=Ie.getPooled(a,t,n,r),o?a.data=o:null!==(o=Me(n))&&(a.data=o),ml.accumulateTwoPhaseDispatches(a),o=a):o=null,(e=Sl?Le(e,n):je(e,n))?(t=Ae.getPooled(Nl.beforeInput,t,n,r),t.data=e,ml.accumulateTwoPhaseDispatches(t)):t=null,[o,t]}},Al={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0},Fl={change:{phasedRegistrationNames:{bubbled:"onChange",captured:"onChangeCapture"},dependencies:"topBlur topChange topClick topFocus topInput topKeyDown topKeyUp topSelectionChange".split(" ")}},Ml=null,Ll=null,jl=!1;vt.canUseDOM&&(jl=D("input")&&(!document.documentMode||9=document.documentMode,Kl={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange".split(" ")}},$l=null,Yl=null,ql=null,Ql=!1,Gl=Nn.isListeningToAllDependencies,Xl={eventTypes:Kl,extractEvents:function(e,t,n,r){var o=r.window===r?r.document:r.nodeType===Bl?r:r.ownerDocument;if(!o||!Gl("onSelect",o))return null;switch(o=t?qt.getNodeFromInstance(t):window,e){case"topFocus":(Ue(o)||"true"===o.contentEditable)&&($l=o,Yl=t,ql=null);break;case"topBlur":ql=Yl=$l=null;break;case"topMouseDown":Ql=!0;break;case"topContextMenu":case"topMouseUp":return Ql=!1,et(n,r);case"topSelectionChange":if(zl)break;case"topKeyDown":case"topKeyUp":return et(n,r)}return null}};xe.augmentClass(tt,{animationName:null,elapsedTime:null,pseudoElement:null}),xe.augmentClass(nt,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),Ge.augmentClass(rt,{relatedTarget:null});var Zl={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Jl={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};Ge.augmentClass(at,{key:function(e){if(e.key){var t=Zl[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?(e=ot(e),13===e?"Enter":String.fromCharCode(e)):"keydown"===e.type||"keyup"===e.type?Jl[e.keyCode]||"Unidentified":""},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Ze,charCode:function(e){return"keypress"===e.type?ot(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?ot(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Je.augmentClass(it,{dataTransfer:null}),Ge.augmentClass(lt,{touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Ze}),xe.augmentClass(ut,{propertyName:null,elapsedTime:null,pseudoElement:null}),Je.augmentClass(st,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null});var eu={},tu={};"abort animationEnd animationIteration animationStart blur cancel canPlay canPlayThrough click close contextMenu copy cut doubleClick drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error focus input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing progress rateChange reset scroll seeked seeking stalled submit suspend timeUpdate toggle touchCancel touchEnd touchMove touchStart transitionEnd volumeChange waiting wheel".split(" ").forEach(function(e){var t=e[0].toUpperCase()+e.slice(1),n="on"+t;t="top"+t,n={phasedRegistrationNames:{bubbled:n,captured:n+"Capture"},dependencies:[t]},eu[e]=n,tu[t]=n});var nu={eventTypes:eu,extractEvents:function(e,t,n,o){var a=tu[e];if(!a)return null;switch(e){case"topAbort":case"topCancel":case"topCanPlay":case"topCanPlayThrough":case"topClose":case"topDurationChange":case"topEmptied":case"topEncrypted":case"topEnded":case"topError":case"topInput":case"topInvalid":case"topLoad":case"topLoadedData":case"topLoadedMetadata":case"topLoadStart":case"topPause":case"topPlay":case"topPlaying":case"topProgress":case"topRateChange":case"topReset":case"topSeeked":case"topSeeking":case"topStalled":case"topSubmit":case"topSuspend":case"topTimeUpdate":case"topToggle":case"topVolumeChange":case"topWaiting":var i=xe;break;case"topKeyPress":if(0===ot(n))return null;case"topKeyDown":case"topKeyUp":i=at;break;case"topBlur":case"topFocus":i=rt;break;case"topClick":if(2===n.button)return null;case"topDoubleClick":case"topMouseDown":case"topMouseMove":case"topMouseUp":case"topMouseOut":case"topMouseOver":case"topContextMenu":i=Je;break;case"topDrag":case"topDragEnd":case"topDragEnter":case"topDragExit":case"topDragLeave":case"topDragOver":case"topDragStart":case"topDrop":i=it;break;case"topTouchCancel":case"topTouchEnd":case"topTouchMove":case"topTouchStart":i=lt;break;case"topAnimationEnd":case"topAnimationIteration":case"topAnimationStart":i=tt;break;case"topTransitionEnd":i=ut;break;case"topScroll":i=Ge;break;case"topWheel":i=st;break;case"topCopy":case"topCut":case"topPaste":i=nt}return i||r("86",e),e=i.getPooled(a,t,n,o),ml.accumulateTwoPhaseDispatches(e),e}};Pn.setHandleTopLevel(Nn.handleTopLevel),kn.injection.injectEventPluginOrder("ResponderEventPlugin SimpleEventPlugin TapEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin".split(" ")),sn.injection.injectComponentTree(qt),kn.injection.injectEventPluginsByName({SimpleEventPlugin:nu,EnterLeaveEventPlugin:Wl,ChangeEventPlugin:Ul,SelectEventPlugin:Xl,BeforeInputEventPlugin:Il});var ru=Mt.injection.MUST_USE_PROPERTY,ou=Mt.injection.HAS_BOOLEAN_VALUE,au=Mt.injection.HAS_NUMERIC_VALUE,iu=Mt.injection.HAS_POSITIVE_NUMERIC_VALUE,lu=Mt.injection.HAS_STRING_BOOLEAN_VALUE,uu={Properties:{allowFullScreen:ou,allowTransparency:lu,async:ou,autoPlay:ou,capture:ou,checked:ru|ou,cols:iu,contentEditable:lu,controls:ou,default:ou,defer:ou,disabled:ou,download:Mt.injection.HAS_OVERLOADED_BOOLEAN_VALUE,draggable:lu,formNoValidate:ou,hidden:ou,loop:ou,multiple:ru|ou,muted:ru|ou,noValidate:ou,open:ou,playsInline:ou,readOnly:ou,required:ou,reversed:ou,rows:iu,rowSpan:au,scoped:ou,seamless:ou,selected:ru|ou,size:iu,start:au,span:iu,spellCheck:lu,style:0,itemScope:ou,acceptCharset:0,className:0,htmlFor:0,httpEquiv:0,value:lu},DOMAttributeNames:{acceptCharset:"accept-charset",className:"class",htmlFor:"for",httpEquiv:"http-equiv"},DOMMutationMethods:{value:function(e,t){if(null==t)return e.removeAttribute("value");"number"!==e.type||!1===e.hasAttribute("value")?e.setAttribute("value",""+t):e.validity&&!e.validity.badInput&&e.ownerDocument.activeElement!==e&&e.setAttribute("value",""+t)}}},su=Mt.injection.HAS_STRING_BOOLEAN_VALUE,cu={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},pu={Properties:{autoReverse:su,externalResourcesRequired:su,preserveAlpha:su},DOMAttributeNames:{autoReverse:"autoReverse",externalResourcesRequired:"externalResourcesRequired",preserveAlpha:"preserveAlpha"},DOMAttributeNamespaces:{xlinkActuate:cu.xlink,xlinkArcrole:cu.xlink,xlinkHref:cu.xlink,xlinkRole:cu.xlink,xlinkShow:cu.xlink,xlinkTitle:cu.xlink,xlinkType:cu.xlink,xmlBase:cu.xml,xmlLang:cu.xml,xmlSpace:cu.xml}},fu=/[\-\:]([a-z])/g;"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode x-height xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xmlns:xlink xml:lang xml:space".split(" ").forEach(function(e){var t=e.replace(fu,ct);pu.Properties[t]=0,pu.DOMAttributeNames[t]=e}),Mt.injection.injectDOMPropertyConfig(uu),Mt.injection.injectDOMPropertyConfig(pu);var du=ni.injectInternals,yu=jt.ELEMENT_NODE,hu=jt.TEXT_NODE,mu=jt.COMMENT_NODE,vu=jt.DOCUMENT_NODE,gu=jt.DOCUMENT_FRAGMENT_NODE,bu=Mt.ROOT_ATTRIBUTE_NAME,Pu=Ot.getChildNamespace,Cu=dr.createElement,ku=dr.createTextNode,Eu=dr.setInitialProperties,wu=dr.diffProperties,_u=dr.updateProperties,Tu=dr.diffHydratedProperties,Su=dr.diffHydratedText,Ou=dr.warnForDeletedHydratableElement,xu=dr.warnForDeletedHydratableText,Nu=dr.warnForInsertedHydratedElement,Du=dr.warnForInsertedHydratedText,Ru=qt.precacheFiberNode,Iu=qt.updateFiberProps;dn.injection.injectFiberControlledHostComponent(dr),Ce._injectFiber(function(e){return Mu.findHostInstance(e)});var Au=null,Fu=null,Mu=function(e){var t=e.getPublicInstance;e=de(e);var n=e.scheduleUpdate,r=e.getPriorityContext;return{createContainer:function(e){var t=fo();return e={current:t,containerInfo:e,isScheduled:!1,nextScheduledRoot:null,context:null,pendingContext:null},t.stateNode=e},updateContainer:function(e,t,o,a){var i=t.current;o=he(o),null===t.context?t.context=o:t.pendingContext=o,t=a,a=r(i,Or.enableAsyncSubtreeAPI&&null!=e&&null!=e.type&&null!=e.type.prototype&&!0===e.type.prototype.unstable_isAsyncReactComponent),e={element:e},Ji(i,e,void 0===t?null:t,a),n(i,a)},batchedUpdates:e.batchedUpdates,unbatchedUpdates:e.unbatchedUpdates,deferredUpdates:e.deferredUpdates,flushSync:e.flushSync,getPublicRootInstance:function(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case rl:return t(e.child.stateNode);default:return e.child.stateNode}},findHostInstance:function(e){return e=ol(e),null===e?null:e.stateNode},findHostInstanceWithNoPortals:function(e){return e=al(e),null===e?null:e.stateNode}}}({getRootHostContext:function(e){if(e.nodeType===vu)e=(e=e.documentElement)?e.namespaceURI:Pu(null,"");else{var t=e.nodeType===mu?e.parentNode:e;e=t.namespaceURI||null,t=t.tagName,e=Pu(e,t)}return e},getChildHostContext:function(e,t){return Pu(e,t)},getPublicInstance:function(e){return e},prepareForCommit:function(){Au=Nn.isEnabled(),Fu=pl.getSelectionInformation(),Nn.setEnabled(!1)},resetAfterCommit:function(){pl.restoreSelection(Fu),Fu=null,Nn.setEnabled(Au),Au=null},createInstance:function(e,t,n,r,o){return e=Cu(e,t,n,r),Ru(o,e),Iu(e,t),e},appendInitialChild:function(e,t){e.appendChild(t)},finalizeInitialChildren:function(e,t,n,r){Eu(e,t,n,r);e:{switch(t){case"button":case"input":case"select":case"textarea":e=!!n.autoFocus;break e}e=!1}return e},prepareUpdate:function(e,t,n,r,o){return wu(e,t,n,r,o)},commitMount:function(e){e.focus()},commitUpdate:function(e,t,n,r,o){Iu(e,o),_u(e,t,n,r,o)},shouldSetTextContent:function(e,t){return"textarea"===e||"string"==typeof t.children||"number"==typeof t.children||"object"===ht(t.dangerouslySetInnerHTML)&&null!==t.dangerouslySetInnerHTML&&"string"==typeof t.dangerouslySetInnerHTML.__html},resetTextContent:function(e){e.textContent=""},shouldDeprioritizeSubtree:function(e,t){return!!t.hidden},createTextInstance:function(e,t,n,r){return e=ku(e,t),Ru(r,e),e},commitTextUpdate:function(e,t,n){e.nodeValue=n},appendChild:function(e,t){e.appendChild(t)},appendChildToContainer:function(e,t){e.nodeType===mu?e.parentNode.insertBefore(t,e):e.appendChild(t)},insertBefore:function(e,t,n){e.insertBefore(t,n)},insertInContainerBefore:function(e,t,n){e.nodeType===mu?e.parentNode.insertBefore(t,n):e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},removeChildFromContainer:function(e,t){e.nodeType===mu?e.parentNode.removeChild(t):e.removeChild(t)},canHydrateInstance:function(e,t){return e.nodeType===yu&&t===e.nodeName.toLowerCase()},canHydrateTextInstance:function(e,t){return""!==t&&e.nodeType===hu},getNextHydratableSibling:function(e){for(e=e.nextSibling;e&&e.nodeType!==yu&&e.nodeType!==hu;)e=e.nextSibling;return e},getFirstHydratableChild:function(e){for(e=e.firstChild;e&&e.nodeType!==yu&&e.nodeType!==hu;)e=e.nextSibling;return e},hydrateInstance:function(e,t,n,r,o,a){return Ru(a,e),Iu(e,n),Tu(e,t,n,o,r)},hydrateTextInstance:function(e,t,n){return Ru(n,e),Su(e,t)},didNotHydrateInstance:function(e,t){1===t.nodeType?Ou(e,t):xu(e,t)},didNotFindHydratableInstance:function(e,t,n){Nu(e,t,n)},didNotFindHydratableTextInstance:function(e,t){Du(e,t)},scheduleDeferredCallback:Sr.rIC,useSyncScheduling:!0});hn.injection.injectFiberBatchedUpdates(Mu.batchedUpdates);var Lu={createPortal:yt,hydrate:function(e,t,n){return dt(null,e,t,!0,n)},render:function(e,t,n){return dt(null,e,t,!1,n)},unstable_renderSubtreeIntoContainer:function(e,t,n,o){return null!=e&&Qt.has(e)||r("38"),dt(e,t,n,!1,o)},unmountComponentAtNode:function(e){return pt(e)||r("40"),!!e._reactRootContainer&&(Mu.unbatchedUpdates(function(){dt(null,null,e,!1,function(){e._reactRootContainer=null})}),!0)},findDOMNode:Ce,unstable_createPortal:yt,unstable_batchedUpdates:hn.batchedUpdates,unstable_deferredUpdates:Mu.deferredUpdates,flushSync:Mu.flushSync,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:{EventPluginHub:kn,EventPluginRegistry:Rt,EventPropagators:ml,ReactControlledComponent:dn,ReactDOMComponentTree:qt,ReactDOMEventListener:Pn}};du({findFiberByHostInstance:qt.getClosestInstanceFromNode,findHostInstanceByFiber:Mu.findHostInstance,bundleType:0,version:"16.0.0",rendererPackageName:"react-dom"}),e.exports=Lu},function(e,t,n){"use strict";var r=!("undefined"==typeof window||!window.document||!window.document.createElement),o={canUseDOM:r,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:r&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:r&&!!window.screen,isInWorker:!r};e.exports=o},function(e,t,n){"use strict";var r=n(3),o={listen:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!1),{remove:function(){e.removeEventListener(t,n,!1)}}):e.attachEvent?(e.attachEvent("on"+t,n),{remove:function(){e.detachEvent("on"+t,n)}}):void 0},capture:function(e,t,n){return e.addEventListener?(e.addEventListener(t,n,!0),{remove:function(){e.removeEventListener(t,n,!0)}}):{remove:r}},registerDefault:function(){}};e.exports=o},function(e,t,n){"use strict";function r(e,t){return e===t?0!==e||0!==t||1/e==1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!==(void 0===e?"undefined":a(e))||null===e||"object"!==(void 0===t?"undefined":a(t))||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var l=0;l0&&void 0!==arguments[0]?arguments[0]:"player";return n.player?n.player.getInternalPlayer(e):null},n.seekTo=function(e){if(!n.player)return null;n.player.seekTo(e)},n.wrapperRef=function(e){n.wrapper=e},n.activePlayerRef=function(e){n.player=e},r=t,i(n,r)}return l(ReactPlayer,e),s(ReactPlayer,[{key:"componentDidMount",value:function(){if(this.props.progressFrequency){console.warn("ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead","font-weight: bold","","font-weight: bold","")}}},{key:"shouldComponentUpdate",value:function(e){return!(0,d.isEqual)(this.props,e)}},{key:"componentWillUpdate",value:function(e){this.config=(0,d.getConfig)(e,f.defaultProps)}},{key:"getActivePlayer",value:function(e){var t=!0,n=!1,r=void 0;try{for(var o,a=h.default[Symbol.iterator]();!(t=(o=a.next()).done);t=!0){var i=o.value;if(i.canPlay(e))return i}}catch(e){n=!0,r=e}finally{try{!t&&a.return&&a.return()}finally{if(n)throw r}}return g.FilePlayer}},{key:"renderActivePlayer",value:function(e){if(!e)return null;var t=this.getActivePlayer(e);return p.default.createElement(v.default,u({},this.props,{key:t.displayName,ref:this.activePlayerRef,config:this.config,activePlayer:t}))}},{key:"sortPlayers",value:function(e,t){return e&&t?e.key 2 && arguments[2] !== undefined ? arguments[2] : null;\n var isLoaded = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function () {\n return true;\n };\n\n if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {\n return Promise.resolve(window[sdkGlobal]);\n }\n return new Promise(function (resolve, reject) {\n if (sdkReady) {\n var previousOnReady = window[sdkReady];\n window[sdkReady] = function () {\n if (previousOnReady) previousOnReady();\n resolve(window[sdkGlobal]);\n };\n }\n (0, _loadScript2['default'])(url, function (err) {\n if (err) reject(err);\n if (!sdkReady) {\n resolve(window[sdkGlobal]);\n }\n });\n });\n}\n\nfunction getConfig(props, defaultProps, showWarning) {\n var config = (0, _deepmerge2['default'])(defaultProps.config, props.config);\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _props.DEPRECATED_CONFIG_PROPS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var p = _step.value;\n\n if (props[p]) {\n var key = p.replace(/Config$/, '');\n config = (0, _deepmerge2['default'])(config, _defineProperty({}, key, props[p]));\n if (showWarning) {\n var link = 'https://github.com/CookPete/react-player#config-prop';\n var message = 'ReactPlayer: %c' + p + ' %cis deprecated, please use the config prop instead \\u2013 ' + link;\n console.warn(message, 'font-weight: bold', '');\n }\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return config;\n}\n\nfunction omit(object) {\n var _ref;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var omitKeys = (_ref = []).concat.apply(_ref, arrays);\n var output = {};\n var keys = Object.keys(object);\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = keys[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var key = _step2.value;\n\n if (omitKeys.indexOf(key) === -1) {\n output[key] = object[key];\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2['return']) {\n _iterator2['return']();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return output;\n}\n\nfunction callPlayer(method) {\n var _player;\n\n // Util method for calling a method on this.player\n // but guard against errors and console.warn instead\n if (!this.player || !this.player[method]) {\n var message = 'ReactPlayer: ' + this.constructor.displayName + ' player could not call %c' + method + '%c \\u2013 ';\n if (!this.player) {\n message += 'The player was not available';\n } else if (!this.player[method]) {\n message += 'The method was not available';\n }\n console.warn(message, 'font-weight: bold', '');\n return null;\n }\n\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return (_player = this.player)[method].apply(_player, args);\n}\n\nfunction isObject(val) {\n return val !== null && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object';\n}\n\n// Deep comparison of two objects but ignoring\n// functions, for use in shouldComponentUpdate\nfunction isEqual(a, b) {\n if (typeof a === 'function' && typeof b === 'function') {\n return true;\n }\n if (a instanceof Array && b instanceof Array) {\n if (a.length !== b.length) {\n return false;\n }\n for (var i = 0; i !== a.length; i++) {\n if (!isEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n if (isObject(a) && isObject(b)) {\n if (Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n var _iteratorNormalCompletion3 = true;\n var _didIteratorError3 = false;\n var _iteratorError3 = undefined;\n\n try {\n for (var _iterator3 = Object.keys(a)[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n var key = _step3.value;\n\n if (!isEqual(a[key], b[key])) {\n return false;\n }\n }\n } catch (err) {\n _didIteratorError3 = true;\n _iteratorError3 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion3 && _iterator3['return']) {\n _iterator3['return']();\n }\n } finally {\n if (_didIteratorError3) {\n throw _iteratorError3;\n }\n }\n }\n\n return true;\n }\n return a === b;\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nexports['default'] = createSinglePlayer;\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _props2 = __webpack_require__(4);\n\nvar _utils = __webpack_require__(1);\n\nvar _Player = __webpack_require__(6);\n\nvar _Player2 = _interopRequireDefault(_Player);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SUPPORTED_PROPS = Object.keys(_props2.propTypes);\n\nfunction createSinglePlayer(activePlayer) {\n var _class, _temp2;\n\n return _temp2 = _class = function (_Component) {\n _inherits(SinglePlayer, _Component);\n\n function SinglePlayer() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, SinglePlayer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = SinglePlayer.__proto__ || Object.getPrototypeOf(SinglePlayer)).call.apply(_ref, [this].concat(args))), _this), _this.ref = function (player) {\n _this.player = player;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(SinglePlayer, [{\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps) {\n return !(0, _utils.isEqual)(this.props, nextProps);\n }\n }, {\n key: 'componentWillUpdate',\n value: function componentWillUpdate(nextProps) {\n this.config = (0, _utils.getConfig)(nextProps, _props2.defaultProps);\n }\n }, {\n key: 'render',\n value: function render() {\n if (!activePlayer.canPlay(this.props.url)) {\n return null;\n }\n var _props = this.props,\n style = _props.style,\n width = _props.width,\n height = _props.height,\n Wrapper = _props.wrapper;\n\n var otherProps = (0, _utils.omit)(this.props, SUPPORTED_PROPS, _props2.DEPRECATED_CONFIG_PROPS);\n return _react2['default'].createElement(\n Wrapper,\n _extends({ style: _extends({}, style, { width: width, height: height }) }, otherProps),\n _react2['default'].createElement(_Player2['default'], _extends({}, this.props, {\n ref: this.ref,\n activePlayer: activePlayer,\n config: (0, _utils.getConfig)(this.props, _props2.defaultProps)\n }))\n );\n }\n }]);\n\n return SinglePlayer;\n }(_react.Component), _class.displayName = activePlayer.displayName + 'Player', _class.propTypes = _props2.propTypes, _class.defaultProps = _props2.defaultProps, _class.canPlay = activePlayer.canPlay, _temp2;\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DEPRECATED_CONFIG_PROPS = exports.defaultProps = exports.propTypes = undefined;\n\nvar _propTypes = __webpack_require__(27);\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar string = _propTypes2['default'].string,\n bool = _propTypes2['default'].bool,\n number = _propTypes2['default'].number,\n array = _propTypes2['default'].array,\n oneOfType = _propTypes2['default'].oneOfType,\n shape = _propTypes2['default'].shape,\n object = _propTypes2['default'].object,\n func = _propTypes2['default'].func;\nvar propTypes = exports.propTypes = {\n url: oneOfType([string, array]),\n playing: bool,\n loop: bool,\n controls: bool,\n volume: number,\n muted: bool,\n playbackRate: number,\n width: oneOfType([string, number]),\n height: oneOfType([string, number]),\n style: object,\n progressInterval: number,\n playsinline: bool,\n wrapper: oneOfType([string, func]),\n config: shape({\n soundcloud: shape({\n options: object\n }),\n youtube: shape({\n playerVars: object,\n preload: bool\n }),\n facebook: shape({\n appId: string\n }),\n dailymotion: shape({\n params: object,\n preload: bool\n }),\n vimeo: shape({\n iframeParams: object,\n preload: bool\n }),\n file: shape({\n attributes: object,\n tracks: array,\n forceAudio: bool,\n forceHLS: bool,\n forceDASH: bool,\n hlsOptions: object\n }),\n wistia: shape({\n options: object\n }),\n mixcloud: shape({\n options: object\n }),\n twitch: shape({\n options: object\n })\n }),\n onReady: func,\n onStart: func,\n onPlay: func,\n onPause: func,\n onBuffer: func,\n onEnded: func,\n onError: func,\n onDuration: func,\n onSeek: func,\n onProgress: func\n};\n\nvar defaultProps = exports.defaultProps = {\n playing: false,\n loop: false,\n controls: false,\n volume: null,\n muted: false,\n playbackRate: 1,\n width: '640px',\n height: '360px',\n style: {},\n progressInterval: 1000,\n playsinline: false,\n wrapper: 'div',\n config: {\n soundcloud: {\n options: {\n visual: true, // Undocumented, but makes player fill container and look better\n buying: false,\n liking: false,\n download: false,\n sharing: false,\n show_comments: false,\n show_playcount: false\n }\n },\n youtube: {\n playerVars: {\n autoplay: 0,\n playsinline: 1,\n showinfo: 0,\n rel: 0,\n iv_load_policy: 3,\n modestbranding: 1\n },\n preload: false\n },\n facebook: {\n appId: '1309697205772819'\n },\n dailymotion: {\n params: {\n api: 1,\n 'endscreen-enable': false\n },\n preload: false\n },\n vimeo: {\n playerOptions: {\n autopause: false,\n autoplay: false,\n byline: false,\n portrait: false,\n title: false\n },\n preload: false\n },\n file: {\n attributes: {},\n tracks: [],\n forceAudio: false,\n forceHLS: false,\n forceDASH: false,\n hlsOptions: {}\n },\n wistia: {\n options: {}\n },\n mixcloud: {\n options: {\n hide_cover: 1\n }\n },\n twitch: {\n options: {}\n }\n },\n onReady: function onReady() {},\n onStart: function onStart() {},\n onPlay: function onPlay() {},\n onPause: function onPause() {},\n onBuffer: function onBuffer() {},\n onEnded: function onEnded() {},\n onError: function onError() {},\n onDuration: function onDuration() {},\n onSeek: function onSeek() {},\n onProgress: function onProgress() {}\n};\n\nvar DEPRECATED_CONFIG_PROPS = exports.DEPRECATED_CONFIG_PROPS = ['soundcloudConfig', 'youtubeConfig', 'facebookConfig', 'dailymotionConfig', 'vimeoConfig', 'fileConfig', 'wistiaConfig'];\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (false) {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _props2 = __webpack_require__(4);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SEEK_ON_PLAY_EXPIRY = 5000;\n\nvar Player = function (_Component) {\n _inherits(Player, _Component);\n\n function Player() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Player);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Player.__proto__ || Object.getPrototypeOf(Player)).call.apply(_ref, [this].concat(args))), _this), _this.mounted = false, _this.isReady = false, _this.isPlaying = false, _this.isLoading = true, _this.startOnPlay = true, _this.seekOnPlay = null, _this.onDurationCalled = false, _this.getInternalPlayer = function (key) {\n if (!_this.player) return null;\n return _this.player[key];\n }, _this.progress = function () {\n if (_this.props.url && _this.player && _this.isReady) {\n var playedSeconds = _this.getCurrentTime() || 0;\n var loadedSeconds = _this.getSecondsLoaded();\n var duration = _this.getDuration();\n if (duration) {\n var progress = {\n playedSeconds: playedSeconds,\n played: playedSeconds / duration\n };\n if (loadedSeconds !== null) {\n progress.loadedSeconds = loadedSeconds;\n progress.loaded = loadedSeconds / duration;\n }\n // Only call onProgress if values have changed\n if (progress.played !== _this.prevPlayed || progress.loaded !== _this.prevLoaded) {\n _this.props.onProgress(progress);\n }\n _this.prevPlayed = progress.played;\n _this.prevLoaded = progress.loaded;\n }\n }\n _this.progressTimeout = setTimeout(_this.progress, _this.props.progressFrequency || _this.props.progressInterval);\n }, _this.onReady = function () {\n if (!_this.mounted) return;\n _this.isReady = true;\n _this.isLoading = false;\n var _this$props = _this.props,\n onReady = _this$props.onReady,\n playing = _this$props.playing,\n volume = _this$props.volume,\n muted = _this$props.muted;\n\n onReady();\n if (muted || volume !== null) {\n _this.player.setVolume(muted ? 0 : volume);\n }\n if (playing) {\n _this.player.play();\n }\n _this.onDurationCheck();\n }, _this.onPlay = function () {\n _this.isPlaying = true;\n _this.isLoading = false;\n var _this$props2 = _this.props,\n onStart = _this$props2.onStart,\n onPlay = _this$props2.onPlay,\n playbackRate = _this$props2.playbackRate;\n\n if (_this.startOnPlay) {\n if (_this.player.setPlaybackRate) {\n _this.player.setPlaybackRate(playbackRate);\n }\n onStart();\n _this.startOnPlay = false;\n }\n onPlay();\n if (_this.seekOnPlay) {\n _this.seekTo(_this.seekOnPlay);\n _this.seekOnPlay = null;\n }\n _this.onDurationCheck();\n }, _this.onPause = function (e) {\n _this.isPlaying = false;\n if (!_this.isLoading) {\n _this.props.onPause(e);\n }\n }, _this.onEnded = function () {\n var _this$props3 = _this.props,\n activePlayer = _this$props3.activePlayer,\n loop = _this$props3.loop,\n onEnded = _this$props3.onEnded;\n\n if (activePlayer.loopOnEnded && loop) {\n _this.seekTo(0);\n }\n if (!loop) {\n _this.isPlaying = false;\n }\n onEnded();\n }, _this.onDurationCheck = function () {\n clearTimeout(_this.durationCheckTimeout);\n var duration = _this.getDuration();\n if (duration) {\n if (!_this.onDurationCalled) {\n _this.props.onDuration(duration);\n _this.onDurationCalled = true;\n }\n } else {\n _this.durationCheckTimeout = setTimeout(_this.onDurationCheck, 100);\n }\n }, _this.ref = function (player) {\n if (player) {\n _this.player = player;\n }\n }, _temp), _possibleConstructorReturn(_this, _ret);\n } // Track playing state internally to prevent bugs\n // Use isLoading to prevent onPause when switching URL\n\n\n _createClass(Player, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.mounted = true;\n this.player.load(this.props.url);\n this.progress();\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n clearTimeout(this.progressTimeout);\n if (this.isReady) {\n this.player.stop();\n }\n this.mounted = false;\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n // Invoke player methods based on incoming props\n var _props = this.props,\n url = _props.url,\n playing = _props.playing,\n volume = _props.volume,\n muted = _props.muted,\n playbackRate = _props.playbackRate;\n\n if (url !== nextProps.url) {\n this.isLoading = true;\n this.startOnPlay = true;\n this.onDurationCalled = false;\n this.player.load(nextProps.url, this.isReady);\n }\n if (!playing && nextProps.playing && !this.isPlaying) {\n this.player.play();\n }\n if (playing && !nextProps.playing && this.isPlaying) {\n this.player.pause();\n }\n if (nextProps.volume !== null) {\n if (volume !== nextProps.volume && !nextProps.muted) {\n this.player.setVolume(nextProps.volume);\n }\n if (muted !== nextProps.muted) {\n this.player.setVolume(nextProps.muted ? 0 : nextProps.volume);\n }\n }\n if (playbackRate !== nextProps.playbackRate && this.player.setPlaybackRate) {\n this.player.setPlaybackRate(nextProps.playbackRate);\n }\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n if (!this.isReady) return null;\n return this.player.getDuration();\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n if (!this.isReady) return null;\n return this.player.getCurrentTime();\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n if (!this.isReady) return null;\n return this.player.getSecondsLoaded();\n }\n }, {\n key: 'seekTo',\n value: function seekTo(amount) {\n var _this2 = this;\n\n // When seeking before player is ready, store value and seek later\n if (!this.isReady && amount !== 0) {\n this.seekOnPlay = amount;\n setTimeout(function () {\n _this2.seekOnPlay = null;\n }, SEEK_ON_PLAY_EXPIRY);\n return;\n }\n if (amount > 0 && amount < 1) {\n // Convert fraction to seconds based on duration\n var duration = this.player.getDuration();\n if (!duration) {\n console.warn('ReactPlayer: could not seek using fraction – duration not yet available');\n return;\n }\n this.player.seekTo(duration * amount);\n return;\n }\n this.player.seekTo(amount);\n }\n }, {\n key: 'render',\n value: function render() {\n var Player = this.props.activePlayer;\n return _react2['default'].createElement(Player, _extends({}, this.props, {\n ref: this.ref,\n onReady: this.onReady,\n onPlay: this.onPlay,\n onPause: this.onPause,\n onEnded: this.onEnded\n }));\n }\n }]);\n\n return Player;\n}(_react.Component);\n\nPlayer.displayName = 'Player';\nPlayer.propTypes = _props2.propTypes;\nPlayer.defaultProps = _props2.defaultProps;\nexports['default'] = Player;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n\n/* eslint-disable no-unused-vars */\n\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar emptyObject = {};\n\nif (false) {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.YouTube = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://www.youtube.com/iframe_api';\nvar SDK_GLOBAL = 'YT';\nvar SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady';\nvar MATCH_URL = /(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})/;\n\nvar YouTube = exports.YouTube = function (_Component) {\n _inherits(YouTube, _Component);\n\n function YouTube() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, YouTube);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = YouTube.__proto__ || Object.getPrototypeOf(YouTube)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.onStateChange = function (_ref2) {\n var data = _ref2.data;\n var _this$props = _this.props,\n onPlay = _this$props.onPlay,\n onPause = _this$props.onPause,\n onBuffer = _this$props.onBuffer,\n onEnded = _this$props.onEnded,\n onReady = _this$props.onReady;\n var _window$SDK_GLOBAL$Pl = window[SDK_GLOBAL].PlayerState,\n PLAYING = _window$SDK_GLOBAL$Pl.PLAYING,\n PAUSED = _window$SDK_GLOBAL$Pl.PAUSED,\n BUFFERING = _window$SDK_GLOBAL$Pl.BUFFERING,\n ENDED = _window$SDK_GLOBAL$Pl.ENDED,\n CUED = _window$SDK_GLOBAL$Pl.CUED;\n\n if (data === PLAYING) onPlay();\n if (data === PAUSED) onPause();\n if (data === BUFFERING) onBuffer();\n if (data === ENDED) onEnded();\n if (data === CUED) onReady();\n }, _this.ref = function (container) {\n _this.container = container;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(YouTube, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n var _props = this.props,\n playsinline = _props.playsinline,\n controls = _props.controls,\n config = _props.config,\n _onError = _props.onError;\n\n var id = url && url.match(MATCH_URL)[1];\n if (isReady) {\n this.player.cueVideoById({\n videoId: id,\n startSeconds: (0, _utils.parseStartTime)(url)\n });\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, function (YT) {\n return YT.loaded;\n }).then(function (YT) {\n if (!_this2.container) return;\n _this2.player = new YT.Player(_this2.container, {\n width: '100%',\n height: '100%',\n videoId: id,\n playerVars: _extends({\n controls: controls ? 1 : 0,\n start: (0, _utils.parseStartTime)(url),\n origin: window.location.origin,\n playsinline: playsinline\n }, config.youtube.playerVars),\n events: {\n onReady: _this2.props.onReady,\n onStateChange: _this2.onStateChange,\n onError: function onError(event) {\n return _onError(event.data);\n }\n }\n });\n }, _onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('playVideo');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pauseVideo');\n }\n }, {\n key: 'stop',\n value: function stop() {\n if (!document.body.contains(this.callPlayer('getIframe'))) return;\n this.callPlayer('stopVideo');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(amount) {\n this.callPlayer('seekTo', amount);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction * 100);\n }\n }, {\n key: 'setPlaybackRate',\n value: function setPlaybackRate(rate) {\n this.callPlayer('setPlaybackRate', rate);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('getDuration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('getCurrentTime');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.callPlayer('getVideoLoadedFraction') * this.getDuration();\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%'\n }, this.props.style);\n return _react2['default'].createElement(\n 'div',\n { style: style },\n _react2['default'].createElement('div', { ref: this.ref })\n );\n }\n }]);\n\n return YouTube;\n}(_react.Component);\n\nYouTube.displayName = 'YouTube';\n\nYouTube.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nYouTube.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(YouTube);\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.SoundCloud = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://w.soundcloud.com/player/api.js';\nvar SDK_GLOBAL = 'SC';\nvar MATCH_URL = /(soundcloud\\.com|snd\\.sc)\\/.+$/;\n\nvar SoundCloud = exports.SoundCloud = function (_Component) {\n _inherits(SoundCloud, _Component);\n\n function SoundCloud() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, SoundCloud);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = SoundCloud.__proto__ || Object.getPrototypeOf(SoundCloud)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.fractionLoaded = null, _this.ref = function (iframe) {\n _this.iframe = iframe;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(SoundCloud, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (SC) {\n if (!_this2.iframe) return;\n var _SC$Widget$Events = SC.Widget.Events,\n PLAY = _SC$Widget$Events.PLAY,\n PLAY_PROGRESS = _SC$Widget$Events.PLAY_PROGRESS,\n PAUSE = _SC$Widget$Events.PAUSE,\n FINISH = _SC$Widget$Events.FINISH,\n ERROR = _SC$Widget$Events.ERROR;\n\n if (!isReady) {\n _this2.player = SC.Widget(_this2.iframe);\n _this2.player.bind(PLAY, _this2.props.onPlay);\n _this2.player.bind(PAUSE, _this2.props.onPause);\n _this2.player.bind(PLAY_PROGRESS, function (e) {\n _this2.currentTime = e.currentPosition / 1000;\n _this2.fractionLoaded = e.loadedProgress;\n });\n _this2.player.bind(FINISH, function () {\n return _this2.props.onEnded();\n });\n _this2.player.bind(ERROR, function (e) {\n return _this2.props.onError(e);\n });\n }\n _this2.player.load(url, _extends({}, _this2.props.config.soundcloud.options, {\n callback: function callback() {\n _this2.player.getDuration(function (duration) {\n _this2.duration = duration / 1000;\n _this2.props.onReady();\n });\n }\n }));\n });\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seekTo', seconds * 1000);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction * 100);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.fractionLoaded * this.duration;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%'\n }, this.props.style);\n return _react2['default'].createElement('iframe', {\n ref: this.ref,\n src: 'https://w.soundcloud.com/player/?url=' + encodeURIComponent(this.props.url),\n style: style,\n frameBorder: 0\n });\n }\n }]);\n\n return SoundCloud;\n}(_react.Component);\n\nSoundCloud.displayName = 'SoundCloud';\n\nSoundCloud.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nSoundCloud.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(SoundCloud);\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Vimeo = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://player.vimeo.com/api/player.js';\nvar SDK_GLOBAL = 'Vimeo';\nvar MATCH_URL = /vimeo\\.com\\//;\n\nvar Vimeo = exports.Vimeo = function (_Component) {\n _inherits(Vimeo, _Component);\n\n function Vimeo() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Vimeo);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Vimeo.__proto__ || Object.getPrototypeOf(Vimeo)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.secondsLoaded = null, _this.ref = function (container) {\n _this.container = container;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Vimeo, [{\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n this.duration = null;\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Vimeo) {\n if (!_this2.container) return;\n _this2.player = new Vimeo.Player(_this2.container, _extends({}, _this2.props.config.vimeo.playerOptions, {\n url: url,\n loop: _this2.props.loop\n }));\n _this2.player.ready().then(function () {\n var iframe = _this2.container.querySelector('iframe');\n iframe.style.width = '100%';\n iframe.style.height = '100%';\n })['catch'](_this2.props.onError);\n _this2.player.on('loaded', function () {\n _this2.props.onReady();\n _this2.player.getDuration().then(function (duration) {\n _this2.duration = duration;\n });\n });\n _this2.player.on('play', _this2.props.onPlay);\n _this2.player.on('pause', _this2.props.onPause);\n _this2.player.on('seeked', function (e) {\n return _this2.props.onSeek(e.seconds);\n });\n _this2.player.on('ended', _this2.props.onEnded);\n _this2.player.on('error', _this2.props.onError);\n _this2.player.on('timeupdate', function (_ref2) {\n var seconds = _ref2.seconds;\n\n _this2.currentTime = seconds;\n });\n _this2.player.on('progress', function (_ref3) {\n var seconds = _ref3.seconds;\n\n _this2.secondsLoaded = seconds;\n });\n }, this.props.onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.callPlayer('unload');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('setCurrentTime', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.secondsLoaded;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n backgroundColor: 'black'\n }, this.props.style);\n return _react2['default'].createElement('div', {\n key: this.props.url,\n ref: this.ref,\n style: style\n });\n }\n }]);\n\n return Vimeo;\n}(_react.Component);\n\nVimeo.displayName = 'Vimeo';\n\nVimeo.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nexports['default'] = (0, _singlePlayer2['default'])(Vimeo);\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DailyMotion = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = 'https://api.dmcdn.net/all.js';\nvar SDK_GLOBAL = 'DM';\nvar SDK_GLOBAL_READY = 'dmAsyncInit';\nvar MATCH_URL = /dailymotion\\.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/;\n\nvar DailyMotion = exports.DailyMotion = function (_Component) {\n _inherits(DailyMotion, _Component);\n\n function DailyMotion() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, DailyMotion);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = DailyMotion.__proto__ || Object.getPrototypeOf(DailyMotion)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.onDurationChange = function () {\n var duration = _this.getDuration();\n _this.props.onDuration(duration);\n }, _this.ref = function (container) {\n _this.container = container;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(DailyMotion, [{\n key: 'parseId',\n value: function parseId(url) {\n var m = url.match(MATCH_URL);\n return m[4] || m[2];\n }\n }, {\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n var _props = this.props,\n controls = _props.controls,\n config = _props.config,\n onError = _props.onError,\n playing = _props.playing;\n\n var id = this.parseId(url);\n if (this.player) {\n this.player.load(id, {\n start: (0, _utils.parseStartTime)(url),\n autoplay: playing\n });\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, function (DM) {\n return DM.player;\n }).then(function (DM) {\n if (!_this2.container) return;\n var Player = DM.player;\n _this2.player = new Player(_this2.container, {\n width: '100%',\n height: '100%',\n video: id,\n params: _extends({\n controls: controls,\n autoplay: _this2.props.playing,\n start: (0, _utils.parseStartTime)(url),\n origin: window.location.origin\n }, config.dailymotion.params),\n events: {\n apiready: _this2.props.onReady,\n seeked: function seeked() {\n return _this2.props.onSeek(_this2.player.currentTime);\n },\n video_end: _this2.props.onEnded,\n durationchange: _this2.onDurationChange,\n pause: _this2.props.onPause,\n playing: _this2.props.onPlay,\n waiting: _this2.props.onBuffer,\n error: function error(event) {\n return onError(event);\n }\n }\n });\n }, onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.player.duration || null;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.player.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.player.bufferedTime;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = _extends({\n width: '100%',\n height: '100%',\n backgroundColor: 'black'\n }, this.props.style);\n return _react2['default'].createElement(\n 'div',\n { style: style },\n _react2['default'].createElement('div', { ref: this.ref })\n );\n }\n }]);\n\n return DailyMotion;\n}(_react.Component);\n\nDailyMotion.displayName = 'DailyMotion';\n\nDailyMotion.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nDailyMotion.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(DailyMotion);\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.FilePlayer = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar AUDIO_EXTENSIONS = /\\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i;\nvar VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)($|\\?)/i;\nvar HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\nvar HLS_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.8.9/hls.min.js';\nvar HLS_GLOBAL = 'Hls';\nvar DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\nvar DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.6.5/dash.all.min.js';\nvar DASH_GLOBAL = 'dashjs';\n\nfunction canPlay(url) {\n if (url instanceof Array) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = url[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var item = _step.value;\n\n if (typeof item === 'string' && canPlay(item)) {\n return true;\n }\n if (canPlay(item.src)) {\n return true;\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return false;\n }\n return AUDIO_EXTENSIONS.test(url) || VIDEO_EXTENSIONS.test(url) || HLS_EXTENSIONS.test(url) || DASH_EXTENSIONS.test(url);\n}\n\nvar FilePlayer = exports.FilePlayer = function (_Component) {\n _inherits(FilePlayer, _Component);\n\n function FilePlayer() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, FilePlayer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = FilePlayer.__proto__ || Object.getPrototypeOf(FilePlayer)).call.apply(_ref, [this].concat(args))), _this), _this.onSeek = function (e) {\n _this.props.onSeek(e.target.currentTime);\n }, _this.renderSource = function (source, index) {\n if (typeof source === 'string') {\n return _react2['default'].createElement('source', { key: index, src: source });\n }\n return _react2['default'].createElement('source', _extends({ key: index }, source));\n }, _this.renderTrack = function (track, index) {\n return _react2['default'].createElement('track', _extends({ key: index }, track));\n }, _this.ref = function (player) {\n _this.player = player;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(FilePlayer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.addListeners();\n }\n }, {\n key: 'componentWillReceiveProps',\n value: function componentWillReceiveProps(nextProps) {\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(nextProps)) {\n this.removeListeners();\n }\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate(prevProps) {\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {\n this.addListeners();\n }\n }\n }, {\n key: 'componentWillUnmount',\n value: function componentWillUnmount() {\n this.removeListeners();\n }\n }, {\n key: 'addListeners',\n value: function addListeners() {\n var _props = this.props,\n onReady = _props.onReady,\n onPlay = _props.onPlay,\n onPause = _props.onPause,\n onEnded = _props.onEnded,\n onError = _props.onError,\n playsinline = _props.playsinline;\n\n this.player.addEventListener('canplay', onReady);\n this.player.addEventListener('play', onPlay);\n this.player.addEventListener('pause', onPause);\n this.player.addEventListener('seeked', this.onSeek);\n this.player.addEventListener('ended', onEnded);\n this.player.addEventListener('error', onError);\n if (playsinline) {\n this.player.setAttribute('playsinline', '');\n this.player.setAttribute('webkit-playsinline', '');\n }\n }\n }, {\n key: 'removeListeners',\n value: function removeListeners() {\n var _props2 = this.props,\n onReady = _props2.onReady,\n onPlay = _props2.onPlay,\n onPause = _props2.onPause,\n onEnded = _props2.onEnded,\n onError = _props2.onError;\n\n this.player.removeEventListener('canplay', onReady);\n this.player.removeEventListener('play', onPlay);\n this.player.removeEventListener('pause', onPause);\n this.player.removeEventListener('seeked', this.onSeek);\n this.player.removeEventListener('ended', onEnded);\n this.player.removeEventListener('error', onError);\n }\n }, {\n key: 'shouldUseAudio',\n value: function shouldUseAudio(props) {\n return AUDIO_EXTENSIONS.test(props.url) || props.config.file.forceAudio;\n }\n }, {\n key: 'shouldUseHLS',\n value: function shouldUseHLS(url) {\n var iOS = typeof navigator !== 'undefined' && /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n return HLS_EXTENSIONS.test(url) && !iOS || this.props.config.file.forceHLS;\n }\n }, {\n key: 'shouldUseDASH',\n value: function shouldUseDASH(url) {\n return DASH_EXTENSIONS.test(url) || this.props.config.file.forceDASH;\n }\n }, {\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n if (this.shouldUseHLS(url)) {\n (0, _utils.getSDK)(HLS_SDK_URL, HLS_GLOBAL).then(function (Hls) {\n _this2.hls = new Hls(_this2.props.config.file.hlsOptions);\n _this2.hls.on(Hls.Events.ERROR, function (e, data) {\n _this2.props.onError(e, data, _this2.hls, Hls);\n });\n _this2.hls.loadSource(url);\n _this2.hls.attachMedia(_this2.player);\n });\n }\n if (this.shouldUseDASH(url)) {\n (0, _utils.getSDK)(DASH_SDK_URL, DASH_GLOBAL).then(function (dashjs) {\n _this2.dash = dashjs.MediaPlayer().create();\n _this2.dash.initialize(_this2.player, url, _this2.props.playing);\n _this2.dash.getDebug().setLogToBrowserConsole(false);\n });\n }\n }\n }, {\n key: 'play',\n value: function play() {\n var promise = this.player.play();\n if (promise) {\n promise['catch'](this.props.onError);\n }\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.player.pause();\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.player.removeAttribute('src');\n if (this.hls) {\n this.hls.destroy();\n }\n if (this.dash) {\n this.dash.reset();\n }\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.player.currentTime = seconds;\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.player.volume = fraction;\n }\n }, {\n key: 'setPlaybackRate',\n value: function setPlaybackRate(rate) {\n this.player.playbackRate = rate;\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.player.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.player.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n if (this.player.buffered.length === 0) return 0;\n return this.player.buffered.end(0);\n }\n }, {\n key: 'render',\n value: function render() {\n var _props3 = this.props,\n url = _props3.url,\n loop = _props3.loop,\n controls = _props3.controls,\n config = _props3.config,\n width = _props3.width,\n height = _props3.height;\n\n var useAudio = this.shouldUseAudio(this.props);\n var useHLS = this.shouldUseHLS(url);\n var useDASH = this.shouldUseDASH(url);\n var Element = useAudio ? 'audio' : 'video';\n var src = url instanceof Array || useHLS || useDASH ? undefined : url;\n var style = {\n width: !width || width === 'auto' ? width : '100%',\n height: !height || height === 'auto' ? height : '100%'\n };\n return _react2['default'].createElement(\n Element,\n _extends({\n ref: this.ref,\n src: src,\n style: style,\n preload: 'auto',\n controls: controls,\n loop: loop\n }, config.file.attributes),\n url instanceof Array && url.map(this.renderSource),\n config.file.tracks.map(this.renderTrack)\n );\n }\n }]);\n\n return FilePlayer;\n}(_react.Component);\n\nFilePlayer.displayName = 'FilePlayer';\nFilePlayer.canPlay = canPlay;\nexports['default'] = (0, _singlePlayer2['default'])(FilePlayer);\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = renderReactPlayer;\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = __webpack_require__(16);\n\nvar _ReactPlayer = __webpack_require__(26);\n\nvar _ReactPlayer2 = _interopRequireDefault(_ReactPlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction renderReactPlayer(container, props) {\n (0, _reactDom.render)(_react2['default'].createElement(_ReactPlayer2['default'], props), container);\n}\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*\n React v16.0.0\n react.production.min.js\n\n Copyright (c) 2013-present, Facebook, Inc.\n\n This source code is licensed under the MIT license found in the\n LICENSE file in the root directory of this source tree.\n*/\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar f = __webpack_require__(7),\n p = __webpack_require__(8);__webpack_require__(5);var r = __webpack_require__(3);\nfunction t(a) {\n for (var b = arguments.length - 1, d = \"Minified React error #\" + a + \"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\" + a, e = 0; e < b; e++) {\n d += \"\\x26args[]\\x3d\" + encodeURIComponent(arguments[e + 1]);\n }b = Error(d + \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\");b.name = \"Invariant Violation\";b.framesToPop = 1;throw b;\n}\nvar u = { isMounted: function isMounted() {\n return !1;\n }, enqueueForceUpdate: function enqueueForceUpdate() {}, enqueueReplaceState: function enqueueReplaceState() {}, enqueueSetState: function enqueueSetState() {} };function v(a, b, d) {\n this.props = a;this.context = b;this.refs = p;this.updater = d || u;\n}v.prototype.isReactComponent = {};v.prototype.setState = function (a, b) {\n \"object\" !== (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && \"function\" !== typeof a && null != a ? t(\"85\") : void 0;this.updater.enqueueSetState(this, a, b, \"setState\");\n};v.prototype.forceUpdate = function (a) {\n this.updater.enqueueForceUpdate(this, a, \"forceUpdate\");\n};\nfunction w(a, b, d) {\n this.props = a;this.context = b;this.refs = p;this.updater = d || u;\n}function x() {}x.prototype = v.prototype;var y = w.prototype = new x();y.constructor = w;f(y, v.prototype);y.isPureReactComponent = !0;function z(a, b, d) {\n this.props = a;this.context = b;this.refs = p;this.updater = d || u;\n}var A = z.prototype = new x();A.constructor = z;f(A, v.prototype);A.unstable_isAsyncReactComponent = !0;A.render = function () {\n return this.props.children;\n};\nvar B = { Component: v, PureComponent: w, AsyncComponent: z },\n C = { current: null },\n D = Object.prototype.hasOwnProperty,\n E = \"function\" === typeof Symbol && Symbol[\"for\"] && Symbol[\"for\"](\"react.element\") || 60103,\n F = { key: !0, ref: !0, __self: !0, __source: !0 };function G(a, b, d, e, c, g, k) {\n return { $$typeof: E, type: a, key: b, ref: d, props: k, _owner: g };\n}\nG.createElement = function (a, b, d) {\n var e,\n c = {},\n g = null,\n k = null,\n m = null,\n q = null;if (null != b) for (e in void 0 !== b.ref && (k = b.ref), void 0 !== b.key && (g = \"\" + b.key), m = void 0 === b.__self ? null : b.__self, q = void 0 === b.__source ? null : b.__source, b) {\n D.call(b, e) && !F.hasOwnProperty(e) && (c[e] = b[e]);\n }var l = arguments.length - 2;if (1 === l) c.children = d;else if (1 < l) {\n for (var h = Array(l), n = 0; n < l; n++) {\n h[n] = arguments[n + 2];\n }c.children = h;\n }if (a && a.defaultProps) for (e in l = a.defaultProps, l) {\n void 0 === c[e] && (c[e] = l[e]);\n }return G(a, g, k, m, q, C.current, c);\n};\nG.createFactory = function (a) {\n var b = G.createElement.bind(null, a);b.type = a;return b;\n};G.cloneAndReplaceKey = function (a, b) {\n return G(a.type, b, a.ref, a._self, a._source, a._owner, a.props);\n};\nG.cloneElement = function (a, b, d) {\n var e = f({}, a.props),\n c = a.key,\n g = a.ref,\n k = a._self,\n m = a._source,\n q = a._owner;if (null != b) {\n void 0 !== b.ref && (g = b.ref, q = C.current);void 0 !== b.key && (c = \"\" + b.key);if (a.type && a.type.defaultProps) var l = a.type.defaultProps;for (h in b) {\n D.call(b, h) && !F.hasOwnProperty(h) && (e[h] = void 0 === b[h] && void 0 !== l ? l[h] : b[h]);\n }\n }var h = arguments.length - 2;if (1 === h) e.children = d;else if (1 < h) {\n l = Array(h);for (var n = 0; n < h; n++) {\n l[n] = arguments[n + 2];\n }e.children = l;\n }return G(a.type, c, g, k, m, q, e);\n};\nG.isValidElement = function (a) {\n return \"object\" === (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && null !== a && a.$$typeof === E;\n};var H = \"function\" === typeof Symbol && Symbol.iterator,\n I = \"function\" === typeof Symbol && Symbol[\"for\"] && Symbol[\"for\"](\"react.element\") || 60103;function escape(a) {\n var b = { \"\\x3d\": \"\\x3d0\", \":\": \"\\x3d2\" };return \"$\" + (\"\" + a).replace(/[=:]/g, function (a) {\n return b[a];\n });\n}var J = /\\/+/g,\n K = [];\nfunction L(a, b, d, e) {\n if (K.length) {\n var c = K.pop();c.result = a;c.keyPrefix = b;c.func = d;c.context = e;c.count = 0;return c;\n }return { result: a, keyPrefix: b, func: d, context: e, count: 0 };\n}function M(a) {\n a.result = null;a.keyPrefix = null;a.func = null;a.context = null;a.count = 0;10 > K.length && K.push(a);\n}\nfunction N(a, b, d, e) {\n var c = typeof a === \"undefined\" ? \"undefined\" : _typeof(a);if (\"undefined\" === c || \"boolean\" === c) a = null;if (null === a || \"string\" === c || \"number\" === c || \"object\" === c && a.$$typeof === I) return d(e, a, \"\" === b ? \".\" + O(a, 0) : b), 1;var g = 0;b = \"\" === b ? \".\" : b + \":\";if (Array.isArray(a)) for (var k = 0; k < a.length; k++) {\n c = a[k];var m = b + O(c, k);g += N(c, m, d, e);\n } else if (m = H && a[H] || a[\"@@iterator\"], \"function\" === typeof m) for (a = m.call(a), k = 0; !(c = a.next()).done;) {\n c = c.value, m = b + O(c, k++), g += N(c, m, d, e);\n } else \"object\" === c && (d = \"\" + a, t(\"31\", \"[object Object]\" === d ? \"object with keys {\" + Object.keys(a).join(\", \") + \"}\" : d, \"\"));return g;\n}function O(a, b) {\n return \"object\" === (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && null !== a && null != a.key ? escape(a.key) : b.toString(36);\n}function P(a, b) {\n a.func.call(a.context, b, a.count++);\n}function Q(a, b, d) {\n var e = a.result,\n c = a.keyPrefix;a = a.func.call(a.context, b, a.count++);Array.isArray(a) ? R(a, e, d, r.thatReturnsArgument) : null != a && (G.isValidElement(a) && (a = G.cloneAndReplaceKey(a, c + (!a.key || b && b.key === a.key ? \"\" : (\"\" + a.key).replace(J, \"$\\x26/\") + \"/\") + d)), e.push(a));\n}\nfunction R(a, b, d, e, c) {\n var g = \"\";null != d && (g = (\"\" + d).replace(J, \"$\\x26/\") + \"/\");b = L(b, g, e, c);null == a || N(a, \"\", Q, b);M(b);\n}var S = { forEach: function forEach(a, b, d) {\n if (null == a) return a;b = L(null, null, b, d);null == a || N(a, \"\", P, b);M(b);\n }, map: function map(a, b, d) {\n if (null == a) return a;var e = [];R(a, e, null, b, d);return e;\n }, count: function count(a) {\n return null == a ? 0 : N(a, \"\", r.thatReturnsNull, null);\n }, toArray: function toArray(a) {\n var b = [];R(a, b, null, r.thatReturnsArgument);return b;\n } };\nmodule.exports = { Children: { map: S.map, forEach: S.forEach, count: S.count, toArray: S.toArray, only: function only(a) {\n G.isValidElement(a) ? void 0 : t(\"143\");return a;\n } }, Component: B.Component, PureComponent: B.PureComponent, unstable_AsyncComponent: B.AsyncComponent, createElement: G.createElement, cloneElement: G.cloneElement, isValidElement: G.isValidElement, createFactory: G.createFactory, version: \"16.0.0\", __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: { ReactCurrentOwner: C, assign: f } };\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' || typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function') {\n return;\n }\n if (false) {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (true) {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = __webpack_require__(17);\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/*\n React v16.0.0\n react-dom.production.min.js\n\n Copyright (c) 2013-present, Facebook, Inc.\n\n This source code is licensed under the MIT license found in the\n LICENSE file in the root directory of this source tree.\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar aa = __webpack_require__(0);__webpack_require__(5);var l = __webpack_require__(18),\n n = __webpack_require__(7),\n ba = __webpack_require__(19),\n ca = __webpack_require__(3),\n da = __webpack_require__(8),\n ea = __webpack_require__(20),\n fa = __webpack_require__(21),\n ha = __webpack_require__(24),\n ia = __webpack_require__(25);\nfunction w(a) {\n for (var b = arguments.length - 1, c = \"Minified React error #\" + a + \"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\" + a, d = 0; d < b; d++) {\n c += \"\\x26args[]\\x3d\" + encodeURIComponent(arguments[d + 1]);\n }b = Error(c + \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\");b.name = \"Invariant Violation\";b.framesToPop = 1;throw b;\n}aa ? void 0 : w(\"227\");\nfunction ja(a) {\n switch (a) {case \"svg\":\n return \"http://www.w3.org/2000/svg/";case \"math\":\n return \"http://www.w3.org/1998/Math/MathML/";default:\n return \"http://www.w3.org/1999/xhtml/";}\n}\nvar ka = { Namespaces: { html: \"http://www.w3.org/1999/xhtml/", mathml: \"http://www.w3.org/1998/Math/MathML/", svg: \"http://www.w3.org/2000/svg/" }, getIntrinsicNamespace: ja, getChildNamespace: function getChildNamespace(a, b) {\n return null == a || \"http://www.w3.org/1999/xhtml/" === a ? ja(b) : \"http://www.w3.org/2000/svg/" === a && \"foreignObject\" === b ? \"http://www.w3.org/1999/xhtml/" : a;\n } },\n la = null,\n oa = {};\nfunction pa() {\n if (la) for (var a in oa) {\n var b = oa[a],\n c = la.indexOf(a);-1 < c ? void 0 : w(\"96\", a);if (!qa.plugins[c]) {\n b.extractEvents ? void 0 : w(\"97\", a);qa.plugins[c] = b;c = b.eventTypes;for (var d in c) {\n var e = void 0;var f = c[d],\n g = b,\n h = d;qa.eventNameDispatchConfigs.hasOwnProperty(h) ? w(\"99\", h) : void 0;qa.eventNameDispatchConfigs[h] = f;var k = f.phasedRegistrationNames;if (k) {\n for (e in k) {\n k.hasOwnProperty(e) && ra(k[e], g, h);\n }e = !0;\n } else f.registrationName ? (ra(f.registrationName, g, h), e = !0) : e = !1;e ? void 0 : w(\"98\", d, a);\n }\n }\n }\n}\nfunction ra(a, b, c) {\n qa.registrationNameModules[a] ? w(\"100\", a) : void 0;qa.registrationNameModules[a] = b;qa.registrationNameDependencies[a] = b.eventTypes[c].dependencies;\n}\nvar qa = { plugins: [], eventNameDispatchConfigs: {}, registrationNameModules: {}, registrationNameDependencies: {}, possibleRegistrationNames: null, injectEventPluginOrder: function injectEventPluginOrder(a) {\n la ? w(\"101\") : void 0;la = Array.prototype.slice.call(a);pa();\n }, injectEventPluginsByName: function injectEventPluginsByName(a) {\n var b = !1,\n c;for (c in a) {\n if (a.hasOwnProperty(c)) {\n var d = a[c];oa.hasOwnProperty(c) && oa[c] === d || (oa[c] ? w(\"102\", c) : void 0, oa[c] = d, b = !0);\n }\n }b && pa();\n } },\n sa = qa,\n ta = { children: !0, dangerouslySetInnerHTML: !0, autoFocus: !0, defaultValue: !0, defaultChecked: !0,\n innerHTML: !0, suppressContentEditableWarning: !0, style: !0 };function ua(a, b) {\n return (a & b) === b;\n}\nvar wa = { MUST_USE_PROPERTY: 1, HAS_BOOLEAN_VALUE: 4, HAS_NUMERIC_VALUE: 8, HAS_POSITIVE_NUMERIC_VALUE: 24, HAS_OVERLOADED_BOOLEAN_VALUE: 32, HAS_STRING_BOOLEAN_VALUE: 64, injectDOMPropertyConfig: function injectDOMPropertyConfig(a) {\n var b = wa,\n c = a.Properties || {},\n d = a.DOMAttributeNamespaces || {},\n e = a.DOMAttributeNames || {};a = a.DOMMutationMethods || {};for (var f in c) {\n xa.properties.hasOwnProperty(f) ? w(\"48\", f) : void 0;var g = f.toLowerCase(),\n h = c[f];g = { attributeName: g, attributeNamespace: null, propertyName: f, mutationMethod: null, mustUseProperty: ua(h, b.MUST_USE_PROPERTY),\n hasBooleanValue: ua(h, b.HAS_BOOLEAN_VALUE), hasNumericValue: ua(h, b.HAS_NUMERIC_VALUE), hasPositiveNumericValue: ua(h, b.HAS_POSITIVE_NUMERIC_VALUE), hasOverloadedBooleanValue: ua(h, b.HAS_OVERLOADED_BOOLEAN_VALUE), hasStringBooleanValue: ua(h, b.HAS_STRING_BOOLEAN_VALUE) };1 >= g.hasBooleanValue + g.hasNumericValue + g.hasOverloadedBooleanValue ? void 0 : w(\"50\", f);e.hasOwnProperty(f) && (g.attributeName = e[f]);d.hasOwnProperty(f) && (g.attributeNamespace = d[f]);a.hasOwnProperty(f) && (g.mutationMethod = a[f]);xa.properties[f] = g;\n }\n } },\n xa = { ID_ATTRIBUTE_NAME: \"data-reactid\", ROOT_ATTRIBUTE_NAME: \"data-reactroot\", ATTRIBUTE_NAME_START_CHAR: \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\", ATTRIBUTE_NAME_CHAR: \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\",\n properties: {}, shouldSetAttribute: function shouldSetAttribute(a, b) {\n if (xa.isReservedProp(a) || !(\"o\" !== a[0] && \"O\" !== a[0] || \"n\" !== a[1] && \"N\" !== a[1])) return !1;if (null === b) return !0;switch (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) {case \"boolean\":\n return xa.shouldAttributeAcceptBooleanValue(a);case \"undefined\":case \"number\":case \"string\":case \"object\":\n return !0;default:\n return !1;}\n }, getPropertyInfo: function getPropertyInfo(a) {\n return xa.properties.hasOwnProperty(a) ? xa.properties[a] : null;\n }, shouldAttributeAcceptBooleanValue: function shouldAttributeAcceptBooleanValue(a) {\n if (xa.isReservedProp(a)) return !0;var b = xa.getPropertyInfo(a);\n if (b) return b.hasBooleanValue || b.hasStringBooleanValue || b.hasOverloadedBooleanValue;a = a.toLowerCase().slice(0, 5);return \"data-\" === a || \"aria-\" === a;\n }, isReservedProp: function isReservedProp(a) {\n return ta.hasOwnProperty(a);\n }, injection: wa },\n A = xa,\n E = { IndeterminateComponent: 0, FunctionalComponent: 1, ClassComponent: 2, HostRoot: 3, HostPortal: 4, HostComponent: 5, HostText: 6, CoroutineComponent: 7, CoroutineHandlerPhase: 8, YieldComponent: 9, Fragment: 10 },\n F = { ELEMENT_NODE: 1, TEXT_NODE: 3, COMMENT_NODE: 8, DOCUMENT_NODE: 9, DOCUMENT_FRAGMENT_NODE: 11 },\n ya = E.HostComponent,\n za = E.HostText,\n Aa = F.ELEMENT_NODE,\n Ba = F.COMMENT_NODE,\n Ea = A.ID_ATTRIBUTE_NAME,\n Fa = { hasCachedChildNodes: 1 },\n Ga = Math.random().toString(36).slice(2),\n Ha = \"__reactInternalInstance$\" + Ga,\n Ia = \"__reactEventHandlers$\" + Ga;function La(a) {\n for (var b; b = a._renderedComponent;) {\n a = b;\n }return a;\n}function Ma(a, b) {\n a = La(a);a._hostNode = b;b[Ha] = a;\n}\nfunction Na(a, b) {\n if (!(a._flags & Fa.hasCachedChildNodes)) {\n var c = a._renderedChildren;b = b.firstChild;var d;a: for (d in c) {\n if (c.hasOwnProperty(d)) {\n var e = c[d],\n f = La(e)._domID;if (0 !== f) {\n for (; null !== b; b = b.nextSibling) {\n var g = b,\n h = f;if (g.nodeType === Aa && g.getAttribute(Ea) === \"\" + h || g.nodeType === Ba && g.nodeValue === \" react-text: \" + h + \" \" || g.nodeType === Ba && g.nodeValue === \" react-empty: \" + h + \" \") {\n Ma(e, b);continue a;\n }\n }w(\"32\", f);\n }\n }\n }a._flags |= Fa.hasCachedChildNodes;\n }\n}\nfunction Oa(a) {\n if (a[Ha]) return a[Ha];for (var b = []; !a[Ha];) {\n if (b.push(a), a.parentNode) a = a.parentNode;else return null;\n }var c = a[Ha];if (c.tag === ya || c.tag === za) return c;for (; a && (c = a[Ha]); a = b.pop()) {\n var d = c;b.length && Na(c, a);\n }return d;\n}\nvar G = { getClosestInstanceFromNode: Oa, getInstanceFromNode: function getInstanceFromNode(a) {\n var b = a[Ha];if (b) return b.tag === ya || b.tag === za ? b : b._hostNode === a ? b : null;b = Oa(a);return null != b && b._hostNode === a ? b : null;\n }, getNodeFromInstance: function getNodeFromInstance(a) {\n if (a.tag === ya || a.tag === za) return a.stateNode;void 0 === a._hostNode ? w(\"33\") : void 0;if (a._hostNode) return a._hostNode;for (var b = []; !a._hostNode;) {\n b.push(a), a._hostParent ? void 0 : w(\"34\"), a = a._hostParent;\n }for (; b.length; a = b.pop()) {\n Na(a, a._hostNode);\n }return a._hostNode;\n }, precacheChildNodes: Na,\n precacheNode: Ma, uncacheNode: function uncacheNode(a) {\n var b = a._hostNode;b && (delete b[Ha], a._hostNode = null);\n }, precacheFiberNode: function precacheFiberNode(a, b) {\n b[Ha] = a;\n }, getFiberCurrentPropsFromNode: function getFiberCurrentPropsFromNode(a) {\n return a[Ia] || null;\n }, updateFiberProps: function updateFiberProps(a, b) {\n a[Ia] = b;\n } },\n Pa = { remove: function remove(a) {\n a._reactInternalFiber = void 0;\n }, get: function get(a) {\n return a._reactInternalFiber;\n }, has: function has(a) {\n return void 0 !== a._reactInternalFiber;\n }, set: function set(a, b) {\n a._reactInternalFiber = b;\n } },\n Qa = { ReactCurrentOwner: aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner };\nfunction Ra(a) {\n if (\"function\" === typeof a.getName) return a.getName();if (\"number\" === typeof a.tag) {\n a = a.type;if (\"string\" === typeof a) return a;if (\"function\" === typeof a) return a.displayName || a.name;\n }return null;\n}var J = { NoEffect: 0, PerformedWork: 1, Placement: 2, Update: 4, PlacementAndUpdate: 6, Deletion: 8, ContentReset: 16, Callback: 32, Err: 64, Ref: 128 },\n Sa = E.HostComponent,\n Ta = E.HostRoot,\n Ua = E.HostPortal,\n Va = E.HostText,\n Wa = J.NoEffect,\n Xa = J.Placement;\nfunction Za(a) {\n var b = a;if (a.alternate) for (; b[\"return\"];) {\n b = b[\"return\"];\n } else {\n if ((b.effectTag & Xa) !== Wa) return 1;for (; b[\"return\"];) {\n if (b = b[\"return\"], (b.effectTag & Xa) !== Wa) return 1;\n }\n }return b.tag === Ta ? 2 : 3;\n}function $a(a) {\n 2 !== Za(a) ? w(\"188\") : void 0;\n}\nfunction ab(a) {\n var b = a.alternate;if (!b) return b = Za(a), 3 === b ? w(\"188\") : void 0, 1 === b ? null : a;for (var c = a, d = b;;) {\n var e = c[\"return\"],\n f = e ? e.alternate : null;if (!e || !f) break;if (e.child === f.child) {\n for (var g = e.child; g;) {\n if (g === c) return $a(e), a;if (g === d) return $a(e), b;g = g.sibling;\n }w(\"188\");\n }if (c[\"return\"] !== d[\"return\"]) c = e, d = f;else {\n g = !1;for (var h = e.child; h;) {\n if (h === c) {\n g = !0;c = e;d = f;break;\n }if (h === d) {\n g = !0;d = e;c = f;break;\n }h = h.sibling;\n }if (!g) {\n for (h = f.child; h;) {\n if (h === c) {\n g = !0;c = f;d = e;break;\n }if (h === d) {\n g = !0;d = f;c = e;break;\n }h = h.sibling;\n }g ? void 0 : w(\"189\");\n }\n }c.alternate !== d ? w(\"190\") : void 0;\n }c.tag !== Ta ? w(\"188\") : void 0;return c.stateNode.current === c ? a : b;\n}\nvar bb = { isFiberMounted: function isFiberMounted(a) {\n return 2 === Za(a);\n }, isMounted: function isMounted(a) {\n return (a = Pa.get(a)) ? 2 === Za(a) : !1;\n }, findCurrentFiberUsingSlowPath: ab, findCurrentHostFiber: function findCurrentHostFiber(a) {\n a = ab(a);if (!a) return null;for (var b = a;;) {\n if (b.tag === Sa || b.tag === Va) return b;if (b.child) b.child[\"return\"] = b, b = b.child;else {\n if (b === a) break;for (; !b.sibling;) {\n if (!b[\"return\"] || b[\"return\"] === a) return null;b = b[\"return\"];\n }b.sibling[\"return\"] = b[\"return\"];b = b.sibling;\n }\n }return null;\n }, findCurrentHostFiberWithNoPortals: function findCurrentHostFiberWithNoPortals(a) {\n a = ab(a);\n if (!a) return null;for (var b = a;;) {\n if (b.tag === Sa || b.tag === Va) return b;if (b.child && b.tag !== Ua) b.child[\"return\"] = b, b = b.child;else {\n if (b === a) break;for (; !b.sibling;) {\n if (!b[\"return\"] || b[\"return\"] === a) return null;b = b[\"return\"];\n }b.sibling[\"return\"] = b[\"return\"];b = b.sibling;\n }\n }return null;\n } },\n K = { _caughtError: null, _hasCaughtError: !1, _rethrowError: null, _hasRethrowError: !1, injection: { injectErrorUtils: function injectErrorUtils(a) {\n \"function\" !== typeof a.invokeGuardedCallback ? w(\"197\") : void 0;cb = a.invokeGuardedCallback;\n } }, invokeGuardedCallback: function invokeGuardedCallback(a, b, c, d, e, f, g, h, k) {\n cb.apply(K, arguments);\n }, invokeGuardedCallbackAndCatchFirstError: function invokeGuardedCallbackAndCatchFirstError(a, b, c, d, e, f, g, h, k) {\n K.invokeGuardedCallback.apply(this, arguments);if (K.hasCaughtError()) {\n var p = K.clearCaughtError();K._hasRethrowError || (K._hasRethrowError = !0, K._rethrowError = p);\n }\n }, rethrowCaughtError: function rethrowCaughtError() {\n return db.apply(K, arguments);\n }, hasCaughtError: function hasCaughtError() {\n return K._hasCaughtError;\n }, clearCaughtError: function clearCaughtError() {\n if (K._hasCaughtError) {\n var a = K._caughtError;K._caughtError = null;K._hasCaughtError = !1;return a;\n }w(\"198\");\n } };\nfunction cb(a, b, c, d, e, f, g, h, k) {\n K._hasCaughtError = !1;K._caughtError = null;var p = Array.prototype.slice.call(arguments, 3);try {\n b.apply(c, p);\n } catch (x) {\n K._caughtError = x, K._hasCaughtError = !0;\n }\n}function db() {\n if (K._hasRethrowError) {\n var a = K._rethrowError;K._rethrowError = null;K._hasRethrowError = !1;throw a;\n }\n}var eb = K,\n fb;function gb(a, b, c, d) {\n b = a.type || \"unknown-event\";a.currentTarget = hb.getNodeFromInstance(d);eb.invokeGuardedCallbackAndCatchFirstError(b, c, void 0, a);a.currentTarget = null;\n}\nvar hb = { isEndish: function isEndish(a) {\n return \"topMouseUp\" === a || \"topTouchEnd\" === a || \"topTouchCancel\" === a;\n }, isMoveish: function isMoveish(a) {\n return \"topMouseMove\" === a || \"topTouchMove\" === a;\n }, isStartish: function isStartish(a) {\n return \"topMouseDown\" === a || \"topTouchStart\" === a;\n }, executeDirectDispatch: function executeDirectDispatch(a) {\n var b = a._dispatchListeners,\n c = a._dispatchInstances;Array.isArray(b) ? w(\"103\") : void 0;a.currentTarget = b ? hb.getNodeFromInstance(c) : null;b = b ? b(a) : null;a.currentTarget = null;a._dispatchListeners = null;a._dispatchInstances = null;return b;\n }, executeDispatchesInOrder: function executeDispatchesInOrder(a, b) {\n var c = a._dispatchListeners,\n d = a._dispatchInstances;if (Array.isArray(c)) for (var e = 0; e < c.length && !a.isPropagationStopped(); e++) {\n gb(a, b, c[e], d[e]);\n } else c && gb(a, b, c, d);a._dispatchListeners = null;a._dispatchInstances = null;\n }, executeDispatchesInOrderStopAtTrue: function executeDispatchesInOrderStopAtTrue(a) {\n a: {\n var b = a._dispatchListeners;var c = a._dispatchInstances;if (Array.isArray(b)) for (var d = 0; d < b.length && !a.isPropagationStopped(); d++) {\n if (b[d](a, c[d])) {\n b = c[d];break a;\n }\n } else if (b && b(a, c)) {\n b = c;break a;\n }b = null;\n }a._dispatchInstances = null;a._dispatchListeners = null;return b;\n }, hasDispatches: function hasDispatches(a) {\n return !!a._dispatchListeners;\n }, getFiberCurrentPropsFromNode: function getFiberCurrentPropsFromNode(a) {\n return fb.getFiberCurrentPropsFromNode(a);\n }, getInstanceFromNode: function getInstanceFromNode(a) {\n return fb.getInstanceFromNode(a);\n }, getNodeFromInstance: function getNodeFromInstance(a) {\n return fb.getNodeFromInstance(a);\n }, injection: { injectComponentTree: function injectComponentTree(a) {\n fb = a;\n } } },\n ib = hb,\n jb = null,\n kb = null,\n lb = null;\nfunction mb(a) {\n if (a = ib.getInstanceFromNode(a)) if (\"number\" === typeof a.tag) {\n jb && \"function\" === typeof jb.restoreControlledState ? void 0 : w(\"194\");var b = ib.getFiberCurrentPropsFromNode(a.stateNode);jb.restoreControlledState(a.stateNode, a.type, b);\n } else \"function\" !== typeof a.restoreControlledState ? w(\"195\") : void 0, a.restoreControlledState();\n}\nvar nb = { injection: { injectFiberControlledHostComponent: function injectFiberControlledHostComponent(a) {\n jb = a;\n } }, enqueueStateRestore: function enqueueStateRestore(a) {\n kb ? lb ? lb.push(a) : lb = [a] : kb = a;\n }, restoreStateIfNeeded: function restoreStateIfNeeded() {\n if (kb) {\n var a = kb,\n b = lb;lb = kb = null;mb(a);if (b) for (a = 0; a < b.length; a++) {\n mb(b[a]);\n }\n }\n } };function ob(a, b, c, d, e, f) {\n return a(b, c, d, e, f);\n}function pb(a, b) {\n return a(b);\n}function qb(a, b) {\n return pb(a, b);\n}\nvar rb = !1,\n sb = { batchedUpdates: function batchedUpdates(a, b) {\n if (rb) return ob(qb, a, b);rb = !0;try {\n return ob(qb, a, b);\n } finally {\n rb = !1, nb.restoreStateIfNeeded();\n }\n }, injection: { injectStackBatchedUpdates: function injectStackBatchedUpdates(a) {\n ob = a;\n }, injectFiberBatchedUpdates: function injectFiberBatchedUpdates(a) {\n pb = a;\n } } },\n tb = F.TEXT_NODE;function ub(a) {\n a = a.target || a.srcElement || window;a.correspondingUseElement && (a = a.correspondingUseElement);return a.nodeType === tb ? a.parentNode : a;\n}var vb = E.HostRoot,\n wb = [];\nfunction xb(a) {\n var b = a.targetInst;do {\n if (!b) {\n a.ancestors.push(b);break;\n }var c = b;if (\"number\" === typeof c.tag) {\n for (; c[\"return\"];) {\n c = c[\"return\"];\n }c = c.tag !== vb ? null : c.stateNode.containerInfo;\n } else {\n for (; c._hostParent;) {\n c = c._hostParent;\n }c = G.getNodeFromInstance(c).parentNode;\n }if (!c) break;a.ancestors.push(b);b = G.getClosestInstanceFromNode(c);\n } while (b);for (c = 0; c < a.ancestors.length; c++) {\n b = a.ancestors[c], yb._handleTopLevel(a.topLevelType, b, a.nativeEvent, ub(a.nativeEvent));\n }\n}\nvar yb = { _enabled: !0, _handleTopLevel: null, setHandleTopLevel: function setHandleTopLevel(a) {\n yb._handleTopLevel = a;\n }, setEnabled: function setEnabled(a) {\n yb._enabled = !!a;\n }, isEnabled: function isEnabled() {\n return yb._enabled;\n }, trapBubbledEvent: function trapBubbledEvent(a, b, c) {\n return c ? ba.listen(c, b, yb.dispatchEvent.bind(null, a)) : null;\n }, trapCapturedEvent: function trapCapturedEvent(a, b, c) {\n return c ? ba.capture(c, b, yb.dispatchEvent.bind(null, a)) : null;\n }, dispatchEvent: function dispatchEvent(a, b) {\n if (yb._enabled) {\n var c = ub(b);c = G.getClosestInstanceFromNode(c);null === c || \"number\" !== typeof c.tag || bb.isFiberMounted(c) || (c = null);if (wb.length) {\n var d = wb.pop();d.topLevelType = a;d.nativeEvent = b;d.targetInst = c;a = d;\n } else a = { topLevelType: a, nativeEvent: b, targetInst: c, ancestors: [] };try {\n sb.batchedUpdates(xb, a);\n } finally {\n a.topLevelType = null, a.nativeEvent = null, a.targetInst = null, a.ancestors.length = 0, 10 > wb.length && wb.push(a);\n }\n }\n } },\n L = yb;function Cb(a, b) {\n null == b ? w(\"30\") : void 0;if (null == a) return b;if (Array.isArray(a)) {\n if (Array.isArray(b)) return a.push.apply(a, b), a;a.push(b);return a;\n }return Array.isArray(b) ? [a].concat(b) : [a, b];\n}\nfunction Db(a, b, c) {\n Array.isArray(a) ? a.forEach(b, c) : a && b.call(c, a);\n}var Eb = null;function Fb(a, b) {\n a && (ib.executeDispatchesInOrder(a, b), a.isPersistent() || a.constructor.release(a));\n}function Gb(a) {\n return Fb(a, !0);\n}function Hb(a) {\n return Fb(a, !1);\n}\nfunction Ib(a, b, c) {\n switch (a) {case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":\n return !(!c.disabled || \"button\" !== b && \"input\" !== b && \"select\" !== b && \"textarea\" !== b);default:\n return !1;}\n}\nvar Jb = { injection: { injectEventPluginOrder: sa.injectEventPluginOrder, injectEventPluginsByName: sa.injectEventPluginsByName }, getListener: function getListener(a, b) {\n if (\"number\" === typeof a.tag) {\n var c = a.stateNode;if (!c) return null;var d = ib.getFiberCurrentPropsFromNode(c);if (!d) return null;c = d[b];if (Ib(b, a.type, d)) return null;\n } else {\n d = a._currentElement;if (\"string\" === typeof d || \"number\" === typeof d || !a._rootNodeID) return null;a = d.props;c = a[b];if (Ib(b, d.type, a)) return null;\n }c && \"function\" !== typeof c ? w(\"231\", b, typeof c === \"undefined\" ? \"undefined\" : _typeof(c)) : void 0;\n return c;\n }, extractEvents: function extractEvents(a, b, c, d) {\n for (var e, f = sa.plugins, g = 0; g < f.length; g++) {\n var h = f[g];h && (h = h.extractEvents(a, b, c, d)) && (e = Cb(e, h));\n }return e;\n }, enqueueEvents: function enqueueEvents(a) {\n a && (Eb = Cb(Eb, a));\n }, processEventQueue: function processEventQueue(a) {\n var b = Eb;Eb = null;a ? Db(b, Gb) : Db(b, Hb);Eb ? w(\"95\") : void 0;eb.rethrowCaughtError();\n } },\n Kb;l.canUseDOM && (Kb = document.implementation && document.implementation.hasFeature && !0 !== document.implementation.hasFeature(\"\", \"\"));\nfunction Lb(a, b) {\n if (!l.canUseDOM || b && !(\"addEventListener\" in document)) return !1;b = \"on\" + a;var c = b in document;c || (c = document.createElement(\"div\"), c.setAttribute(b, \"return;\"), c = \"function\" === typeof c[b]);!c && Kb && \"wheel\" === a && (c = document.implementation.hasFeature(\"Events.wheel\", \"3.0\"));return c;\n}function Mb(a, b) {\n var c = {};c[a.toLowerCase()] = b.toLowerCase();c[\"Webkit\" + a] = \"webkit\" + b;c[\"Moz\" + a] = \"moz\" + b;c[\"ms\" + a] = \"MS\" + b;c[\"O\" + a] = \"o\" + b.toLowerCase();return c;\n}\nvar Nb = { animationend: Mb(\"Animation\", \"AnimationEnd\"), animationiteration: Mb(\"Animation\", \"AnimationIteration\"), animationstart: Mb(\"Animation\", \"AnimationStart\"), transitionend: Mb(\"Transition\", \"TransitionEnd\") },\n Ob = {},\n Pb = {};l.canUseDOM && (Pb = document.createElement(\"div\").style, \"AnimationEvent\" in window || (delete Nb.animationend.animation, delete Nb.animationiteration.animation, delete Nb.animationstart.animation), \"TransitionEvent\" in window || delete Nb.transitionend.transition);\nfunction Qb(a) {\n if (Ob[a]) return Ob[a];if (!Nb[a]) return a;var b = Nb[a],\n c;for (c in b) {\n if (b.hasOwnProperty(c) && c in Pb) return Ob[a] = b[c];\n }return \"\";\n}\nvar Rb = { topAbort: \"abort\", topAnimationEnd: Qb(\"animationend\") || \"animationend\", topAnimationIteration: Qb(\"animationiteration\") || \"animationiteration\", topAnimationStart: Qb(\"animationstart\") || \"animationstart\", topBlur: \"blur\", topCancel: \"cancel\", topCanPlay: \"canplay\", topCanPlayThrough: \"canplaythrough\", topChange: \"change\", topClick: \"click\", topClose: \"close\", topCompositionEnd: \"compositionend\", topCompositionStart: \"compositionstart\", topCompositionUpdate: \"compositionupdate\", topContextMenu: \"contextmenu\", topCopy: \"copy\",\n topCut: \"cut\", topDoubleClick: \"dblclick\", topDrag: \"drag\", topDragEnd: \"dragend\", topDragEnter: \"dragenter\", topDragExit: \"dragexit\", topDragLeave: \"dragleave\", topDragOver: \"dragover\", topDragStart: \"dragstart\", topDrop: \"drop\", topDurationChange: \"durationchange\", topEmptied: \"emptied\", topEncrypted: \"encrypted\", topEnded: \"ended\", topError: \"error\", topFocus: \"focus\", topInput: \"input\", topKeyDown: \"keydown\", topKeyPress: \"keypress\", topKeyUp: \"keyup\", topLoadedData: \"loadeddata\", topLoad: \"load\", topLoadedMetadata: \"loadedmetadata\", topLoadStart: \"loadstart\",\n topMouseDown: \"mousedown\", topMouseMove: \"mousemove\", topMouseOut: \"mouseout\", topMouseOver: \"mouseover\", topMouseUp: \"mouseup\", topPaste: \"paste\", topPause: \"pause\", topPlay: \"play\", topPlaying: \"playing\", topProgress: \"progress\", topRateChange: \"ratechange\", topScroll: \"scroll\", topSeeked: \"seeked\", topSeeking: \"seeking\", topSelectionChange: \"selectionchange\", topStalled: \"stalled\", topSuspend: \"suspend\", topTextInput: \"textInput\", topTimeUpdate: \"timeupdate\", topToggle: \"toggle\", topTouchCancel: \"touchcancel\", topTouchEnd: \"touchend\", topTouchMove: \"touchmove\",\n topTouchStart: \"touchstart\", topTransitionEnd: Qb(\"transitionend\") || \"transitionend\", topVolumeChange: \"volumechange\", topWaiting: \"waiting\", topWheel: \"wheel\" },\n Sb = {},\n Tb = 0,\n Ub = \"_reactListenersID\" + (\"\" + Math.random()).slice(2);function Vb(a) {\n Object.prototype.hasOwnProperty.call(a, Ub) || (a[Ub] = Tb++, Sb[a[Ub]] = {});return Sb[a[Ub]];\n}\nvar M = n({}, { handleTopLevel: function handleTopLevel(a, b, c, d) {\n a = Jb.extractEvents(a, b, c, d);Jb.enqueueEvents(a);Jb.processEventQueue(!1);\n } }, { setEnabled: function setEnabled(a) {\n L && L.setEnabled(a);\n }, isEnabled: function isEnabled() {\n return !(!L || !L.isEnabled());\n }, listenTo: function listenTo(a, b) {\n var c = Vb(b);a = sa.registrationNameDependencies[a];for (var d = 0; d < a.length; d++) {\n var e = a[d];c.hasOwnProperty(e) && c[e] || (\"topWheel\" === e ? Lb(\"wheel\") ? L.trapBubbledEvent(\"topWheel\", \"wheel\", b) : Lb(\"mousewheel\") ? L.trapBubbledEvent(\"topWheel\", \"mousewheel\", b) : L.trapBubbledEvent(\"topWheel\", \"DOMMouseScroll\", b) : \"topScroll\" === e ? L.trapCapturedEvent(\"topScroll\", \"scroll\", b) : \"topFocus\" === e || \"topBlur\" === e ? (L.trapCapturedEvent(\"topFocus\", \"focus\", b), L.trapCapturedEvent(\"topBlur\", \"blur\", b), c.topBlur = !0, c.topFocus = !0) : \"topCancel\" === e ? (Lb(\"cancel\", !0) && L.trapCapturedEvent(\"topCancel\", \"cancel\", b), c.topCancel = !0) : \"topClose\" === e ? (Lb(\"close\", !0) && L.trapCapturedEvent(\"topClose\", \"close\", b), c.topClose = !0) : Rb.hasOwnProperty(e) && L.trapBubbledEvent(e, Rb[e], b), c[e] = !0);\n }\n }, isListeningToAllDependencies: function isListeningToAllDependencies(a, b) {\n b = Vb(b);a = sa.registrationNameDependencies[a];for (var c = 0; c < a.length; c++) {\n var d = a[c];if (!b.hasOwnProperty(d) || !b[d]) return !1;\n }return !0;\n }, trapBubbledEvent: function trapBubbledEvent(a, b, c) {\n return L.trapBubbledEvent(a, b, c);\n }, trapCapturedEvent: function trapCapturedEvent(a, b, c) {\n return L.trapCapturedEvent(a, b, c);\n } }),\n Wb = { animationIterationCount: !0, borderImageOutset: !0, borderImageSlice: !0, borderImageWidth: !0, boxFlex: !0, boxFlexGroup: !0, boxOrdinalGroup: !0, columnCount: !0, columns: !0, flex: !0, flexGrow: !0, flexPositive: !0, flexShrink: !0, flexNegative: !0,\n flexOrder: !0, gridRow: !0, gridRowEnd: !0, gridRowSpan: !0, gridRowStart: !0, gridColumn: !0, gridColumnEnd: !0, gridColumnSpan: !0, gridColumnStart: !0, fontWeight: !0, lineClamp: !0, lineHeight: !0, opacity: !0, order: !0, orphans: !0, tabSize: !0, widows: !0, zIndex: !0, zoom: !0, fillOpacity: !0, floodOpacity: !0, stopOpacity: !0, strokeDasharray: !0, strokeDashoffset: !0, strokeMiterlimit: !0, strokeOpacity: !0, strokeWidth: !0 },\n Xb = [\"Webkit\", \"ms\", \"Moz\", \"O\"];\nObject.keys(Wb).forEach(function (a) {\n Xb.forEach(function (b) {\n b = b + a.charAt(0).toUpperCase() + a.substring(1);Wb[b] = Wb[a];\n });\n});\nvar Yb = { isUnitlessNumber: Wb, shorthandPropertyExpansions: { background: { backgroundAttachment: !0, backgroundColor: !0, backgroundImage: !0, backgroundPositionX: !0, backgroundPositionY: !0, backgroundRepeat: !0 }, backgroundPosition: { backgroundPositionX: !0, backgroundPositionY: !0 }, border: { borderWidth: !0, borderStyle: !0, borderColor: !0 }, borderBottom: { borderBottomWidth: !0, borderBottomStyle: !0, borderBottomColor: !0 }, borderLeft: { borderLeftWidth: !0, borderLeftStyle: !0, borderLeftColor: !0 }, borderRight: { borderRightWidth: !0, borderRightStyle: !0,\n borderRightColor: !0 }, borderTop: { borderTopWidth: !0, borderTopStyle: !0, borderTopColor: !0 }, font: { fontStyle: !0, fontVariant: !0, fontWeight: !0, fontSize: !0, lineHeight: !0, fontFamily: !0 }, outline: { outlineWidth: !0, outlineStyle: !0, outlineColor: !0 } } },\n Zb = Yb.isUnitlessNumber,\n $b = !1;if (l.canUseDOM) {\n var ac = document.createElement(\"div\").style;try {\n ac.font = \"\";\n } catch (a) {\n $b = !0;\n }\n}\nvar bc = { createDangerousStringForStyles: function createDangerousStringForStyles() {}, setValueForStyles: function setValueForStyles(a, b) {\n a = a.style;for (var c in b) {\n if (b.hasOwnProperty(c)) {\n var d = 0 === c.indexOf(\"--\");var e = c;var f = b[c];e = null == f || \"boolean\" === typeof f || \"\" === f ? \"\" : d || \"number\" !== typeof f || 0 === f || Zb.hasOwnProperty(e) && Zb[e] ? (\"\" + f).trim() : f + \"px\";\"float\" === c && (c = \"cssFloat\");if (d) a.setProperty(c, e);else if (e) a[c] = e;else if (d = $b && Yb.shorthandPropertyExpansions[c]) for (var g in d) {\n a[g] = \"\";\n } else a[c] = \"\";\n }\n }\n } },\n cc = new RegExp(\"^[\" + A.ATTRIBUTE_NAME_START_CHAR + \"][\" + A.ATTRIBUTE_NAME_CHAR + \"]*$\"),\n dc = {},\n ec = {};function fc(a) {\n if (ec.hasOwnProperty(a)) return !0;if (dc.hasOwnProperty(a)) return !1;if (cc.test(a)) return ec[a] = !0;dc[a] = !0;return !1;\n}\nvar gc = { setAttributeForID: function setAttributeForID(a, b) {\n a.setAttribute(A.ID_ATTRIBUTE_NAME, b);\n }, setAttributeForRoot: function setAttributeForRoot(a) {\n a.setAttribute(A.ROOT_ATTRIBUTE_NAME, \"\");\n }, getValueForProperty: function getValueForProperty() {}, getValueForAttribute: function getValueForAttribute() {}, setValueForProperty: function setValueForProperty(a, b, c) {\n var d = A.getPropertyInfo(b);if (d && A.shouldSetAttribute(b, c)) {\n var e = d.mutationMethod;e ? e(a, c) : null == c || d.hasBooleanValue && !c || d.hasNumericValue && isNaN(c) || d.hasPositiveNumericValue && 1 > c || d.hasOverloadedBooleanValue && !1 === c ? gc.deleteValueForProperty(a, b) : d.mustUseProperty ? a[d.propertyName] = c : (b = d.attributeName, (e = d.attributeNamespace) ? a.setAttributeNS(e, b, \"\" + c) : d.hasBooleanValue || d.hasOverloadedBooleanValue && !0 === c ? a.setAttribute(b, \"\") : a.setAttribute(b, \"\" + c));\n } else gc.setValueForAttribute(a, b, A.shouldSetAttribute(b, c) ? c : null);\n }, setValueForAttribute: function setValueForAttribute(a, b, c) {\n fc(b) && (null == c ? a.removeAttribute(b) : a.setAttribute(b, \"\" + c));\n }, deleteValueForAttribute: function deleteValueForAttribute(a, b) {\n a.removeAttribute(b);\n }, deleteValueForProperty: function deleteValueForProperty(a, b) {\n var c = A.getPropertyInfo(b);\n c ? (b = c.mutationMethod) ? b(a, void 0) : c.mustUseProperty ? a[c.propertyName] = c.hasBooleanValue ? !1 : \"\" : a.removeAttribute(c.attributeName) : a.removeAttribute(b);\n } },\n hc = gc,\n ic = Qa.ReactDebugCurrentFrame;function jc() {\n return null;\n}\nvar kc = { current: null, phase: null, resetCurrentFiber: function resetCurrentFiber() {\n ic.getCurrentStack = null;kc.current = null;kc.phase = null;\n }, setCurrentFiber: function setCurrentFiber(a, b) {\n ic.getCurrentStack = jc;kc.current = a;kc.phase = b;\n }, getCurrentFiberOwnerName: function getCurrentFiberOwnerName() {\n return null;\n }, getCurrentFiberStackAddendum: jc },\n lc = kc,\n mc = { getHostProps: function getHostProps(a, b) {\n var c = b.value,\n d = b.checked;return n({ type: void 0, step: void 0, min: void 0, max: void 0 }, b, { defaultChecked: void 0, defaultValue: void 0, value: null != c ? c : a._wrapperState.initialValue, checked: null != d ? d : a._wrapperState.initialChecked });\n }, initWrapperState: function initWrapperState(a, b) {\n var c = b.defaultValue;a._wrapperState = { initialChecked: null != b.checked ? b.checked : b.defaultChecked, initialValue: null != b.value ? b.value : c, controlled: \"checkbox\" === b.type || \"radio\" === b.type ? null != b.checked : null != b.value };\n }, updateWrapper: function updateWrapper(a, b) {\n var c = b.checked;null != c && hc.setValueForProperty(a, \"checked\", c || !1);c = b.value;if (null != c) {\n if (0 === c && \"\" === a.value) a.value = \"0\";else if (\"number\" === b.type) {\n if (b = parseFloat(a.value) || 0, c != b || c == b && a.value != c) a.value = \"\" + c;\n } else a.value !== \"\" + c && (a.value = \"\" + c);\n } else null == b.value && null != b.defaultValue && a.defaultValue !== \"\" + b.defaultValue && (a.defaultValue = \"\" + b.defaultValue), null == b.checked && null != b.defaultChecked && (a.defaultChecked = !!b.defaultChecked);\n }, postMountWrapper: function postMountWrapper(a, b) {\n switch (b.type) {case \"submit\":case \"reset\":\n break;case \"color\":case \"date\":case \"datetime\":case \"datetime-local\":case \"month\":case \"time\":case \"week\":\n a.value = \"\";a.value = a.defaultValue;break;default:\n a.value = a.value;}b = a.name;\"\" !== b && (a.name = \"\");a.defaultChecked = !a.defaultChecked;a.defaultChecked = !a.defaultChecked;\"\" !== b && (a.name = b);\n }, restoreControlledState: function restoreControlledState(a, b) {\n mc.updateWrapper(a, b);var c = b.name;if (\"radio\" === b.type && null != c) {\n for (b = a; b.parentNode;) {\n b = b.parentNode;\n }c = b.querySelectorAll(\"input[name\\x3d\" + JSON.stringify(\"\" + c) + '][type\\x3d\"radio\"]');for (b = 0; b < c.length; b++) {\n var d = c[b];if (d !== a && d.form === a.form) {\n var e = G.getFiberCurrentPropsFromNode(d);e ? void 0 : w(\"90\");mc.updateWrapper(d, e);\n }\n }\n }\n } },\n qc = mc;\nfunction rc(a) {\n var b = \"\";aa.Children.forEach(a, function (a) {\n null == a || \"string\" !== typeof a && \"number\" !== typeof a || (b += a);\n });return b;\n}var sc = { validateProps: function validateProps() {}, postMountWrapper: function postMountWrapper(a, b) {\n null != b.value && a.setAttribute(\"value\", b.value);\n }, getHostProps: function getHostProps(a, b) {\n a = n({ children: void 0 }, b);if (b = rc(b.children)) a.children = b;return a;\n } };\nfunction tc(a, b, c) {\n a = a.options;if (b) {\n b = {};for (var d = 0; d < c.length; d++) {\n b[\"$\" + c[d]] = !0;\n }for (c = 0; c < a.length; c++) {\n d = b.hasOwnProperty(\"$\" + a[c].value), a[c].selected !== d && (a[c].selected = d);\n }\n } else {\n c = \"\" + c;b = null;for (d = 0; d < a.length; d++) {\n if (a[d].value === c) {\n a[d].selected = !0;return;\n }null !== b || a[d].disabled || (b = a[d]);\n }null !== b && (b.selected = !0);\n }\n}\nvar uc = { getHostProps: function getHostProps(a, b) {\n return n({}, b, { value: void 0 });\n }, initWrapperState: function initWrapperState(a, b) {\n var c = b.value;a._wrapperState = { initialValue: null != c ? c : b.defaultValue, wasMultiple: !!b.multiple };\n }, postMountWrapper: function postMountWrapper(a, b) {\n a.multiple = !!b.multiple;var c = b.value;null != c ? tc(a, !!b.multiple, c) : null != b.defaultValue && tc(a, !!b.multiple, b.defaultValue);\n }, postUpdateWrapper: function postUpdateWrapper(a, b) {\n a._wrapperState.initialValue = void 0;var c = a._wrapperState.wasMultiple;a._wrapperState.wasMultiple = !!b.multiple;var d = b.value;\n null != d ? tc(a, !!b.multiple, d) : c !== !!b.multiple && (null != b.defaultValue ? tc(a, !!b.multiple, b.defaultValue) : tc(a, !!b.multiple, b.multiple ? [] : \"\"));\n }, restoreControlledState: function restoreControlledState(a, b) {\n var c = b.value;null != c && tc(a, !!b.multiple, c);\n } },\n vc = { getHostProps: function getHostProps(a, b) {\n null != b.dangerouslySetInnerHTML ? w(\"91\") : void 0;return n({}, b, { value: void 0, defaultValue: void 0, children: \"\" + a._wrapperState.initialValue });\n }, initWrapperState: function initWrapperState(a, b) {\n var c = b.value,\n d = c;null == c && (c = b.defaultValue, b = b.children, null != b && (null != c ? w(\"92\") : void 0, Array.isArray(b) && (1 >= b.length ? void 0 : w(\"93\"), b = b[0]), c = \"\" + b), null == c && (c = \"\"), d = c);a._wrapperState = { initialValue: \"\" + d };\n }, updateWrapper: function updateWrapper(a, b) {\n var c = b.value;null != c && (c = \"\" + c, c !== a.value && (a.value = c), null == b.defaultValue && (a.defaultValue = c));null != b.defaultValue && (a.defaultValue = b.defaultValue);\n }, postMountWrapper: function postMountWrapper(a) {\n var b = a.textContent;b === a._wrapperState.initialValue && (a.value = b);\n }, restoreControlledState: function restoreControlledState(a, b) {\n vc.updateWrapper(a, b);\n } },\n wc = vc,\n xc = n({ menuitem: !0 }, { area: !0,\n base: !0, br: !0, col: !0, embed: !0, hr: !0, img: !0, input: !0, keygen: !0, link: !0, meta: !0, param: !0, source: !0, track: !0, wbr: !0 });function yc(a, b) {\n b && (xc[a] && (null != b.children || null != b.dangerouslySetInnerHTML ? w(\"137\", a, \"\") : void 0), null != b.dangerouslySetInnerHTML && (null != b.children ? w(\"60\") : void 0, \"object\" === _typeof(b.dangerouslySetInnerHTML) && \"__html\" in b.dangerouslySetInnerHTML ? void 0 : w(\"61\")), null != b.style && \"object\" !== _typeof(b.style) ? w(\"62\", \"\") : void 0);\n}\nfunction zc(a) {\n var b = a.type;return (a = a.nodeName) && \"input\" === a.toLowerCase() && (\"checkbox\" === b || \"radio\" === b);\n}\nfunction Ac(a) {\n var b = zc(a) ? \"checked\" : \"value\",\n c = Object.getOwnPropertyDescriptor(a.constructor.prototype, b),\n d = \"\" + a[b];if (!a.hasOwnProperty(b) && \"function\" === typeof c.get && \"function\" === typeof c.set) return Object.defineProperty(a, b, { enumerable: c.enumerable, configurable: !0, get: function get() {\n return c.get.call(this);\n }, set: function set(a) {\n d = \"\" + a;c.set.call(this, a);\n } }), { getValue: function getValue() {\n return d;\n }, setValue: function setValue(a) {\n d = \"\" + a;\n }, stopTracking: function stopTracking() {\n a._valueTracker = null;delete a[b];\n } };\n}\nvar Bc = { _getTrackerFromNode: function _getTrackerFromNode(a) {\n return a._valueTracker;\n }, track: function track(a) {\n a._valueTracker || (a._valueTracker = Ac(a));\n }, updateValueIfChanged: function updateValueIfChanged(a) {\n if (!a) return !1;var b = a._valueTracker;if (!b) return !0;var c = b.getValue();var d = \"\";a && (d = zc(a) ? a.checked ? \"true\" : \"false\" : a.value);a = d;return a !== c ? (b.setValue(a), !0) : !1;\n }, stopTracking: function stopTracking(a) {\n (a = a._valueTracker) && a.stopTracking();\n } };\nfunction Cc(a, b) {\n if (-1 === a.indexOf(\"-\")) return \"string\" === typeof b.is;switch (a) {case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":\n return !1;default:\n return !0;}\n}\nvar Dc = ka.Namespaces,\n Ec,\n Fc = function (a) {\n return \"undefined\" !== typeof MSApp && MSApp.execUnsafeLocalFunction ? function (b, c, d, e) {\n MSApp.execUnsafeLocalFunction(function () {\n return a(b, c, d, e);\n });\n } : a;\n}(function (a, b) {\n if (a.namespaceURI !== Dc.svg || \"innerHTML\" in a) a.innerHTML = b;else for (Ec = Ec || document.createElement(\"div\"), Ec.innerHTML = \"\\x3csvg\\x3e\" + b + \"\\x3c/svg\\x3e\", b = Ec.firstChild; b.firstChild;) {\n a.appendChild(b.firstChild);\n }\n}),\n Gc = /[\"'&<>]/,\n Hc = F.TEXT_NODE;\nfunction Ic(a, b) {\n if (b) {\n var c = a.firstChild;if (c && c === a.lastChild && c.nodeType === Hc) {\n c.nodeValue = b;return;\n }\n }a.textContent = b;\n}\nl.canUseDOM && (\"textContent\" in document.documentElement || (Ic = function Ic(a, b) {\n if (a.nodeType === Hc) a.nodeValue = b;else {\n if (\"boolean\" === typeof b || \"number\" === typeof b) b = \"\" + b;else {\n b = \"\" + b;var c = Gc.exec(b);if (c) {\n var d = \"\",\n e,\n f = 0;for (e = c.index; e < b.length; e++) {\n switch (b.charCodeAt(e)) {case 34:\n c = \"\\x26quot;\";break;case 38:\n c = \"\\x26amp;\";break;case 39:\n c = \"\\x26#x27;\";break;case 60:\n c = \"\\x26lt;\";break;case 62:\n c = \"\\x26gt;\";break;default:\n continue;}f !== e && (d += b.substring(f, e));f = e + 1;d += c;\n }b = f !== e ? d + b.substring(f, e) : d;\n }\n }Fc(a, b);\n }\n}));\nvar Jc = Ic,\n Kc = lc.getCurrentFiberOwnerName,\n Lc = F.DOCUMENT_NODE,\n Mc = F.DOCUMENT_FRAGMENT_NODE,\n Nc = M.listenTo,\n Oc = sa.registrationNameModules,\n Pc = ka.Namespaces.html,\n Qc = ka.getIntrinsicNamespace;function Rc(a, b) {\n Nc(b, a.nodeType === Lc || a.nodeType === Mc ? a : a.ownerDocument);\n}\nvar Sc = { topAbort: \"abort\", topCanPlay: \"canplay\", topCanPlayThrough: \"canplaythrough\", topDurationChange: \"durationchange\", topEmptied: \"emptied\", topEncrypted: \"encrypted\", topEnded: \"ended\", topError: \"error\", topLoadedData: \"loadeddata\", topLoadedMetadata: \"loadedmetadata\", topLoadStart: \"loadstart\", topPause: \"pause\", topPlay: \"play\", topPlaying: \"playing\", topProgress: \"progress\", topRateChange: \"ratechange\", topSeeked: \"seeked\", topSeeking: \"seeking\", topStalled: \"stalled\", topSuspend: \"suspend\", topTimeUpdate: \"timeupdate\", topVolumeChange: \"volumechange\",\n topWaiting: \"waiting\" },\n N = { createElement: function createElement(a, b, c, d) {\n c = c.nodeType === Lc ? c : c.ownerDocument;d === Pc && (d = Qc(a));d === Pc ? \"script\" === a ? (a = c.createElement(\"div\"), a.innerHTML = \"\\x3cscript\\x3e\\x3c/script\\x3e\", a = a.removeChild(a.firstChild)) : a = \"string\" === typeof b.is ? c.createElement(a, { is: b.is }) : c.createElement(a) : a = c.createElementNS(d, a);return a;\n }, createTextNode: function createTextNode(a, b) {\n return (b.nodeType === Lc ? b : b.ownerDocument).createTextNode(a);\n }, setInitialProperties: function setInitialProperties(a, b, c, d) {\n var e = Cc(b, c);switch (b) {case \"iframe\":case \"object\":\n M.trapBubbledEvent(\"topLoad\", \"load\", a);var f = c;break;case \"video\":case \"audio\":\n for (f in Sc) {\n Sc.hasOwnProperty(f) && M.trapBubbledEvent(f, Sc[f], a);\n }f = c;break;case \"source\":\n M.trapBubbledEvent(\"topError\", \"error\", a);f = c;break;case \"img\":case \"image\":\n M.trapBubbledEvent(\"topError\", \"error\", a);M.trapBubbledEvent(\"topLoad\", \"load\", a);f = c;break;case \"form\":\n M.trapBubbledEvent(\"topReset\", \"reset\", a);M.trapBubbledEvent(\"topSubmit\", \"submit\", a);f = c;break;case \"details\":\n M.trapBubbledEvent(\"topToggle\", \"toggle\", a);f = c;break;case \"input\":\n qc.initWrapperState(a, c);f = qc.getHostProps(a, c);M.trapBubbledEvent(\"topInvalid\", \"invalid\", a);Rc(d, \"onChange\");break;case \"option\":\n sc.validateProps(a, c);f = sc.getHostProps(a, c);break;case \"select\":\n uc.initWrapperState(a, c);f = uc.getHostProps(a, c);M.trapBubbledEvent(\"topInvalid\", \"invalid\", a);Rc(d, \"onChange\");break;case \"textarea\":\n wc.initWrapperState(a, c);f = wc.getHostProps(a, c);M.trapBubbledEvent(\"topInvalid\", \"invalid\", a);Rc(d, \"onChange\");break;default:\n f = c;}yc(b, f, Kc);var g = f,\n h;for (h in g) {\n if (g.hasOwnProperty(h)) {\n var k = g[h];\"style\" === h ? bc.setValueForStyles(a, k) : \"dangerouslySetInnerHTML\" === h ? (k = k ? k.__html : void 0, null != k && Fc(a, k)) : \"children\" === h ? \"string\" === typeof k ? Jc(a, k) : \"number\" === typeof k && Jc(a, \"\" + k) : \"suppressContentEditableWarning\" !== h && (Oc.hasOwnProperty(h) ? null != k && Rc(d, h) : e ? hc.setValueForAttribute(a, h, k) : null != k && hc.setValueForProperty(a, h, k));\n }\n }switch (b) {case \"input\":\n Bc.track(a);qc.postMountWrapper(a, c);break;case \"textarea\":\n Bc.track(a);wc.postMountWrapper(a, c);break;case \"option\":\n sc.postMountWrapper(a, c);break;case \"select\":\n uc.postMountWrapper(a, c);break;default:\n \"function\" === typeof f.onClick && (a.onclick = ca);}\n }, diffProperties: function diffProperties(a, b, c, d, e) {\n var f = null;switch (b) {case \"input\":\n c = qc.getHostProps(a, c);d = qc.getHostProps(a, d);f = [];break;case \"option\":\n c = sc.getHostProps(a, c);d = sc.getHostProps(a, d);f = [];break;case \"select\":\n c = uc.getHostProps(a, c);d = uc.getHostProps(a, d);f = [];break;case \"textarea\":\n c = wc.getHostProps(a, c);d = wc.getHostProps(a, d);f = [];break;default:\n \"function\" !== typeof c.onClick && \"function\" === typeof d.onClick && (a.onclick = ca);}yc(b, d, Kc);\n var g, h;a = null;for (g in c) {\n if (!d.hasOwnProperty(g) && c.hasOwnProperty(g) && null != c[g]) if (\"style\" === g) for (h in b = c[g], b) {\n b.hasOwnProperty(h) && (a || (a = {}), a[h] = \"\");\n } else \"dangerouslySetInnerHTML\" !== g && \"children\" !== g && \"suppressContentEditableWarning\" !== g && (Oc.hasOwnProperty(g) ? f || (f = []) : (f = f || []).push(g, null));\n }for (g in d) {\n var k = d[g];b = null != c ? c[g] : void 0;if (d.hasOwnProperty(g) && k !== b && (null != k || null != b)) if (\"style\" === g) {\n if (b) {\n for (h in b) {\n !b.hasOwnProperty(h) || k && k.hasOwnProperty(h) || (a || (a = {}), a[h] = \"\");\n }for (h in k) {\n k.hasOwnProperty(h) && b[h] !== k[h] && (a || (a = {}), a[h] = k[h]);\n }\n } else a || (f || (f = []), f.push(g, a)), a = k;\n } else \"dangerouslySetInnerHTML\" === g ? (k = k ? k.__html : void 0, b = b ? b.__html : void 0, null != k && b !== k && (f = f || []).push(g, \"\" + k)) : \"children\" === g ? b === k || \"string\" !== typeof k && \"number\" !== typeof k || (f = f || []).push(g, \"\" + k) : \"suppressContentEditableWarning\" !== g && (Oc.hasOwnProperty(g) ? (null != k && Rc(e, g), f || b === k || (f = [])) : (f = f || []).push(g, k));\n }a && (f = f || []).push(\"style\", a);return f;\n }, updateProperties: function updateProperties(a, b, c, d, e) {\n Cc(c, d);d = Cc(c, e);for (var f = 0; f < b.length; f += 2) {\n var g = b[f],\n h = b[f + 1];\"style\" === g ? bc.setValueForStyles(a, h) : \"dangerouslySetInnerHTML\" === g ? Fc(a, h) : \"children\" === g ? Jc(a, h) : d ? null != h ? hc.setValueForAttribute(a, g, h) : hc.deleteValueForAttribute(a, g) : null != h ? hc.setValueForProperty(a, g, h) : hc.deleteValueForProperty(a, g);\n }switch (c) {case \"input\":\n qc.updateWrapper(a, e);Bc.updateValueIfChanged(a);break;case \"textarea\":\n wc.updateWrapper(a, e);break;case \"select\":\n uc.postUpdateWrapper(a, e);}\n }, diffHydratedProperties: function diffHydratedProperties(a, b, c, d, e) {\n switch (b) {case \"iframe\":case \"object\":\n M.trapBubbledEvent(\"topLoad\", \"load\", a);break;case \"video\":case \"audio\":\n for (var f in Sc) {\n Sc.hasOwnProperty(f) && M.trapBubbledEvent(f, Sc[f], a);\n }break;case \"source\":\n M.trapBubbledEvent(\"topError\", \"error\", a);break;case \"img\":case \"image\":\n M.trapBubbledEvent(\"topError\", \"error\", a);M.trapBubbledEvent(\"topLoad\", \"load\", a);break;case \"form\":\n M.trapBubbledEvent(\"topReset\", \"reset\", a);M.trapBubbledEvent(\"topSubmit\", \"submit\", a);break;case \"details\":\n M.trapBubbledEvent(\"topToggle\", \"toggle\", a);break;case \"input\":\n qc.initWrapperState(a, c);M.trapBubbledEvent(\"topInvalid\", \"invalid\", a);Rc(e, \"onChange\");break;case \"option\":\n sc.validateProps(a, c);break;case \"select\":\n uc.initWrapperState(a, c);M.trapBubbledEvent(\"topInvalid\", \"invalid\", a);Rc(e, \"onChange\");break;case \"textarea\":\n wc.initWrapperState(a, c), M.trapBubbledEvent(\"topInvalid\", \"invalid\", a), Rc(e, \"onChange\");}yc(b, c, Kc);d = null;for (var g in c) {\n c.hasOwnProperty(g) && (f = c[g], \"children\" === g ? \"string\" === typeof f ? a.textContent !== f && (d = [\"children\", f]) : \"number\" === typeof f && a.textContent !== \"\" + f && (d = [\"children\", \"\" + f]) : Oc.hasOwnProperty(g) && null != f && Rc(e, g));\n }switch (b) {case \"input\":\n Bc.track(a);qc.postMountWrapper(a, c);break;case \"textarea\":\n Bc.track(a);wc.postMountWrapper(a, c);break;case \"select\":case \"option\":\n break;default:\n \"function\" === typeof c.onClick && (a.onclick = ca);}return d;\n }, diffHydratedText: function diffHydratedText(a, b) {\n return a.nodeValue !== b;\n }, warnForDeletedHydratableElement: function warnForDeletedHydratableElement() {}, warnForDeletedHydratableText: function warnForDeletedHydratableText() {}, warnForInsertedHydratedElement: function warnForInsertedHydratedElement() {}, warnForInsertedHydratedText: function warnForInsertedHydratedText() {}, restoreControlledState: function restoreControlledState(a, b, c) {\n switch (b) {case \"input\":\n qc.restoreControlledState(a, c);break;case \"textarea\":\n wc.restoreControlledState(a, c);break;case \"select\":\n uc.restoreControlledState(a, c);}\n } },\n Tc = void 0;\nif (l.canUseDOM) {\n if (\"function\" !== typeof requestIdleCallback) {\n var Uc = null,\n Vc = null,\n Wc = !1,\n Xc = !1,\n Yc = 0,\n Zc = 33,\n $c = 33,\n ad = { timeRemaining: \"object\" === (typeof performance === \"undefined\" ? \"undefined\" : _typeof(performance)) && \"function\" === typeof performance.now ? function () {\n return Yc - performance.now();\n } : function () {\n return Yc - Date.now();\n } },\n bd = \"__reactIdleCallback$\" + Math.random().toString(36).slice(2);window.addEventListener(\"message\", function (a) {\n a.source === window && a.data === bd && (Wc = !1, a = Vc, Vc = null, null !== a && a(ad));\n }, !1);var cd = function cd(a) {\n Xc = !1;var b = a - Yc + $c;b < $c && Zc < $c ? (8 > b && (b = 8), $c = b < Zc ? Zc : b) : Zc = b;Yc = a + $c;Wc || (Wc = !0, window.postMessage(bd, \"*\"));b = Uc;Uc = null;null !== b && b(a);\n };Tc = function Tc(a) {\n Vc = a;Xc || (Xc = !0, requestAnimationFrame(cd));return 0;\n };\n } else Tc = requestIdleCallback;\n} else Tc = function Tc(a) {\n setTimeout(function () {\n a({ timeRemaining: function timeRemaining() {\n return Infinity;\n } });\n });return 0;\n};\nvar dd = { rIC: Tc },\n ed = { enableAsyncSubtreeAPI: !0 },\n Q = { NoWork: 0, SynchronousPriority: 1, TaskPriority: 2, HighPriority: 3, LowPriority: 4, OffscreenPriority: 5 },\n fd = J.Callback,\n gd = Q.NoWork,\n hd = Q.SynchronousPriority,\n id = Q.TaskPriority,\n jd = E.ClassComponent,\n kd = E.HostRoot,\n md = void 0,\n nd = void 0;function od(a, b) {\n return a !== id && a !== hd || b !== id && b !== hd ? a === gd && b !== gd ? -255 : a !== gd && b === gd ? 255 : a - b : 0;\n}function pd() {\n return { first: null, last: null, hasForceUpdate: !1, callbackList: null };\n}\nfunction qd(a, b, c, d) {\n null !== c ? c.next = b : (b.next = a.first, a.first = b);null !== d ? b.next = d : a.last = b;\n}function rd(a, b) {\n b = b.priorityLevel;var c = null;if (null !== a.last && 0 >= od(a.last.priorityLevel, b)) c = a.last;else for (a = a.first; null !== a && 0 >= od(a.priorityLevel, b);) {\n c = a, a = a.next;\n }return c;\n}\nfunction sd(a, b) {\n var c = a.alternate,\n d = a.updateQueue;null === d && (d = a.updateQueue = pd());null !== c ? (a = c.updateQueue, null === a && (a = c.updateQueue = pd())) : a = null;md = d;nd = a !== d ? a : null;var e = md;c = nd;var f = rd(e, b),\n g = null !== f ? f.next : e.first;if (null === c) return qd(e, b, f, g), null;d = rd(c, b);a = null !== d ? d.next : c.first;qd(e, b, f, g);if (g === a && null !== g || f === d && null !== f) return null === d && (c.first = b), null === a && (c.last = null), null;b = { priorityLevel: b.priorityLevel, partialState: b.partialState, callback: b.callback, isReplace: b.isReplace,\n isForced: b.isForced, isTopLevelUnmount: b.isTopLevelUnmount, next: null };qd(c, b, d, a);return b;\n}function td(a, b, c, d) {\n a = a.partialState;return \"function\" === typeof a ? a.call(b, c, d) : a;\n}\nvar ud = { addUpdate: function addUpdate(a, b, c, d) {\n sd(a, { priorityLevel: d, partialState: b, callback: c, isReplace: !1, isForced: !1, isTopLevelUnmount: !1, next: null });\n }, addReplaceUpdate: function addReplaceUpdate(a, b, c, d) {\n sd(a, { priorityLevel: d, partialState: b, callback: c, isReplace: !0, isForced: !1, isTopLevelUnmount: !1, next: null });\n }, addForceUpdate: function addForceUpdate(a, b, c) {\n sd(a, { priorityLevel: c, partialState: null, callback: b, isReplace: !1, isForced: !0, isTopLevelUnmount: !1, next: null });\n }, getUpdatePriority: function getUpdatePriority(a) {\n var b = a.updateQueue;return null === b || a.tag !== jd && a.tag !== kd ? gd : null !== b.first ? b.first.priorityLevel : gd;\n }, addTopLevelUpdate: function addTopLevelUpdate(a, b, c, d) {\n var e = null === b.element;b = { priorityLevel: d, partialState: b, callback: c, isReplace: !1, isForced: !1, isTopLevelUnmount: e, next: null };a = sd(a, b);e && (e = md, c = nd, null !== e && null !== b.next && (b.next = null, e.last = b), null !== c && null !== a && null !== a.next && (a.next = null, c.last = b));\n }, beginUpdateQueue: function beginUpdateQueue(a, b, c, d, e, f, g) {\n null !== a && a.updateQueue === c && (c = b.updateQueue = { first: c.first, last: c.last, callbackList: null, hasForceUpdate: !1 });\n a = c.callbackList;for (var h = c.hasForceUpdate, k = !0, p = c.first; null !== p && 0 >= od(p.priorityLevel, g);) {\n c.first = p.next;null === c.first && (c.last = null);var x;if (p.isReplace) e = td(p, d, e, f), k = !0;else if (x = td(p, d, e, f)) e = k ? n({}, e, x) : n(e, x), k = !1;p.isForced && (h = !0);null === p.callback || p.isTopLevelUnmount && null !== p.next || (a = null !== a ? a : [], a.push(p.callback), b.effectTag |= fd);p = p.next;\n }c.callbackList = a;c.hasForceUpdate = h;null !== c.first || null !== a || h || (b.updateQueue = null);return e;\n }, commitCallbacks: function commitCallbacks(a, b, c) {\n a = b.callbackList;\n if (null !== a) for (b.callbackList = null, b = 0; b < a.length; b++) {\n var d = a[b];\"function\" !== typeof d ? w(\"191\", d) : void 0;d.call(c);\n }\n } },\n vd = [],\n wd = -1,\n xd = { createCursor: function createCursor(a) {\n return { current: a };\n }, isEmpty: function isEmpty() {\n return -1 === wd;\n }, pop: function pop(a) {\n 0 > wd || (a.current = vd[wd], vd[wd] = null, wd--);\n }, push: function push(a, b) {\n wd++;vd[wd] = a.current;a.current = b;\n }, reset: function reset() {\n for (; -1 < wd;) {\n vd[wd] = null, wd--;\n }\n } },\n yd = bb.isFiberMounted,\n zd = E.ClassComponent,\n Ad = E.HostRoot,\n Bd = xd.createCursor,\n Cd = xd.pop,\n Dd = xd.push,\n Ed = Bd(da),\n Fd = Bd(!1),\n Ld = da;\nfunction Md(a, b, c) {\n a = a.stateNode;a.__reactInternalMemoizedUnmaskedChildContext = b;a.__reactInternalMemoizedMaskedChildContext = c;\n}function Nd(a) {\n return a.tag === zd && null != a.type.childContextTypes;\n}function Od(a, b) {\n var c = a.stateNode,\n d = a.type.childContextTypes;if (\"function\" !== typeof c.getChildContext) return b;c = c.getChildContext();for (var e in c) {\n e in d ? void 0 : w(\"108\", Ra(a) || \"Unknown\", e);\n }return n({}, b, c);\n}\nvar R = { getUnmaskedContext: function getUnmaskedContext(a) {\n return Nd(a) ? Ld : Ed.current;\n }, cacheContext: Md, getMaskedContext: function getMaskedContext(a, b) {\n var c = a.type.contextTypes;if (!c) return da;var d = a.stateNode;if (d && d.__reactInternalMemoizedUnmaskedChildContext === b) return d.__reactInternalMemoizedMaskedChildContext;var e = {},\n f;for (f in c) {\n e[f] = b[f];\n }d && Md(a, b, e);return e;\n }, hasContextChanged: function hasContextChanged() {\n return Fd.current;\n }, isContextConsumer: function isContextConsumer(a) {\n return a.tag === zd && null != a.type.contextTypes;\n }, isContextProvider: Nd, popContextProvider: function popContextProvider(a) {\n Nd(a) && (Cd(Fd, a), Cd(Ed, a));\n }, popTopLevelContextObject: function popTopLevelContextObject(a) {\n Cd(Fd, a);Cd(Ed, a);\n }, pushTopLevelContextObject: function pushTopLevelContextObject(a, b, c) {\n null != Ed.cursor ? w(\"168\") : void 0;Dd(Ed, b, a);Dd(Fd, c, a);\n }, processChildContext: Od, pushContextProvider: function pushContextProvider(a) {\n if (!Nd(a)) return !1;var b = a.stateNode;b = b && b.__reactInternalMemoizedMergedChildContext || da;Ld = Ed.current;Dd(Ed, b, a);Dd(Fd, Fd.current, a);return !0;\n }, invalidateContextProvider: function invalidateContextProvider(a, b) {\n var c = a.stateNode;c ? void 0 : w(\"169\");if (b) {\n var d = Od(a, Ld, !0);c.__reactInternalMemoizedMergedChildContext = d;Cd(Fd, a);Cd(Ed, a);Dd(Ed, d, a);\n } else Cd(Fd, a);Dd(Fd, b, a);\n }, resetContext: function resetContext() {\n Ld = da;Ed.current = da;Fd.current = !1;\n }, findCurrentUnmaskedContext: function findCurrentUnmaskedContext(a) {\n for (yd(a) && a.tag === zd ? void 0 : w(\"170\"); a.tag !== Ad;) {\n if (Nd(a)) return a.stateNode.__reactInternalMemoizedMergedChildContext;(a = a[\"return\"]) ? void 0 : w(\"171\");\n }return a.stateNode.context;\n } },\n Pd = { NoContext: 0, AsyncUpdates: 1 },\n Qd = E.IndeterminateComponent,\n Rd = E.ClassComponent,\n Sd = E.HostRoot,\n Td = E.HostComponent,\n Ud = E.HostText,\n Vd = E.HostPortal,\n Wd = E.CoroutineComponent,\n Xd = E.YieldComponent,\n Yd = E.Fragment,\n Zd = Q.NoWork,\n $d = Pd.NoContext,\n ae = J.NoEffect;function be(a, b, c) {\n this.tag = a;this.key = b;this.stateNode = this.type = null;this.sibling = this.child = this[\"return\"] = null;this.index = 0;this.memoizedState = this.updateQueue = this.memoizedProps = this.pendingProps = this.ref = null;this.internalContextTag = c;this.effectTag = ae;this.lastEffect = this.firstEffect = this.nextEffect = null;this.pendingWorkPriority = Zd;this.alternate = null;\n}\nfunction ce(a, b, c) {\n var d = void 0;\"function\" === typeof a ? (d = a.prototype && a.prototype.isReactComponent ? new be(Rd, b, c) : new be(Qd, b, c), d.type = a) : \"string\" === typeof a ? (d = new be(Td, b, c), d.type = a) : \"object\" === (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && null !== a && \"number\" === typeof a.tag ? d = a : w(\"130\", null == a ? a : typeof a === \"undefined\" ? \"undefined\" : _typeof(a), \"\");return d;\n}\nvar de = { createWorkInProgress: function createWorkInProgress(a, b) {\n var c = a.alternate;null === c ? (c = new be(a.tag, a.key, a.internalContextTag), c.type = a.type, c.stateNode = a.stateNode, c.alternate = a, a.alternate = c) : (c.effectTag = ae, c.nextEffect = null, c.firstEffect = null, c.lastEffect = null);c.pendingWorkPriority = b;c.child = a.child;c.memoizedProps = a.memoizedProps;c.memoizedState = a.memoizedState;c.updateQueue = a.updateQueue;c.sibling = a.sibling;c.index = a.index;c.ref = a.ref;return c;\n }, createHostRootFiber: function createHostRootFiber() {\n return new be(Sd, null, $d);\n },\n createFiberFromElement: function createFiberFromElement(a, b, c) {\n b = ce(a.type, a.key, b, null);b.pendingProps = a.props;b.pendingWorkPriority = c;return b;\n }, createFiberFromFragment: function createFiberFromFragment(a, b, c) {\n b = new be(Yd, null, b);b.pendingProps = a;b.pendingWorkPriority = c;return b;\n }, createFiberFromText: function createFiberFromText(a, b, c) {\n b = new be(Ud, null, b);b.pendingProps = a;b.pendingWorkPriority = c;return b;\n }, createFiberFromElementType: ce, createFiberFromHostInstanceForDeletion: function createFiberFromHostInstanceForDeletion() {\n var a = new be(Td, null, $d);a.type = \"DELETED\";return a;\n }, createFiberFromCoroutine: function createFiberFromCoroutine(a, b, c) {\n b = new be(Wd, a.key, b);b.type = a.handler;b.pendingProps = a;b.pendingWorkPriority = c;return b;\n }, createFiberFromYield: function createFiberFromYield(a, b) {\n return new be(Xd, null, b);\n }, createFiberFromPortal: function createFiberFromPortal(a, b, c) {\n b = new be(Vd, a.key, b);b.pendingProps = a.children || [];b.pendingWorkPriority = c;b.stateNode = { containerInfo: a.containerInfo, implementation: a.implementation };return b;\n }, largerPriority: function largerPriority(a, b) {\n return a !== Zd && (b === Zd || b > a) ? a : b;\n } },\n ee = de.createHostRootFiber,\n fe = E.IndeterminateComponent,\n ge = E.FunctionalComponent,\n he = E.ClassComponent,\n ie = E.HostComponent,\n je,\n ke;\"function\" === typeof Symbol && Symbol[\"for\"] ? (je = Symbol[\"for\"](\"react.coroutine\"), ke = Symbol[\"for\"](\"react.yield\")) : (je = 60104, ke = 60105);\nvar le = { createCoroutine: function createCoroutine(a, b, c) {\n var d = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;return { $$typeof: je, key: null == d ? null : \"\" + d, children: a, handler: b, props: c };\n }, createYield: function createYield(a) {\n return { $$typeof: ke, value: a };\n }, isCoroutine: function isCoroutine(a) {\n return \"object\" === (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && null !== a && a.$$typeof === je;\n }, isYield: function isYield(a) {\n return \"object\" === (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && null !== a && a.$$typeof === ke;\n }, REACT_YIELD_TYPE: ke, REACT_COROUTINE_TYPE: je },\n me = \"function\" === typeof Symbol && Symbol[\"for\"] && Symbol[\"for\"](\"react.portal\") || 60106,\n ne = { createPortal: function createPortal(a, b, c) {\n var d = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;return { $$typeof: me, key: null == d ? null : \"\" + d, children: a, containerInfo: b, implementation: c };\n }, isPortal: function isPortal(a) {\n return \"object\" === (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && null !== a && a.$$typeof === me;\n }, REACT_PORTAL_TYPE: me },\n oe = le.REACT_COROUTINE_TYPE,\n pe = le.REACT_YIELD_TYPE,\n qe = ne.REACT_PORTAL_TYPE,\n re = de.createWorkInProgress,\n se = de.createFiberFromElement,\n te = de.createFiberFromFragment,\n ue = de.createFiberFromText,\n ve = de.createFiberFromCoroutine,\n we = de.createFiberFromYield,\n xe = de.createFiberFromPortal,\n ye = Array.isArray,\n ze = E.FunctionalComponent,\n Ae = E.ClassComponent,\n Be = E.HostText,\n Ce = E.HostPortal,\n De = E.CoroutineComponent,\n Ee = E.YieldComponent,\n Fe = E.Fragment,\n Ge = J.NoEffect,\n He = J.Placement,\n Ie = J.Deletion,\n Je = \"function\" === typeof Symbol && Symbol.iterator,\n Ke = \"function\" === typeof Symbol && Symbol[\"for\"] && Symbol[\"for\"](\"react.element\") || 60103;\nfunction Le(a) {\n if (null === a || \"undefined\" === typeof a) return null;a = Je && a[Je] || a[\"@@iterator\"];return \"function\" === typeof a ? a : null;\n}\nfunction Me(a, b) {\n var c = b.ref;if (null !== c && \"function\" !== typeof c) {\n if (b._owner) {\n b = b._owner;var d = void 0;b && (\"number\" === typeof b.tag ? (b.tag !== Ae ? w(\"110\") : void 0, d = b.stateNode) : d = b.getPublicInstance());d ? void 0 : w(\"147\", c);var e = \"\" + c;if (null !== a && null !== a.ref && a.ref._stringRef === e) return a.ref;a = function a(_a) {\n var b = d.refs === da ? d.refs = {} : d.refs;null === _a ? delete b[e] : b[e] = _a;\n };a._stringRef = e;return a;\n }\"string\" !== typeof c ? w(\"148\") : void 0;b._owner ? void 0 : w(\"149\", c);\n }return c;\n}\nfunction Ne(a, b) {\n \"textarea\" !== a.type && w(\"31\", \"[object Object]\" === Object.prototype.toString.call(b) ? \"object with keys {\" + Object.keys(b).join(\", \") + \"}\" : b, \"\");\n}\nfunction Oe(a, b) {\n function c(c, d) {\n if (b) {\n if (!a) {\n if (null === d.alternate) return;d = d.alternate;\n }var m = c.lastEffect;null !== m ? (m.nextEffect = d, c.lastEffect = d) : c.firstEffect = c.lastEffect = d;d.nextEffect = null;d.effectTag = Ie;\n }\n }function d(a, d) {\n if (!b) return null;for (; null !== d;) {\n c(a, d), d = d.sibling;\n }return null;\n }function e(a, b) {\n for (a = new Map(); null !== b;) {\n null !== b.key ? a.set(b.key, b) : a.set(b.index, b), b = b.sibling;\n }return a;\n }function f(b, c) {\n if (a) return b = re(b, c), b.index = 0, b.sibling = null, b;b.pendingWorkPriority = c;b.effectTag = Ge;\n b.index = 0;b.sibling = null;return b;\n }function g(a, c, d) {\n a.index = d;if (!b) return c;d = a.alternate;if (null !== d) return d = d.index, d < c ? (a.effectTag = He, c) : d;a.effectTag = He;return c;\n }function h(a) {\n b && null === a.alternate && (a.effectTag = He);return a;\n }function k(a, b, c, d) {\n if (null === b || b.tag !== Be) return c = ue(c, a.internalContextTag, d), c[\"return\"] = a, c;b = f(b, d);b.pendingProps = c;b[\"return\"] = a;return b;\n }function p(a, b, c, d) {\n if (null === b || b.type !== c.type) return d = se(c, a.internalContextTag, d), d.ref = Me(b, c), d[\"return\"] = a, d;d = f(b, d);d.ref = Me(b, c);d.pendingProps = c.props;d[\"return\"] = a;return d;\n }function x(a, b, c, d) {\n if (null === b || b.tag !== De) return c = ve(c, a.internalContextTag, d), c[\"return\"] = a, c;b = f(b, d);b.pendingProps = c;b[\"return\"] = a;return b;\n }function S(a, b, c, d) {\n if (null === b || b.tag !== Ee) return b = we(c, a.internalContextTag, d), b.type = c.value, b[\"return\"] = a, b;b = f(b, d);b.type = c.value;b[\"return\"] = a;return b;\n }function D(a, b, c, d) {\n if (null === b || b.tag !== Ce || b.stateNode.containerInfo !== c.containerInfo || b.stateNode.implementation !== c.implementation) return c = xe(c, a.internalContextTag, d), c[\"return\"] = a, c;b = f(b, d);b.pendingProps = c.children || [];b[\"return\"] = a;return b;\n }function y(a, b, c, d) {\n if (null === b || b.tag !== Fe) return c = te(c, a.internalContextTag, d), c[\"return\"] = a, c;b = f(b, d);b.pendingProps = c;b[\"return\"] = a;return b;\n }function B(a, b, c) {\n if (\"string\" === typeof b || \"number\" === typeof b) return b = ue(\"\" + b, a.internalContextTag, c), b[\"return\"] = a, b;if (\"object\" === (typeof b === \"undefined\" ? \"undefined\" : _typeof(b)) && null !== b) {\n switch (b.$$typeof) {case Ke:\n return c = se(b, a.internalContextTag, c), c.ref = Me(null, b), c[\"return\"] = a, c;case oe:\n return b = ve(b, a.internalContextTag, c), b[\"return\"] = a, b;case pe:\n return c = we(b, a.internalContextTag, c), c.type = b.value, c[\"return\"] = a, c;case qe:\n return b = xe(b, a.internalContextTag, c), b[\"return\"] = a, b;}if (ye(b) || Le(b)) return b = te(b, a.internalContextTag, c), b[\"return\"] = a, b;Ne(a, b);\n }return null;\n }function H(a, b, c, d) {\n var e = null !== b ? b.key : null;if (\"string\" === typeof c || \"number\" === typeof c) return null !== e ? null : k(a, b, \"\" + c, d);if (\"object\" === (typeof c === \"undefined\" ? \"undefined\" : _typeof(c)) && null !== c) {\n switch (c.$$typeof) {case Ke:\n return c.key === e ? p(a, b, c, d) : null;case oe:\n return c.key === e ? x(a, b, c, d) : null;case pe:\n return null === e ? S(a, b, c, d) : null;case qe:\n return c.key === e ? D(a, b, c, d) : null;}if (ye(c) || Le(c)) return null !== e ? null : y(a, b, c, d);Ne(a, c);\n }return null;\n }function C(a, b, c, d, e) {\n if (\"string\" === typeof d || \"number\" === typeof d) return a = a.get(c) || null, k(b, a, \"\" + d, e);if (\"object\" === (typeof d === \"undefined\" ? \"undefined\" : _typeof(d)) && null !== d) {\n switch (d.$$typeof) {case Ke:\n return a = a.get(null === d.key ? c : d.key) || null, p(b, a, d, e);case oe:\n return a = a.get(null === d.key ? c : d.key) || null, x(b, a, d, e);case pe:\n return a = a.get(c) || null, S(b, a, d, e);case qe:\n return a = a.get(null === d.key ? c : d.key) || null, D(b, a, d, e);}if (ye(d) || Le(d)) return a = a.get(c) || null, y(b, a, d, e);Ne(b, d);\n }return null;\n }function Ca(a, f, h, k) {\n for (var m = null, t = null, q = f, r = f = 0, p = null; null !== q && r < h.length; r++) {\n q.index > r ? (p = q, q = null) : p = q.sibling;var v = H(a, q, h[r], k);if (null === v) {\n null === q && (q = p);break;\n }b && q && null === v.alternate && c(a, q);f = g(v, f, r);null === t ? m = v : t.sibling = v;t = v;q = p;\n }if (r === h.length) return d(a, q), m;if (null === q) {\n for (; r < h.length; r++) {\n if (q = B(a, h[r], k)) f = g(q, f, r), null === t ? m = q : t.sibling = q, t = q;\n }return m;\n }for (q = e(a, q); r < h.length; r++) {\n if (p = C(q, a, r, h[r], k)) {\n if (b && null !== p.alternate) q[\"delete\"](null === p.key ? r : p.key);f = g(p, f, r);null === t ? m = p : t.sibling = p;t = p;\n }\n }b && q.forEach(function (b) {\n return c(a, b);\n });return m;\n }function r(a, f, h, r) {\n var m = Le(h);\"function\" !== typeof m ? w(\"150\") : void 0;h = m.call(h);null == h ? w(\"151\") : void 0;for (var t = m = null, q = f, k = f = 0, p = null, v = h.next(); null !== q && !v.done; k++, v = h.next()) {\n q.index > k ? (p = q, q = null) : p = q.sibling;var V = H(a, q, v.value, r);if (null === V) {\n q || (q = p);break;\n }b && q && null === V.alternate && c(a, q);f = g(V, f, k);null === t ? m = V : t.sibling = V;t = V;q = p;\n }if (v.done) return d(a, q), m;if (null === q) {\n for (; !v.done; k++, v = h.next()) {\n v = B(a, v.value, r), null !== v && (f = g(v, f, k), null === t ? m = v : t.sibling = v, t = v);\n }return m;\n }for (q = e(a, q); !v.done; k++, v = h.next()) {\n if (v = C(q, a, k, v.value, r), null !== v) {\n if (b && null !== v.alternate) q[\"delete\"](null === v.key ? k : v.key);f = g(v, f, k);null === t ? m = v : t.sibling = v;t = v;\n }\n }b && q.forEach(function (b) {\n return c(a, b);\n });return m;\n }return function (a, b, e, g) {\n var m = \"object\" === (typeof e === \"undefined\" ? \"undefined\" : _typeof(e)) && null !== e;if (m) switch (e.$$typeof) {case Ke:\n a: {\n var C = e.key;for (m = b; null !== m;) {\n if (m.key === C) {\n if (m.type === e.type) {\n d(a, m.sibling);b = f(m, g);b.ref = Me(m, e);b.pendingProps = e.props;b[\"return\"] = a;a = b;break a;\n } else {\n d(a, m);break;\n }\n } else c(a, m);m = m.sibling;\n }g = se(e, a.internalContextTag, g);g.ref = Me(b, e);g[\"return\"] = a;a = g;\n }return h(a);case oe:\n a: {\n for (m = e.key; null !== b;) {\n if (b.key === m) {\n if (b.tag === De) {\n d(a, b.sibling);b = f(b, g);b.pendingProps = e;b[\"return\"] = a;a = b;break a;\n } else {\n d(a, b);break;\n }\n } else c(a, b);b = b.sibling;\n }e = ve(e, a.internalContextTag, g);e[\"return\"] = a;a = e;\n }return h(a);case pe:\n a: {\n if (null !== b) if (b.tag === Ee) {\n d(a, b.sibling);b = f(b, g);b.type = e.value;b[\"return\"] = a;a = b;break a;\n } else d(a, b);b = we(e, a.internalContextTag, g);b.type = e.value;b[\"return\"] = a;a = b;\n }return h(a);case qe:\n a: {\n for (m = e.key; null !== b;) {\n if (b.key === m) {\n if (b.tag === Ce && b.stateNode.containerInfo === e.containerInfo && b.stateNode.implementation === e.implementation) {\n d(a, b.sibling);b = f(b, g);b.pendingProps = e.children || [];b[\"return\"] = a;a = b;break a;\n } else {\n d(a, b);break;\n }\n } else c(a, b);b = b.sibling;\n }e = xe(e, a.internalContextTag, g);e[\"return\"] = a;a = e;\n }return h(a);}if (\"string\" === typeof e || \"number\" === typeof e) return e = \"\" + e, null !== b && b.tag === Be ? (d(a, b.sibling), b = f(b, g), b.pendingProps = e, b[\"return\"] = a, a = b) : (d(a, b), e = ue(e, a.internalContextTag, g), e[\"return\"] = a, a = e), h(a);if (ye(e)) return Ca(a, b, e, g);if (Le(e)) return r(a, b, e, g);m && Ne(a, e);if (\"undefined\" === typeof e) switch (a.tag) {case Ae:case ze:\n e = a.type, w(\"152\", e.displayName || e.name || \"Component\");}return d(a, b);\n };\n}\nvar Pe = Oe(!0, !0),\n Qe = Oe(!1, !0),\n Re = Oe(!1, !1),\n Se = { reconcileChildFibers: Pe, reconcileChildFibersInPlace: Qe, mountChildFibersInPlace: Re, cloneChildFibers: function cloneChildFibers(a, b) {\n null !== a && b.child !== a.child ? w(\"153\") : void 0;if (null !== b.child) {\n a = b.child;var c = re(a, a.pendingWorkPriority);c.pendingProps = a.pendingProps;b.child = c;for (c[\"return\"] = b; null !== a.sibling;) {\n a = a.sibling, c = c.sibling = re(a, a.pendingWorkPriority), c.pendingProps = a.pendingProps, c[\"return\"] = b;\n }c.sibling = null;\n }\n } },\n Te = J.Update,\n Ue = Pd.AsyncUpdates,\n Ve = R.cacheContext,\n We = R.getMaskedContext,\n Xe = R.getUnmaskedContext,\n Ye = R.isContextConsumer,\n Ze = ud.addUpdate,\n $e = ud.addReplaceUpdate,\n af = ud.addForceUpdate,\n bf = ud.beginUpdateQueue,\n cf = R.hasContextChanged,\n df = bb.isMounted;\nfunction ef(a, b, c, d) {\n function e(a, b) {\n b.updater = f;a.stateNode = b;Pa.set(b, a);\n }var f = { isMounted: df, enqueueSetState: function enqueueSetState(c, d, e) {\n c = Pa.get(c);var f = b(c, !1);Ze(c, d, void 0 === e ? null : e, f);a(c, f);\n }, enqueueReplaceState: function enqueueReplaceState(c, d, e) {\n c = Pa.get(c);var f = b(c, !1);$e(c, d, void 0 === e ? null : e, f);a(c, f);\n }, enqueueForceUpdate: function enqueueForceUpdate(c, d) {\n c = Pa.get(c);var e = b(c, !1);af(c, void 0 === d ? null : d, e);a(c, e);\n } };return { adoptClassInstance: e, constructClassInstance: function constructClassInstance(a, b) {\n var c = a.type,\n d = Xe(a),\n f = Ye(a),\n g = f ? We(a, d) : da;b = new c(b, g);\n e(a, b);f && Ve(a, d, g);return b;\n }, mountClassInstance: function mountClassInstance(a, b) {\n var c = a.alternate,\n d = a.stateNode,\n e = d.state || null,\n g = a.pendingProps;g ? void 0 : w(\"158\");var h = Xe(a);d.props = g;d.state = e;d.refs = da;d.context = We(a, h);ed.enableAsyncSubtreeAPI && null != a.type && null != a.type.prototype && !0 === a.type.prototype.unstable_isAsyncReactComponent && (a.internalContextTag |= Ue);\"function\" === typeof d.componentWillMount && (h = d.state, d.componentWillMount(), h !== d.state && f.enqueueReplaceState(d, d.state, null), h = a.updateQueue, null !== h && (d.state = bf(c, a, h, d, e, g, b)));\"function\" === typeof d.componentDidMount && (a.effectTag |= Te);\n }, updateClassInstance: function updateClassInstance(a, b, e) {\n var g = b.stateNode;g.props = b.memoizedProps;g.state = b.memoizedState;var h = b.memoizedProps,\n k = b.pendingProps;k || (k = h, null == k ? w(\"159\") : void 0);var D = g.context,\n y = Xe(b);y = We(b, y);\"function\" !== typeof g.componentWillReceiveProps || h === k && D === y || (D = g.state, g.componentWillReceiveProps(k, y), g.state !== D && f.enqueueReplaceState(g, g.state, null));D = b.memoizedState;e = null !== b.updateQueue ? bf(a, b, b.updateQueue, g, D, k, e) : D;if (!(h !== k || D !== e || cf() || null !== b.updateQueue && b.updateQueue.hasForceUpdate)) return \"function\" !== typeof g.componentDidUpdate || h === a.memoizedProps && D === a.memoizedState || (b.effectTag |= Te), !1;var B = k;if (null === h || null !== b.updateQueue && b.updateQueue.hasForceUpdate) B = !0;else {\n var H = b.stateNode,\n C = b.type;B = \"function\" === typeof H.shouldComponentUpdate ? H.shouldComponentUpdate(B, e, y) : C.prototype && C.prototype.isPureReactComponent ? !ea(h, B) || !ea(D, e) : !0;\n }B ? (\"function\" === typeof g.componentWillUpdate && g.componentWillUpdate(k, e, y), \"function\" === typeof g.componentDidUpdate && (b.effectTag |= Te)) : (\"function\" !== typeof g.componentDidUpdate || h === a.memoizedProps && D === a.memoizedState || (b.effectTag |= Te), c(b, k), d(b, e));g.props = k;g.state = e;g.context = y;return B;\n } };\n}\nvar ff = Se.mountChildFibersInPlace,\n gf = Se.reconcileChildFibers,\n hf = Se.reconcileChildFibersInPlace,\n jf = Se.cloneChildFibers,\n kf = ud.beginUpdateQueue,\n lf = R.getMaskedContext,\n mf = R.getUnmaskedContext,\n nf = R.hasContextChanged,\n of = R.pushContextProvider,\n pf = R.pushTopLevelContextObject,\n qf = R.invalidateContextProvider,\n rf = E.IndeterminateComponent,\n sf = E.FunctionalComponent,\n tf = E.ClassComponent,\n uf = E.HostRoot,\n wf = E.HostComponent,\n xf = E.HostText,\n yf = E.HostPortal,\n zf = E.CoroutineComponent,\n Af = E.CoroutineHandlerPhase,\n Bf = E.YieldComponent,\n Cf = E.Fragment,\n Df = Q.NoWork,\n Ef = Q.OffscreenPriority,\n Ff = J.PerformedWork,\n Gf = J.Placement,\n Hf = J.ContentReset,\n If = J.Err,\n Jf = J.Ref,\n Kf = Qa.ReactCurrentOwner;\nfunction Lf(a, b, c, d, e) {\n function f(a, b, c) {\n g(a, b, c, b.pendingWorkPriority);\n }function g(a, b, c, d) {\n b.child = null === a ? ff(b, b.child, c, d) : a.child === b.child ? gf(b, b.child, c, d) : hf(b, b.child, c, d);\n }function h(a, b) {\n var c = b.ref;null === c || a && a.ref === c || (b.effectTag |= Jf);\n }function k(a, b, c, d) {\n h(a, b);if (!c) return d && qf(b, !1), x(a, b);c = b.stateNode;Kf.current = b;var e = c.render();b.effectTag |= Ff;f(a, b, e);b.memoizedState = c.state;b.memoizedProps = c.props;d && qf(b, !0);return b.child;\n }function p(a) {\n var b = a.stateNode;b.pendingContext ? pf(a, b.pendingContext, b.pendingContext !== b.context) : b.context && pf(a, b.context, !1);C(a, b.containerInfo);\n }function x(a, b) {\n jf(a, b);return b.child;\n }function S(a, b) {\n switch (b.tag) {case uf:\n p(b);break;case tf:\n of(b);break;case yf:\n C(b, b.stateNode.containerInfo);}return null;\n }var D = a.shouldSetTextContent,\n y = a.useSyncScheduling,\n B = a.shouldDeprioritizeSubtree,\n H = b.pushHostContext,\n C = b.pushHostContainer,\n Ca = c.enterHydrationState,\n r = c.resetHydrationState,\n m = c.tryToClaimNextHydratableInstance;a = ef(d, e, function (a, b) {\n a.memoizedProps = b;\n }, function (a, b) {\n a.memoizedState = b;\n });var t = a.adoptClassInstance,\n v = a.constructClassInstance,\n V = a.mountClassInstance,\n ld = a.updateClassInstance;return { beginWork: function beginWork(a, b, c) {\n if (b.pendingWorkPriority === Df || b.pendingWorkPriority > c) return S(a, b);switch (b.tag) {case rf:\n null !== a ? w(\"155\") : void 0;var d = b.type,\n e = b.pendingProps,\n g = mf(b);g = lf(b, g);d = d(e, g);b.effectTag |= Ff;\"object\" === (typeof d === \"undefined\" ? \"undefined\" : _typeof(d)) && null !== d && \"function\" === typeof d.render ? (b.tag = tf, e = of(b), t(b, d), V(b, c), b = k(a, b, !0, e)) : (b.tag = sf, f(a, b, d), b.memoizedProps = e, b = b.child);return b;case sf:\n a: {\n e = b.type;c = b.pendingProps;d = b.memoizedProps;if (nf()) null === c && (c = d);else if (null === c || d === c) {\n b = x(a, b);break a;\n }d = mf(b);d = lf(b, d);e = e(c, d);b.effectTag |= Ff;f(a, b, e);b.memoizedProps = c;b = b.child;\n }return b;case tf:\n return e = of(b), d = void 0, null === a ? b.stateNode ? w(\"153\") : (v(b, b.pendingProps), V(b, c), d = !0) : d = ld(a, b, c), k(a, b, d, e);case uf:\n return p(b), d = b.updateQueue, null !== d ? (e = b.memoizedState, d = kf(a, b, d, null, e, null, c), e === d ? (r(), b = x(a, b)) : (e = d.element, null !== a && null !== a.child || !Ca(b) ? (r(), f(a, b, e)) : (b.effectTag |= Gf, b.child = ff(b, b.child, e, c)), b.memoizedState = d, b = b.child)) : (r(), b = x(a, b)), b;case wf:\n H(b);null === a && m(b);e = b.type;var q = b.memoizedProps;d = b.pendingProps;null === d && (d = q, null === d ? w(\"154\") : void 0);g = null !== a ? a.memoizedProps : null;nf() || null !== d && q !== d ? (q = d.children, D(e, d) ? q = null : g && D(e, g) && (b.effectTag |= Hf), h(a, b), c !== Ef && !y && B(e, d) ? (b.pendingWorkPriority = Ef, b = null) : (f(a, b, q), b.memoizedProps = d, b = b.child)) : b = x(a, b);return b;case xf:\n return null === a && m(b), a = b.pendingProps, null === a && (a = b.memoizedProps), b.memoizedProps = a, null;case Af:\n b.tag = zf;case zf:\n c = b.pendingProps;if (nf()) null === c && (c = a && a.memoizedProps, null === c ? w(\"154\") : void 0);else if (null === c || b.memoizedProps === c) c = b.memoizedProps;e = c.children;d = b.pendingWorkPriority;b.stateNode = null === a ? ff(b, b.stateNode, e, d) : a.child === b.child ? gf(b, b.stateNode, e, d) : hf(b, b.stateNode, e, d);b.memoizedProps = c;return b.stateNode;case Bf:\n return null;case yf:\n a: {\n C(b, b.stateNode.containerInfo);c = b.pendingWorkPriority;e = b.pendingProps;if (nf()) null === e && (e = a && a.memoizedProps, null == e ? w(\"154\") : void 0);else if (null === e || b.memoizedProps === e) {\n b = x(a, b);break a;\n }null === a ? b.child = hf(b, b.child, e, c) : f(a, b, e);b.memoizedProps = e;b = b.child;\n }return b;case Cf:\n a: {\n c = b.pendingProps;if (nf()) null === c && (c = b.memoizedProps);else if (null === c || b.memoizedProps === c) {\n b = x(a, b);break a;\n }f(a, b, c);b.memoizedProps = c;b = b.child;\n }return b;default:\n w(\"156\");}\n }, beginFailedWork: function beginFailedWork(a, b, c) {\n switch (b.tag) {case tf:\n of(b);break;case uf:\n p(b);break;default:\n w(\"157\");}b.effectTag |= If;null === a ? b.child = null : b.child !== a.child && (b.child = a.child);if (b.pendingWorkPriority === Df || b.pendingWorkPriority > c) return S(a, b);b.firstEffect = null;b.lastEffect = null;g(a, b, null, c);b.tag === tf && (a = b.stateNode, b.memoizedProps = a.props, b.memoizedState = a.state);return b.child;\n } };\n}\nvar Mf = Se.reconcileChildFibers,\n Nf = R.popContextProvider,\n Of = R.popTopLevelContextObject,\n Pf = E.IndeterminateComponent,\n Qf = E.FunctionalComponent,\n Rf = E.ClassComponent,\n Sf = E.HostRoot,\n Tf = E.HostComponent,\n Uf = E.HostText,\n Vf = E.HostPortal,\n Wf = E.CoroutineComponent,\n Xf = E.CoroutineHandlerPhase,\n Yf = E.YieldComponent,\n Zf = E.Fragment,\n ag = J.Placement,\n bg = J.Ref,\n cg = J.Update,\n dg = Q.OffscreenPriority;\nfunction eg(a, b, c) {\n var d = a.createInstance,\n e = a.createTextInstance,\n f = a.appendInitialChild,\n g = a.finalizeInitialChildren,\n h = a.prepareUpdate,\n k = b.getRootHostContainer,\n p = b.popHostContext,\n x = b.getHostContext,\n S = b.popHostContainer,\n D = c.prepareToHydrateHostInstance,\n y = c.prepareToHydrateHostTextInstance,\n B = c.popHydrationState;return { completeWork: function completeWork(a, b, c) {\n var r = b.pendingProps;if (null === r) r = b.memoizedProps;else if (b.pendingWorkPriority !== dg || c === dg) b.pendingProps = null;switch (b.tag) {case Qf:\n return null;case Rf:\n return Nf(b), null;case Sf:\n S(b);Of(b);r = b.stateNode;r.pendingContext && (r.context = r.pendingContext, r.pendingContext = null);if (null === a || null === a.child) B(b), b.effectTag &= ~ag;return null;case Tf:\n p(b);c = k();var m = b.type;if (null !== a && null != b.stateNode) {\n var t = a.memoizedProps,\n C = b.stateNode,\n V = x();r = h(C, m, t, r, c, V);if (b.updateQueue = r) b.effectTag |= cg;a.ref !== b.ref && (b.effectTag |= bg);\n } else {\n if (!r) return null === b.stateNode ? w(\"166\") : void 0, null;a = x();if (B(b)) D(b, c, a) && (b.effectTag |= cg);else {\n a = d(m, r, c, a, b);a: for (t = b.child; null !== t;) {\n if (t.tag === Tf || t.tag === Uf) f(a, t.stateNode);else if (t.tag !== Vf && null !== t.child) {\n t = t.child;continue;\n }if (t === b) break a;for (; null === t.sibling;) {\n if (null === t[\"return\"] || t[\"return\"] === b) break a;t = t[\"return\"];\n }t = t.sibling;\n }g(a, m, r, c) && (b.effectTag |= cg);b.stateNode = a;\n }null !== b.ref && (b.effectTag |= bg);\n }return null;case Uf:\n if (a && null != b.stateNode) a.memoizedProps !== r && (b.effectTag |= cg);else {\n if (\"string\" !== typeof r) return null === b.stateNode ? w(\"166\") : void 0, null;a = k();c = x();B(b) ? y(b) && (b.effectTag |= cg) : b.stateNode = e(r, a, c, b);\n }return null;case Wf:\n (r = b.memoizedProps) ? void 0 : w(\"165\");b.tag = Xf;c = [];a: for ((m = b.stateNode) && (m[\"return\"] = b); null !== m;) {\n if (m.tag === Tf || m.tag === Uf || m.tag === Vf) w(\"164\");else if (m.tag === Yf) c.push(m.type);else if (null !== m.child) {\n m.child[\"return\"] = m;m = m.child;continue;\n }for (; null === m.sibling;) {\n if (null === m[\"return\"] || m[\"return\"] === b) break a;m = m[\"return\"];\n }m.sibling[\"return\"] = m[\"return\"];m = m.sibling;\n }m = r.handler;r = m(r.props, c);b.child = Mf(b, null !== a ? a.child : null, r, b.pendingWorkPriority);return b.child;\n case Xf:\n return b.tag = Wf, null;case Yf:\n return null;case Zf:\n return null;case Vf:\n return b.effectTag |= cg, S(b), null;case Pf:\n w(\"167\");default:\n w(\"156\");}\n } };\n}var fg = null,\n gg = null;function hg(a) {\n return function (b) {\n try {\n return a(b);\n } catch (c) {}\n };\n}\nvar ig = { injectInternals: function injectInternals(a) {\n if (\"undefined\" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) return !1;var b = __REACT_DEVTOOLS_GLOBAL_HOOK__;if (!b.supportsFiber) return !0;try {\n var c = b.inject(a);fg = hg(function (a) {\n return b.onCommitFiberRoot(c, a);\n });gg = hg(function (a) {\n return b.onCommitFiberUnmount(c, a);\n });\n } catch (d) {}return !0;\n }, onCommitRoot: function onCommitRoot(a) {\n \"function\" === typeof fg && fg(a);\n }, onCommitUnmount: function onCommitUnmount(a) {\n \"function\" === typeof gg && gg(a);\n } },\n jg = E.ClassComponent,\n kg = E.HostRoot,\n lg = E.HostComponent,\n mg = E.HostText,\n ng = E.HostPortal,\n og = E.CoroutineComponent,\n pg = ud.commitCallbacks,\n qg = ig.onCommitUnmount,\n rg = J.Placement,\n sg = J.Update,\n tg = J.Callback,\n ug = J.ContentReset;\nfunction vg(a, b) {\n function c(a) {\n var c = a.ref;if (null !== c) try {\n c(null);\n } catch (t) {\n b(a, t);\n }\n }function d(a) {\n return a.tag === lg || a.tag === kg || a.tag === ng;\n }function e(a) {\n for (var b = a;;) {\n if (g(b), null !== b.child && b.tag !== ng) b.child[\"return\"] = b, b = b.child;else {\n if (b === a) break;for (; null === b.sibling;) {\n if (null === b[\"return\"] || b[\"return\"] === a) return;b = b[\"return\"];\n }b.sibling[\"return\"] = b[\"return\"];b = b.sibling;\n }\n }\n }function f(a) {\n for (var b = a, c = !1, d = void 0, f = void 0;;) {\n if (!c) {\n c = b[\"return\"];a: for (;;) {\n null === c ? w(\"160\") : void 0;switch (c.tag) {case lg:\n d = c.stateNode;f = !1;break a;case kg:\n d = c.stateNode.containerInfo;f = !0;break a;case ng:\n d = c.stateNode.containerInfo;f = !0;break a;}c = c[\"return\"];\n }c = !0;\n }if (b.tag === lg || b.tag === mg) e(b), f ? C(d, b.stateNode) : H(d, b.stateNode);else if (b.tag === ng ? d = b.stateNode.containerInfo : g(b), null !== b.child) {\n b.child[\"return\"] = b;b = b.child;continue;\n }if (b === a) break;for (; null === b.sibling;) {\n if (null === b[\"return\"] || b[\"return\"] === a) return;b = b[\"return\"];b.tag === ng && (c = !1);\n }b.sibling[\"return\"] = b[\"return\"];b = b.sibling;\n }\n }function g(a) {\n \"function\" === typeof qg && qg(a);switch (a.tag) {case jg:\n c(a);var d = a.stateNode;if (\"function\" === typeof d.componentWillUnmount) try {\n d.props = a.memoizedProps, d.state = a.memoizedState, d.componentWillUnmount();\n } catch (t) {\n b(a, t);\n }break;case lg:\n c(a);break;case og:\n e(a.stateNode);break;case ng:\n f(a);}\n }var h = a.commitMount,\n k = a.commitUpdate,\n p = a.resetTextContent,\n x = a.commitTextUpdate,\n S = a.appendChild,\n D = a.appendChildToContainer,\n y = a.insertBefore,\n B = a.insertInContainerBefore,\n H = a.removeChild,\n C = a.removeChildFromContainer,\n Ca = a.getPublicInstance;\n return { commitPlacement: function commitPlacement(a) {\n a: {\n for (var b = a[\"return\"]; null !== b;) {\n if (d(b)) {\n var c = b;break a;\n }b = b[\"return\"];\n }w(\"160\");c = void 0;\n }var e = b = void 0;switch (c.tag) {case lg:\n b = c.stateNode;e = !1;break;case kg:\n b = c.stateNode.containerInfo;e = !0;break;case ng:\n b = c.stateNode.containerInfo;e = !0;break;default:\n w(\"161\");}c.effectTag & ug && (p(b), c.effectTag &= ~ug);a: b: for (c = a;;) {\n for (; null === c.sibling;) {\n if (null === c[\"return\"] || d(c[\"return\"])) {\n c = null;break a;\n }c = c[\"return\"];\n }c.sibling[\"return\"] = c[\"return\"];for (c = c.sibling; c.tag !== lg && c.tag !== mg;) {\n if (c.effectTag & rg) continue b;if (null === c.child || c.tag === ng) continue b;else c.child[\"return\"] = c, c = c.child;\n }if (!(c.effectTag & rg)) {\n c = c.stateNode;break a;\n }\n }for (var f = a;;) {\n if (f.tag === lg || f.tag === mg) c ? e ? B(b, f.stateNode, c) : y(b, f.stateNode, c) : e ? D(b, f.stateNode) : S(b, f.stateNode);else if (f.tag !== ng && null !== f.child) {\n f.child[\"return\"] = f;f = f.child;continue;\n }if (f === a) break;for (; null === f.sibling;) {\n if (null === f[\"return\"] || f[\"return\"] === a) return;f = f[\"return\"];\n }f.sibling[\"return\"] = f[\"return\"];f = f.sibling;\n }\n },\n commitDeletion: function commitDeletion(a) {\n f(a);a[\"return\"] = null;a.child = null;a.alternate && (a.alternate.child = null, a.alternate[\"return\"] = null);\n }, commitWork: function commitWork(a, b) {\n switch (b.tag) {case jg:\n break;case lg:\n var c = b.stateNode;if (null != c) {\n var d = b.memoizedProps;a = null !== a ? a.memoizedProps : d;var e = b.type,\n f = b.updateQueue;b.updateQueue = null;null !== f && k(c, f, e, a, d, b);\n }break;case mg:\n null === b.stateNode ? w(\"162\") : void 0;c = b.memoizedProps;x(b.stateNode, null !== a ? a.memoizedProps : c, c);break;case kg:\n break;case ng:\n break;default:\n w(\"163\");}\n },\n commitLifeCycles: function commitLifeCycles(a, b) {\n switch (b.tag) {case jg:\n var c = b.stateNode;if (b.effectTag & sg) if (null === a) c.props = b.memoizedProps, c.state = b.memoizedState, c.componentDidMount();else {\n var d = a.memoizedProps;a = a.memoizedState;c.props = b.memoizedProps;c.state = b.memoizedState;c.componentDidUpdate(d, a);\n }b.effectTag & tg && null !== b.updateQueue && pg(b, b.updateQueue, c);break;case kg:\n a = b.updateQueue;null !== a && pg(b, a, b.child && b.child.stateNode);break;case lg:\n c = b.stateNode;null === a && b.effectTag & sg && h(c, b.type, b.memoizedProps, b);break;case mg:\n break;case ng:\n break;default:\n w(\"163\");}\n }, commitAttachRef: function commitAttachRef(a) {\n var b = a.ref;if (null !== b) {\n var c = a.stateNode;switch (a.tag) {case lg:\n b(Ca(c));break;default:\n b(c);}\n }\n }, commitDetachRef: function commitDetachRef(a) {\n a = a.ref;null !== a && a(null);\n } };\n}var wg = xd.createCursor,\n xg = xd.pop,\n yg = xd.push,\n zg = {};\nfunction Ag(a) {\n function b(a) {\n a === zg ? w(\"174\") : void 0;return a;\n }var c = a.getChildHostContext,\n d = a.getRootHostContext,\n e = wg(zg),\n f = wg(zg),\n g = wg(zg);return { getHostContext: function getHostContext() {\n return b(e.current);\n }, getRootHostContainer: function getRootHostContainer() {\n return b(g.current);\n }, popHostContainer: function popHostContainer(a) {\n xg(e, a);xg(f, a);xg(g, a);\n }, popHostContext: function popHostContext(a) {\n f.current === a && (xg(e, a), xg(f, a));\n }, pushHostContainer: function pushHostContainer(a, b) {\n yg(g, b, a);b = d(b);yg(f, a, a);yg(e, b, a);\n }, pushHostContext: function pushHostContext(a) {\n var d = b(g.current),\n h = b(e.current);d = c(h, a.type, d);h !== d && (yg(f, a, a), yg(e, d, a));\n }, resetHostContainer: function resetHostContainer() {\n e.current = zg;g.current = zg;\n } };\n}var Bg = E.HostComponent,\n Cg = E.HostText,\n Dg = E.HostRoot,\n Eg = J.Deletion,\n Fg = J.Placement,\n Gg = de.createFiberFromHostInstanceForDeletion;\nfunction Hg(a) {\n function b(a, b) {\n var c = Gg();c.stateNode = b;c[\"return\"] = a;c.effectTag = Eg;null !== a.lastEffect ? (a.lastEffect.nextEffect = c, a.lastEffect = c) : a.firstEffect = a.lastEffect = c;\n }function c(a, b) {\n switch (a.tag) {case Bg:\n return f(b, a.type, a.pendingProps);case Cg:\n return g(b, a.pendingProps);default:\n return !1;}\n }function d(a) {\n for (a = a[\"return\"]; null !== a && a.tag !== Bg && a.tag !== Dg;) {\n a = a[\"return\"];\n }y = a;\n }var e = a.shouldSetTextContent,\n f = a.canHydrateInstance,\n g = a.canHydrateTextInstance,\n h = a.getNextHydratableSibling,\n k = a.getFirstHydratableChild,\n p = a.hydrateInstance,\n x = a.hydrateTextInstance,\n S = a.didNotHydrateInstance,\n D = a.didNotFindHydratableInstance;a = a.didNotFindHydratableTextInstance;if (!(f && g && h && k && p && x && S && D && a)) return { enterHydrationState: function enterHydrationState() {\n return !1;\n }, resetHydrationState: function resetHydrationState() {}, tryToClaimNextHydratableInstance: function tryToClaimNextHydratableInstance() {}, prepareToHydrateHostInstance: function prepareToHydrateHostInstance() {\n w(\"175\");\n }, prepareToHydrateHostTextInstance: function prepareToHydrateHostTextInstance() {\n w(\"176\");\n }, popHydrationState: function popHydrationState() {\n return !1;\n } };var y = null,\n B = null,\n H = !1;return { enterHydrationState: function enterHydrationState(a) {\n B = k(a.stateNode.containerInfo);y = a;return H = !0;\n }, resetHydrationState: function resetHydrationState() {\n B = y = null;H = !1;\n }, tryToClaimNextHydratableInstance: function tryToClaimNextHydratableInstance(a) {\n if (H) {\n var d = B;if (d) {\n if (!c(a, d)) {\n d = h(d);if (!d || !c(a, d)) {\n a.effectTag |= Fg;H = !1;y = a;return;\n }b(y, B);\n }a.stateNode = d;y = a;B = k(d);\n } else a.effectTag |= Fg, H = !1, y = a;\n }\n }, prepareToHydrateHostInstance: function prepareToHydrateHostInstance(a, b, c) {\n b = p(a.stateNode, a.type, a.memoizedProps, b, c, a);a.updateQueue = b;return null !== b ? !0 : !1;\n }, prepareToHydrateHostTextInstance: function prepareToHydrateHostTextInstance(a) {\n return x(a.stateNode, a.memoizedProps, a);\n },\n popHydrationState: function popHydrationState(a) {\n if (a !== y) return !1;if (!H) return d(a), H = !0, !1;var c = a.type;if (a.tag !== Bg || \"head\" !== c && \"body\" !== c && !e(c, a.memoizedProps)) for (c = B; c;) {\n b(a, c), c = h(c);\n }d(a);B = y ? h(a.stateNode) : null;return !0;\n } };\n}\nvar Ig = R.popContextProvider,\n Jg = xd.reset,\n Kg = Qa.ReactCurrentOwner,\n Lg = de.createWorkInProgress,\n Mg = de.largerPriority,\n Ng = ig.onCommitRoot,\n T = Q.NoWork,\n Og = Q.SynchronousPriority,\n U = Q.TaskPriority,\n Pg = Q.HighPriority,\n Qg = Q.LowPriority,\n Rg = Q.OffscreenPriority,\n Sg = Pd.AsyncUpdates,\n Tg = J.PerformedWork,\n Ug = J.Placement,\n Vg = J.Update,\n Wg = J.PlacementAndUpdate,\n Xg = J.Deletion,\n Yg = J.ContentReset,\n Zg = J.Callback,\n $g = J.Err,\n ah = J.Ref,\n bh = E.HostRoot,\n ch = E.HostComponent,\n dh = E.HostPortal,\n eh = E.ClassComponent,\n fh = ud.getUpdatePriority,\n gh = R.resetContext;\nfunction hh(a) {\n function b() {\n for (; null !== ma && ma.current.pendingWorkPriority === T;) {\n ma.isScheduled = !1;var a = ma.nextScheduledRoot;ma.nextScheduledRoot = null;if (ma === zb) return zb = ma = null, z = T, null;ma = a;\n }a = ma;for (var b = null, c = T; null !== a;) {\n a.current.pendingWorkPriority !== T && (c === T || c > a.current.pendingWorkPriority) && (c = a.current.pendingWorkPriority, b = a), a = a.nextScheduledRoot;\n }null !== b ? (z = c, Jg(), gh(), t(), I = Lg(b.current, c), b !== nc && (oc = 0, nc = b)) : (z = T, nc = I = null);\n }function c(c) {\n Hd = !0;na = null;var d = c.stateNode;d.current === c ? w(\"177\") : void 0;z !== Og && z !== U || oc++;Kg.current = null;if (c.effectTag > Tg) {\n if (null !== c.lastEffect) {\n c.lastEffect.nextEffect = c;var e = c.firstEffect;\n } else e = c;\n } else e = c.firstEffect;Ui();for (u = e; null !== u;) {\n var f = !1,\n g = void 0;try {\n for (; null !== u;) {\n var h = u.effectTag;h & Yg && a.resetTextContent(u.stateNode);if (h & ah) {\n var k = u.alternate;null !== k && Ph(k);\n }switch (h & ~(Zg | $g | Yg | ah | Tg)) {case Ug:\n q(u);u.effectTag &= ~Ug;break;case Wg:\n q(u);u.effectTag &= ~Ug;vf(u.alternate, u);break;case Vg:\n vf(u.alternate, u);break;case Xg:\n Id = !0, Mh(u), Id = !1;}u = u.nextEffect;\n }\n } catch (Jd) {\n f = !0, g = Jd;\n }f && (null === u ? w(\"178\") : void 0, x(u, g), null !== u && (u = u.nextEffect));\n }Vi();d.current = c;for (u = e; null !== u;) {\n d = !1;e = void 0;try {\n for (; null !== u;) {\n var Gd = u.effectTag;Gd & (Vg | Zg) && Nh(u.alternate, u);Gd & ah && Oh(u);if (Gd & $g) switch (f = u, g = void 0, null !== P && (g = P.get(f), P[\"delete\"](f), null == g && null !== f.alternate && (f = f.alternate, g = P.get(f), P[\"delete\"](f))), null == g ? w(\"184\") : void 0, f.tag) {case eh:\n f.stateNode.componentDidCatch(g.error, { componentStack: g.componentStack });break;case bh:\n null === Ja && (Ja = g.error);break;default:\n w(\"157\");}var m = u.nextEffect;u.nextEffect = null;u = m;\n }\n } catch (Jd) {\n d = !0, e = Jd;\n }d && (null === u ? w(\"178\") : void 0, x(u, e), null !== u && (u = u.nextEffect));\n }Hd = !1;\"function\" === typeof Ng && Ng(c.stateNode);va && (va.forEach(H), va = null);b();\n }function d(a) {\n for (;;) {\n var b = Lh(a.alternate, a, z),\n c = a[\"return\"],\n d = a.sibling;var e = a;if (!(e.pendingWorkPriority !== T && e.pendingWorkPriority > z)) {\n for (var f = fh(e), g = e.child; null !== g;) {\n f = Mg(f, g.pendingWorkPriority), g = g.sibling;\n }e.pendingWorkPriority = f;\n }if (null !== b) return b;\n null !== c && (null === c.firstEffect && (c.firstEffect = a.firstEffect), null !== a.lastEffect && (null !== c.lastEffect && (c.lastEffect.nextEffect = a.firstEffect), c.lastEffect = a.lastEffect), a.effectTag > Tg && (null !== c.lastEffect ? c.lastEffect.nextEffect = a : c.firstEffect = a, c.lastEffect = a));if (null !== d) return d;if (null !== c) a = c;else {\n na = a;break;\n }\n }return null;\n }function e(a) {\n var b = V(a.alternate, a, z);null === b && (b = d(a));Kg.current = null;return b;\n }function f(a) {\n var b = ld(a.alternate, a, z);null === b && (b = d(a));Kg.current = null;return b;\n }\n function g(a) {\n p(Rg, a);\n }function h() {\n if (null !== P && 0 < P.size && z === U) for (; null !== I;) {\n var a = I;I = null !== P && (P.has(a) || null !== a.alternate && P.has(a.alternate)) ? f(I) : e(I);if (null === I && (null === na ? w(\"179\") : void 0, O = U, c(na), O = z, null === P || 0 === P.size || z !== U)) break;\n }\n }function k(a, d) {\n null !== na ? (O = U, c(na), h()) : null === I && b();if (!(z === T || z > a)) {\n O = z;a: do {\n if (z <= U) for (; null !== I && !(I = e(I), null === I && (null === na ? w(\"179\") : void 0, O = U, c(na), O = z, h(), z === T || z > a || z > U));) {} else if (null !== d) for (; null !== I && !Ab;) {\n if (1 < d.timeRemaining()) {\n if (I = e(I), null === I) if (null === na ? w(\"179\") : void 0, 1 < d.timeRemaining()) {\n if (O = U, c(na), O = z, h(), z === T || z > a || z < Pg) break;\n } else Ab = !0;\n } else Ab = !0;\n }switch (z) {case Og:case U:\n if (z <= a) continue a;break a;case Pg:case Qg:case Rg:\n if (null === d) break a;if (!Ab && z <= a) continue a;break a;case T:\n break a;default:\n w(\"181\");}\n } while (1);\n }\n }function p(a, b) {\n Da ? w(\"182\") : void 0;Da = !0;var c = O,\n d = !1,\n e = null;try {\n k(a, b);\n } catch (Kd) {\n d = !0, e = Kd;\n }for (; d;) {\n if (Ya) {\n Ja = e;break;\n }var h = I;if (null === h) Ya = !0;else {\n var p = x(h, e);null === p ? w(\"183\") : void 0;if (!Ya) {\n try {\n d = p;e = a;p = b;for (var q = d; null !== h;) {\n switch (h.tag) {case eh:\n Ig(h);break;case ch:\n m(h);break;case bh:\n r(h);break;case dh:\n r(h);}if (h === q || h.alternate === q) break;h = h[\"return\"];\n }I = f(d);k(e, p);\n } catch (Kd) {\n d = !0;e = Kd;continue;\n }break;\n }\n }\n }O = c;null !== b && (Bb = !1);z > U && !Bb && ($f(g), Bb = !0);a = Ja;Ya = Ab = Da = !1;nc = Ka = P = Ja = null;oc = 0;if (null !== a) throw a;\n }function x(a, b) {\n var c = Kg.current = null,\n d = !1,\n e = !1,\n f = null;if (a.tag === bh) c = a, S(a) && (Ya = !0);else for (var g = a[\"return\"]; null !== g && null === c;) {\n g.tag === eh ? \"function\" === typeof g.stateNode.componentDidCatch && (d = !0, f = Ra(g), c = g, e = !0) : g.tag === bh && (c = g);if (S(g)) {\n if (Id || null !== va && (va.has(g) || null !== g.alternate && va.has(g.alternate))) return null;c = null;e = !1;\n }g = g[\"return\"];\n }if (null !== c) {\n null === Ka && (Ka = new Set());Ka.add(c);var h = \"\";g = a;do {\n a: switch (g.tag) {case fe:case ge:case he:case ie:\n var k = g._debugOwner,\n m = g._debugSource;var p = Ra(g);var q = null;k && (q = Ra(k));k = m;p = \"\\n in \" + (p || \"Unknown\") + (k ? \" (at \" + k.fileName.replace(/^.*[\\\\\\/]/, \"\") + \":\" + k.lineNumber + \")\" : q ? \" (created by \" + q + \")\" : \"\");break a;default:\n p = \"\";}h += p;g = g[\"return\"];\n } while (g);\n g = h;a = Ra(a);null === P && (P = new Map());b = { componentName: a, componentStack: g, error: b, errorBoundary: d ? c.stateNode : null, errorBoundaryFound: d, errorBoundaryName: f, willRetry: e };P.set(c, b);try {\n console.error(b.error);\n } catch (Wi) {\n console.error(Wi);\n }Hd ? (null === va && (va = new Set()), va.add(c)) : H(c);return c;\n }null === Ja && (Ja = b);return null;\n }function S(a) {\n return null !== Ka && (Ka.has(a) || null !== a.alternate && Ka.has(a.alternate));\n }function D(a, b) {\n return y(a, b, !1);\n }function y(a, b) {\n oc > Xi && (Ya = !0, w(\"185\"));!Da && b <= z && (I = null);for (var c = !0; null !== a && c;) {\n c = !1;if (a.pendingWorkPriority === T || a.pendingWorkPriority > b) c = !0, a.pendingWorkPriority = b;null !== a.alternate && (a.alternate.pendingWorkPriority === T || a.alternate.pendingWorkPriority > b) && (c = !0, a.alternate.pendingWorkPriority = b);if (null === a[\"return\"]) if (a.tag === bh) {\n var d = a.stateNode;b === T || d.isScheduled || (d.isScheduled = !0, zb ? zb.nextScheduledRoot = d : ma = d, zb = d);if (!Da) switch (b) {case Og:\n pc ? p(Og, null) : p(U, null);break;case U:\n W ? void 0 : w(\"186\");break;default:\n Bb || ($f(g), Bb = !0);}\n } else break;a = a[\"return\"];\n }\n }\n function B(a, b) {\n var c = O;c === T && (c = !Yi || a.internalContextTag & Sg || b ? Qg : Og);return c === Og && (Da || W) ? U : c;\n }function H(a) {\n y(a, U, !0);\n }var C = Ag(a),\n Ca = Hg(a),\n r = C.popHostContainer,\n m = C.popHostContext,\n t = C.resetHostContainer,\n v = Lf(a, C, Ca, D, B),\n V = v.beginWork,\n ld = v.beginFailedWork,\n Lh = eg(a, C, Ca).completeWork;C = vg(a, x);var q = C.commitPlacement,\n Mh = C.commitDeletion,\n vf = C.commitWork,\n Nh = C.commitLifeCycles,\n Oh = C.commitAttachRef,\n Ph = C.commitDetachRef,\n $f = a.scheduleDeferredCallback,\n Yi = a.useSyncScheduling,\n Ui = a.prepareForCommit,\n Vi = a.resetAfterCommit,\n O = T,\n Da = !1,\n Ab = !1,\n W = !1,\n pc = !1,\n I = null,\n z = T,\n u = null,\n na = null,\n ma = null,\n zb = null,\n Bb = !1,\n P = null,\n Ka = null,\n va = null,\n Ja = null,\n Ya = !1,\n Hd = !1,\n Id = !1,\n Xi = 1E3,\n oc = 0,\n nc = null;return { scheduleUpdate: D, getPriorityContext: B, batchedUpdates: function batchedUpdates(a, b) {\n var c = W;W = !0;try {\n return a(b);\n } finally {\n W = c, Da || W || p(U, null);\n }\n }, unbatchedUpdates: function unbatchedUpdates(a) {\n var b = pc,\n c = W;pc = W;W = !1;try {\n return a();\n } finally {\n W = c, pc = b;\n }\n }, flushSync: function flushSync(a) {\n var b = W,\n c = O;W = !0;O = Og;try {\n return a();\n } finally {\n W = b, O = c, Da ? w(\"187\") : void 0, p(U, null);\n }\n }, deferredUpdates: function deferredUpdates(a) {\n var b = O;O = Qg;try {\n return a();\n } finally {\n O = b;\n }\n } };\n}function ih() {\n w(\"196\");\n}function jh(a) {\n if (!a) return da;a = Pa.get(a);return \"number\" === typeof a.tag ? ih(a) : a._processChildContext(a._context);\n}jh._injectFiber = function (a) {\n ih = a;\n};var kh = ud.addTopLevelUpdate,\n lh = R.findCurrentUnmaskedContext,\n mh = R.isContextProvider,\n nh = R.processChildContext,\n oh = E.HostComponent,\n ph = bb.findCurrentHostFiber,\n qh = bb.findCurrentHostFiberWithNoPortals;jh._injectFiber(function (a) {\n var b = lh(a);return mh(a) ? nh(a, b, !1) : b;\n});var rh = F.TEXT_NODE;\nfunction sh(a) {\n for (; a && a.firstChild;) {\n a = a.firstChild;\n }return a;\n}function th(a, b) {\n var c = sh(a);a = 0;for (var d; c;) {\n if (c.nodeType === rh) {\n d = a + c.textContent.length;if (a <= b && d >= b) return { node: c, offset: b - a };a = d;\n }a: {\n for (; c;) {\n if (c.nextSibling) {\n c = c.nextSibling;break a;\n }c = c.parentNode;\n }c = void 0;\n }c = sh(c);\n }\n}var uh = null;function vh() {\n !uh && l.canUseDOM && (uh = \"textContent\" in document.documentElement ? \"textContent\" : \"innerText\");return uh;\n}\nvar wh = { getOffsets: function getOffsets(a) {\n var b = window.getSelection && window.getSelection();if (!b || 0 === b.rangeCount) return null;var c = b.anchorNode,\n d = b.anchorOffset,\n e = b.focusNode,\n f = b.focusOffset,\n g = b.getRangeAt(0);try {\n g.startContainer.nodeType, g.endContainer.nodeType;\n } catch (k) {\n return null;\n }b = b.anchorNode === b.focusNode && b.anchorOffset === b.focusOffset ? 0 : g.toString().length;var h = g.cloneRange();h.selectNodeContents(a);h.setEnd(g.startContainer, g.startOffset);a = h.startContainer === h.endContainer && h.startOffset === h.endOffset ? 0 : h.toString().length;g = a + b;b = document.createRange();b.setStart(c, d);b.setEnd(e, f);c = b.collapsed;return { start: c ? g : a, end: c ? a : g };\n }, setOffsets: function setOffsets(a, b) {\n if (window.getSelection) {\n var c = window.getSelection(),\n d = a[vh()].length,\n e = Math.min(b.start, d);b = void 0 === b.end ? e : Math.min(b.end, d);!c.extend && e > b && (d = b, b = e, e = d);d = th(a, e);a = th(a, b);if (d && a) {\n var f = document.createRange();f.setStart(d.node, d.offset);c.removeAllRanges();e > b ? (c.addRange(f), c.extend(a.node, a.offset)) : (f.setEnd(a.node, a.offset), c.addRange(f));\n }\n }\n } },\n xh = F.ELEMENT_NODE,\n yh = { hasSelectionCapabilities: function hasSelectionCapabilities(a) {\n var b = a && a.nodeName && a.nodeName.toLowerCase();return b && (\"input\" === b && \"text\" === a.type || \"textarea\" === b || \"true\" === a.contentEditable);\n }, getSelectionInformation: function getSelectionInformation() {\n var a = ia();return { focusedElem: a, selectionRange: yh.hasSelectionCapabilities(a) ? yh.getSelection(a) : null };\n }, restoreSelection: function restoreSelection(a) {\n var b = ia(),\n c = a.focusedElem;a = a.selectionRange;if (b !== c && fa(document.documentElement, c)) {\n yh.hasSelectionCapabilities(c) && yh.setSelection(c, a);b = [];for (a = c; a = a.parentNode;) {\n a.nodeType === xh && b.push({ element: a, left: a.scrollLeft, top: a.scrollTop });\n }ha(c);for (c = 0; c < b.length; c++) {\n a = b[c], a.element.scrollLeft = a.left, a.element.scrollTop = a.top;\n }\n }\n }, getSelection: function getSelection(a) {\n return (\"selectionStart\" in a ? { start: a.selectionStart, end: a.selectionEnd } : wh.getOffsets(a)) || { start: 0, end: 0 };\n }, setSelection: function setSelection(a, b) {\n var c = b.start,\n d = b.end;void 0 === d && (d = c);\"selectionStart\" in a ? (a.selectionStart = c, a.selectionEnd = Math.min(d, a.value.length)) : wh.setOffsets(a, b);\n } },\n zh = yh,\n Ah = F.ELEMENT_NODE;function Bh() {\n w(\"211\");\n}function Ch() {\n w(\"212\");\n}function Dh(a) {\n if (null == a) return null;if (a.nodeType === Ah) return a;var b = Pa.get(a);if (b) return \"number\" === typeof b.tag ? Bh(b) : Ch(b);\"function\" === typeof a.render ? w(\"188\") : w(\"213\", Object.keys(a));\n}Dh._injectFiber = function (a) {\n Bh = a;\n};Dh._injectStack = function (a) {\n Ch = a;\n};var Eh = E.HostComponent;function Fh(a) {\n if (void 0 !== a._hostParent) return a._hostParent;if (\"number\" === typeof a.tag) {\n do {\n a = a[\"return\"];\n } while (a && a.tag !== Eh);if (a) return a;\n }return null;\n}\nfunction Gh(a, b) {\n for (var c = 0, d = a; d; d = Fh(d)) {\n c++;\n }d = 0;for (var e = b; e; e = Fh(e)) {\n d++;\n }for (; 0 < c - d;) {\n a = Fh(a), c--;\n }for (; 0 < d - c;) {\n b = Fh(b), d--;\n }for (; c--;) {\n if (a === b || a === b.alternate) return a;a = Fh(a);b = Fh(b);\n }return null;\n}\nvar Hh = { isAncestor: function isAncestor(a, b) {\n for (; b;) {\n if (a === b || a === b.alternate) return !0;b = Fh(b);\n }return !1;\n }, getLowestCommonAncestor: Gh, getParentInstance: function getParentInstance(a) {\n return Fh(a);\n }, traverseTwoPhase: function traverseTwoPhase(a, b, c) {\n for (var d = []; a;) {\n d.push(a), a = Fh(a);\n }for (a = d.length; 0 < a--;) {\n b(d[a], \"captured\", c);\n }for (a = 0; a < d.length; a++) {\n b(d[a], \"bubbled\", c);\n }\n }, traverseEnterLeave: function traverseEnterLeave(a, b, c, d, e) {\n for (var f = a && b ? Gh(a, b) : null, g = []; a && a !== f;) {\n g.push(a), a = Fh(a);\n }for (a = []; b && b !== f;) {\n a.push(b), b = Fh(b);\n }for (b = 0; b < g.length; b++) {\n c(g[b], \"bubbled\", d);\n }for (b = a.length; 0 < b--;) {\n c(a[b], \"captured\", e);\n }\n } },\n Ih = Jb.getListener;function Jh(a, b, c) {\n if (b = Ih(a, c.dispatchConfig.phasedRegistrationNames[b])) c._dispatchListeners = Cb(c._dispatchListeners, b), c._dispatchInstances = Cb(c._dispatchInstances, a);\n}function Kh(a) {\n a && a.dispatchConfig.phasedRegistrationNames && Hh.traverseTwoPhase(a._targetInst, Jh, a);\n}function Qh(a) {\n if (a && a.dispatchConfig.phasedRegistrationNames) {\n var b = a._targetInst;b = b ? Hh.getParentInstance(b) : null;Hh.traverseTwoPhase(b, Jh, a);\n }\n}\nfunction Rh(a, b, c) {\n a && c && c.dispatchConfig.registrationName && (b = Ih(a, c.dispatchConfig.registrationName)) && (c._dispatchListeners = Cb(c._dispatchListeners, b), c._dispatchInstances = Cb(c._dispatchInstances, a));\n}function Sh(a) {\n a && a.dispatchConfig.registrationName && Rh(a._targetInst, null, a);\n}\nvar Th = { accumulateTwoPhaseDispatches: function accumulateTwoPhaseDispatches(a) {\n Db(a, Kh);\n }, accumulateTwoPhaseDispatchesSkipTarget: function accumulateTwoPhaseDispatchesSkipTarget(a) {\n Db(a, Qh);\n }, accumulateDirectDispatches: function accumulateDirectDispatches(a) {\n Db(a, Sh);\n }, accumulateEnterLeaveDispatches: function accumulateEnterLeaveDispatches(a, b, c, d) {\n Hh.traverseEnterLeave(c, d, Rh, a, b);\n } },\n X = { _root: null, _startText: null, _fallbackText: null },\n Uh = { initialize: function initialize(a) {\n X._root = a;X._startText = Uh.getText();return !0;\n }, reset: function reset() {\n X._root = null;X._startText = null;X._fallbackText = null;\n }, getData: function getData() {\n if (X._fallbackText) return X._fallbackText;\n var a,\n b = X._startText,\n c = b.length,\n d,\n e = Uh.getText(),\n f = e.length;for (a = 0; a < c && b[a] === e[a]; a++) {}var g = c - a;for (d = 1; d <= g && b[c - d] === e[f - d]; d++) {}X._fallbackText = e.slice(a, 1 < d ? 1 - d : void 0);return X._fallbackText;\n }, getText: function getText() {\n return \"value\" in X._root ? X._root.value : X._root[vh()];\n } },\n Vh = Uh,\n Wh = \"dispatchConfig _targetInst nativeEvent isDefaultPrevented isPropagationStopped _dispatchListeners _dispatchInstances\".split(\" \"),\n Xh = { type: null, target: null, currentTarget: ca.thatReturnsNull, eventPhase: null, bubbles: null,\n cancelable: null, timeStamp: function timeStamp(a) {\n return a.timeStamp || Date.now();\n }, defaultPrevented: null, isTrusted: null };\nfunction Y(a, b, c, d) {\n this.dispatchConfig = a;this._targetInst = b;this.nativeEvent = c;a = this.constructor.Interface;for (var e in a) {\n a.hasOwnProperty(e) && ((b = a[e]) ? this[e] = b(c) : \"target\" === e ? this.target = d : this[e] = c[e]);\n }this.isDefaultPrevented = (null != c.defaultPrevented ? c.defaultPrevented : !1 === c.returnValue) ? ca.thatReturnsTrue : ca.thatReturnsFalse;this.isPropagationStopped = ca.thatReturnsFalse;return this;\n}\nn(Y.prototype, { preventDefault: function preventDefault() {\n this.defaultPrevented = !0;var a = this.nativeEvent;a && (a.preventDefault ? a.preventDefault() : \"unknown\" !== typeof a.returnValue && (a.returnValue = !1), this.isDefaultPrevented = ca.thatReturnsTrue);\n }, stopPropagation: function stopPropagation() {\n var a = this.nativeEvent;a && (a.stopPropagation ? a.stopPropagation() : \"unknown\" !== typeof a.cancelBubble && (a.cancelBubble = !0), this.isPropagationStopped = ca.thatReturnsTrue);\n }, persist: function persist() {\n this.isPersistent = ca.thatReturnsTrue;\n }, isPersistent: ca.thatReturnsFalse,\n destructor: function destructor() {\n var a = this.constructor.Interface,\n b;for (b in a) {\n this[b] = null;\n }for (a = 0; a < Wh.length; a++) {\n this[Wh[a]] = null;\n }\n } });Y.Interface = Xh;Y.augmentClass = function (a, b) {\n function c() {}c.prototype = this.prototype;var d = new c();n(d, a.prototype);a.prototype = d;a.prototype.constructor = a;a.Interface = n({}, this.Interface, b);a.augmentClass = this.augmentClass;Yh(a);\n};Yh(Y);function Zh(a, b, c, d) {\n if (this.eventPool.length) {\n var e = this.eventPool.pop();this.call(e, a, b, c, d);return e;\n }return new this(a, b, c, d);\n}\nfunction $h(a) {\n a instanceof this ? void 0 : w(\"223\");a.destructor();10 > this.eventPool.length && this.eventPool.push(a);\n}function Yh(a) {\n a.eventPool = [];a.getPooled = Zh;a.release = $h;\n}function ai(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Y.augmentClass(ai, { data: null });function bi(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Y.augmentClass(bi, { data: null });var ci = [9, 13, 27, 32],\n di = l.canUseDOM && \"CompositionEvent\" in window,\n ei = null;l.canUseDOM && \"documentMode\" in document && (ei = document.documentMode);var fi;\nif (fi = l.canUseDOM && \"TextEvent\" in window && !ei) {\n var gi = window.opera;fi = !(\"object\" === (typeof gi === \"undefined\" ? \"undefined\" : _typeof(gi)) && \"function\" === typeof gi.version && 12 >= parseInt(gi.version(), 10));\n}\nvar hi = fi,\n ii = l.canUseDOM && (!di || ei && 8 < ei && 11 >= ei),\n ji = String.fromCharCode(32),\n ki = { beforeInput: { phasedRegistrationNames: { bubbled: \"onBeforeInput\", captured: \"onBeforeInputCapture\" }, dependencies: [\"topCompositionEnd\", \"topKeyPress\", \"topTextInput\", \"topPaste\"] }, compositionEnd: { phasedRegistrationNames: { bubbled: \"onCompositionEnd\", captured: \"onCompositionEndCapture\" }, dependencies: \"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \") }, compositionStart: { phasedRegistrationNames: { bubbled: \"onCompositionStart\",\n captured: \"onCompositionStartCapture\" }, dependencies: \"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \") }, compositionUpdate: { phasedRegistrationNames: { bubbled: \"onCompositionUpdate\", captured: \"onCompositionUpdateCapture\" }, dependencies: \"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \") } },\n li = !1;\nfunction mi(a, b) {\n switch (a) {case \"topKeyUp\":\n return -1 !== ci.indexOf(b.keyCode);case \"topKeyDown\":\n return 229 !== b.keyCode;case \"topKeyPress\":case \"topMouseDown\":case \"topBlur\":\n return !0;default:\n return !1;}\n}function ni(a) {\n a = a.detail;return \"object\" === (typeof a === \"undefined\" ? \"undefined\" : _typeof(a)) && \"data\" in a ? a.data : null;\n}var oi = !1;function pi(a, b) {\n switch (a) {case \"topCompositionEnd\":\n return ni(b);case \"topKeyPress\":\n if (32 !== b.which) return null;li = !0;return ji;case \"topTextInput\":\n return a = b.data, a === ji && li ? null : a;default:\n return null;}\n}\nfunction qi(a, b) {\n if (oi) return \"topCompositionEnd\" === a || !di && mi(a, b) ? (a = Vh.getData(), Vh.reset(), oi = !1, a) : null;switch (a) {case \"topPaste\":\n return null;case \"topKeyPress\":\n if (!(b.ctrlKey || b.altKey || b.metaKey) || b.ctrlKey && b.altKey) {\n if (b.char && 1 < b.char.length) return b.char;if (b.which) return String.fromCharCode(b.which);\n }return null;case \"topCompositionEnd\":\n return ii ? null : b.data;default:\n return null;}\n}\nvar ri = { eventTypes: ki, extractEvents: function extractEvents(a, b, c, d) {\n var e;if (di) b: {\n switch (a) {case \"topCompositionStart\":\n var f = ki.compositionStart;break b;case \"topCompositionEnd\":\n f = ki.compositionEnd;break b;case \"topCompositionUpdate\":\n f = ki.compositionUpdate;break b;}f = void 0;\n } else oi ? mi(a, c) && (f = ki.compositionEnd) : \"topKeyDown\" === a && 229 === c.keyCode && (f = ki.compositionStart);f ? (ii && (oi || f !== ki.compositionStart ? f === ki.compositionEnd && oi && (e = Vh.getData()) : oi = Vh.initialize(d)), f = ai.getPooled(f, b, c, d), e ? f.data = e : (e = ni(c), null !== e && (f.data = e)), Th.accumulateTwoPhaseDispatches(f), e = f) : e = null;(a = hi ? pi(a, c) : qi(a, c)) ? (b = bi.getPooled(ki.beforeInput, b, c, d), b.data = a, Th.accumulateTwoPhaseDispatches(b)) : b = null;return [e, b];\n } },\n si = { color: !0, date: !0, datetime: !0, \"datetime-local\": !0, email: !0, month: !0, number: !0, password: !0, range: !0, search: !0, tel: !0, text: !0, time: !0, url: !0, week: !0 };function ti(a) {\n var b = a && a.nodeName && a.nodeName.toLowerCase();return \"input\" === b ? !!si[a.type] : \"textarea\" === b ? !0 : !1;\n}\nvar ui = { change: { phasedRegistrationNames: { bubbled: \"onChange\", captured: \"onChangeCapture\" }, dependencies: \"topBlur topChange topClick topFocus topInput topKeyDown topKeyUp topSelectionChange\".split(\" \") } };function vi(a, b, c) {\n a = Y.getPooled(ui.change, a, b, c);a.type = \"change\";nb.enqueueStateRestore(c);Th.accumulateTwoPhaseDispatches(a);return a;\n}var wi = null,\n xi = null;function yi(a) {\n Jb.enqueueEvents(a);Jb.processEventQueue(!1);\n}\nfunction zi(a) {\n var b = G.getNodeFromInstance(a);if (Bc.updateValueIfChanged(b)) return a;\n}function Ai(a, b) {\n if (\"topChange\" === a) return b;\n}var Bi = !1;l.canUseDOM && (Bi = Lb(\"input\") && (!document.documentMode || 9 < document.documentMode));function Ci() {\n wi && (wi.detachEvent(\"onpropertychange\", Di), xi = wi = null);\n}function Di(a) {\n \"value\" === a.propertyName && zi(xi) && (a = vi(xi, a, ub(a)), sb.batchedUpdates(yi, a));\n}function Ei(a, b, c) {\n \"topFocus\" === a ? (Ci(), wi = b, xi = c, wi.attachEvent(\"onpropertychange\", Di)) : \"topBlur\" === a && Ci();\n}\nfunction Fi(a) {\n if (\"topSelectionChange\" === a || \"topKeyUp\" === a || \"topKeyDown\" === a) return zi(xi);\n}function Gi(a, b) {\n if (\"topClick\" === a) return zi(b);\n}function Hi(a, b) {\n if (\"topInput\" === a || \"topChange\" === a) return zi(b);\n}\nvar Ii = { eventTypes: ui, _isInputEventSupported: Bi, extractEvents: function extractEvents(a, b, c, d) {\n var e = b ? G.getNodeFromInstance(b) : window,\n f = e.nodeName && e.nodeName.toLowerCase();if (\"select\" === f || \"input\" === f && \"file\" === e.type) var g = Ai;else if (ti(e)) {\n if (Bi) g = Hi;else {\n g = Fi;var h = Ei;\n }\n } else f = e.nodeName, !f || \"input\" !== f.toLowerCase() || \"checkbox\" !== e.type && \"radio\" !== e.type || (g = Gi);if (g && (g = g(a, b))) return vi(g, c, d);h && h(a, e, b);\"topBlur\" === a && null != b && (a = b._wrapperState || e._wrapperState) && a.controlled && \"number\" === e.type && (a = \"\" + e.value, e.getAttribute(\"value\") !== a && e.setAttribute(\"value\", a));\n } };function Ji(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Y.augmentClass(Ji, { view: function view(a) {\n if (a.view) return a.view;a = ub(a);return a.window === a ? a : (a = a.ownerDocument) ? a.defaultView || a.parentWindow : window;\n }, detail: function detail(a) {\n return a.detail || 0;\n } });var Ki = { Alt: \"altKey\", Control: \"ctrlKey\", Meta: \"metaKey\", Shift: \"shiftKey\" };function Li(a) {\n var b = this.nativeEvent;return b.getModifierState ? b.getModifierState(a) : (a = Ki[a]) ? !!b[a] : !1;\n}function Mi() {\n return Li;\n}\nfunction Ni(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Ji.augmentClass(Ni, { screenX: null, screenY: null, clientX: null, clientY: null, pageX: null, pageY: null, ctrlKey: null, shiftKey: null, altKey: null, metaKey: null, getModifierState: Mi, button: null, buttons: null, relatedTarget: function relatedTarget(a) {\n return a.relatedTarget || (a.fromElement === a.srcElement ? a.toElement : a.fromElement);\n } });\nvar Oi = { mouseEnter: { registrationName: \"onMouseEnter\", dependencies: [\"topMouseOut\", \"topMouseOver\"] }, mouseLeave: { registrationName: \"onMouseLeave\", dependencies: [\"topMouseOut\", \"topMouseOver\"] } },\n Pi = { eventTypes: Oi, extractEvents: function extractEvents(a, b, c, d) {\n if (\"topMouseOver\" === a && (c.relatedTarget || c.fromElement) || \"topMouseOut\" !== a && \"topMouseOver\" !== a) return null;var e = d.window === d ? d : (e = d.ownerDocument) ? e.defaultView || e.parentWindow : window;\"topMouseOut\" === a ? (a = b, b = (b = c.relatedTarget || c.toElement) ? G.getClosestInstanceFromNode(b) : null) : a = null;if (a === b) return null;var f = null == a ? e : G.getNodeFromInstance(a);e = null == b ? e : G.getNodeFromInstance(b);var g = Ni.getPooled(Oi.mouseLeave, a, c, d);g.type = \"mouseleave\";g.target = f;g.relatedTarget = e;c = Ni.getPooled(Oi.mouseEnter, b, c, d);c.type = \"mouseenter\";c.target = e;c.relatedTarget = f;Th.accumulateEnterLeaveDispatches(g, c, a, b);return [g, c];\n } },\n Qi = F.DOCUMENT_NODE,\n Ri = l.canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n Si = { select: { phasedRegistrationNames: { bubbled: \"onSelect\", captured: \"onSelectCapture\" },\n dependencies: \"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange\".split(\" \") } },\n Ti = null,\n Zi = null,\n $i = null,\n aj = !1,\n bj = M.isListeningToAllDependencies;\nfunction cj(a, b) {\n if (aj || null == Ti || Ti !== ia()) return null;var c = Ti;\"selectionStart\" in c && zh.hasSelectionCapabilities(c) ? c = { start: c.selectionStart, end: c.selectionEnd } : window.getSelection ? (c = window.getSelection(), c = { anchorNode: c.anchorNode, anchorOffset: c.anchorOffset, focusNode: c.focusNode, focusOffset: c.focusOffset }) : c = void 0;return $i && ea($i, c) ? null : ($i = c, a = Y.getPooled(Si.select, Zi, a, b), a.type = \"select\", a.target = Ti, Th.accumulateTwoPhaseDispatches(a), a);\n}\nvar dj = { eventTypes: Si, extractEvents: function extractEvents(a, b, c, d) {\n var e = d.window === d ? d.document : d.nodeType === Qi ? d : d.ownerDocument;if (!e || !bj(\"onSelect\", e)) return null;e = b ? G.getNodeFromInstance(b) : window;switch (a) {case \"topFocus\":\n if (ti(e) || \"true\" === e.contentEditable) Ti = e, Zi = b, $i = null;break;case \"topBlur\":\n $i = Zi = Ti = null;break;case \"topMouseDown\":\n aj = !0;break;case \"topContextMenu\":case \"topMouseUp\":\n return aj = !1, cj(c, d);case \"topSelectionChange\":\n if (Ri) break;case \"topKeyDown\":case \"topKeyUp\":\n return cj(c, d);}return null;\n } };\nfunction ej(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Y.augmentClass(ej, { animationName: null, elapsedTime: null, pseudoElement: null });function fj(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Y.augmentClass(fj, { clipboardData: function clipboardData(a) {\n return \"clipboardData\" in a ? a.clipboardData : window.clipboardData;\n } });function gj(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Ji.augmentClass(gj, { relatedTarget: null });function hj(a) {\n var b = a.keyCode;\"charCode\" in a ? (a = a.charCode, 0 === a && 13 === b && (a = 13)) : a = b;return 32 <= a || 13 === a ? a : 0;\n}\nvar ij = { Esc: \"Escape\", Spacebar: \" \", Left: \"ArrowLeft\", Up: \"ArrowUp\", Right: \"ArrowRight\", Down: \"ArrowDown\", Del: \"Delete\", Win: \"OS\", Menu: \"ContextMenu\", Apps: \"ContextMenu\", Scroll: \"ScrollLock\", MozPrintableKey: \"Unidentified\" },\n jj = { 8: \"Backspace\", 9: \"Tab\", 12: \"Clear\", 13: \"Enter\", 16: \"Shift\", 17: \"Control\", 18: \"Alt\", 19: \"Pause\", 20: \"CapsLock\", 27: \"Escape\", 32: \" \", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\", 36: \"Home\", 37: \"ArrowLeft\", 38: \"ArrowUp\", 39: \"ArrowRight\", 40: \"ArrowDown\", 45: \"Insert\", 46: \"Delete\", 112: \"F1\", 113: \"F2\", 114: \"F3\", 115: \"F4\",\n 116: \"F5\", 117: \"F6\", 118: \"F7\", 119: \"F8\", 120: \"F9\", 121: \"F10\", 122: \"F11\", 123: \"F12\", 144: \"NumLock\", 145: \"ScrollLock\", 224: \"Meta\" };function kj(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}\nJi.augmentClass(kj, { key: function key(a) {\n if (a.key) {\n var b = ij[a.key] || a.key;if (\"Unidentified\" !== b) return b;\n }return \"keypress\" === a.type ? (a = hj(a), 13 === a ? \"Enter\" : String.fromCharCode(a)) : \"keydown\" === a.type || \"keyup\" === a.type ? jj[a.keyCode] || \"Unidentified\" : \"\";\n }, location: null, ctrlKey: null, shiftKey: null, altKey: null, metaKey: null, repeat: null, locale: null, getModifierState: Mi, charCode: function charCode(a) {\n return \"keypress\" === a.type ? hj(a) : 0;\n }, keyCode: function keyCode(a) {\n return \"keydown\" === a.type || \"keyup\" === a.type ? a.keyCode : 0;\n }, which: function which(a) {\n return \"keypress\" === a.type ? hj(a) : \"keydown\" === a.type || \"keyup\" === a.type ? a.keyCode : 0;\n } });function lj(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Ni.augmentClass(lj, { dataTransfer: null });function mj(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Ji.augmentClass(mj, { touches: null, targetTouches: null, changedTouches: null, altKey: null, metaKey: null, ctrlKey: null, shiftKey: null, getModifierState: Mi });function nj(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Y.augmentClass(nj, { propertyName: null, elapsedTime: null, pseudoElement: null });\nfunction oj(a, b, c, d) {\n return Y.call(this, a, b, c, d);\n}Ni.augmentClass(oj, { deltaX: function deltaX(a) {\n return \"deltaX\" in a ? a.deltaX : \"wheelDeltaX\" in a ? -a.wheelDeltaX : 0;\n }, deltaY: function deltaY(a) {\n return \"deltaY\" in a ? a.deltaY : \"wheelDeltaY\" in a ? -a.wheelDeltaY : \"wheelDelta\" in a ? -a.wheelDelta : 0;\n }, deltaZ: null, deltaMode: null });var pj = {},\n qj = {};\n\"abort animationEnd animationIteration animationStart blur cancel canPlay canPlayThrough click close contextMenu copy cut doubleClick drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error focus input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing progress rateChange reset scroll seeked seeking stalled submit suspend timeUpdate toggle touchCancel touchEnd touchMove touchStart transitionEnd volumeChange waiting wheel\".split(\" \").forEach(function (a) {\n var b = a[0].toUpperCase() + a.slice(1),\n c = \"on\" + b;b = \"top\" + b;c = { phasedRegistrationNames: { bubbled: c, captured: c + \"Capture\" }, dependencies: [b] };pj[a] = c;qj[b] = c;\n});\nvar rj = { eventTypes: pj, extractEvents: function extractEvents(a, b, c, d) {\n var e = qj[a];if (!e) return null;switch (a) {case \"topAbort\":case \"topCancel\":case \"topCanPlay\":case \"topCanPlayThrough\":case \"topClose\":case \"topDurationChange\":case \"topEmptied\":case \"topEncrypted\":case \"topEnded\":case \"topError\":case \"topInput\":case \"topInvalid\":case \"topLoad\":case \"topLoadedData\":case \"topLoadedMetadata\":case \"topLoadStart\":case \"topPause\":case \"topPlay\":case \"topPlaying\":case \"topProgress\":case \"topRateChange\":case \"topReset\":case \"topSeeked\":case \"topSeeking\":case \"topStalled\":case \"topSubmit\":case \"topSuspend\":case \"topTimeUpdate\":case \"topToggle\":case \"topVolumeChange\":case \"topWaiting\":\n var f = Y;\n break;case \"topKeyPress\":\n if (0 === hj(c)) return null;case \"topKeyDown\":case \"topKeyUp\":\n f = kj;break;case \"topBlur\":case \"topFocus\":\n f = gj;break;case \"topClick\":\n if (2 === c.button) return null;case \"topDoubleClick\":case \"topMouseDown\":case \"topMouseMove\":case \"topMouseUp\":case \"topMouseOut\":case \"topMouseOver\":case \"topContextMenu\":\n f = Ni;break;case \"topDrag\":case \"topDragEnd\":case \"topDragEnter\":case \"topDragExit\":case \"topDragLeave\":case \"topDragOver\":case \"topDragStart\":case \"topDrop\":\n f = lj;break;case \"topTouchCancel\":case \"topTouchEnd\":case \"topTouchMove\":case \"topTouchStart\":\n f = mj;break;case \"topAnimationEnd\":case \"topAnimationIteration\":case \"topAnimationStart\":\n f = ej;break;case \"topTransitionEnd\":\n f = nj;break;case \"topScroll\":\n f = Ji;break;case \"topWheel\":\n f = oj;break;case \"topCopy\":case \"topCut\":case \"topPaste\":\n f = fj;}f ? void 0 : w(\"86\", a);a = f.getPooled(e, b, c, d);Th.accumulateTwoPhaseDispatches(a);return a;\n } };L.setHandleTopLevel(M.handleTopLevel);Jb.injection.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin TapEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));\nib.injection.injectComponentTree(G);Jb.injection.injectEventPluginsByName({ SimpleEventPlugin: rj, EnterLeaveEventPlugin: Pi, ChangeEventPlugin: Ii, SelectEventPlugin: dj, BeforeInputEventPlugin: ri });\nvar sj = A.injection.MUST_USE_PROPERTY,\n Z = A.injection.HAS_BOOLEAN_VALUE,\n tj = A.injection.HAS_NUMERIC_VALUE,\n uj = A.injection.HAS_POSITIVE_NUMERIC_VALUE,\n vj = A.injection.HAS_STRING_BOOLEAN_VALUE,\n wj = { Properties: { allowFullScreen: Z, allowTransparency: vj, async: Z, autoPlay: Z, capture: Z, checked: sj | Z, cols: uj, contentEditable: vj, controls: Z, \"default\": Z, defer: Z, disabled: Z, download: A.injection.HAS_OVERLOADED_BOOLEAN_VALUE, draggable: vj, formNoValidate: Z, hidden: Z, loop: Z, multiple: sj | Z, muted: sj | Z, noValidate: Z, open: Z, playsInline: Z,\n readOnly: Z, required: Z, reversed: Z, rows: uj, rowSpan: tj, scoped: Z, seamless: Z, selected: sj | Z, size: uj, start: tj, span: uj, spellCheck: vj, style: 0, itemScope: Z, acceptCharset: 0, className: 0, htmlFor: 0, httpEquiv: 0, value: vj }, DOMAttributeNames: { acceptCharset: \"accept-charset\", className: \"class\", htmlFor: \"for\", httpEquiv: \"http-equiv\" }, DOMMutationMethods: { value: function value(a, b) {\n if (null == b) return a.removeAttribute(\"value\");\"number\" !== a.type || !1 === a.hasAttribute(\"value\") ? a.setAttribute(\"value\", \"\" + b) : a.validity && !a.validity.badInput && a.ownerDocument.activeElement !== a && a.setAttribute(\"value\", \"\" + b);\n } } },\n xj = A.injection.HAS_STRING_BOOLEAN_VALUE,\n yj = { xlink: \"http://www.w3.org/1999/xlink/", xml: \"http://www.w3.org/XML/1998/namespace/" },\n zj = { Properties: { autoReverse: xj, externalResourcesRequired: xj, preserveAlpha: xj }, DOMAttributeNames: { autoReverse: \"autoReverse\", externalResourcesRequired: \"externalResourcesRequired\", preserveAlpha: \"preserveAlpha\" }, DOMAttributeNamespaces: { xlinkActuate: yj.xlink, xlinkArcrole: yj.xlink, xlinkHref: yj.xlink, xlinkRole: yj.xlink,\n xlinkShow: yj.xlink, xlinkTitle: yj.xlink, xlinkType: yj.xlink, xmlBase: yj.xml, xmlLang: yj.xml, xmlSpace: yj.xml } },\n Aj = /[\\-\\:]([a-z])/g;function Bj(a) {\n return a[1].toUpperCase();\n}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode x-height xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xmlns:xlink xml:lang xml:space\".split(\" \").forEach(function (a) {\n var b = a.replace(Aj, Bj);zj.Properties[b] = 0;zj.DOMAttributeNames[b] = a;\n});A.injection.injectDOMPropertyConfig(wj);A.injection.injectDOMPropertyConfig(zj);\nvar Cj = ig.injectInternals,\n Dj = F.ELEMENT_NODE,\n Ej = F.TEXT_NODE,\n Fj = F.COMMENT_NODE,\n Gj = F.DOCUMENT_NODE,\n Hj = F.DOCUMENT_FRAGMENT_NODE,\n Ij = A.ROOT_ATTRIBUTE_NAME,\n Jj = ka.getChildNamespace,\n Kj = N.createElement,\n Lj = N.createTextNode,\n Mj = N.setInitialProperties,\n Nj = N.diffProperties,\n Oj = N.updateProperties,\n Pj = N.diffHydratedProperties,\n Qj = N.diffHydratedText,\n Rj = N.warnForDeletedHydratableElement,\n Sj = N.warnForDeletedHydratableText,\n Tj = N.warnForInsertedHydratedElement,\n Uj = N.warnForInsertedHydratedText,\n Vj = G.precacheFiberNode,\n Wj = G.updateFiberProps;\nnb.injection.injectFiberControlledHostComponent(N);Dh._injectFiber(function (a) {\n return Xj.findHostInstance(a);\n});var Yj = null,\n Zj = null;function ak(a) {\n return !(!a || a.nodeType !== Dj && a.nodeType !== Gj && a.nodeType !== Hj && (a.nodeType !== Fj || \" react-mount-point-unstable \" !== a.nodeValue));\n}function bk(a) {\n a = a ? a.nodeType === Gj ? a.documentElement : a.firstChild : null;return !(!a || a.nodeType !== Dj || !a.hasAttribute(Ij));\n}\nvar Xj = function (a) {\n var b = a.getPublicInstance;a = hh(a);var c = a.scheduleUpdate,\n d = a.getPriorityContext;return { createContainer: function createContainer(a) {\n var b = ee();a = { current: b, containerInfo: a, isScheduled: !1, nextScheduledRoot: null, context: null, pendingContext: null };return b.stateNode = a;\n }, updateContainer: function updateContainer(a, b, g, h) {\n var e = b.current;g = jh(g);null === b.context ? b.context = g : b.pendingContext = g;b = h;h = d(e, ed.enableAsyncSubtreeAPI && null != a && null != a.type && null != a.type.prototype && !0 === a.type.prototype.unstable_isAsyncReactComponent);\n a = { element: a };kh(e, a, void 0 === b ? null : b, h);c(e, h);\n }, batchedUpdates: a.batchedUpdates, unbatchedUpdates: a.unbatchedUpdates, deferredUpdates: a.deferredUpdates, flushSync: a.flushSync, getPublicRootInstance: function getPublicRootInstance(a) {\n a = a.current;if (!a.child) return null;switch (a.child.tag) {case oh:\n return b(a.child.stateNode);default:\n return a.child.stateNode;}\n }, findHostInstance: function findHostInstance(a) {\n a = ph(a);return null === a ? null : a.stateNode;\n }, findHostInstanceWithNoPortals: function findHostInstanceWithNoPortals(a) {\n a = qh(a);return null === a ? null : a.stateNode;\n } };\n}({ getRootHostContext: function getRootHostContext(a) {\n if (a.nodeType === Gj) a = (a = a.documentElement) ? a.namespaceURI : Jj(null, \"\");else {\n var b = a.nodeType === Fj ? a.parentNode : a;a = b.namespaceURI || null;b = b.tagName;a = Jj(a, b);\n }return a;\n }, getChildHostContext: function getChildHostContext(a, b) {\n return Jj(a, b);\n }, getPublicInstance: function getPublicInstance(a) {\n return a;\n }, prepareForCommit: function prepareForCommit() {\n Yj = M.isEnabled();Zj = zh.getSelectionInformation();M.setEnabled(!1);\n }, resetAfterCommit: function resetAfterCommit() {\n zh.restoreSelection(Zj);Zj = null;M.setEnabled(Yj);Yj = null;\n }, createInstance: function createInstance(a, b, c, d, e) {\n a = Kj(a, b, c, d);Vj(e, a);Wj(a, b);return a;\n }, appendInitialChild: function appendInitialChild(a, b) {\n a.appendChild(b);\n }, finalizeInitialChildren: function finalizeInitialChildren(a, b, c, d) {\n Mj(a, b, c, d);a: {\n switch (b) {case \"button\":case \"input\":case \"select\":case \"textarea\":\n a = !!c.autoFocus;break a;}a = !1;\n }return a;\n }, prepareUpdate: function prepareUpdate(a, b, c, d, e) {\n return Nj(a, b, c, d, e);\n }, commitMount: function commitMount(a) {\n a.focus();\n }, commitUpdate: function commitUpdate(a, b, c, d, e) {\n Wj(a, e);Oj(a, b, c, d, e);\n }, shouldSetTextContent: function shouldSetTextContent(a, b) {\n return \"textarea\" === a || \"string\" === typeof b.children || \"number\" === typeof b.children || \"object\" === _typeof(b.dangerouslySetInnerHTML) && null !== b.dangerouslySetInnerHTML && \"string\" === typeof b.dangerouslySetInnerHTML.__html;\n }, resetTextContent: function resetTextContent(a) {\n a.textContent = \"\";\n }, shouldDeprioritizeSubtree: function shouldDeprioritizeSubtree(a, b) {\n return !!b.hidden;\n }, createTextInstance: function createTextInstance(a, b, c, d) {\n a = Lj(a, b);Vj(d, a);return a;\n }, commitTextUpdate: function commitTextUpdate(a, b, c) {\n a.nodeValue = c;\n }, appendChild: function appendChild(a, b) {\n a.appendChild(b);\n }, appendChildToContainer: function appendChildToContainer(a, b) {\n a.nodeType === Fj ? a.parentNode.insertBefore(b, a) : a.appendChild(b);\n }, insertBefore: function insertBefore(a, b, c) {\n a.insertBefore(b, c);\n }, insertInContainerBefore: function insertInContainerBefore(a, b, c) {\n a.nodeType === Fj ? a.parentNode.insertBefore(b, c) : a.insertBefore(b, c);\n }, removeChild: function removeChild(a, b) {\n a.removeChild(b);\n }, removeChildFromContainer: function removeChildFromContainer(a, b) {\n a.nodeType === Fj ? a.parentNode.removeChild(b) : a.removeChild(b);\n }, canHydrateInstance: function canHydrateInstance(a, b) {\n return a.nodeType === Dj && b === a.nodeName.toLowerCase();\n }, canHydrateTextInstance: function canHydrateTextInstance(a, b) {\n return \"\" === b ? !1 : a.nodeType === Ej;\n }, getNextHydratableSibling: function getNextHydratableSibling(a) {\n for (a = a.nextSibling; a && a.nodeType !== Dj && a.nodeType !== Ej;) {\n a = a.nextSibling;\n }return a;\n }, getFirstHydratableChild: function getFirstHydratableChild(a) {\n for (a = a.firstChild; a && a.nodeType !== Dj && a.nodeType !== Ej;) {\n a = a.nextSibling;\n }return a;\n }, hydrateInstance: function hydrateInstance(a, b, c, d, e, f) {\n Vj(f, a);Wj(a, c);return Pj(a, b, c, e, d);\n }, hydrateTextInstance: function hydrateTextInstance(a, b, c) {\n Vj(c, a);return Qj(a, b);\n }, didNotHydrateInstance: function didNotHydrateInstance(a, b) {\n 1 === b.nodeType ? Rj(a, b) : Sj(a, b);\n }, didNotFindHydratableInstance: function didNotFindHydratableInstance(a, b, c) {\n Tj(a, b, c);\n }, didNotFindHydratableTextInstance: function didNotFindHydratableTextInstance(a, b) {\n Uj(a, b);\n }, scheduleDeferredCallback: dd.rIC, useSyncScheduling: !0 });sb.injection.injectFiberBatchedUpdates(Xj.batchedUpdates);\nfunction ck(a, b, c, d, e) {\n ak(c) ? void 0 : w(\"200\");var f = c._reactRootContainer;if (f) Xj.updateContainer(b, f, a, e);else {\n if (!d && !bk(c)) for (d = void 0; d = c.lastChild;) {\n c.removeChild(d);\n }var g = Xj.createContainer(c);f = c._reactRootContainer = g;Xj.unbatchedUpdates(function () {\n Xj.updateContainer(b, g, a, e);\n });\n }return Xj.getPublicRootInstance(f);\n}function dk(a, b) {\n var c = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;ak(b) ? void 0 : w(\"200\");return ne.createPortal(a, b, null, c);\n}\nvar ek = { createPortal: dk, hydrate: function hydrate(a, b, c) {\n return ck(null, a, b, !0, c);\n }, render: function render(a, b, c) {\n return ck(null, a, b, !1, c);\n }, unstable_renderSubtreeIntoContainer: function unstable_renderSubtreeIntoContainer(a, b, c, d) {\n null != a && Pa.has(a) ? void 0 : w(\"38\");return ck(a, b, c, !1, d);\n }, unmountComponentAtNode: function unmountComponentAtNode(a) {\n ak(a) ? void 0 : w(\"40\");return a._reactRootContainer ? (Xj.unbatchedUpdates(function () {\n ck(null, null, a, !1, function () {\n a._reactRootContainer = null;\n });\n }), !0) : !1;\n }, findDOMNode: Dh, unstable_createPortal: dk, unstable_batchedUpdates: sb.batchedUpdates,\n unstable_deferredUpdates: Xj.deferredUpdates, flushSync: Xj.flushSync, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: { EventPluginHub: Jb, EventPluginRegistry: sa, EventPropagators: Th, ReactControlledComponent: nb, ReactDOMComponentTree: G, ReactDOMEventListener: L } };Cj({ findFiberByHostInstance: G.getClosestInstanceFromNode, findHostInstanceByFiber: Xj.findHostInstance, bundleType: 0, version: \"16.0.0\", rendererPackageName: \"react-dom\" });module.exports = ek;\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar emptyFunction = __webpack_require__(3);\n\n/**\n * Upstream version of event listener. Does not take into account specific\n * nature of platform.\n */\nvar EventListener = {\n /**\n * Listen to DOM events during the bubble phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n listen: function listen(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, false);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, false);\n }\n };\n } else if (target.attachEvent) {\n target.attachEvent('on' + eventType, callback);\n return {\n remove: function remove() {\n target.detachEvent('on' + eventType, callback);\n }\n };\n }\n },\n\n /**\n * Listen to DOM events during the capture phase.\n *\n * @param {DOMEventTarget} target DOM element to register listener on.\n * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.\n * @param {function} callback Callback function.\n * @return {object} Object with a `remove` method.\n */\n capture: function capture(target, eventType, callback) {\n if (target.addEventListener) {\n target.addEventListener(eventType, callback, true);\n return {\n remove: function remove() {\n target.removeEventListener(eventType, callback, true);\n }\n };\n } else {\n if (false) {\n console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');\n }\n return {\n remove: emptyFunction\n };\n }\n },\n\n registerDefault: function registerDefault() {}\n};\n\nmodule.exports = EventListener;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n * \n */\n\n/*eslint-disable no-self-compare */\n\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n // SameValue algorithm\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\nfunction shallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n\n if ((typeof objA === 'undefined' ? 'undefined' : _typeof(objA)) !== 'object' || objA === null || (typeof objB === 'undefined' ? 'undefined' : _typeof(objB)) !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n // Test for A's keys different from B.\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nmodule.exports = shallowEqual;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nvar isTextNode = __webpack_require__(22);\n\n/*eslint-disable no-bitwise */\n\n/**\n * Checks if a given DOM node contains or is another DOM node.\n */\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nmodule.exports = containsNode;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\nvar isNode = __webpack_require__(23);\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM text node.\n */\nfunction isTextNode(object) {\n return isNode(object) && object.nodeType == 3;\n}\n\nmodule.exports = isTextNode;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n/**\n * @param {*} object The object to check.\n * @return {boolean} Whether or not the object is a DOM node.\n */\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction isNode(object) {\n var doc = object ? object.ownerDocument || object : document;\n var defaultView = doc.defaultView || window;\n return !!(object && (typeof defaultView.Node === 'function' ? object instanceof defaultView.Node : (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));\n}\n\nmodule.exports = isNode;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n\n\n/**\n * @param {DOMElement} node input/textarea to focus\n */\n\nfunction focusNode(node) {\n // IE8 can throw \"Can't move focus to the control because it is invisible,\n // not enabled, or of a type that does not accept the focus.\" for all kinds of\n // reasons that are too expensive and fragile to test.\n try {\n node.focus();\n } catch (e) {}\n}\n\nmodule.exports = focusNode;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * @typechecks\n */\n\n/* eslint-disable fb-www/typeof-undefined */\n\n/**\n * Same as document.activeElement but wraps in a try-catch block. In IE it is\n * not safe to call document.activeElement if there is nothing focused.\n *\n * The activeElement will be null only if the document or document body is not\n * yet defined.\n *\n * @param {?DOMDocument} doc Defaults to current document.\n * @return {?DOMElement}\n */\n\nfunction getActiveElement(doc) /*?DOMElement*/{\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n if (typeof doc === 'undefined') {\n return null;\n }\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\nmodule.exports = getActiveElement;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _props2 = __webpack_require__(4);\n\nvar _utils = __webpack_require__(1);\n\nvar _players = __webpack_require__(32);\n\nvar _players2 = _interopRequireDefault(_players);\n\nvar _Player3 = __webpack_require__(6);\n\nvar _Player4 = _interopRequireDefault(_Player3);\n\nvar _FilePlayer = __webpack_require__(13);\n\nvar _preload = __webpack_require__(38);\n\nvar _preload2 = _interopRequireDefault(_preload);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SUPPORTED_PROPS = Object.keys(_props2.propTypes);\n\nvar ReactPlayer = function (_Component) {\n _inherits(ReactPlayer, _Component);\n\n function ReactPlayer() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, ReactPlayer);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = ReactPlayer.__proto__ || Object.getPrototypeOf(ReactPlayer)).call.apply(_ref, [this].concat(args))), _this), _this.config = (0, _utils.getConfig)(_this.props, _props2.defaultProps, true), _this.getDuration = function () {\n if (!_this.player) return null;\n return _this.player.getDuration();\n }, _this.getCurrentTime = function () {\n if (!_this.player) return null;\n return _this.player.getCurrentTime();\n }, _this.getInternalPlayer = function () {\n var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'player';\n\n if (!_this.player) return null;\n return _this.player.getInternalPlayer(key);\n }, _this.seekTo = function (fraction) {\n if (!_this.player) return null;\n _this.player.seekTo(fraction);\n }, _this.wrapperRef = function (wrapper) {\n _this.wrapper = wrapper;\n }, _this.activePlayerRef = function (player) {\n _this.player = player;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(ReactPlayer, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n if (this.props.progressFrequency) {\n var message = 'ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead';\n console.warn(message, 'font-weight: bold', '', 'font-weight: bold', '');\n }\n }\n }, {\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps) {\n return !(0, _utils.isEqual)(this.props, nextProps);\n }\n }, {\n key: 'componentWillUpdate',\n value: function componentWillUpdate(nextProps) {\n this.config = (0, _utils.getConfig)(nextProps, _props2.defaultProps);\n }\n }, {\n key: 'getActivePlayer',\n value: function getActivePlayer(url) {\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = _players2['default'][Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var _Player = _step.value;\n\n if (_Player.canPlay(url)) {\n return _Player;\n }\n }\n // Fall back to FilePlayer if nothing else can play the URL\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return _FilePlayer.FilePlayer;\n }\n }, {\n key: 'renderActivePlayer',\n value: function renderActivePlayer(url) {\n if (!url) return null;\n var activePlayer = this.getActivePlayer(url);\n return _react2['default'].createElement(_Player4['default'], _extends({}, this.props, {\n key: activePlayer.displayName,\n ref: this.activePlayerRef,\n config: this.config,\n activePlayer: activePlayer\n }));\n }\n }, {\n key: 'sortPlayers',\n value: function sortPlayers(a, b) {\n // Retain player order to prevent weird iframe behaviour when switching players\n if (a && b) {\n return a.key < b.key ? -1 : 1;\n }\n return 0;\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n url = _props.url,\n style = _props.style,\n width = _props.width,\n height = _props.height,\n Wrapper = _props.wrapper;\n\n var otherProps = (0, _utils.omit)(this.props, SUPPORTED_PROPS, _props2.DEPRECATED_CONFIG_PROPS);\n var activePlayer = this.renderActivePlayer(url);\n var preloadPlayers = (0, _preload2['default'])(url, this.config);\n var players = [activePlayer].concat(_toConsumableArray(preloadPlayers)).sort(this.sortPlayers);\n return _react2['default'].createElement(\n Wrapper,\n _extends({ ref: this.wrapperRef, style: _extends({}, style, { width: width, height: height }) }, otherProps),\n players\n );\n }\n }]);\n\n return ReactPlayer;\n}(_react.Component);\n\nReactPlayer.displayName = 'ReactPlayer';\nReactPlayer.propTypes = _props2.propTypes;\nReactPlayer.defaultProps = _props2.defaultProps;\n\nReactPlayer.canPlay = function (url) {\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = _players2['default'][Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _Player2 = _step2.value;\n\n if (_Player2.canPlay(url)) {\n return true;\n }\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2['return']) {\n _iterator2['return']();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return false;\n};\n\nexports['default'] = ReactPlayer;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (false) {\n var REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.element') || 0xeac7;\n\n var isValidElement = function isValidElement(object) {\n return (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = __webpack_require__(28)();\n}\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar emptyFunction = __webpack_require__(3);\nvar invariant = __webpack_require__(5);\nvar ReactPropTypesSecret = __webpack_require__(29);\n\nmodule.exports = function () {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use PropTypes.checkPropTypes() to call them. ' + 'Read more at http://fb.me/use-check-prop-types');\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function load(src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var script = document.createElement('script');\n\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n\n opts = opts || {};\n cb = cb || function () {};\n\n script.type = opts.type || 'text/javascript';\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true;\n script.src = src;\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs);\n }\n\n if (opts.text) {\n script.text = '' + opts.text;\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd;\n onend(script, cb);\n\n // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script);\n};\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd(script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null;\n cb(null, script);\n };\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null;\n cb(new Error('Failed to load ' + this.src), script);\n };\n}\n\nfunction ieOnEnd(script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return;\n this.onreadystatechange = null;\n cb(null, script); // there is no way to catch loading errors in IE8\n };\n}\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value) && !isSpecial(value);\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object';\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]' || stringValue === '[object Date]' || isReactElement(value);\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol['for'];\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol['for']('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {};\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, optionsArgument) {\n\tvar clone = !optionsArgument || optionsArgument.clone !== false;\n\n\treturn clone && isMergeableObject(value) ? deepmerge(emptyTarget(value), value, optionsArgument) : value;\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n\treturn target.concat(source).map(function (element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, optionsArgument);\n\t});\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n\tvar destination = {};\n\tif (isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function (key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], optionsArgument);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function (key) {\n\t\tif (!isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], optionsArgument);\n\t\t} else {\n\t\t\tdestination[key] = deepmerge(target[key], source[key], optionsArgument);\n\t\t}\n\t});\n\treturn destination;\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar options = optionsArgument || { arrayMerge: defaultArrayMerge };\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, optionsArgument);\n\t} else if (sourceIsArray) {\n\t\tvar arrayMerge = options.arrayMerge || defaultArrayMerge;\n\t\treturn arrayMerge(target, source, optionsArgument);\n\t} else {\n\t\treturn mergeObject(target, source, optionsArgument);\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array');\n\t}\n\n\treturn array.reduce(function (prev, next) {\n\t\treturn deepmerge(prev, next, optionsArgument);\n\t}, {});\n};\n\nvar deepmerge_1 = deepmerge;\n\nexports['default'] = deepmerge_1;\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _YouTube = __webpack_require__(9);\n\nvar _SoundCloud = __webpack_require__(10);\n\nvar _Vimeo = __webpack_require__(11);\n\nvar _Facebook = __webpack_require__(33);\n\nvar _Streamable = __webpack_require__(34);\n\nvar _Wistia = __webpack_require__(35);\n\nvar _Twitch = __webpack_require__(36);\n\nvar _DailyMotion = __webpack_require__(12);\n\nvar _Mixcloud = __webpack_require__(37);\n\nvar _FilePlayer = __webpack_require__(13);\n\nexports['default'] = [_YouTube.YouTube, _SoundCloud.SoundCloud, _Vimeo.Vimeo, _Facebook.Facebook, _Streamable.Streamable, _Wistia.Wistia, _Twitch.Twitch, _DailyMotion.DailyMotion, _Mixcloud.Mixcloud, _FilePlayer.FilePlayer];\nmodule.exports = exports['default'];\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Facebook = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//connect.facebook.net/en_US/sdk.js';\nvar SDK_GLOBAL = 'FB';\nvar SDK_GLOBAL_READY = 'fbAsyncInit';\nvar MATCH_URL = /facebook\\.com\\/([^/?].+\\/)?video(s|\\.php)[/?].*$/;\nvar PLAYER_ID_PREFIX = 'facebook-player-';\n\nvar Facebook = exports.Facebook = function (_Component) {\n _inherits(Facebook, _Component);\n\n function Facebook() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Facebook);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Facebook.__proto__ || Object.getPrototypeOf(Facebook)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.playerID = PLAYER_ID_PREFIX + (0, _utils.randomString)(), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Facebook, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n if (isReady) {\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(function (FB) {\n return FB.XFBML.parse();\n });\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(function (FB) {\n FB.init({\n appId: _this2.props.config.facebook.appId,\n xfbml: true,\n version: 'v2.5'\n });\n FB.Event.subscribe('xfbml.ready', function (msg) {\n if (msg.type === 'video' && msg.id === _this2.playerID) {\n _this2.player = msg.instance;\n _this2.player.subscribe('startedPlaying', _this2.props.onPlay);\n _this2.player.subscribe('paused', _this2.props.onPause);\n _this2.player.subscribe('finishedPlaying', _this2.props.onEnded);\n _this2.player.subscribe('startedBuffering', _this2.props.onBuffer);\n _this2.player.subscribe('error', _this2.props.onError);\n _this2.callPlayer('unmute');\n _this2.props.onReady();\n }\n });\n });\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n if (fraction !== 0) {\n this.callPlayer('unmute');\n }\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('getDuration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('getCurrentPosition');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = {\n width: '100%',\n height: '100%',\n backgroundColor: 'black'\n };\n return _react2['default'].createElement('div', {\n style: style,\n id: this.playerID,\n className: 'fb-video',\n 'data-href': this.props.url,\n 'data-allowfullscreen': 'true',\n 'data-controls': !this.props.controls ? 'false' : undefined\n });\n }\n }]);\n\n return Facebook;\n}(_react.Component);\n\nFacebook.displayName = 'Facebook';\n\nFacebook.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nFacebook.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(Facebook);\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Streamable = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//cdn.embed.ly/player-0.1.0.min.js';\nvar SDK_GLOBAL = 'playerjs';\nvar MATCH_URL = /streamable\\.com\\/([a-z0-9]+)$/;\n\nvar Streamable = exports.Streamable = function (_Component) {\n _inherits(Streamable, _Component);\n\n function Streamable() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Streamable);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Streamable.__proto__ || Object.getPrototypeOf(Streamable)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.secondsLoaded = null, _this.ref = function (iframe) {\n _this.iframe = iframe;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Streamable, [{\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (playerjs) {\n if (!_this2.iframe) return;\n _this2.player = new playerjs.Player(_this2.iframe);\n _this2.player.setLoop(_this2.props.loop);\n _this2.player.on('ready', _this2.props.onReady);\n _this2.player.on('play', _this2.props.onPlay);\n _this2.player.on('pause', _this2.props.onPause);\n _this2.player.on('seeked', _this2.props.onSeek);\n _this2.player.on('ended', _this2.props.onEnded);\n _this2.player.on('error', _this2.props.onError);\n _this2.player.on('timeupdate', function (_ref2) {\n var duration = _ref2.duration,\n seconds = _ref2.seconds;\n\n _this2.duration = duration;\n _this2.currentTime = seconds;\n });\n _this2.player.on('buffered', function (_ref3) {\n var percent = _ref3.percent;\n\n if (_this2.duration) {\n _this2.secondsLoaded = _this2.duration * percent;\n }\n });\n }, this.props.onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('setCurrentTime', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction * 100);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return this.secondsLoaded;\n }\n }, {\n key: 'render',\n value: function render() {\n var id = this.props.url.match(MATCH_URL)[1];\n var style = {\n width: '100%',\n height: '100%'\n };\n return _react2['default'].createElement('iframe', {\n ref: this.ref,\n src: 'https://streamable.com/o/' + id,\n frameBorder: '0',\n scrolling: 'no',\n style: style,\n allowFullScreen: true\n });\n }\n }]);\n\n return Streamable;\n}(_react.Component);\n\nStreamable.displayName = 'Streamable';\n\nStreamable.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nexports['default'] = (0, _singlePlayer2['default'])(Streamable);\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Wistia = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//fast.wistia.com/assets/external/E-v1.js';\nvar SDK_GLOBAL = 'Wistia';\nvar MATCH_URL = /(?:wistia\\.com|wi\\.st)\\/(?:medias|embed)\\/(.*)$/;\n\nvar Wistia = exports.Wistia = function (_Component) {\n _inherits(Wistia, _Component);\n\n function Wistia() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Wistia);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Wistia.__proto__ || Object.getPrototypeOf(Wistia)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Wistia, [{\n key: 'getID',\n value: function getID(url) {\n return url && url.match(MATCH_URL)[1];\n }\n }, {\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n var _props = this.props,\n controls = _props.controls,\n _onReady = _props.onReady,\n onPlay = _props.onPlay,\n onPause = _props.onPause,\n onSeek = _props.onSeek,\n onEnded = _props.onEnded,\n config = _props.config;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function () {\n window._wq = window._wq || [];\n window._wq.push({\n id: _this2.getID(url),\n options: _extends({\n controlsVisibleOnLoad: controls\n }, config.wistia.options),\n onReady: function onReady(player) {\n _this2.player = player;\n _this2.player.bind('play', onPlay);\n _this2.player.bind('pause', onPause);\n _this2.player.bind('seek', onSeek);\n _this2.player.bind('end', onEnded);\n _onReady();\n }\n });\n });\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.callPlayer('remove');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('time', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('volume', fraction);\n }\n }, {\n key: 'setPlaybackRate',\n value: function setPlaybackRate(rate) {\n this.callPlayer('playbackRate', rate);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('duration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('time');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var id = this.getID(this.props.url);\n var className = 'wistia_embed wistia_async_' + id;\n var style = {\n width: '100%',\n height: '100%'\n };\n return _react2['default'].createElement('div', { key: id, className: className, style: style });\n }\n }]);\n\n return Wistia;\n}(_react.Component);\n\nWistia.displayName = 'Wistia';\n\nWistia.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nWistia.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(Wistia);\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Twitch = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//player.twitch.tv/js/embed/v1.js';\nvar SDK_GLOBAL = 'Twitch';\nvar MATCH_VIDEO_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/videos\\/(\\d+)($|\\?)/;\nvar MATCH_CHANNEL_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-z0-9_]+)($|\\?)/;\nvar PLAYER_ID_PREFIX = 'twitch-player-';\n\nvar Twitch = exports.Twitch = function (_Component) {\n _inherits(Twitch, _Component);\n\n function Twitch() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Twitch);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Twitch.__proto__ || Object.getPrototypeOf(Twitch)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.playerID = PLAYER_ID_PREFIX + (0, _utils.randomString)(), _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Twitch, [{\n key: 'load',\n value: function load(url, isReady) {\n var _this2 = this;\n\n var _props = this.props,\n playsinline = _props.playsinline,\n onError = _props.onError,\n config = _props.config;\n\n var isChannel = MATCH_CHANNEL_URL.test(url);\n var id = isChannel ? url.match(MATCH_CHANNEL_URL)[1] : url.match(MATCH_VIDEO_URL)[1];\n if (isReady) {\n if (isChannel) {\n this.player.setChannel(id);\n } else {\n this.player.setVideo('v' + id);\n }\n return;\n }\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Twitch) {\n _this2.player = new Twitch.Player(_this2.playerID, _extends({\n video: isChannel ? '' : id,\n channel: isChannel ? id : '',\n height: '100%',\n width: '100%',\n playsinline: playsinline,\n autoplay: _this2.props.playing\n }, config.twitch.options));\n var _Twitch$Player = Twitch.Player,\n READY = _Twitch$Player.READY,\n PLAY = _Twitch$Player.PLAY,\n PAUSE = _Twitch$Player.PAUSE,\n ENDED = _Twitch$Player.ENDED;\n\n _this2.player.addEventListener(READY, _this2.props.onReady);\n _this2.player.addEventListener(PLAY, _this2.props.onPlay);\n _this2.player.addEventListener(PAUSE, _this2.props.onPause);\n _this2.player.addEventListener(ENDED, _this2.props.onEnded);\n }, onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n this.callPlayer('pause');\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n this.callPlayer('setVolume', fraction);\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.callPlayer('getDuration');\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.callPlayer('getCurrentTime');\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var style = {\n width: '100%',\n height: '100%'\n };\n return _react2['default'].createElement('div', { style: style, id: this.playerID });\n }\n }]);\n\n return Twitch;\n}(_react.Component);\n\nTwitch.displayName = 'Twitch';\n\nTwitch.canPlay = function (url) {\n return MATCH_VIDEO_URL.test(url) || MATCH_CHANNEL_URL.test(url);\n};\n\nTwitch.loopOnEnded = true;\nexports['default'] = (0, _singlePlayer2['default'])(Twitch);\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.Mixcloud = undefined;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _utils = __webpack_require__(1);\n\nvar _singlePlayer = __webpack_require__(2);\n\nvar _singlePlayer2 = _interopRequireDefault(_singlePlayer);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SDK_URL = '//widget.mixcloud.com/media/js/widgetApi.js';\nvar SDK_GLOBAL = 'Mixcloud';\nvar MATCH_URL = /mixcloud\\.com\\/([^/]+\\/[^/]+)/;\n\nvar Mixcloud = exports.Mixcloud = function (_Component) {\n _inherits(Mixcloud, _Component);\n\n function Mixcloud() {\n var _ref;\n\n var _temp, _this, _ret;\n\n _classCallCheck(this, Mixcloud);\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = Mixcloud.__proto__ || Object.getPrototypeOf(Mixcloud)).call.apply(_ref, [this].concat(args))), _this), _this.callPlayer = _utils.callPlayer, _this.duration = null, _this.currentTime = null, _this.secondsLoaded = null, _this.ref = function (iframe) {\n _this.iframe = iframe;\n }, _temp), _possibleConstructorReturn(_this, _ret);\n }\n\n _createClass(Mixcloud, [{\n key: 'load',\n value: function load(url) {\n var _this2 = this;\n\n (0, _utils.getSDK)(SDK_URL, SDK_GLOBAL).then(function (Mixcloud) {\n _this2.player = Mixcloud.PlayerWidget(_this2.iframe);\n _this2.player.ready.then(function () {\n _this2.player.events.play.on(_this2.props.onPlay);\n _this2.player.events.pause.on(_this2.props.onPause);\n _this2.player.events.ended.on(_this2.props.onEnded);\n _this2.player.events.error.on(_this2.props.error);\n _this2.player.events.progress.on(function (seconds, duration) {\n _this2.currentTime = seconds;\n _this2.duration = duration;\n });\n _this2.props.onReady();\n });\n }, this.props.onError);\n }\n }, {\n key: 'play',\n value: function play() {\n this.callPlayer('play');\n }\n }, {\n key: 'pause',\n value: function pause() {\n this.callPlayer('pause');\n }\n }, {\n key: 'stop',\n value: function stop() {\n // Nothing to do\n }\n }, {\n key: 'seekTo',\n value: function seekTo(seconds) {\n this.callPlayer('seek', seconds);\n }\n }, {\n key: 'setVolume',\n value: function setVolume(fraction) {\n // No volume support\n }\n }, {\n key: 'getDuration',\n value: function getDuration() {\n return this.duration;\n }\n }, {\n key: 'getCurrentTime',\n value: function getCurrentTime() {\n return this.currentTime;\n }\n }, {\n key: 'getSecondsLoaded',\n value: function getSecondsLoaded() {\n return null;\n }\n }, {\n key: 'render',\n value: function render() {\n var _props = this.props,\n url = _props.url,\n config = _props.config;\n\n var id = url.match(MATCH_URL)[1];\n var style = {\n width: '100%',\n height: '100%'\n };\n var query = (0, _utils.queryString)(_extends({}, config.mixcloud.options, {\n feed: '/' + id + '/'\n }));\n // We have to give the iframe a key here to prevent a\n // weird dialog appearing when loading a new track\n return _react2['default'].createElement('iframe', {\n key: id,\n ref: this.ref,\n style: style,\n src: 'https://www.mixcloud.com/widget/iframe/?' + query,\n frameBorder: '0'\n });\n }\n }]);\n\n return Mixcloud;\n}(_react.Component);\n\nMixcloud.displayName = 'Mixcloud';\n\nMixcloud.canPlay = function (url) {\n return MATCH_URL.test(url);\n};\n\nexports['default'] = (0, _singlePlayer2['default'])(Mixcloud);\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports['default'] = renderPreloadPlayers;\n\nvar _react = __webpack_require__(0);\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _Player = __webpack_require__(6);\n\nvar _Player2 = _interopRequireDefault(_Player);\n\nvar _YouTube = __webpack_require__(9);\n\nvar _SoundCloud = __webpack_require__(10);\n\nvar _Vimeo = __webpack_require__(11);\n\nvar _DailyMotion = __webpack_require__(12);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar PRELOAD_PLAYERS = [{\n Player: _YouTube.YouTube,\n configKey: 'youtube',\n url: 'https://www.youtube.com/watch?v=GlCmAC4MHek'\n}, {\n Player: _SoundCloud.SoundCloud,\n configKey: 'soundcloud',\n url: 'https://soundcloud.com/seucheu/john-cage-433-8-bit-version'\n}, {\n Player: _Vimeo.Vimeo,\n configKey: 'vimeo',\n url: 'https://vimeo.com/127250231'\n}, {\n Player: _DailyMotion.DailyMotion,\n configKey: 'dailymotion',\n url: 'http://www.dailymotion.com/video/xqdpyk'\n}];\n\nfunction renderPreloadPlayers(url, config) {\n var players = [];\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = PRELOAD_PLAYERS[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var player = _step.value;\n\n if (!player.Player.canPlay(url) && config[player.configKey].preload) {\n players.push(_react2['default'].createElement(_Player2['default'], {\n key: player.Player.displayName,\n activePlayer: player.Player,\n url: player.url,\n playing: true,\n style: { display: 'none' }\n }));\n }\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator['return']) {\n _iterator['return']();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n return players;\n}\nmodule.exports = exports['default'];\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// ReactPlayer.standalone.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 14);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 4ad921765acc63c54ea3","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/react/index.js","import loadScript from 'load-script'\r\nimport merge from 'deepmerge'\r\n\r\nimport { DEPRECATED_CONFIG_PROPS } from './props'\r\n\r\nconst MATCH_START_QUERY = /[?](?:start|t)=([0-9hms]+)/\r\nconst MATCH_START_STAMP = /(\\d+)(h|m|s)/g\r\nconst MATCH_NUMERIC = /^\\d+$/\r\n\r\n// Parse YouTube URL for a start time param, ie ?t=1h14m30s\r\n// and return the start time in seconds\r\nexport function parseStartTime (url) {\r\n const match = url.match(MATCH_START_QUERY)\r\n if (match) {\r\n const stamp = match[1]\r\n if (stamp.match(MATCH_START_STAMP)) {\r\n return parseStartStamp(stamp)\r\n }\r\n if (MATCH_NUMERIC.test(stamp)) {\r\n return parseInt(stamp, 10)\r\n }\r\n }\r\n return 0\r\n}\r\n\r\nfunction parseStartStamp (stamp) {\r\n let seconds = 0\r\n let array = MATCH_START_STAMP.exec(stamp)\r\n while (array !== null) {\r\n const [, count, period] = array\r\n if (period === 'h') seconds += parseInt(count, 10) * 60 * 60\r\n if (period === 'm') seconds += parseInt(count, 10) * 60\r\n if (period === 's') seconds += parseInt(count, 10)\r\n array = MATCH_START_STAMP.exec(stamp)\r\n }\r\n return seconds\r\n}\r\n\r\n// http://stackoverflow.com/a/38622545\r\nexport function randomString () {\r\n return Math.random().toString(36).substr(2, 5)\r\n}\r\n\r\nexport function queryString (object) {\r\n return Object\r\n .keys(object)\r\n .map(key => `${key}=${object[key]}`)\r\n .join('&')\r\n}\r\n\r\n// Util function to load an external SDK\r\n// or return the SDK if it is already loaded\r\nexport function getSDK (url, sdkGlobal, sdkReady = null, isLoaded = () => true) {\r\n if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {\r\n return Promise.resolve(window[sdkGlobal])\r\n }\r\n return new Promise((resolve, reject) => {\r\n if (sdkReady) {\r\n const previousOnReady = window[sdkReady]\r\n window[sdkReady] = function () {\r\n if (previousOnReady) previousOnReady()\r\n resolve(window[sdkGlobal])\r\n }\r\n }\r\n loadScript(url, err => {\r\n if (err) reject(err)\r\n if (!sdkReady) {\r\n resolve(window[sdkGlobal])\r\n }\r\n })\r\n })\r\n}\r\n\r\nexport function getConfig (props, defaultProps, showWarning) {\r\n let config = merge(defaultProps.config, props.config)\r\n for (let p of DEPRECATED_CONFIG_PROPS) {\r\n if (props[p]) {\r\n const key = p.replace(/Config$/, '')\r\n config = merge(config, { [key]: props[p] })\r\n if (showWarning) {\r\n const link = 'https://github.com/CookPete/react-player#config-prop'\r\n const message = `ReactPlayer: %c${p} %cis deprecated, please use the config prop instead – ${link}`\r\n console.warn(message, 'font-weight: bold', '')\r\n }\r\n }\r\n }\r\n return config\r\n}\r\n\r\nexport function omit (object, ...arrays) {\r\n const omitKeys = [].concat(...arrays)\r\n const output = {}\r\n const keys = Object.keys(object)\r\n for (let key of keys) {\r\n if (omitKeys.indexOf(key) === -1) {\r\n output[key] = object[key]\r\n }\r\n }\r\n return output\r\n}\r\n\r\nexport function callPlayer (method, ...args) {\r\n // Util method for calling a method on this.player\r\n // but guard against errors and console.warn instead\r\n if (!this.player || !this.player[method]) {\r\n let message = `ReactPlayer: ${this.constructor.displayName} player could not call %c${method}%c – `\r\n if (!this.player) {\r\n message += 'The player was not available'\r\n } else if (!this.player[method]) {\r\n message += 'The method was not available'\r\n }\r\n console.warn(message, 'font-weight: bold', '')\r\n return null\r\n }\r\n return this.player[method](...args)\r\n}\r\n\r\nexport function isObject (val) {\r\n return val !== null && typeof val === 'object'\r\n}\r\n\r\n// Deep comparison of two objects but ignoring\r\n// functions, for use in shouldComponentUpdate\r\nexport function isEqual (a, b) {\r\n if (typeof a === 'function' && typeof b === 'function') {\r\n return true\r\n }\r\n if (a instanceof Array && b instanceof Array) {\r\n if (a.length !== b.length) {\r\n return false\r\n }\r\n for (let i = 0; i !== a.length; i++) {\r\n if (!isEqual(a[i], b[i])) {\r\n return false\r\n }\r\n }\r\n return true\r\n }\r\n if (isObject(a) && isObject(b)) {\r\n if (Object.keys(a).length !== Object.keys(b).length) {\r\n return false\r\n }\r\n for (let key of Object.keys(a)) {\r\n if (!isEqual(a[key], b[key])) {\r\n return false\r\n }\r\n }\r\n return true\r\n }\r\n return a === b\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils.js","import React, { Component } from 'react'\r\n\r\nimport { propTypes, defaultProps, DEPRECATED_CONFIG_PROPS } from './props'\r\nimport { getConfig, omit, isEqual } from './utils'\r\nimport Player from './Player'\r\n\r\nconst SUPPORTED_PROPS = Object.keys(propTypes)\r\n\r\nexport default function createSinglePlayer (activePlayer) {\r\n return class SinglePlayer extends Component {\r\n static displayName = `${activePlayer.displayName}Player`\r\n static propTypes = propTypes\r\n static defaultProps = defaultProps\r\n static canPlay = activePlayer.canPlay\r\n\r\n shouldComponentUpdate (nextProps) {\r\n return !isEqual(this.props, nextProps)\r\n }\r\n componentWillUpdate (nextProps) {\r\n this.config = getConfig(nextProps, defaultProps)\r\n }\r\n ref = player => {\r\n this.player = player\r\n }\r\n render () {\r\n if (!activePlayer.canPlay(this.props.url)) {\r\n return null\r\n }\r\n const { style, width, height, wrapper: Wrapper } = this.props\r\n const otherProps = omit(this.props, SUPPORTED_PROPS, DEPRECATED_CONFIG_PROPS)\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/singlePlayer.js","\"use strict\";\n\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n */\n\nfunction makeEmptyFunction(arg) {\n return function () {\n return arg;\n };\n}\n\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nvar emptyFunction = function emptyFunction() {};\n\nemptyFunction.thatReturns = makeEmptyFunction;\nemptyFunction.thatReturnsFalse = makeEmptyFunction(false);\nemptyFunction.thatReturnsTrue = makeEmptyFunction(true);\nemptyFunction.thatReturnsNull = makeEmptyFunction(null);\nemptyFunction.thatReturnsThis = function () {\n return this;\n};\nemptyFunction.thatReturnsArgument = function (arg) {\n return arg;\n};\n\nmodule.exports = emptyFunction;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fbjs/lib/emptyFunction.js","import PropTypes from 'prop-types'\r\n\r\nconst { string, bool, number, array, oneOfType, shape, object, func } = PropTypes\r\n\r\nexport const propTypes = {\r\n url: oneOfType([ string, array ]),\r\n playing: bool,\r\n loop: bool,\r\n controls: bool,\r\n volume: number,\r\n muted: bool,\r\n playbackRate: number,\r\n width: oneOfType([ string, number ]),\r\n height: oneOfType([ string, number ]),\r\n style: object,\r\n progressInterval: number,\r\n playsinline: bool,\r\n wrapper: oneOfType([ string, func ]),\r\n config: shape({\r\n soundcloud: shape({\r\n options: object\r\n }),\r\n youtube: shape({\r\n playerVars: object,\r\n preload: bool\r\n }),\r\n facebook: shape({\r\n appId: string\r\n }),\r\n dailymotion: shape({\r\n params: object,\r\n preload: bool\r\n }),\r\n vimeo: shape({\r\n iframeParams: object,\r\n preload: bool\r\n }),\r\n file: shape({\r\n attributes: object,\r\n tracks: array,\r\n forceAudio: bool,\r\n forceHLS: bool,\r\n forceDASH: bool,\r\n hlsOptions: object\r\n }),\r\n wistia: shape({\r\n options: object\r\n }),\r\n mixcloud: shape({\r\n options: object\r\n }),\r\n twitch: shape({\r\n options: object\r\n })\r\n }),\r\n onReady: func,\r\n onStart: func,\r\n onPlay: func,\r\n onPause: func,\r\n onBuffer: func,\r\n onEnded: func,\r\n onError: func,\r\n onDuration: func,\r\n onSeek: func,\r\n onProgress: func\r\n}\r\n\r\nexport const defaultProps = {\r\n playing: false,\r\n loop: false,\r\n controls: false,\r\n volume: null,\r\n muted: false,\r\n playbackRate: 1,\r\n width: '640px',\r\n height: '360px',\r\n style: {},\r\n progressInterval: 1000,\r\n playsinline: false,\r\n wrapper: 'div',\r\n config: {\r\n soundcloud: {\r\n options: {\r\n visual: true, // Undocumented, but makes player fill container and look better\r\n buying: false,\r\n liking: false,\r\n download: false,\r\n sharing: false,\r\n show_comments: false,\r\n show_playcount: false\r\n }\r\n },\r\n youtube: {\r\n playerVars: {\r\n autoplay: 0,\r\n playsinline: 1,\r\n showinfo: 0,\r\n rel: 0,\r\n iv_load_policy: 3,\r\n modestbranding: 1\r\n },\r\n preload: false\r\n },\r\n facebook: {\r\n appId: '1309697205772819'\r\n },\r\n dailymotion: {\r\n params: {\r\n api: 1,\r\n 'endscreen-enable': false\r\n },\r\n preload: false\r\n },\r\n vimeo: {\r\n playerOptions: {\r\n autopause: false,\r\n autoplay: false,\r\n byline: false,\r\n portrait: false,\r\n title: false\r\n },\r\n preload: false\r\n },\r\n file: {\r\n attributes: {},\r\n tracks: [],\r\n forceAudio: false,\r\n forceHLS: false,\r\n forceDASH: false,\r\n hlsOptions: {}\r\n },\r\n wistia: {\r\n options: {}\r\n },\r\n mixcloud: {\r\n options: {\r\n hide_cover: 1\r\n }\r\n },\r\n twitch: {\r\n options: {}\r\n }\r\n },\r\n onReady: function () {},\r\n onStart: function () {},\r\n onPlay: function () {},\r\n onPause: function () {},\r\n onBuffer: function () {},\r\n onEnded: function () {},\r\n onError: function () {},\r\n onDuration: function () {},\r\n onSeek: function () {},\r\n onProgress: function () {}\r\n}\r\n\r\nexport const DEPRECATED_CONFIG_PROPS = [\r\n 'soundcloudConfig',\r\n 'youtubeConfig',\r\n 'facebookConfig',\r\n 'dailymotionConfig',\r\n 'vimeoConfig',\r\n 'fileConfig',\r\n 'wistiaConfig'\r\n]\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/props.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar validateFormat = function validateFormat(format) {};\n\nif (process.env.NODE_ENV !== 'production') {\n validateFormat = function validateFormat(format) {\n if (format === undefined) {\n throw new Error('invariant requires an error message argument');\n }\n };\n}\n\nfunction invariant(condition, format, a, b, c, d, e, f) {\n validateFormat(format);\n\n if (!condition) {\n var error;\n if (format === undefined) {\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\n } else {\n var args = [a, b, c, d, e, f];\n var argIndex = 0;\n error = new Error(format.replace(/%s/g, function () {\n return args[argIndex++];\n }));\n error.name = 'Invariant Violation';\n }\n\n error.framesToPop = 1; // we don't care about invariant's own frame\n throw error;\n }\n}\n\nmodule.exports = invariant;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fbjs/lib/invariant.js","import React, { Component } from 'react'\r\n\r\nimport { propTypes, defaultProps } from './props'\r\n\r\nconst SEEK_ON_PLAY_EXPIRY = 5000\r\n\r\nexport default class Player extends Component {\r\n static displayName = 'Player'\r\n static propTypes = propTypes\r\n static defaultProps = defaultProps\r\n mounted = false\r\n isReady = false\r\n isPlaying = false // Track playing state internally to prevent bugs\r\n isLoading = true // Use isLoading to prevent onPause when switching URL\r\n startOnPlay = true\r\n seekOnPlay = null\r\n onDurationCalled = false\r\n componentDidMount () {\r\n this.mounted = true\r\n this.player.load(this.props.url)\r\n this.progress()\r\n }\r\n componentWillUnmount () {\r\n clearTimeout(this.progressTimeout)\r\n if (this.isReady) {\r\n this.player.stop()\r\n }\r\n this.mounted = false\r\n }\r\n componentWillReceiveProps (nextProps) {\r\n // Invoke player methods based on incoming props\r\n const { url, playing, volume, muted, playbackRate } = this.props\r\n if (url !== nextProps.url) {\r\n this.isLoading = true\r\n this.startOnPlay = true\r\n this.onDurationCalled = false\r\n this.player.load(nextProps.url, this.isReady)\r\n }\r\n if (!playing && nextProps.playing && !this.isPlaying) {\r\n this.player.play()\r\n }\r\n if (playing && !nextProps.playing && this.isPlaying) {\r\n this.player.pause()\r\n }\r\n if (nextProps.volume !== null) {\r\n if (volume !== nextProps.volume && !nextProps.muted) {\r\n this.player.setVolume(nextProps.volume)\r\n }\r\n if (muted !== nextProps.muted) {\r\n this.player.setVolume(nextProps.muted ? 0 : nextProps.volume)\r\n }\r\n }\r\n if (playbackRate !== nextProps.playbackRate && this.player.setPlaybackRate) {\r\n this.player.setPlaybackRate(nextProps.playbackRate)\r\n }\r\n }\r\n getDuration () {\r\n if (!this.isReady) return null\r\n return this.player.getDuration()\r\n }\r\n getCurrentTime () {\r\n if (!this.isReady) return null\r\n return this.player.getCurrentTime()\r\n }\r\n getSecondsLoaded () {\r\n if (!this.isReady) return null\r\n return this.player.getSecondsLoaded()\r\n }\r\n getInternalPlayer = (key) => {\r\n if (!this.player) return null\r\n return this.player[key]\r\n }\r\n progress = () => {\r\n if (this.props.url && this.player && this.isReady) {\r\n const playedSeconds = this.getCurrentTime() || 0\r\n const loadedSeconds = this.getSecondsLoaded()\r\n const duration = this.getDuration()\r\n if (duration) {\r\n const progress = {\r\n playedSeconds,\r\n played: playedSeconds / duration\r\n }\r\n if (loadedSeconds !== null) {\r\n progress.loadedSeconds = loadedSeconds\r\n progress.loaded = loadedSeconds / duration\r\n }\r\n // Only call onProgress if values have changed\r\n if (progress.played !== this.prevPlayed || progress.loaded !== this.prevLoaded) {\r\n this.props.onProgress(progress)\r\n }\r\n this.prevPlayed = progress.played\r\n this.prevLoaded = progress.loaded\r\n }\r\n }\r\n this.progressTimeout = setTimeout(this.progress, this.props.progressFrequency || this.props.progressInterval)\r\n }\r\n seekTo (amount) {\r\n // When seeking before player is ready, store value and seek later\r\n if (!this.isReady && amount !== 0) {\r\n this.seekOnPlay = amount\r\n setTimeout(() => {\r\n this.seekOnPlay = null\r\n }, SEEK_ON_PLAY_EXPIRY)\r\n return\r\n }\r\n if (amount > 0 && amount < 1) {\r\n // Convert fraction to seconds based on duration\r\n const duration = this.player.getDuration()\r\n if (!duration) {\r\n console.warn('ReactPlayer: could not seek using fraction – duration not yet available')\r\n return\r\n }\r\n this.player.seekTo(duration * amount)\r\n return\r\n }\r\n this.player.seekTo(amount)\r\n }\r\n onReady = () => {\r\n if (!this.mounted) return\r\n this.isReady = true\r\n this.isLoading = false\r\n const { onReady, playing, volume, muted } = this.props\r\n onReady()\r\n if (muted || volume !== null) {\r\n this.player.setVolume(muted ? 0 : volume)\r\n }\r\n if (playing) {\r\n this.player.play()\r\n }\r\n this.onDurationCheck()\r\n }\r\n onPlay = () => {\r\n this.isPlaying = true\r\n this.isLoading = false\r\n const { onStart, onPlay, playbackRate } = this.props\r\n if (this.startOnPlay) {\r\n if (this.player.setPlaybackRate) {\r\n this.player.setPlaybackRate(playbackRate)\r\n }\r\n onStart()\r\n this.startOnPlay = false\r\n }\r\n onPlay()\r\n if (this.seekOnPlay) {\r\n this.seekTo(this.seekOnPlay)\r\n this.seekOnPlay = null\r\n }\r\n this.onDurationCheck()\r\n }\r\n onPause = (e) => {\r\n this.isPlaying = false\r\n if (!this.isLoading) {\r\n this.props.onPause(e)\r\n }\r\n }\r\n onEnded = () => {\r\n const { activePlayer, loop, onEnded } = this.props\r\n if (activePlayer.loopOnEnded && loop) {\r\n this.seekTo(0)\r\n }\r\n if (!loop) {\r\n this.isPlaying = false\r\n }\r\n onEnded()\r\n }\r\n onDurationCheck = () => {\r\n clearTimeout(this.durationCheckTimeout)\r\n const duration = this.getDuration()\r\n if (duration) {\r\n if (!this.onDurationCalled) {\r\n this.props.onDuration(duration)\r\n this.onDurationCalled = true\r\n }\r\n } else {\r\n this.durationCheckTimeout = setTimeout(this.onDurationCheck, 100)\r\n }\r\n }\r\n ref = player => {\r\n if (player) {\r\n this.player = player\r\n }\r\n }\r\n render () {\r\n const Player = this.props.activePlayer\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/Player.js","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/object-assign/index.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\n'use strict';\n\nvar emptyObject = {};\n\nif (process.env.NODE_ENV !== 'production') {\n Object.freeze(emptyObject);\n}\n\nmodule.exports = emptyObject;\n\n\n// WEBPACK FOOTER //\n// ./node_modules/fbjs/lib/emptyObject.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, parseStartTime } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://www.youtube.com/iframe_api'\r\nconst SDK_GLOBAL = 'YT'\r\nconst SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady'\r\nconst MATCH_URL = /(?:youtu\\.be\\/|youtube\\.com\\/(?:embed\\/|v\\/|watch\\?v=|watch\\?.+&v=))((\\w|-){11})/\r\n\r\nexport class YouTube extends Component {\r\n static displayName = 'YouTube'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n load (url, isReady) {\r\n const { playsinline, controls, config, onError } = this.props\r\n const id = url && url.match(MATCH_URL)[1]\r\n if (isReady) {\r\n this.player.cueVideoById({\r\n videoId: id,\r\n startSeconds: parseStartTime(url)\r\n })\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, YT => YT.loaded).then(YT => {\r\n if (!this.container) return\r\n this.player = new YT.Player(this.container, {\r\n width: '100%',\r\n height: '100%',\r\n videoId: id,\r\n playerVars: {\r\n controls: controls ? 1 : 0,\r\n start: parseStartTime(url),\r\n origin: window.location.origin,\r\n playsinline: playsinline,\r\n ...config.youtube.playerVars\r\n },\r\n events: {\r\n onReady: this.props.onReady,\r\n onStateChange: this.onStateChange,\r\n onError: event => onError(event.data)\r\n }\r\n })\r\n }, onError)\r\n }\r\n onStateChange = ({ data }) => {\r\n const { onPlay, onPause, onBuffer, onEnded, onReady } = this.props\r\n const { PLAYING, PAUSED, BUFFERING, ENDED, CUED } = window[SDK_GLOBAL].PlayerState\r\n if (data === PLAYING) onPlay()\r\n if (data === PAUSED) onPause()\r\n if (data === BUFFERING) onBuffer()\r\n if (data === ENDED) onEnded()\r\n if (data === CUED) onReady()\r\n }\r\n play () {\r\n this.callPlayer('playVideo')\r\n }\r\n pause () {\r\n this.callPlayer('pauseVideo')\r\n }\r\n stop () {\r\n if (!document.body.contains(this.callPlayer('getIframe'))) return\r\n this.callPlayer('stopVideo')\r\n }\r\n seekTo (amount) {\r\n this.callPlayer('seekTo', amount)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction * 100)\r\n }\r\n setPlaybackRate (rate) {\r\n this.callPlayer('setPlaybackRate', rate)\r\n }\r\n getDuration () {\r\n return this.callPlayer('getDuration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('getCurrentTime')\r\n }\r\n getSecondsLoaded () {\r\n return this.callPlayer('getVideoLoadedFraction') * this.getDuration()\r\n }\r\n ref = container => {\r\n this.container = container\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n ...this.props.style\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(YouTube)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/YouTube.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://w.soundcloud.com/player/api.js'\r\nconst SDK_GLOBAL = 'SC'\r\nconst MATCH_URL = /(soundcloud\\.com|snd\\.sc)\\/.+$/\r\n\r\nexport class SoundCloud extends Component {\r\n static displayName = 'SoundCloud'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n fractionLoaded = null\r\n load (url, isReady) {\r\n getSDK(SDK_URL, SDK_GLOBAL).then(SC => {\r\n if (!this.iframe) return\r\n const { PLAY, PLAY_PROGRESS, PAUSE, FINISH, ERROR } = SC.Widget.Events\r\n if (!isReady) {\r\n this.player = SC.Widget(this.iframe)\r\n this.player.bind(PLAY, this.props.onPlay)\r\n this.player.bind(PAUSE, this.props.onPause)\r\n this.player.bind(PLAY_PROGRESS, e => {\r\n this.currentTime = e.currentPosition / 1000\r\n this.fractionLoaded = e.loadedProgress\r\n })\r\n this.player.bind(FINISH, () => this.props.onEnded())\r\n this.player.bind(ERROR, e => this.props.onError(e))\r\n }\r\n this.player.load(url, {\r\n ...this.props.config.soundcloud.options,\r\n callback: () => {\r\n this.player.getDuration(duration => {\r\n this.duration = duration / 1000\r\n this.props.onReady()\r\n })\r\n }\r\n })\r\n })\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seekTo', seconds * 1000)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction * 100)\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.fractionLoaded * this.duration\r\n }\r\n ref = iframe => {\r\n this.iframe = iframe\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n ...this.props.style\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(SoundCloud)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/SoundCloud.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://player.vimeo.com/api/player.js'\r\nconst SDK_GLOBAL = 'Vimeo'\r\nconst MATCH_URL = /vimeo\\.com\\//\r\n\r\nexport class Vimeo extends Component {\r\n static displayName = 'Vimeo'\r\n static canPlay = url => MATCH_URL.test(url)\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n secondsLoaded = null\r\n load (url) {\r\n this.duration = null\r\n getSDK(SDK_URL, SDK_GLOBAL).then(Vimeo => {\r\n if (!this.container) return\r\n this.player = new Vimeo.Player(this.container, {\r\n ...this.props.config.vimeo.playerOptions,\r\n url,\r\n loop: this.props.loop\r\n })\r\n this.player.ready().then(() => {\r\n const iframe = this.container.querySelector('iframe')\r\n iframe.style.width = '100%'\r\n iframe.style.height = '100%'\r\n }).catch(this.props.onError)\r\n this.player.on('loaded', () => {\r\n this.props.onReady()\r\n this.player.getDuration().then(duration => {\r\n this.duration = duration\r\n })\r\n })\r\n this.player.on('play', this.props.onPlay)\r\n this.player.on('pause', this.props.onPause)\r\n this.player.on('seeked', e => this.props.onSeek(e.seconds))\r\n this.player.on('ended', this.props.onEnded)\r\n this.player.on('error', this.props.onError)\r\n this.player.on('timeupdate', ({ seconds }) => {\r\n this.currentTime = seconds\r\n })\r\n this.player.on('progress', ({ seconds }) => {\r\n this.secondsLoaded = seconds\r\n })\r\n }, this.props.onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n this.callPlayer('unload')\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('setCurrentTime', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.secondsLoaded\r\n }\r\n ref = container => {\r\n this.container = container\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n overflow: 'hidden',\r\n backgroundColor: 'black',\r\n ...this.props.style\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Vimeo)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Vimeo.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, parseStartTime } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = 'https://api.dmcdn.net/all.js'\r\nconst SDK_GLOBAL = 'DM'\r\nconst SDK_GLOBAL_READY = 'dmAsyncInit'\r\nconst MATCH_URL = /dailymotion\\.com\\/(video|hub)\\/([^_]+)[^#]*(#video=([^_&]+))?/\r\n\r\nexport class DailyMotion extends Component {\r\n static displayName = 'DailyMotion'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n parseId (url) {\r\n const m = url.match(MATCH_URL)\r\n return m[4] || m[2]\r\n }\r\n load (url) {\r\n const { controls, config, onError, playing } = this.props\r\n const id = this.parseId(url)\r\n if (this.player) {\r\n this.player.load(id, {\r\n start: parseStartTime(url),\r\n autoplay: playing\r\n })\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, DM => DM.player).then(DM => {\r\n if (!this.container) return\r\n const Player = DM.player\r\n this.player = new Player(this.container, {\r\n width: '100%',\r\n height: '100%',\r\n video: id,\r\n params: {\r\n controls: controls,\r\n autoplay: this.props.playing,\r\n start: parseStartTime(url),\r\n origin: window.location.origin,\r\n ...config.dailymotion.params\r\n },\r\n events: {\r\n apiready: this.props.onReady,\r\n seeked: () => this.props.onSeek(this.player.currentTime),\r\n video_end: this.props.onEnded,\r\n durationchange: this.onDurationChange,\r\n pause: this.props.onPause,\r\n playing: this.props.onPlay,\r\n waiting: this.props.onBuffer,\r\n error: event => onError(event)\r\n }\r\n })\r\n }, onError)\r\n }\r\n onDurationChange = () => {\r\n const duration = this.getDuration()\r\n this.props.onDuration(duration)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.player.duration || null\r\n }\r\n getCurrentTime () {\r\n return this.player.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.player.bufferedTime\r\n }\r\n ref = container => {\r\n this.container = container\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: 'black',\r\n ...this.props.style\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(DailyMotion)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/DailyMotion.js","import React, { Component } from 'react'\r\n\r\nimport { getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst AUDIO_EXTENSIONS = /\\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\\?)/i\r\nconst VIDEO_EXTENSIONS = /\\.(mp4|og[gv]|webm|mov|m4v)($|\\?)/i\r\nconst HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i\r\nconst HLS_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.8.9/hls.min.js'\r\nconst HLS_GLOBAL = 'Hls'\r\nconst DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i\r\nconst DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.6.5/dash.all.min.js'\r\nconst DASH_GLOBAL = 'dashjs'\r\n\r\nfunction canPlay (url) {\r\n if (url instanceof Array) {\r\n for (let item of url) {\r\n if (typeof item === 'string' && canPlay(item)) {\r\n return true\r\n }\r\n if (canPlay(item.src)) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n return (\r\n AUDIO_EXTENSIONS.test(url) ||\r\n VIDEO_EXTENSIONS.test(url) ||\r\n HLS_EXTENSIONS.test(url) ||\r\n DASH_EXTENSIONS.test(url)\r\n )\r\n}\r\n\r\nexport class FilePlayer extends Component {\r\n static displayName = 'FilePlayer'\r\n static canPlay = canPlay\r\n\r\n componentDidMount () {\r\n this.addListeners()\r\n }\r\n componentWillReceiveProps (nextProps) {\r\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(nextProps)) {\r\n this.removeListeners()\r\n }\r\n }\r\n componentDidUpdate (prevProps) {\r\n if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {\r\n this.addListeners()\r\n }\r\n }\r\n componentWillUnmount () {\r\n this.removeListeners()\r\n }\r\n addListeners () {\r\n const { onReady, onPlay, onPause, onEnded, onError, playsinline } = this.props\r\n this.player.addEventListener('canplay', onReady)\r\n this.player.addEventListener('play', onPlay)\r\n this.player.addEventListener('pause', onPause)\r\n this.player.addEventListener('seeked', this.onSeek)\r\n this.player.addEventListener('ended', onEnded)\r\n this.player.addEventListener('error', onError)\r\n if (playsinline) {\r\n this.player.setAttribute('playsinline', '')\r\n this.player.setAttribute('webkit-playsinline', '')\r\n }\r\n }\r\n removeListeners () {\r\n const { onReady, onPlay, onPause, onEnded, onError } = this.props\r\n this.player.removeEventListener('canplay', onReady)\r\n this.player.removeEventListener('play', onPlay)\r\n this.player.removeEventListener('pause', onPause)\r\n this.player.removeEventListener('seeked', this.onSeek)\r\n this.player.removeEventListener('ended', onEnded)\r\n this.player.removeEventListener('error', onError)\r\n }\r\n onSeek = e => {\r\n this.props.onSeek(e.target.currentTime)\r\n }\r\n shouldUseAudio (props) {\r\n return AUDIO_EXTENSIONS.test(props.url) || props.config.file.forceAudio\r\n }\r\n shouldUseHLS (url) {\r\n const iOS =\r\n typeof navigator !== 'undefined' &&\r\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\r\n !window.MSStream\r\n return (HLS_EXTENSIONS.test(url) && !iOS) || this.props.config.file.forceHLS\r\n }\r\n shouldUseDASH (url) {\r\n return DASH_EXTENSIONS.test(url) || this.props.config.file.forceDASH\r\n }\r\n load (url) {\r\n if (this.shouldUseHLS(url)) {\r\n getSDK(HLS_SDK_URL, HLS_GLOBAL).then(Hls => {\r\n this.hls = new Hls(this.props.config.file.hlsOptions)\r\n this.hls.on(Hls.Events.ERROR, (e, data) => {\r\n this.props.onError(e, data, this.hls, Hls)\r\n })\r\n this.hls.loadSource(url)\r\n this.hls.attachMedia(this.player)\r\n })\r\n }\r\n if (this.shouldUseDASH(url)) {\r\n getSDK(DASH_SDK_URL, DASH_GLOBAL).then(dashjs => {\r\n this.dash = dashjs.MediaPlayer().create()\r\n this.dash.initialize(this.player, url, this.props.playing)\r\n this.dash.getDebug().setLogToBrowserConsole(false)\r\n })\r\n }\r\n }\r\n play () {\r\n const promise = this.player.play()\r\n if (promise) {\r\n promise.catch(this.props.onError)\r\n }\r\n }\r\n pause () {\r\n this.player.pause()\r\n }\r\n stop () {\r\n this.player.removeAttribute('src')\r\n if (this.hls) {\r\n this.hls.destroy()\r\n }\r\n if (this.dash) {\r\n this.dash.reset()\r\n }\r\n }\r\n seekTo (seconds) {\r\n this.player.currentTime = seconds\r\n }\r\n setVolume (fraction) {\r\n this.player.volume = fraction\r\n }\r\n setPlaybackRate (rate) {\r\n this.player.playbackRate = rate\r\n }\r\n getDuration () {\r\n return this.player.duration\r\n }\r\n getCurrentTime () {\r\n return this.player.currentTime\r\n }\r\n getSecondsLoaded () {\r\n if (this.player.buffered.length === 0) return 0\r\n return this.player.buffered.end(0)\r\n }\r\n renderSource = (source, index) => {\r\n if (typeof source === 'string') {\r\n return \r\n }\r\n return \r\n }\r\n renderTrack = (track, index) => {\r\n return \r\n }\r\n ref = player => {\r\n this.player = player\r\n }\r\n render () {\r\n const { url, loop, controls, config, width, height } = this.props\r\n const useAudio = this.shouldUseAudio(this.props)\r\n const useHLS = this.shouldUseHLS(url)\r\n const useDASH = this.shouldUseDASH(url)\r\n const Element = useAudio ? 'audio' : 'video'\r\n const src = url instanceof Array || useHLS || useDASH ? undefined : url\r\n const style = {\r\n width: !width || width === 'auto' ? width : '100%',\r\n height: !height || height === 'auto' ? height : '100%'\r\n }\r\n return (\r\n \r\n {url instanceof Array &&\r\n url.map(this.renderSource)\r\n }\r\n {config.file.tracks.map(this.renderTrack)}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(FilePlayer)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/FilePlayer.js","import React from 'react'\r\nimport { render } from 'react-dom'\r\nimport ReactPlayer from './ReactPlayer'\r\n\r\nexport default function renderReactPlayer (container, props) {\r\n render( , container)\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/standalone.js","/*\n React v16.0.0\n react.production.min.js\n\n Copyright (c) 2013-present, Facebook, Inc.\n\n This source code is licensed under the MIT license found in the\n LICENSE file in the root directory of this source tree.\n*/\n'use strict';var f=require(\"object-assign\"),p=require(\"fbjs/lib/emptyObject\");require(\"fbjs/lib/invariant\");var r=require(\"fbjs/lib/emptyFunction\");\nfunction t(a){for(var b=arguments.length-1,d=\"Minified React error #\"+a+\"; visit http://facebook.github.io/react/docs/error-decoder.html?invariant\\x3d\"+a,e=0;eK.length&&K.push(a)}\nfunction N(a,b,d,e){var c=typeof a;if(\"undefined\"===c||\"boolean\"===c)a=null;if(null===a||\"string\"===c||\"number\"===c||\"object\"===c&&a.$$typeof===I)return d(e,a,\"\"===b?\".\"+O(a,0):b),1;var g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k=g.hasBooleanValue+g.hasNumericValue+g.hasOverloadedBooleanValue?void 0:w(\"50\",f);e.hasOwnProperty(f)&&(g.attributeName=e[f]);d.hasOwnProperty(f)&&(g.attributeNamespace=d[f]);a.hasOwnProperty(f)&&(g.mutationMethod=a[f]);xa.properties[f]=\ng}}},xa={ID_ATTRIBUTE_NAME:\"data-reactid\",ROOT_ATTRIBUTE_NAME:\"data-reactroot\",ATTRIBUTE_NAME_START_CHAR:\":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\",ATTRIBUTE_NAME_CHAR:\":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\",\nproperties:{},shouldSetAttribute:function(a,b){if(xa.isReservedProp(a)||!(\"o\"!==a[0]&&\"O\"!==a[0]||\"n\"!==a[1]&&\"N\"!==a[1]))return!1;if(null===b)return!0;switch(typeof b){case \"boolean\":return xa.shouldAttributeAcceptBooleanValue(a);case \"undefined\":case \"number\":case \"string\":case \"object\":return!0;default:return!1}},getPropertyInfo:function(a){return xa.properties.hasOwnProperty(a)?xa.properties[a]:null},shouldAttributeAcceptBooleanValue:function(a){if(xa.isReservedProp(a))return!0;var b=xa.getPropertyInfo(a);\nif(b)return b.hasBooleanValue||b.hasStringBooleanValue||b.hasOverloadedBooleanValue;a=a.toLowerCase().slice(0,5);return\"data-\"===a||\"aria-\"===a},isReservedProp:function(a){return ta.hasOwnProperty(a)},injection:wa},A=xa,E={IndeterminateComponent:0,FunctionalComponent:1,ClassComponent:2,HostRoot:3,HostPortal:4,HostComponent:5,HostText:6,CoroutineComponent:7,CoroutineHandlerPhase:8,YieldComponent:9,Fragment:10},F={ELEMENT_NODE:1,TEXT_NODE:3,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_FRAGMENT_NODE:11},\nya=E.HostComponent,za=E.HostText,Aa=F.ELEMENT_NODE,Ba=F.COMMENT_NODE,Ea=A.ID_ATTRIBUTE_NAME,Fa={hasCachedChildNodes:1},Ga=Math.random().toString(36).slice(2),Ha=\"__reactInternalInstance$\"+Ga,Ia=\"__reactEventHandlers$\"+Ga;function La(a){for(var b;b=a._renderedComponent;)a=b;return a}function Ma(a,b){a=La(a);a._hostNode=b;b[Ha]=a}\nfunction Na(a,b){if(!(a._flags&Fa.hasCachedChildNodes)){var c=a._renderedChildren;b=b.firstChild;var d;a:for(d in c)if(c.hasOwnProperty(d)){var e=c[d],f=La(e)._domID;if(0!==f){for(;null!==b;b=b.nextSibling){var g=b,h=f;if(g.nodeType===Aa&&g.getAttribute(Ea)===\"\"+h||g.nodeType===Ba&&g.nodeValue===\" react-text: \"+h+\" \"||g.nodeType===Ba&&g.nodeValue===\" react-empty: \"+h+\" \"){Ma(e,b);continue a}}w(\"32\",f)}}a._flags|=Fa.hasCachedChildNodes}}\nfunction Oa(a){if(a[Ha])return a[Ha];for(var b=[];!a[Ha];)if(b.push(a),a.parentNode)a=a.parentNode;else return null;var c=a[Ha];if(c.tag===ya||c.tag===za)return c;for(;a&&(c=a[Ha]);a=b.pop()){var d=c;b.length&&Na(c,a)}return d}\nvar G={getClosestInstanceFromNode:Oa,getInstanceFromNode:function(a){var b=a[Ha];if(b)return b.tag===ya||b.tag===za?b:b._hostNode===a?b:null;b=Oa(a);return null!=b&&b._hostNode===a?b:null},getNodeFromInstance:function(a){if(a.tag===ya||a.tag===za)return a.stateNode;void 0===a._hostNode?w(\"33\"):void 0;if(a._hostNode)return a._hostNode;for(var b=[];!a._hostNode;)b.push(a),a._hostParent?void 0:w(\"34\"),a=a._hostParent;for(;b.length;a=b.pop())Na(a,a._hostNode);return a._hostNode},precacheChildNodes:Na,\nprecacheNode:Ma,uncacheNode:function(a){var b=a._hostNode;b&&(delete b[Ha],a._hostNode=null)},precacheFiberNode:function(a,b){b[Ha]=a},getFiberCurrentPropsFromNode:function(a){return a[Ia]||null},updateFiberProps:function(a,b){a[Ia]=b}},Pa={remove:function(a){a._reactInternalFiber=void 0},get:function(a){return a._reactInternalFiber},has:function(a){return void 0!==a._reactInternalFiber},set:function(a,b){a._reactInternalFiber=b}},Qa={ReactCurrentOwner:aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner};\nfunction Ra(a){if(\"function\"===typeof a.getName)return a.getName();if(\"number\"===typeof a.tag){a=a.type;if(\"string\"===typeof a)return a;if(\"function\"===typeof a)return a.displayName||a.name}return null}var J={NoEffect:0,PerformedWork:1,Placement:2,Update:4,PlacementAndUpdate:6,Deletion:8,ContentReset:16,Callback:32,Err:64,Ref:128},Sa=E.HostComponent,Ta=E.HostRoot,Ua=E.HostPortal,Va=E.HostText,Wa=J.NoEffect,Xa=J.Placement;\nfunction Za(a){var b=a;if(a.alternate)for(;b[\"return\"];)b=b[\"return\"];else{if((b.effectTag&Xa)!==Wa)return 1;for(;b[\"return\"];)if(b=b[\"return\"],(b.effectTag&Xa)!==Wa)return 1}return b.tag===Ta?2:3}function $a(a){2!==Za(a)?w(\"188\"):void 0}\nfunction ab(a){var b=a.alternate;if(!b)return b=Za(a),3===b?w(\"188\"):void 0,1===b?null:a;for(var c=a,d=b;;){var e=c[\"return\"],f=e?e.alternate:null;if(!e||!f)break;if(e.child===f.child){for(var g=e.child;g;){if(g===c)return $a(e),a;if(g===d)return $a(e),b;g=g.sibling}w(\"188\")}if(c[\"return\"]!==d[\"return\"])c=e,d=f;else{g=!1;for(var h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===c){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}g?\nvoid 0:w(\"189\")}}c.alternate!==d?w(\"190\"):void 0}c.tag!==Ta?w(\"188\"):void 0;return c.stateNode.current===c?a:b}\nvar bb={isFiberMounted:function(a){return 2===Za(a)},isMounted:function(a){return(a=Pa.get(a))?2===Za(a):!1},findCurrentFiberUsingSlowPath:ab,findCurrentHostFiber:function(a){a=ab(a);if(!a)return null;for(var b=a;;){if(b.tag===Sa||b.tag===Va)return b;if(b.child)b.child[\"return\"]=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b[\"return\"]||b[\"return\"]===a)return null;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}return null},findCurrentHostFiberWithNoPortals:function(a){a=ab(a);\nif(!a)return null;for(var b=a;;){if(b.tag===Sa||b.tag===Va)return b;if(b.child&&b.tag!==Ua)b.child[\"return\"]=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b[\"return\"]||b[\"return\"]===a)return null;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}return null}},K={_caughtError:null,_hasCaughtError:!1,_rethrowError:null,_hasRethrowError:!1,injection:{injectErrorUtils:function(a){\"function\"!==typeof a.invokeGuardedCallback?w(\"197\"):void 0;cb=a.invokeGuardedCallback}},invokeGuardedCallback:function(a,\nb,c,d,e,f,g,h,k){cb.apply(K,arguments)},invokeGuardedCallbackAndCatchFirstError:function(a,b,c,d,e,f,g,h,k){K.invokeGuardedCallback.apply(this,arguments);if(K.hasCaughtError()){var p=K.clearCaughtError();K._hasRethrowError||(K._hasRethrowError=!0,K._rethrowError=p)}},rethrowCaughtError:function(){return db.apply(K,arguments)},hasCaughtError:function(){return K._hasCaughtError},clearCaughtError:function(){if(K._hasCaughtError){var a=K._caughtError;K._caughtError=null;K._hasCaughtError=!1;return a}w(\"198\")}};\nfunction cb(a,b,c,d,e,f,g,h,k){K._hasCaughtError=!1;K._caughtError=null;var p=Array.prototype.slice.call(arguments,3);try{b.apply(c,p)}catch(x){K._caughtError=x,K._hasCaughtError=!0}}function db(){if(K._hasRethrowError){var a=K._rethrowError;K._rethrowError=null;K._hasRethrowError=!1;throw a;}}var eb=K,fb;function gb(a,b,c,d){b=a.type||\"unknown-event\";a.currentTarget=hb.getNodeFromInstance(d);eb.invokeGuardedCallbackAndCatchFirstError(b,c,void 0,a);a.currentTarget=null}\nvar hb={isEndish:function(a){return\"topMouseUp\"===a||\"topTouchEnd\"===a||\"topTouchCancel\"===a},isMoveish:function(a){return\"topMouseMove\"===a||\"topTouchMove\"===a},isStartish:function(a){return\"topMouseDown\"===a||\"topTouchStart\"===a},executeDirectDispatch:function(a){var b=a._dispatchListeners,c=a._dispatchInstances;Array.isArray(b)?w(\"103\"):void 0;a.currentTarget=b?hb.getNodeFromInstance(c):null;b=b?b(a):null;a.currentTarget=null;a._dispatchListeners=null;a._dispatchInstances=null;return b},executeDispatchesInOrder:function(a,\nb){var c=a._dispatchListeners,d=a._dispatchInstances;if(Array.isArray(c))for(var e=0;ewb.length&&wb.push(a)}}}},L=yb;function Cb(a,b){null==b?w(\"30\"):void 0;if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}\nfunction Db(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var Eb=null;function Fb(a,b){a&&(ib.executeDispatchesInOrder(a,b),a.isPersistent()||a.constructor.release(a))}function Gb(a){return Fb(a,!0)}function Hb(a){return Fb(a,!1)}\nfunction Ib(a,b,c){switch(a){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":return!(!c.disabled||\"button\"!==b&&\"input\"!==b&&\"select\"!==b&&\"textarea\"!==b);default:return!1}}\nvar Jb={injection:{injectEventPluginOrder:sa.injectEventPluginOrder,injectEventPluginsByName:sa.injectEventPluginsByName},getListener:function(a,b){if(\"number\"===typeof a.tag){var c=a.stateNode;if(!c)return null;var d=ib.getFiberCurrentPropsFromNode(c);if(!d)return null;c=d[b];if(Ib(b,a.type,d))return null}else{d=a._currentElement;if(\"string\"===typeof d||\"number\"===typeof d||!a._rootNodeID)return null;a=d.props;c=a[b];if(Ib(b,d.type,a))return null}c&&\"function\"!==typeof c?w(\"231\",b,typeof c):void 0;\nreturn c},extractEvents:function(a,b,c,d){for(var e,f=sa.plugins,g=0;gc||d.hasOverloadedBooleanValue&&!1===c?gc.deleteValueForProperty(a,\nb):d.mustUseProperty?a[d.propertyName]=c:(b=d.attributeName,(e=d.attributeNamespace)?a.setAttributeNS(e,b,\"\"+c):d.hasBooleanValue||d.hasOverloadedBooleanValue&&!0===c?a.setAttribute(b,\"\"):a.setAttribute(b,\"\"+c))}else gc.setValueForAttribute(a,b,A.shouldSetAttribute(b,c)?c:null)},setValueForAttribute:function(a,b,c){fc(b)&&(null==c?a.removeAttribute(b):a.setAttribute(b,\"\"+c))},deleteValueForAttribute:function(a,b){a.removeAttribute(b)},deleteValueForProperty:function(a,b){var c=A.getPropertyInfo(b);\nc?(b=c.mutationMethod)?b(a,void 0):c.mustUseProperty?a[c.propertyName]=c.hasBooleanValue?!1:\"\":a.removeAttribute(c.attributeName):a.removeAttribute(b)}},hc=gc,ic=Qa.ReactDebugCurrentFrame;function jc(){return null}\nvar kc={current:null,phase:null,resetCurrentFiber:function(){ic.getCurrentStack=null;kc.current=null;kc.phase=null},setCurrentFiber:function(a,b){ic.getCurrentStack=jc;kc.current=a;kc.phase=b},getCurrentFiberOwnerName:function(){return null},getCurrentFiberStackAddendum:jc},lc=kc,mc={getHostProps:function(a,b){var c=b.value,d=b.checked;return n({type:void 0,step:void 0,min:void 0,max:void 0},b,{defaultChecked:void 0,defaultValue:void 0,value:null!=c?c:a._wrapperState.initialValue,checked:null!=d?\nd:a._wrapperState.initialChecked})},initWrapperState:function(a,b){var c=b.defaultValue;a._wrapperState={initialChecked:null!=b.checked?b.checked:b.defaultChecked,initialValue:null!=b.value?b.value:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}},updateWrapper:function(a,b){var c=b.checked;null!=c&&hc.setValueForProperty(a,\"checked\",c||!1);c=b.value;if(null!=c)if(0===c&&\"\"===a.value)a.value=\"0\";else if(\"number\"===b.type){if(b=parseFloat(a.value)||0,c!=b||c==b&&a.value!=\nc)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else null==b.value&&null!=b.defaultValue&&a.defaultValue!==\"\"+b.defaultValue&&(a.defaultValue=\"\"+b.defaultValue),null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)},postMountWrapper:function(a,b){switch(b.type){case \"submit\":case \"reset\":break;case \"color\":case \"date\":case \"datetime\":case \"datetime-local\":case \"month\":case \"time\":case \"week\":a.value=\"\";a.value=a.defaultValue;break;default:a.value=a.value}b=a.name;\"\"!==\nb&&(a.name=\"\");a.defaultChecked=!a.defaultChecked;a.defaultChecked=!a.defaultChecked;\"\"!==b&&(a.name=b)},restoreControlledState:function(a,b){mc.updateWrapper(a,b);var c=b.name;if(\"radio\"===b.type&&null!=c){for(b=a;b.parentNode;)b=b.parentNode;c=b.querySelectorAll(\"input[name\\x3d\"+JSON.stringify(\"\"+c)+'][type\\x3d\"radio\"]');for(b=0;b=b.length?void 0:w(\"93\"),b=b[0]),c=\"\"+b),null==c&&(c=\"\"),d=c);a._wrapperState={initialValue:\"\"+d}},updateWrapper:function(a,b){var c=b.value;null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&(a.defaultValue=c));null!=b.defaultValue&&(a.defaultValue=b.defaultValue)},postMountWrapper:function(a){var b=a.textContent;b===a._wrapperState.initialValue&&(a.value=b)},restoreControlledState:function(a,b){vc.updateWrapper(a,b)}},wc=vc,xc=n({menuitem:!0},{area:!0,\nbase:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function yc(a,b){b&&(xc[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML?w(\"137\",a,\"\"):void 0),null!=b.dangerouslySetInnerHTML&&(null!=b.children?w(\"60\"):void 0,\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML?void 0:w(\"61\")),null!=b.style&&\"object\"!==typeof b.style?w(\"62\",\"\"):void 0)}\nfunction zc(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ac(a){var b=zc(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"function\"===typeof c.get&&\"function\"===typeof c.set)return Object.defineProperty(a,b,{enumerable:c.enumerable,configurable:!0,get:function(){return c.get.call(this)},set:function(a){d=\"\"+a;c.set.call(this,a)}}),{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=null;delete a[b]}}}\nvar Bc={_getTrackerFromNode:function(a){return a._valueTracker},track:function(a){a._valueTracker||(a._valueTracker=Ac(a))},updateValueIfChanged:function(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=zc(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1},stopTracking:function(a){(a=a._valueTracker)&&a.stopTracking()}};\nfunction Cc(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}\nvar Dc=ka.Namespaces,Ec,Fc=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Dc.svg||\"innerHTML\"in a)a.innerHTML=b;else for(Ec=Ec||document.createElement(\"div\"),Ec.innerHTML=\"\\x3csvg\\x3e\"+b+\"\\x3c/svg\\x3e\",b=Ec.firstChild;b.firstChild;)a.appendChild(b.firstChild)}),Gc=/[\"'&<>]/,Hc=F.TEXT_NODE;\nfunction Ic(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&c.nodeType===Hc){c.nodeValue=b;return}}a.textContent=b}\nl.canUseDOM&&(\"textContent\"in document.documentElement||(Ic=function(a,b){if(a.nodeType===Hc)a.nodeValue=b;else{if(\"boolean\"===typeof b||\"number\"===typeof b)b=\"\"+b;else{b=\"\"+b;var c=Gc.exec(b);if(c){var d=\"\",e,f=0;for(e=c.index;e\nb&&(b=8),$c=b=od(a.last.priorityLevel,b))c=a.last;else for(a=a.first;null!==a&&0>=od(a.priorityLevel,b);)c=a,a=a.next;return c}\nfunction sd(a,b){var c=a.alternate,d=a.updateQueue;null===d&&(d=a.updateQueue=pd());null!==c?(a=c.updateQueue,null===a&&(a=c.updateQueue=pd())):a=null;md=d;nd=a!==d?a:null;var e=md;c=nd;var f=rd(e,b),g=null!==f?f.next:e.first;if(null===c)return qd(e,b,f,g),null;d=rd(c,b);a=null!==d?d.next:c.first;qd(e,b,f,g);if(g===a&&null!==g||f===d&&null!==f)return null===d&&(c.first=b),null===a&&(c.last=null),null;b={priorityLevel:b.priorityLevel,partialState:b.partialState,callback:b.callback,isReplace:b.isReplace,\nisForced:b.isForced,isTopLevelUnmount:b.isTopLevelUnmount,next:null};qd(c,b,d,a);return b}function td(a,b,c,d){a=a.partialState;return\"function\"===typeof a?a.call(b,c,d):a}\nvar ud={addUpdate:function(a,b,c,d){sd(a,{priorityLevel:d,partialState:b,callback:c,isReplace:!1,isForced:!1,isTopLevelUnmount:!1,next:null})},addReplaceUpdate:function(a,b,c,d){sd(a,{priorityLevel:d,partialState:b,callback:c,isReplace:!0,isForced:!1,isTopLevelUnmount:!1,next:null})},addForceUpdate:function(a,b,c){sd(a,{priorityLevel:c,partialState:null,callback:b,isReplace:!1,isForced:!0,isTopLevelUnmount:!1,next:null})},getUpdatePriority:function(a){var b=a.updateQueue;return null===b||a.tag!==\njd&&a.tag!==kd?gd:null!==b.first?b.first.priorityLevel:gd},addTopLevelUpdate:function(a,b,c,d){var e=null===b.element;b={priorityLevel:d,partialState:b,callback:c,isReplace:!1,isForced:!1,isTopLevelUnmount:e,next:null};a=sd(a,b);e&&(e=md,c=nd,null!==e&&null!==b.next&&(b.next=null,e.last=b),null!==c&&null!==a&&null!==a.next&&(a.next=null,c.last=b))},beginUpdateQueue:function(a,b,c,d,e,f,g){null!==a&&a.updateQueue===c&&(c=b.updateQueue={first:c.first,last:c.last,callbackList:null,hasForceUpdate:!1});\na=c.callbackList;for(var h=c.hasForceUpdate,k=!0,p=c.first;null!==p&&0>=od(p.priorityLevel,g);){c.first=p.next;null===c.first&&(c.last=null);var x;if(p.isReplace)e=td(p,d,e,f),k=!0;else if(x=td(p,d,e,f))e=k?n({},e,x):n(e,x),k=!1;p.isForced&&(h=!0);null===p.callback||p.isTopLevelUnmount&&null!==p.next||(a=null!==a?a:[],a.push(p.callback),b.effectTag|=fd);p=p.next}c.callbackList=a;c.hasForceUpdate=h;null!==c.first||null!==a||h||(b.updateQueue=null);return e},commitCallbacks:function(a,b,c){a=b.callbackList;\nif(null!==a)for(b.callbackList=null,b=0;bwd||(a.current=vd[wd],vd[wd]=null,wd--)},push:function(a,b){wd++;vd[wd]=a.current;a.current=b},reset:function(){for(;-1a)?a:b}},ee=de.createHostRootFiber,fe=E.IndeterminateComponent,ge=E.FunctionalComponent,he=E.ClassComponent,\nie=E.HostComponent,je,ke;\"function\"===typeof Symbol&&Symbol[\"for\"]?(je=Symbol[\"for\"](\"react.coroutine\"),ke=Symbol[\"for\"](\"react.yield\")):(je=60104,ke=60105);\nvar le={createCoroutine:function(a,b,c){var d=3r?(p=q,q=null):p=q.sibling;var v=H(a,q,h[r],k);if(null===v){null===q&&(q=p);break}b&&q&&null===v.alternate&&c(a,q);f=g(v,f,r);null===t?m=v:t.sibling=v;t=v;q=p}if(r===h.length)return d(a,q),m;if(null===q){for(;rk?(p=q,q=null):p=q.sibling;var V=H(a,q,v.value,r);if(null===V){q||(q=p);break}b&&\nq&&null===V.alternate&&c(a,q);f=g(V,f,k);null===t?m=V:t.sibling=V;t=V;q=p}if(v.done)return d(a,q),m;if(null===q){for(;!v.done;k++,v=h.next())v=B(a,v.value,r),null!==v&&(f=g(v,f,k),null===t?m=v:t.sibling=v,t=v);return m}for(q=e(a,q);!v.done;k++,v=h.next())if(v=C(q,a,k,v.value,r),null!==v){if(b&&null!==v.alternate)q[\"delete\"](null===v.key?k:v.key);f=g(v,f,k);null===t?m=v:t.sibling=v;t=v}b&&q.forEach(function(b){return c(a,b)});return m}return function(a,b,e,g){var m=\"object\"===typeof e&&null!==e;if(m)switch(e.$$typeof){case Ke:a:{var C=\ne.key;for(m=b;null!==m;){if(m.key===C)if(m.type===e.type){d(a,m.sibling);b=f(m,g);b.ref=Me(m,e);b.pendingProps=e.props;b[\"return\"]=a;a=b;break a}else{d(a,m);break}else c(a,m);m=m.sibling}g=se(e,a.internalContextTag,g);g.ref=Me(b,e);g[\"return\"]=a;a=g}return h(a);case oe:a:{for(m=e.key;null!==b;){if(b.key===m)if(b.tag===De){d(a,b.sibling);b=f(b,g);b.pendingProps=e;b[\"return\"]=a;a=b;break a}else{d(a,b);break}else c(a,b);b=b.sibling}e=ve(e,a.internalContextTag,g);e[\"return\"]=a;a=e}return h(a);case pe:a:{if(null!==\nb)if(b.tag===Ee){d(a,b.sibling);b=f(b,g);b.type=e.value;b[\"return\"]=a;a=b;break a}else d(a,b);b=we(e,a.internalContextTag,g);b.type=e.value;b[\"return\"]=a;a=b}return h(a);case qe:a:{for(m=e.key;null!==b;){if(b.key===m)if(b.tag===Ce&&b.stateNode.containerInfo===e.containerInfo&&b.stateNode.implementation===e.implementation){d(a,b.sibling);b=f(b,g);b.pendingProps=e.children||[];b[\"return\"]=a;a=b;break a}else{d(a,b);break}else c(a,b);b=b.sibling}e=xe(e,a.internalContextTag,g);e[\"return\"]=a;a=e}return h(a)}if(\"string\"===\ntypeof e||\"number\"===typeof e)return e=\"\"+e,null!==b&&b.tag===Be?(d(a,b.sibling),b=f(b,g),b.pendingProps=e,b[\"return\"]=a,a=b):(d(a,b),e=ue(e,a.internalContextTag,g),e[\"return\"]=a,a=e),h(a);if(ye(e))return Ca(a,b,e,g);if(Le(e))return r(a,b,e,g);m&&Ne(a,e);if(\"undefined\"===typeof e)switch(a.tag){case Ae:case ze:e=a.type,w(\"152\",e.displayName||e.name||\"Component\")}return d(a,b)}}\nvar Pe=Oe(!0,!0),Qe=Oe(!1,!0),Re=Oe(!1,!1),Se={reconcileChildFibers:Pe,reconcileChildFibersInPlace:Qe,mountChildFibersInPlace:Re,cloneChildFibers:function(a,b){null!==a&&b.child!==a.child?w(\"153\"):void 0;if(null!==b.child){a=b.child;var c=re(a,a.pendingWorkPriority);c.pendingProps=a.pendingProps;b.child=c;for(c[\"return\"]=b;null!==a.sibling;)a=a.sibling,c=c.sibling=re(a,a.pendingWorkPriority),c.pendingProps=a.pendingProps,c[\"return\"]=b;c.sibling=null}}},Te=J.Update,Ue=Pd.AsyncUpdates,Ve=R.cacheContext,\nWe=R.getMaskedContext,Xe=R.getUnmaskedContext,Ye=R.isContextConsumer,Ze=ud.addUpdate,$e=ud.addReplaceUpdate,af=ud.addForceUpdate,bf=ud.beginUpdateQueue,cf=R.hasContextChanged,df=bb.isMounted;\nfunction ef(a,b,c,d){function e(a,b){b.updater=f;a.stateNode=b;Pa.set(b,a)}var f={isMounted:df,enqueueSetState:function(c,d,e){c=Pa.get(c);var f=b(c,!1);Ze(c,d,void 0===e?null:e,f);a(c,f)},enqueueReplaceState:function(c,d,e){c=Pa.get(c);var f=b(c,!1);$e(c,d,void 0===e?null:e,f);a(c,f)},enqueueForceUpdate:function(c,d){c=Pa.get(c);var e=b(c,!1);af(c,void 0===d?null:d,e);a(c,e)}};return{adoptClassInstance:e,constructClassInstance:function(a,b){var c=a.type,d=Xe(a),f=Ye(a),g=f?We(a,d):da;b=new c(b,g);\ne(a,b);f&&Ve(a,d,g);return b},mountClassInstance:function(a,b){var c=a.alternate,d=a.stateNode,e=d.state||null,g=a.pendingProps;g?void 0:w(\"158\");var h=Xe(a);d.props=g;d.state=e;d.refs=da;d.context=We(a,h);ed.enableAsyncSubtreeAPI&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent&&(a.internalContextTag|=Ue);\"function\"===typeof d.componentWillMount&&(h=d.state,d.componentWillMount(),h!==d.state&&f.enqueueReplaceState(d,d.state,null),h=a.updateQueue,null!==\nh&&(d.state=bf(c,a,h,d,e,g,b)));\"function\"===typeof d.componentDidMount&&(a.effectTag|=Te)},updateClassInstance:function(a,b,e){var g=b.stateNode;g.props=b.memoizedProps;g.state=b.memoizedState;var h=b.memoizedProps,k=b.pendingProps;k||(k=h,null==k?w(\"159\"):void 0);var D=g.context,y=Xe(b);y=We(b,y);\"function\"!==typeof g.componentWillReceiveProps||h===k&&D===y||(D=g.state,g.componentWillReceiveProps(k,y),g.state!==D&&f.enqueueReplaceState(g,g.state,null));D=b.memoizedState;e=null!==b.updateQueue?bf(a,\nb,b.updateQueue,g,D,k,e):D;if(!(h!==k||D!==e||cf()||null!==b.updateQueue&&b.updateQueue.hasForceUpdate))return\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&D===a.memoizedState||(b.effectTag|=Te),!1;var B=k;if(null===h||null!==b.updateQueue&&b.updateQueue.hasForceUpdate)B=!0;else{var H=b.stateNode,C=b.type;B=\"function\"===typeof H.shouldComponentUpdate?H.shouldComponentUpdate(B,e,y):C.prototype&&C.prototype.isPureReactComponent?!ea(h,B)||!ea(D,e):!0}B?(\"function\"===typeof g.componentWillUpdate&&\ng.componentWillUpdate(k,e,y),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=Te)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&D===a.memoizedState||(b.effectTag|=Te),c(b,k),d(b,e));g.props=k;g.state=e;g.context=y;return B}}}\nvar ff=Se.mountChildFibersInPlace,gf=Se.reconcileChildFibers,hf=Se.reconcileChildFibersInPlace,jf=Se.cloneChildFibers,kf=ud.beginUpdateQueue,lf=R.getMaskedContext,mf=R.getUnmaskedContext,nf=R.hasContextChanged,of=R.pushContextProvider,pf=R.pushTopLevelContextObject,qf=R.invalidateContextProvider,rf=E.IndeterminateComponent,sf=E.FunctionalComponent,tf=E.ClassComponent,uf=E.HostRoot,wf=E.HostComponent,xf=E.HostText,yf=E.HostPortal,zf=E.CoroutineComponent,Af=E.CoroutineHandlerPhase,Bf=E.YieldComponent,\nCf=E.Fragment,Df=Q.NoWork,Ef=Q.OffscreenPriority,Ff=J.PerformedWork,Gf=J.Placement,Hf=J.ContentReset,If=J.Err,Jf=J.Ref,Kf=Qa.ReactCurrentOwner;\nfunction Lf(a,b,c,d,e){function f(a,b,c){g(a,b,c,b.pendingWorkPriority)}function g(a,b,c,d){b.child=null===a?ff(b,b.child,c,d):a.child===b.child?gf(b,b.child,c,d):hf(b,b.child,c,d)}function h(a,b){var c=b.ref;null===c||a&&a.ref===c||(b.effectTag|=Jf)}function k(a,b,c,d){h(a,b);if(!c)return d&&qf(b,!1),x(a,b);c=b.stateNode;Kf.current=b;var e=c.render();b.effectTag|=Ff;f(a,b,e);b.memoizedState=c.state;b.memoizedProps=c.props;d&&qf(b,!0);return b.child}function p(a){var b=a.stateNode;b.pendingContext?\npf(a,b.pendingContext,b.pendingContext!==b.context):b.context&&pf(a,b.context,!1);C(a,b.containerInfo)}function x(a,b){jf(a,b);return b.child}function S(a,b){switch(b.tag){case uf:p(b);break;case tf:of(b);break;case yf:C(b,b.stateNode.containerInfo)}return null}var D=a.shouldSetTextContent,y=a.useSyncScheduling,B=a.shouldDeprioritizeSubtree,H=b.pushHostContext,C=b.pushHostContainer,Ca=c.enterHydrationState,r=c.resetHydrationState,m=c.tryToClaimNextHydratableInstance;a=ef(d,e,function(a,b){a.memoizedProps=\nb},function(a,b){a.memoizedState=b});var t=a.adoptClassInstance,v=a.constructClassInstance,V=a.mountClassInstance,ld=a.updateClassInstance;return{beginWork:function(a,b,c){if(b.pendingWorkPriority===Df||b.pendingWorkPriority>c)return S(a,b);switch(b.tag){case rf:null!==a?w(\"155\"):void 0;var d=b.type,e=b.pendingProps,g=mf(b);g=lf(b,g);d=d(e,g);b.effectTag|=Ff;\"object\"===typeof d&&null!==d&&\"function\"===typeof d.render?(b.tag=tf,e=of(b),t(b,d),V(b,c),b=k(a,b,!0,e)):(b.tag=sf,f(a,b,d),b.memoizedProps=\ne,b=b.child);return b;case sf:a:{e=b.type;c=b.pendingProps;d=b.memoizedProps;if(nf())null===c&&(c=d);else if(null===c||d===c){b=x(a,b);break a}d=mf(b);d=lf(b,d);e=e(c,d);b.effectTag|=Ff;f(a,b,e);b.memoizedProps=c;b=b.child}return b;case tf:return e=of(b),d=void 0,null===a?b.stateNode?w(\"153\"):(v(b,b.pendingProps),V(b,c),d=!0):d=ld(a,b,c),k(a,b,d,e);case uf:return p(b),d=b.updateQueue,null!==d?(e=b.memoizedState,d=kf(a,b,d,null,e,null,c),e===d?(r(),b=x(a,b)):(e=d.element,null!==a&&null!==a.child||\n!Ca(b)?(r(),f(a,b,e)):(b.effectTag|=Gf,b.child=ff(b,b.child,e,c)),b.memoizedState=d,b=b.child)):(r(),b=x(a,b)),b;case wf:H(b);null===a&&m(b);e=b.type;var q=b.memoizedProps;d=b.pendingProps;null===d&&(d=q,null===d?w(\"154\"):void 0);g=null!==a?a.memoizedProps:null;nf()||null!==d&&q!==d?(q=d.children,D(e,d)?q=null:g&&D(e,g)&&(b.effectTag|=Hf),h(a,b),c!==Ef&&!y&&B(e,d)?(b.pendingWorkPriority=Ef,b=null):(f(a,b,q),b.memoizedProps=d,b=b.child)):b=x(a,b);return b;case xf:return null===a&&m(b),a=b.pendingProps,\nnull===a&&(a=b.memoizedProps),b.memoizedProps=a,null;case Af:b.tag=zf;case zf:c=b.pendingProps;if(nf())null===c&&(c=a&&a.memoizedProps,null===c?w(\"154\"):void 0);else if(null===c||b.memoizedProps===c)c=b.memoizedProps;e=c.children;d=b.pendingWorkPriority;b.stateNode=null===a?ff(b,b.stateNode,e,d):a.child===b.child?gf(b,b.stateNode,e,d):hf(b,b.stateNode,e,d);b.memoizedProps=c;return b.stateNode;case Bf:return null;case yf:a:{C(b,b.stateNode.containerInfo);c=b.pendingWorkPriority;e=b.pendingProps;if(nf())null===\ne&&(e=a&&a.memoizedProps,null==e?w(\"154\"):void 0);else if(null===e||b.memoizedProps===e){b=x(a,b);break a}null===a?b.child=hf(b,b.child,e,c):f(a,b,e);b.memoizedProps=e;b=b.child}return b;case Cf:a:{c=b.pendingProps;if(nf())null===c&&(c=b.memoizedProps);else if(null===c||b.memoizedProps===c){b=x(a,b);break a}f(a,b,c);b.memoizedProps=c;b=b.child}return b;default:w(\"156\")}},beginFailedWork:function(a,b,c){switch(b.tag){case tf:of(b);break;case uf:p(b);break;default:w(\"157\")}b.effectTag|=If;null===a?\nb.child=null:b.child!==a.child&&(b.child=a.child);if(b.pendingWorkPriority===Df||b.pendingWorkPriority>c)return S(a,b);b.firstEffect=null;b.lastEffect=null;g(a,b,null,c);b.tag===tf&&(a=b.stateNode,b.memoizedProps=a.props,b.memoizedState=a.state);return b.child}}}\nvar Mf=Se.reconcileChildFibers,Nf=R.popContextProvider,Of=R.popTopLevelContextObject,Pf=E.IndeterminateComponent,Qf=E.FunctionalComponent,Rf=E.ClassComponent,Sf=E.HostRoot,Tf=E.HostComponent,Uf=E.HostText,Vf=E.HostPortal,Wf=E.CoroutineComponent,Xf=E.CoroutineHandlerPhase,Yf=E.YieldComponent,Zf=E.Fragment,ag=J.Placement,bg=J.Ref,cg=J.Update,dg=Q.OffscreenPriority;\nfunction eg(a,b,c){var d=a.createInstance,e=a.createTextInstance,f=a.appendInitialChild,g=a.finalizeInitialChildren,h=a.prepareUpdate,k=b.getRootHostContainer,p=b.popHostContext,x=b.getHostContext,S=b.popHostContainer,D=c.prepareToHydrateHostInstance,y=c.prepareToHydrateHostTextInstance,B=c.popHydrationState;return{completeWork:function(a,b,c){var r=b.pendingProps;if(null===r)r=b.memoizedProps;else if(b.pendingWorkPriority!==dg||c===dg)b.pendingProps=null;switch(b.tag){case Qf:return null;case Rf:return Nf(b),\nnull;case Sf:S(b);Of(b);r=b.stateNode;r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null);if(null===a||null===a.child)B(b),b.effectTag&=~ag;return null;case Tf:p(b);c=k();var m=b.type;if(null!==a&&null!=b.stateNode){var t=a.memoizedProps,C=b.stateNode,V=x();r=h(C,m,t,r,c,V);if(b.updateQueue=r)b.effectTag|=cg;a.ref!==b.ref&&(b.effectTag|=bg)}else{if(!r)return null===b.stateNode?w(\"166\"):void 0,null;a=x();if(B(b))D(b,c,a)&&(b.effectTag|=cg);else{a=d(m,r,c,a,b);a:for(t=b.child;null!==\nt;){if(t.tag===Tf||t.tag===Uf)f(a,t.stateNode);else if(t.tag!==Vf&&null!==t.child){t=t.child;continue}if(t===b)break a;for(;null===t.sibling;){if(null===t[\"return\"]||t[\"return\"]===b)break a;t=t[\"return\"]}t=t.sibling}g(a,m,r,c)&&(b.effectTag|=cg);b.stateNode=a}null!==b.ref&&(b.effectTag|=bg)}return null;case Uf:if(a&&null!=b.stateNode)a.memoizedProps!==r&&(b.effectTag|=cg);else{if(\"string\"!==typeof r)return null===b.stateNode?w(\"166\"):void 0,null;a=k();c=x();B(b)?y(b)&&(b.effectTag|=cg):b.stateNode=\ne(r,a,c,b)}return null;case Wf:(r=b.memoizedProps)?void 0:w(\"165\");b.tag=Xf;c=[];a:for((m=b.stateNode)&&(m[\"return\"]=b);null!==m;){if(m.tag===Tf||m.tag===Uf||m.tag===Vf)w(\"164\");else if(m.tag===Yf)c.push(m.type);else if(null!==m.child){m.child[\"return\"]=m;m=m.child;continue}for(;null===m.sibling;){if(null===m[\"return\"]||m[\"return\"]===b)break a;m=m[\"return\"]}m.sibling[\"return\"]=m[\"return\"];m=m.sibling}m=r.handler;r=m(r.props,c);b.child=Mf(b,null!==a?a.child:null,r,b.pendingWorkPriority);return b.child;\ncase Xf:return b.tag=Wf,null;case Yf:return null;case Zf:return null;case Vf:return b.effectTag|=cg,S(b),null;case Pf:w(\"167\");default:w(\"156\")}}}}var fg=null,gg=null;function hg(a){return function(b){try{return a(b)}catch(c){}}}\nvar ig={injectInternals:function(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!b.supportsFiber)return!0;try{var c=b.inject(a);fg=hg(function(a){return b.onCommitFiberRoot(c,a)});gg=hg(function(a){return b.onCommitFiberUnmount(c,a)})}catch(d){}return!0},onCommitRoot:function(a){\"function\"===typeof fg&&fg(a)},onCommitUnmount:function(a){\"function\"===typeof gg&&gg(a)}},jg=E.ClassComponent,kg=E.HostRoot,lg=E.HostComponent,mg=E.HostText,ng=\nE.HostPortal,og=E.CoroutineComponent,pg=ud.commitCallbacks,qg=ig.onCommitUnmount,rg=J.Placement,sg=J.Update,tg=J.Callback,ug=J.ContentReset;\nfunction vg(a,b){function c(a){var c=a.ref;if(null!==c)try{c(null)}catch(t){b(a,t)}}function d(a){return a.tag===lg||a.tag===kg||a.tag===ng}function e(a){for(var b=a;;)if(g(b),null!==b.child&&b.tag!==ng)b.child[\"return\"]=b,b=b.child;else{if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||b[\"return\"]===a)return;b=b[\"return\"]}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}function f(a){for(var b=a,c=!1,d=void 0,f=void 0;;){if(!c){c=b[\"return\"];a:for(;;){null===c?w(\"160\"):void 0;switch(c.tag){case lg:d=\nc.stateNode;f=!1;break a;case kg:d=c.stateNode.containerInfo;f=!0;break a;case ng:d=c.stateNode.containerInfo;f=!0;break a}c=c[\"return\"]}c=!0}if(b.tag===lg||b.tag===mg)e(b),f?C(d,b.stateNode):H(d,b.stateNode);else if(b.tag===ng?d=b.stateNode.containerInfo:g(b),null!==b.child){b.child[\"return\"]=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b[\"return\"]||b[\"return\"]===a)return;b=b[\"return\"];b.tag===ng&&(c=!1)}b.sibling[\"return\"]=b[\"return\"];b=b.sibling}}function g(a){\"function\"===\ntypeof qg&&qg(a);switch(a.tag){case jg:c(a);var d=a.stateNode;if(\"function\"===typeof d.componentWillUnmount)try{d.props=a.memoizedProps,d.state=a.memoizedState,d.componentWillUnmount()}catch(t){b(a,t)}break;case lg:c(a);break;case og:e(a.stateNode);break;case ng:f(a)}}var h=a.commitMount,k=a.commitUpdate,p=a.resetTextContent,x=a.commitTextUpdate,S=a.appendChild,D=a.appendChildToContainer,y=a.insertBefore,B=a.insertInContainerBefore,H=a.removeChild,C=a.removeChildFromContainer,Ca=a.getPublicInstance;\nreturn{commitPlacement:function(a){a:{for(var b=a[\"return\"];null!==b;){if(d(b)){var c=b;break a}b=b[\"return\"]}w(\"160\");c=void 0}var e=b=void 0;switch(c.tag){case lg:b=c.stateNode;e=!1;break;case kg:b=c.stateNode.containerInfo;e=!0;break;case ng:b=c.stateNode.containerInfo;e=!0;break;default:w(\"161\")}c.effectTag&ug&&(p(b),c.effectTag&=~ug);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c[\"return\"]||d(c[\"return\"])){c=null;break a}c=c[\"return\"]}c.sibling[\"return\"]=c[\"return\"];for(c=c.sibling;c.tag!==\nlg&&c.tag!==mg;){if(c.effectTag&rg)continue b;if(null===c.child||c.tag===ng)continue b;else c.child[\"return\"]=c,c=c.child}if(!(c.effectTag&rg)){c=c.stateNode;break a}}for(var f=a;;){if(f.tag===lg||f.tag===mg)c?e?B(b,f.stateNode,c):y(b,f.stateNode,c):e?D(b,f.stateNode):S(b,f.stateNode);else if(f.tag!==ng&&null!==f.child){f.child[\"return\"]=f;f=f.child;continue}if(f===a)break;for(;null===f.sibling;){if(null===f[\"return\"]||f[\"return\"]===a)return;f=f[\"return\"]}f.sibling[\"return\"]=f[\"return\"];f=f.sibling}},\ncommitDeletion:function(a){f(a);a[\"return\"]=null;a.child=null;a.alternate&&(a.alternate.child=null,a.alternate[\"return\"]=null)},commitWork:function(a,b){switch(b.tag){case jg:break;case lg:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&k(c,f,e,a,d,b)}break;case mg:null===b.stateNode?w(\"162\"):void 0;c=b.memoizedProps;x(b.stateNode,null!==a?a.memoizedProps:c,c);break;case kg:break;case ng:break;default:w(\"163\")}},\ncommitLifeCycles:function(a,b){switch(b.tag){case jg:var c=b.stateNode;if(b.effectTag&sg)if(null===a)c.props=b.memoizedProps,c.state=b.memoizedState,c.componentDidMount();else{var d=a.memoizedProps;a=a.memoizedState;c.props=b.memoizedProps;c.state=b.memoizedState;c.componentDidUpdate(d,a)}b.effectTag&tg&&null!==b.updateQueue&&pg(b,b.updateQueue,c);break;case kg:a=b.updateQueue;null!==a&&pg(b,a,b.child&&b.child.stateNode);break;case lg:c=b.stateNode;null===a&&b.effectTag&sg&&h(c,b.type,b.memoizedProps,\nb);break;case mg:break;case ng:break;default:w(\"163\")}},commitAttachRef:function(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case lg:b(Ca(c));break;default:b(c)}}},commitDetachRef:function(a){a=a.ref;null!==a&&a(null)}}}var wg=xd.createCursor,xg=xd.pop,yg=xd.push,zg={};\nfunction Ag(a){function b(a){a===zg?w(\"174\"):void 0;return a}var c=a.getChildHostContext,d=a.getRootHostContext,e=wg(zg),f=wg(zg),g=wg(zg);return{getHostContext:function(){return b(e.current)},getRootHostContainer:function(){return b(g.current)},popHostContainer:function(a){xg(e,a);xg(f,a);xg(g,a)},popHostContext:function(a){f.current===a&&(xg(e,a),xg(f,a))},pushHostContainer:function(a,b){yg(g,b,a);b=d(b);yg(f,a,a);yg(e,b,a)},pushHostContext:function(a){var d=b(g.current),h=b(e.current);d=c(h,a.type,\nd);h!==d&&(yg(f,a,a),yg(e,d,a))},resetHostContainer:function(){e.current=zg;g.current=zg}}}var Bg=E.HostComponent,Cg=E.HostText,Dg=E.HostRoot,Eg=J.Deletion,Fg=J.Placement,Gg=de.createFiberFromHostInstanceForDeletion;\nfunction Hg(a){function b(a,b){var c=Gg();c.stateNode=b;c[\"return\"]=a;c.effectTag=Eg;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function c(a,b){switch(a.tag){case Bg:return f(b,a.type,a.pendingProps);case Cg:return g(b,a.pendingProps);default:return!1}}function d(a){for(a=a[\"return\"];null!==a&&a.tag!==Bg&&a.tag!==Dg;)a=a[\"return\"];y=a}var e=a.shouldSetTextContent,f=a.canHydrateInstance,g=a.canHydrateTextInstance,h=a.getNextHydratableSibling,k=a.getFirstHydratableChild,\np=a.hydrateInstance,x=a.hydrateTextInstance,S=a.didNotHydrateInstance,D=a.didNotFindHydratableInstance;a=a.didNotFindHydratableTextInstance;if(!(f&&g&&h&&k&&p&&x&&S&&D&&a))return{enterHydrationState:function(){return!1},resetHydrationState:function(){},tryToClaimNextHydratableInstance:function(){},prepareToHydrateHostInstance:function(){w(\"175\")},prepareToHydrateHostTextInstance:function(){w(\"176\")},popHydrationState:function(){return!1}};var y=null,B=null,H=!1;return{enterHydrationState:function(a){B=\nk(a.stateNode.containerInfo);y=a;return H=!0},resetHydrationState:function(){B=y=null;H=!1},tryToClaimNextHydratableInstance:function(a){if(H){var d=B;if(d){if(!c(a,d)){d=h(d);if(!d||!c(a,d)){a.effectTag|=Fg;H=!1;y=a;return}b(y,B)}a.stateNode=d;y=a;B=k(d)}else a.effectTag|=Fg,H=!1,y=a}},prepareToHydrateHostInstance:function(a,b,c){b=p(a.stateNode,a.type,a.memoizedProps,b,c,a);a.updateQueue=b;return null!==b?!0:!1},prepareToHydrateHostTextInstance:function(a){return x(a.stateNode,a.memoizedProps,a)},\npopHydrationState:function(a){if(a!==y)return!1;if(!H)return d(a),H=!0,!1;var c=a.type;if(a.tag!==Bg||\"head\"!==c&&\"body\"!==c&&!e(c,a.memoizedProps))for(c=B;c;)b(a,c),c=h(c);d(a);B=y?h(a.stateNode):null;return!0}}}\nvar Ig=R.popContextProvider,Jg=xd.reset,Kg=Qa.ReactCurrentOwner,Lg=de.createWorkInProgress,Mg=de.largerPriority,Ng=ig.onCommitRoot,T=Q.NoWork,Og=Q.SynchronousPriority,U=Q.TaskPriority,Pg=Q.HighPriority,Qg=Q.LowPriority,Rg=Q.OffscreenPriority,Sg=Pd.AsyncUpdates,Tg=J.PerformedWork,Ug=J.Placement,Vg=J.Update,Wg=J.PlacementAndUpdate,Xg=J.Deletion,Yg=J.ContentReset,Zg=J.Callback,$g=J.Err,ah=J.Ref,bh=E.HostRoot,ch=E.HostComponent,dh=E.HostPortal,eh=E.ClassComponent,fh=ud.getUpdatePriority,gh=R.resetContext;\nfunction hh(a){function b(){for(;null!==ma&&ma.current.pendingWorkPriority===T;){ma.isScheduled=!1;var a=ma.nextScheduledRoot;ma.nextScheduledRoot=null;if(ma===zb)return zb=ma=null,z=T,null;ma=a}a=ma;for(var b=null,c=T;null!==a;)a.current.pendingWorkPriority!==T&&(c===T||c>a.current.pendingWorkPriority)&&(c=a.current.pendingWorkPriority,b=a),a=a.nextScheduledRoot;null!==b?(z=c,Jg(),gh(),t(),I=Lg(b.current,c),b!==nc&&(oc=0,nc=b)):(z=T,nc=I=null)}function c(c){Hd=!0;na=null;var d=c.stateNode;d.current===\nc?w(\"177\"):void 0;z!==Og&&z!==U||oc++;Kg.current=null;if(c.effectTag>Tg)if(null!==c.lastEffect){c.lastEffect.nextEffect=c;var e=c.firstEffect}else e=c;else e=c.firstEffect;Ui();for(u=e;null!==u;){var f=!1,g=void 0;try{for(;null!==u;){var h=u.effectTag;h&Yg&&a.resetTextContent(u.stateNode);if(h&ah){var k=u.alternate;null!==k&&Ph(k)}switch(h&~(Zg|$g|Yg|ah|Tg)){case Ug:q(u);u.effectTag&=~Ug;break;case Wg:q(u);u.effectTag&=~Ug;vf(u.alternate,u);break;case Vg:vf(u.alternate,u);break;case Xg:Id=!0,Mh(u),\nId=!1}u=u.nextEffect}}catch(Jd){f=!0,g=Jd}f&&(null===u?w(\"178\"):void 0,x(u,g),null!==u&&(u=u.nextEffect))}Vi();d.current=c;for(u=e;null!==u;){d=!1;e=void 0;try{for(;null!==u;){var Gd=u.effectTag;Gd&(Vg|Zg)&&Nh(u.alternate,u);Gd&ah&&Oh(u);if(Gd&$g)switch(f=u,g=void 0,null!==P&&(g=P.get(f),P[\"delete\"](f),null==g&&null!==f.alternate&&(f=f.alternate,g=P.get(f),P[\"delete\"](f))),null==g?w(\"184\"):void 0,f.tag){case eh:f.stateNode.componentDidCatch(g.error,{componentStack:g.componentStack});break;case bh:null===\nJa&&(Ja=g.error);break;default:w(\"157\")}var m=u.nextEffect;u.nextEffect=null;u=m}}catch(Jd){d=!0,e=Jd}d&&(null===u?w(\"178\"):void 0,x(u,e),null!==u&&(u=u.nextEffect))}Hd=!1;\"function\"===typeof Ng&&Ng(c.stateNode);va&&(va.forEach(H),va=null);b()}function d(a){for(;;){var b=Lh(a.alternate,a,z),c=a[\"return\"],d=a.sibling;var e=a;if(!(e.pendingWorkPriority!==T&&e.pendingWorkPriority>z)){for(var f=fh(e),g=e.child;null!==g;)f=Mg(f,g.pendingWorkPriority),g=g.sibling;e.pendingWorkPriority=f}if(null!==b)return b;\nnull!==c&&(null===c.firstEffect&&(c.firstEffect=a.firstEffect),null!==a.lastEffect&&(null!==c.lastEffect&&(c.lastEffect.nextEffect=a.firstEffect),c.lastEffect=a.lastEffect),a.effectTag>Tg&&(null!==c.lastEffect?c.lastEffect.nextEffect=a:c.firstEffect=a,c.lastEffect=a));if(null!==d)return d;if(null!==c)a=c;else{na=a;break}}return null}function e(a){var b=V(a.alternate,a,z);null===b&&(b=d(a));Kg.current=null;return b}function f(a){var b=ld(a.alternate,a,z);null===b&&(b=d(a));Kg.current=null;return b}\nfunction g(a){p(Rg,a)}function h(){if(null!==P&&0a)){O=z;a:do{if(z<=U)for(;null!==I&&!(I=e(I),null===I&&(null===na?w(\"179\"):void 0,O=U,c(na),O=z,h(),z===T||z>a||z>U)););else if(null!==d)for(;null!==I&&!Ab;)if(1a||zU&&!Bb&&($f(g),Bb=!0);a=Ja;Ya=Ab=Da=!1;nc=Ka=P=Ja=null;oc=0;if(null!==a)throw a;}function x(a,b){var c=Kg.current=null,d=!1,e=!1,f=null;if(a.tag===bh)c=a,S(a)&&(Ya=!0);else for(var g=a[\"return\"];null!==g&&null===c;){g.tag===eh?\"function\"===typeof g.stateNode.componentDidCatch&&\n(d=!0,f=Ra(g),c=g,e=!0):g.tag===bh&&(c=g);if(S(g)){if(Id||null!==va&&(va.has(g)||null!==g.alternate&&va.has(g.alternate)))return null;c=null;e=!1}g=g[\"return\"]}if(null!==c){null===Ka&&(Ka=new Set);Ka.add(c);var h=\"\";g=a;do{a:switch(g.tag){case fe:case ge:case he:case ie:var k=g._debugOwner,m=g._debugSource;var p=Ra(g);var q=null;k&&(q=Ra(k));k=m;p=\"\\n in \"+(p||\"Unknown\")+(k?\" (at \"+k.fileName.replace(/^.*[\\\\\\/]/,\"\")+\":\"+k.lineNumber+\")\":q?\" (created by \"+q+\")\":\"\");break a;default:p=\"\"}h+=p;g=g[\"return\"]}while(g);\ng=h;a=Ra(a);null===P&&(P=new Map);b={componentName:a,componentStack:g,error:b,errorBoundary:d?c.stateNode:null,errorBoundaryFound:d,errorBoundaryName:f,willRetry:e};P.set(c,b);try{console.error(b.error)}catch(Wi){console.error(Wi)}Hd?(null===va&&(va=new Set),va.add(c)):H(c);return c}null===Ja&&(Ja=b);return null}function S(a){return null!==Ka&&(Ka.has(a)||null!==a.alternate&&Ka.has(a.alternate))}function D(a,b){return y(a,b,!1)}function y(a,b){oc>Xi&&(Ya=!0,w(\"185\"));!Da&&b<=z&&(I=null);for(var c=\n!0;null!==a&&c;){c=!1;if(a.pendingWorkPriority===T||a.pendingWorkPriority>b)c=!0,a.pendingWorkPriority=b;null!==a.alternate&&(a.alternate.pendingWorkPriority===T||a.alternate.pendingWorkPriority>b)&&(c=!0,a.alternate.pendingWorkPriority=b);if(null===a[\"return\"])if(a.tag===bh){var d=a.stateNode;b===T||d.isScheduled||(d.isScheduled=!0,zb?zb.nextScheduledRoot=d:ma=d,zb=d);if(!Da)switch(b){case Og:pc?p(Og,null):p(U,null);break;case U:W?void 0:w(\"186\");break;default:Bb||($f(g),Bb=!0)}}else break;a=a[\"return\"]}}\nfunction B(a,b){var c=O;c===T&&(c=!Yi||a.internalContextTag&Sg||b?Qg:Og);return c===Og&&(Da||W)?U:c}function H(a){y(a,U,!0)}var C=Ag(a),Ca=Hg(a),r=C.popHostContainer,m=C.popHostContext,t=C.resetHostContainer,v=Lf(a,C,Ca,D,B),V=v.beginWork,ld=v.beginFailedWork,Lh=eg(a,C,Ca).completeWork;C=vg(a,x);var q=C.commitPlacement,Mh=C.commitDeletion,vf=C.commitWork,Nh=C.commitLifeCycles,Oh=C.commitAttachRef,Ph=C.commitDetachRef,$f=a.scheduleDeferredCallback,Yi=a.useSyncScheduling,Ui=a.prepareForCommit,Vi=a.resetAfterCommit,\nO=T,Da=!1,Ab=!1,W=!1,pc=!1,I=null,z=T,u=null,na=null,ma=null,zb=null,Bb=!1,P=null,Ka=null,va=null,Ja=null,Ya=!1,Hd=!1,Id=!1,Xi=1E3,oc=0,nc=null;return{scheduleUpdate:D,getPriorityContext:B,batchedUpdates:function(a,b){var c=W;W=!0;try{return a(b)}finally{W=c,Da||W||p(U,null)}},unbatchedUpdates:function(a){var b=pc,c=W;pc=W;W=!1;try{return a()}finally{W=c,pc=b}},flushSync:function(a){var b=W,c=O;W=!0;O=Og;try{return a()}finally{W=b,O=c,Da?w(\"187\"):void 0,p(U,null)}},deferredUpdates:function(a){var b=\nO;O=Qg;try{return a()}finally{O=b}}}}function ih(){w(\"196\")}function jh(a){if(!a)return da;a=Pa.get(a);return\"number\"===typeof a.tag?ih(a):a._processChildContext(a._context)}jh._injectFiber=function(a){ih=a};var kh=ud.addTopLevelUpdate,lh=R.findCurrentUnmaskedContext,mh=R.isContextProvider,nh=R.processChildContext,oh=E.HostComponent,ph=bb.findCurrentHostFiber,qh=bb.findCurrentHostFiberWithNoPortals;jh._injectFiber(function(a){var b=lh(a);return mh(a)?nh(a,b,!1):b});var rh=F.TEXT_NODE;\nfunction sh(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function th(a,b){var c=sh(a);a=0;for(var d;c;){if(c.nodeType===rh){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=sh(c)}}var uh=null;function vh(){!uh&&l.canUseDOM&&(uh=\"textContent\"in document.documentElement?\"textContent\":\"innerText\");return uh}\nvar wh={getOffsets:function(a){var b=window.getSelection&&window.getSelection();if(!b||0===b.rangeCount)return null;var c=b.anchorNode,d=b.anchorOffset,e=b.focusNode,f=b.focusOffset,g=b.getRangeAt(0);try{g.startContainer.nodeType,g.endContainer.nodeType}catch(k){return null}b=b.anchorNode===b.focusNode&&b.anchorOffset===b.focusOffset?0:g.toString().length;var h=g.cloneRange();h.selectNodeContents(a);h.setEnd(g.startContainer,g.startOffset);a=h.startContainer===h.endContainer&&h.startOffset===h.endOffset?\n0:h.toString().length;g=a+b;b=document.createRange();b.setStart(c,d);b.setEnd(e,f);c=b.collapsed;return{start:c?g:a,end:c?a:g}},setOffsets:function(a,b){if(window.getSelection){var c=window.getSelection(),d=a[vh()].length,e=Math.min(b.start,d);b=void 0===b.end?e:Math.min(b.end,d);!c.extend&&e>b&&(d=b,b=e,e=d);d=th(a,e);a=th(a,b);if(d&&a){var f=document.createRange();f.setStart(d.node,d.offset);c.removeAllRanges();e>b?(c.addRange(f),c.extend(a.node,a.offset)):(f.setEnd(a.node,a.offset),c.addRange(f))}}}},\nxh=F.ELEMENT_NODE,yh={hasSelectionCapabilities:function(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&\"text\"===a.type||\"textarea\"===b||\"true\"===a.contentEditable)},getSelectionInformation:function(){var a=ia();return{focusedElem:a,selectionRange:yh.hasSelectionCapabilities(a)?yh.getSelection(a):null}},restoreSelection:function(a){var b=ia(),c=a.focusedElem;a=a.selectionRange;if(b!==c&&fa(document.documentElement,c)){yh.hasSelectionCapabilities(c)&&yh.setSelection(c,a);b=\n[];for(a=c;a=a.parentNode;)a.nodeType===xh&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});ha(c);for(c=0;cthis.eventPool.length&&this.eventPool.push(a)}function Yh(a){a.eventPool=[];a.getPooled=Zh;a.release=$h}function ai(a,b,c,d){return Y.call(this,a,b,c,d)}Y.augmentClass(ai,{data:null});function bi(a,b,c,d){return Y.call(this,a,b,c,d)}Y.augmentClass(bi,{data:null});var ci=[9,13,27,32],di=l.canUseDOM&&\"CompositionEvent\"in window,ei=null;l.canUseDOM&&\"documentMode\"in document&&(ei=document.documentMode);var fi;\nif(fi=l.canUseDOM&&\"TextEvent\"in window&&!ei){var gi=window.opera;fi=!(\"object\"===typeof gi&&\"function\"===typeof gi.version&&12>=parseInt(gi.version(),10))}\nvar hi=fi,ii=l.canUseDOM&&(!di||ei&&8=ei),ji=String.fromCharCode(32),ki={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"topCompositionEnd\",\"topKeyPress\",\"topTextInput\",\"topPaste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"topBlur topCompositionEnd topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"topBlur topCompositionStart topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"topBlur topCompositionUpdate topKeyDown topKeyPress topKeyUp topMouseDown\".split(\" \")}},li=!1;\nfunction mi(a,b){switch(a){case \"topKeyUp\":return-1!==ci.indexOf(b.keyCode);case \"topKeyDown\":return 229!==b.keyCode;case \"topKeyPress\":case \"topMouseDown\":case \"topBlur\":return!0;default:return!1}}function ni(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var oi=!1;function pi(a,b){switch(a){case \"topCompositionEnd\":return ni(b);case \"topKeyPress\":if(32!==b.which)return null;li=!0;return ji;case \"topTextInput\":return a=b.data,a===ji&&li?null:a;default:return null}}\nfunction qi(a,b){if(oi)return\"topCompositionEnd\"===a||!di&&mi(a,b)?(a=Vh.getData(),Vh.reset(),oi=!1,a):null;switch(a){case \"topPaste\":return null;case \"topKeyPress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=document.documentMode,Si={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},\ndependencies:\"topBlur topContextMenu topFocus topKeyDown topKeyUp topMouseDown topMouseUp topSelectionChange\".split(\" \")}},Ti=null,Zi=null,$i=null,aj=!1,bj=M.isListeningToAllDependencies;\nfunction cj(a,b){if(aj||null==Ti||Ti!==ia())return null;var c=Ti;\"selectionStart\"in c&&zh.hasSelectionCapabilities(c)?c={start:c.selectionStart,end:c.selectionEnd}:window.getSelection?(c=window.getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}):c=void 0;return $i&&ea($i,c)?null:($i=c,a=Y.getPooled(Si.select,Zi,a,b),a.type=\"select\",a.target=Ti,Th.accumulateTwoPhaseDispatches(a),a)}\nvar dj={eventTypes:Si,extractEvents:function(a,b,c,d){var e=d.window===d?d.document:d.nodeType===Qi?d:d.ownerDocument;if(!e||!bj(\"onSelect\",e))return null;e=b?G.getNodeFromInstance(b):window;switch(a){case \"topFocus\":if(ti(e)||\"true\"===e.contentEditable)Ti=e,Zi=b,$i=null;break;case \"topBlur\":$i=Zi=Ti=null;break;case \"topMouseDown\":aj=!0;break;case \"topContextMenu\":case \"topMouseUp\":return aj=!1,cj(c,d);case \"topSelectionChange\":if(Ri)break;case \"topKeyDown\":case \"topKeyUp\":return cj(c,d)}return null}};\nfunction ej(a,b,c,d){return Y.call(this,a,b,c,d)}Y.augmentClass(ej,{animationName:null,elapsedTime:null,pseudoElement:null});function fj(a,b,c,d){return Y.call(this,a,b,c,d)}Y.augmentClass(fj,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}});function gj(a,b,c,d){return Y.call(this,a,b,c,d)}Ji.augmentClass(gj,{relatedTarget:null});function hj(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;return 32<=a||13===a?a:0}\nvar ij={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},jj={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"};function kj(a,b,c,d){return Y.call(this,a,b,c,d)}\nJi.augmentClass(kj,{key:function(a){if(a.key){var b=ij[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=hj(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?jj[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Mi,charCode:function(a){return\"keypress\"===a.type?hj(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?hj(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}});function lj(a,b,c,d){return Y.call(this,a,b,c,d)}Ni.augmentClass(lj,{dataTransfer:null});function mj(a,b,c,d){return Y.call(this,a,b,c,d)}Ji.augmentClass(mj,{touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Mi});function nj(a,b,c,d){return Y.call(this,a,b,c,d)}Y.augmentClass(nj,{propertyName:null,elapsedTime:null,pseudoElement:null});\nfunction oj(a,b,c,d){return Y.call(this,a,b,c,d)}Ni.augmentClass(oj,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null});var pj={},qj={};\n\"abort animationEnd animationIteration animationStart blur cancel canPlay canPlayThrough click close contextMenu copy cut doubleClick drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error focus input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing progress rateChange reset scroll seeked seeking stalled submit suspend timeUpdate toggle touchCancel touchEnd touchMove touchStart transitionEnd volumeChange waiting wheel\".split(\" \").forEach(function(a){var b=a[0].toUpperCase()+\na.slice(1),c=\"on\"+b;b=\"top\"+b;c={phasedRegistrationNames:{bubbled:c,captured:c+\"Capture\"},dependencies:[b]};pj[a]=c;qj[b]=c});\nvar rj={eventTypes:pj,extractEvents:function(a,b,c,d){var e=qj[a];if(!e)return null;switch(a){case \"topAbort\":case \"topCancel\":case \"topCanPlay\":case \"topCanPlayThrough\":case \"topClose\":case \"topDurationChange\":case \"topEmptied\":case \"topEncrypted\":case \"topEnded\":case \"topError\":case \"topInput\":case \"topInvalid\":case \"topLoad\":case \"topLoadedData\":case \"topLoadedMetadata\":case \"topLoadStart\":case \"topPause\":case \"topPlay\":case \"topPlaying\":case \"topProgress\":case \"topRateChange\":case \"topReset\":case \"topSeeked\":case \"topSeeking\":case \"topStalled\":case \"topSubmit\":case \"topSuspend\":case \"topTimeUpdate\":case \"topToggle\":case \"topVolumeChange\":case \"topWaiting\":var f=Y;\nbreak;case \"topKeyPress\":if(0===hj(c))return null;case \"topKeyDown\":case \"topKeyUp\":f=kj;break;case \"topBlur\":case \"topFocus\":f=gj;break;case \"topClick\":if(2===c.button)return null;case \"topDoubleClick\":case \"topMouseDown\":case \"topMouseMove\":case \"topMouseUp\":case \"topMouseOut\":case \"topMouseOver\":case \"topContextMenu\":f=Ni;break;case \"topDrag\":case \"topDragEnd\":case \"topDragEnter\":case \"topDragExit\":case \"topDragLeave\":case \"topDragOver\":case \"topDragStart\":case \"topDrop\":f=lj;break;case \"topTouchCancel\":case \"topTouchEnd\":case \"topTouchMove\":case \"topTouchStart\":f=\nmj;break;case \"topAnimationEnd\":case \"topAnimationIteration\":case \"topAnimationStart\":f=ej;break;case \"topTransitionEnd\":f=nj;break;case \"topScroll\":f=Ji;break;case \"topWheel\":f=oj;break;case \"topCopy\":case \"topCut\":case \"topPaste\":f=fj}f?void 0:w(\"86\",a);a=f.getPooled(e,b,c,d);Th.accumulateTwoPhaseDispatches(a);return a}};L.setHandleTopLevel(M.handleTopLevel);Jb.injection.injectEventPluginOrder(\"ResponderEventPlugin SimpleEventPlugin TapEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));\nib.injection.injectComponentTree(G);Jb.injection.injectEventPluginsByName({SimpleEventPlugin:rj,EnterLeaveEventPlugin:Pi,ChangeEventPlugin:Ii,SelectEventPlugin:dj,BeforeInputEventPlugin:ri});\nvar sj=A.injection.MUST_USE_PROPERTY,Z=A.injection.HAS_BOOLEAN_VALUE,tj=A.injection.HAS_NUMERIC_VALUE,uj=A.injection.HAS_POSITIVE_NUMERIC_VALUE,vj=A.injection.HAS_STRING_BOOLEAN_VALUE,wj={Properties:{allowFullScreen:Z,allowTransparency:vj,async:Z,autoPlay:Z,capture:Z,checked:sj|Z,cols:uj,contentEditable:vj,controls:Z,\"default\":Z,defer:Z,disabled:Z,download:A.injection.HAS_OVERLOADED_BOOLEAN_VALUE,draggable:vj,formNoValidate:Z,hidden:Z,loop:Z,multiple:sj|Z,muted:sj|Z,noValidate:Z,open:Z,playsInline:Z,\nreadOnly:Z,required:Z,reversed:Z,rows:uj,rowSpan:tj,scoped:Z,seamless:Z,selected:sj|Z,size:uj,start:tj,span:uj,spellCheck:vj,style:0,itemScope:Z,acceptCharset:0,className:0,htmlFor:0,httpEquiv:0,value:vj},DOMAttributeNames:{acceptCharset:\"accept-charset\",className:\"class\",htmlFor:\"for\",httpEquiv:\"http-equiv\"},DOMMutationMethods:{value:function(a,b){if(null==b)return a.removeAttribute(\"value\");\"number\"!==a.type||!1===a.hasAttribute(\"value\")?a.setAttribute(\"value\",\"\"+b):a.validity&&!a.validity.badInput&&\na.ownerDocument.activeElement!==a&&a.setAttribute(\"value\",\"\"+b)}}},xj=A.injection.HAS_STRING_BOOLEAN_VALUE,yj={xlink:\"http://www.w3.org/1999/xlink/",xml:\"http://www.w3.org/XML/1998/namespace/"},zj={Properties:{autoReverse:xj,externalResourcesRequired:xj,preserveAlpha:xj},DOMAttributeNames:{autoReverse:\"autoReverse\",externalResourcesRequired:\"externalResourcesRequired\",preserveAlpha:\"preserveAlpha\"},DOMAttributeNamespaces:{xlinkActuate:yj.xlink,xlinkArcrole:yj.xlink,xlinkHref:yj.xlink,xlinkRole:yj.xlink,\nxlinkShow:yj.xlink,xlinkTitle:yj.xlink,xlinkType:yj.xlink,xmlBase:yj.xml,xmlLang:yj.xml,xmlSpace:yj.xml}},Aj=/[\\-\\:]([a-z])/g;function Bj(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode x-height xlink:actuate xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type xml:base xmlns:xlink xml:lang xml:space\".split(\" \").forEach(function(a){var b=a.replace(Aj,\nBj);zj.Properties[b]=0;zj.DOMAttributeNames[b]=a});A.injection.injectDOMPropertyConfig(wj);A.injection.injectDOMPropertyConfig(zj);\nvar Cj=ig.injectInternals,Dj=F.ELEMENT_NODE,Ej=F.TEXT_NODE,Fj=F.COMMENT_NODE,Gj=F.DOCUMENT_NODE,Hj=F.DOCUMENT_FRAGMENT_NODE,Ij=A.ROOT_ATTRIBUTE_NAME,Jj=ka.getChildNamespace,Kj=N.createElement,Lj=N.createTextNode,Mj=N.setInitialProperties,Nj=N.diffProperties,Oj=N.updateProperties,Pj=N.diffHydratedProperties,Qj=N.diffHydratedText,Rj=N.warnForDeletedHydratableElement,Sj=N.warnForDeletedHydratableText,Tj=N.warnForInsertedHydratedElement,Uj=N.warnForInsertedHydratedText,Vj=G.precacheFiberNode,Wj=G.updateFiberProps;\nnb.injection.injectFiberControlledHostComponent(N);Dh._injectFiber(function(a){return Xj.findHostInstance(a)});var Yj=null,Zj=null;function ak(a){return!(!a||a.nodeType!==Dj&&a.nodeType!==Gj&&a.nodeType!==Hj&&(a.nodeType!==Fj||\" react-mount-point-unstable \"!==a.nodeValue))}function bk(a){a=a?a.nodeType===Gj?a.documentElement:a.firstChild:null;return!(!a||a.nodeType!==Dj||!a.hasAttribute(Ij))}\nvar Xj=function(a){var b=a.getPublicInstance;a=hh(a);var c=a.scheduleUpdate,d=a.getPriorityContext;return{createContainer:function(a){var b=ee();a={current:b,containerInfo:a,isScheduled:!1,nextScheduledRoot:null,context:null,pendingContext:null};return b.stateNode=a},updateContainer:function(a,b,g,h){var e=b.current;g=jh(g);null===b.context?b.context=g:b.pendingContext=g;b=h;h=d(e,ed.enableAsyncSubtreeAPI&&null!=a&&null!=a.type&&null!=a.type.prototype&&!0===a.type.prototype.unstable_isAsyncReactComponent);\na={element:a};kh(e,a,void 0===b?null:b,h);c(e,h)},batchedUpdates:a.batchedUpdates,unbatchedUpdates:a.unbatchedUpdates,deferredUpdates:a.deferredUpdates,flushSync:a.flushSync,getPublicRootInstance:function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case oh:return b(a.child.stateNode);default:return a.child.stateNode}},findHostInstance:function(a){a=ph(a);return null===a?null:a.stateNode},findHostInstanceWithNoPortals:function(a){a=qh(a);return null===a?null:a.stateNode}}}({getRootHostContext:function(a){if(a.nodeType===\nGj)a=(a=a.documentElement)?a.namespaceURI:Jj(null,\"\");else{var b=a.nodeType===Fj?a.parentNode:a;a=b.namespaceURI||null;b=b.tagName;a=Jj(a,b)}return a},getChildHostContext:function(a,b){return Jj(a,b)},getPublicInstance:function(a){return a},prepareForCommit:function(){Yj=M.isEnabled();Zj=zh.getSelectionInformation();M.setEnabled(!1)},resetAfterCommit:function(){zh.restoreSelection(Zj);Zj=null;M.setEnabled(Yj);Yj=null},createInstance:function(a,b,c,d,e){a=Kj(a,b,c,d);Vj(e,a);Wj(a,b);return a},appendInitialChild:function(a,\nb){a.appendChild(b)},finalizeInitialChildren:function(a,b,c,d){Mj(a,b,c,d);a:{switch(b){case \"button\":case \"input\":case \"select\":case \"textarea\":a=!!c.autoFocus;break a}a=!1}return a},prepareUpdate:function(a,b,c,d,e){return Nj(a,b,c,d,e)},commitMount:function(a){a.focus()},commitUpdate:function(a,b,c,d,e){Wj(a,e);Oj(a,b,c,d,e)},shouldSetTextContent:function(a,b){return\"textarea\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&\n\"string\"===typeof b.dangerouslySetInnerHTML.__html},resetTextContent:function(a){a.textContent=\"\"},shouldDeprioritizeSubtree:function(a,b){return!!b.hidden},createTextInstance:function(a,b,c,d){a=Lj(a,b);Vj(d,a);return a},commitTextUpdate:function(a,b,c){a.nodeValue=c},appendChild:function(a,b){a.appendChild(b)},appendChildToContainer:function(a,b){a.nodeType===Fj?a.parentNode.insertBefore(b,a):a.appendChild(b)},insertBefore:function(a,b,c){a.insertBefore(b,c)},insertInContainerBefore:function(a,\nb,c){a.nodeType===Fj?a.parentNode.insertBefore(b,c):a.insertBefore(b,c)},removeChild:function(a,b){a.removeChild(b)},removeChildFromContainer:function(a,b){a.nodeType===Fj?a.parentNode.removeChild(b):a.removeChild(b)},canHydrateInstance:function(a,b){return a.nodeType===Dj&&b===a.nodeName.toLowerCase()},canHydrateTextInstance:function(a,b){return\"\"===b?!1:a.nodeType===Ej},getNextHydratableSibling:function(a){for(a=a.nextSibling;a&&a.nodeType!==Dj&&a.nodeType!==Ej;)a=a.nextSibling;return a},getFirstHydratableChild:function(a){for(a=\na.firstChild;a&&a.nodeType!==Dj&&a.nodeType!==Ej;)a=a.nextSibling;return a},hydrateInstance:function(a,b,c,d,e,f){Vj(f,a);Wj(a,c);return Pj(a,b,c,e,d)},hydrateTextInstance:function(a,b,c){Vj(c,a);return Qj(a,b)},didNotHydrateInstance:function(a,b){1===b.nodeType?Rj(a,b):Sj(a,b)},didNotFindHydratableInstance:function(a,b,c){Tj(a,b,c)},didNotFindHydratableTextInstance:function(a,b){Uj(a,b)},scheduleDeferredCallback:dd.rIC,useSyncScheduling:!0});sb.injection.injectFiberBatchedUpdates(Xj.batchedUpdates);\nfunction ck(a,b,c,d,e){ak(c)?void 0:w(\"200\");var f=c._reactRootContainer;if(f)Xj.updateContainer(b,f,a,e);else{if(!d&&!bk(c))for(d=void 0;d=c.lastChild;)c.removeChild(d);var g=Xj.createContainer(c);f=c._reactRootContainer=g;Xj.unbatchedUpdates(function(){Xj.updateContainer(b,g,a,e)})}return Xj.getPublicRootInstance(f)}function dk(a,b){var c=2 {\r\n for (let Player of players) {\r\n if (Player.canPlay(url)) {\r\n return true\r\n }\r\n }\r\n return false\r\n }\r\n config = getConfig(this.props, defaultProps, true)\r\n componentDidMount () {\r\n if (this.props.progressFrequency) {\r\n const message = 'ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead'\r\n console.warn(message, 'font-weight: bold', '', 'font-weight: bold', '')\r\n }\r\n }\r\n shouldComponentUpdate (nextProps) {\r\n return !isEqual(this.props, nextProps)\r\n }\r\n componentWillUpdate (nextProps) {\r\n this.config = getConfig(nextProps, defaultProps)\r\n }\r\n getDuration = () => {\r\n if (!this.player) return null\r\n return this.player.getDuration()\r\n }\r\n getCurrentTime = () => {\r\n if (!this.player) return null\r\n return this.player.getCurrentTime()\r\n }\r\n getInternalPlayer = (key = 'player') => {\r\n if (!this.player) return null\r\n return this.player.getInternalPlayer(key)\r\n }\r\n seekTo = fraction => {\r\n if (!this.player) return null\r\n this.player.seekTo(fraction)\r\n }\r\n getActivePlayer (url) {\r\n for (let Player of players) {\r\n if (Player.canPlay(url)) {\r\n return Player\r\n }\r\n }\r\n // Fall back to FilePlayer if nothing else can play the URL\r\n return FilePlayer\r\n }\r\n wrapperRef = wrapper => {\r\n this.wrapper = wrapper\r\n }\r\n activePlayerRef = player => {\r\n this.player = player\r\n }\r\n renderActivePlayer (url) {\r\n if (!url) return null\r\n const activePlayer = this.getActivePlayer(url)\r\n return (\r\n \r\n )\r\n }\r\n sortPlayers (a, b) {\r\n // Retain player order to prevent weird iframe behaviour when switching players\r\n if (a && b) {\r\n return a.key < b.key ? -1 : 1\r\n }\r\n return 0\r\n }\r\n render () {\r\n const { url, style, width, height, wrapper: Wrapper } = this.props\r\n const otherProps = omit(this.props, SUPPORTED_PROPS, DEPRECATED_CONFIG_PROPS)\r\n const activePlayer = this.renderActivePlayer(url)\r\n const preloadPlayers = renderPreloadPlayers(url, this.config)\r\n const players = [ activePlayer, ...preloadPlayers ].sort(this.sortPlayers)\r\n return (\r\n \r\n {players}\r\n \r\n )\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/ReactPlayer.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\n Symbol.for &&\n Symbol.for('react.element')) ||\n 0xeac7;\n\n var isValidElement = function(object) {\n return typeof object === 'object' &&\n object !== null &&\n object.$$typeof === REACT_ELEMENT_TYPE;\n };\n\n // By explicitly using `prop-types` you are opting into new development behavior.\n // http://fb.me/prop-types-in-prod\n var throwOnDirectAccess = true;\n module.exports = require('./factoryWithTypeCheckers')(isValidElement, throwOnDirectAccess);\n} else {\n // By explicitly using `prop-types` you are opting into new production behavior.\n // http://fb.me/prop-types-in-prod\n module.exports = require('./factoryWithThrowingShims')();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/prop-types/index.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar emptyFunction = require('fbjs/lib/emptyFunction');\nvar invariant = require('fbjs/lib/invariant');\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nmodule.exports = function() {\n function shim(props, propName, componentName, location, propFullName, secret) {\n if (secret === ReactPropTypesSecret) {\n // It is still safe when called from React.\n return;\n }\n invariant(\n false,\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n 'Use PropTypes.checkPropTypes() to call them. ' +\n 'Read more at http://fb.me/use-check-prop-types'\n );\n };\n shim.isRequired = shim;\n function getShim() {\n return shim;\n };\n // Important!\n // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n var ReactPropTypes = {\n array: shim,\n bool: shim,\n func: shim,\n number: shim,\n object: shim,\n string: shim,\n symbol: shim,\n\n any: shim,\n arrayOf: getShim,\n element: shim,\n instanceOf: getShim,\n node: shim,\n objectOf: getShim,\n oneOf: getShim,\n oneOfType: getShim,\n shape: getShim,\n exact: getShim\n };\n\n ReactPropTypes.checkPropTypes = emptyFunction;\n ReactPropTypes.PropTypes = ReactPropTypes;\n\n return ReactPropTypes;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/prop-types/factoryWithThrowingShims.js","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/prop-types/lib/ReactPropTypesSecret.js","\nmodule.exports = function load (src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0]\n var script = document.createElement('script')\n\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n opts = opts || {}\n cb = cb || function() {}\n\n script.type = opts.type || 'text/javascript'\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true\n script.src = src\n\n if (opts.attrs) {\n setAttributes(script, opts.attrs)\n }\n\n if (opts.text) {\n script.text = '' + opts.text\n }\n\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd\n onend(script, cb)\n\n // some good legacy browsers (firefox) fail the 'in' detection above\n // so as a fallback we always set onload\n // old IE will ignore this and new IE will set onload\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n\n head.appendChild(script)\n}\n\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\n\nfunction stdOnEnd (script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null\n cb(null, script)\n }\n script.onerror = function () {\n // this.onload = null here is necessary\n // because even IE9 works not like others\n this.onerror = this.onload = null\n cb(new Error('Failed to load ' + this.src), script)\n }\n}\n\nfunction ieOnEnd (script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') return\n this.onreadystatechange = null\n cb(null, script) // there is no way to catch loading errors in IE8\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/load-script/index.js","var isMergeableObject = function isMergeableObject(value) {\n\treturn isNonNullObject(value)\n\t\t&& !isSpecial(value)\n};\n\nfunction isNonNullObject(value) {\n\treturn !!value && typeof value === 'object'\n}\n\nfunction isSpecial(value) {\n\tvar stringValue = Object.prototype.toString.call(value);\n\n\treturn stringValue === '[object RegExp]'\n\t\t|| stringValue === '[object Date]'\n\t\t|| isReactElement(value)\n}\n\n// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25\nvar canUseSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;\n\nfunction isReactElement(value) {\n\treturn value.$$typeof === REACT_ELEMENT_TYPE\n}\n\nfunction emptyTarget(val) {\n\treturn Array.isArray(val) ? [] : {}\n}\n\nfunction cloneUnlessOtherwiseSpecified(value, optionsArgument) {\n\tvar clone = !optionsArgument || optionsArgument.clone !== false;\n\n\treturn (clone && isMergeableObject(value))\n\t\t? deepmerge(emptyTarget(value), value, optionsArgument)\n\t\t: value\n}\n\nfunction defaultArrayMerge(target, source, optionsArgument) {\n\treturn target.concat(source).map(function(element) {\n\t\treturn cloneUnlessOtherwiseSpecified(element, optionsArgument)\n\t})\n}\n\nfunction mergeObject(target, source, optionsArgument) {\n\tvar destination = {};\n\tif (isMergeableObject(target)) {\n\t\tObject.keys(target).forEach(function(key) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(target[key], optionsArgument);\n\t\t});\n\t}\n\tObject.keys(source).forEach(function(key) {\n\t\tif (!isMergeableObject(source[key]) || !target[key]) {\n\t\t\tdestination[key] = cloneUnlessOtherwiseSpecified(source[key], optionsArgument);\n\t\t} else {\n\t\t\tdestination[key] = deepmerge(target[key], source[key], optionsArgument);\n\t\t}\n\t});\n\treturn destination\n}\n\nfunction deepmerge(target, source, optionsArgument) {\n\tvar sourceIsArray = Array.isArray(source);\n\tvar targetIsArray = Array.isArray(target);\n\tvar options = optionsArgument || { arrayMerge: defaultArrayMerge };\n\tvar sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;\n\n\tif (!sourceAndTargetTypesMatch) {\n\t\treturn cloneUnlessOtherwiseSpecified(source, optionsArgument)\n\t} else if (sourceIsArray) {\n\t\tvar arrayMerge = options.arrayMerge || defaultArrayMerge;\n\t\treturn arrayMerge(target, source, optionsArgument)\n\t} else {\n\t\treturn mergeObject(target, source, optionsArgument)\n\t}\n}\n\ndeepmerge.all = function deepmergeAll(array, optionsArgument) {\n\tif (!Array.isArray(array)) {\n\t\tthrow new Error('first argument should be an array')\n\t}\n\n\treturn array.reduce(function(prev, next) {\n\t\treturn deepmerge(prev, next, optionsArgument)\n\t}, {})\n};\n\nvar deepmerge_1 = deepmerge;\n\nexport default deepmerge_1;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/deepmerge/dist/es.js","import { YouTube } from './YouTube'\r\nimport { SoundCloud } from './SoundCloud'\r\nimport { Vimeo } from './Vimeo'\r\nimport { Facebook } from './Facebook'\r\nimport { Streamable } from './Streamable'\r\nimport { Wistia } from './Wistia'\r\nimport { Twitch } from './Twitch'\r\nimport { DailyMotion } from './DailyMotion'\r\nimport { Mixcloud } from './Mixcloud'\r\nimport { FilePlayer } from './FilePlayer'\r\n\r\nexport default [\r\n YouTube,\r\n SoundCloud,\r\n Vimeo,\r\n Facebook,\r\n Streamable,\r\n Wistia,\r\n Twitch,\r\n DailyMotion,\r\n Mixcloud,\r\n FilePlayer\r\n]\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/index.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, randomString } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//connect.facebook.net/en_US/sdk.js'\r\nconst SDK_GLOBAL = 'FB'\r\nconst SDK_GLOBAL_READY = 'fbAsyncInit'\r\nconst MATCH_URL = /facebook\\.com\\/([^/?].+\\/)?video(s|\\.php)[/?].*$/\r\nconst PLAYER_ID_PREFIX = 'facebook-player-'\r\n\r\nexport class Facebook extends Component {\r\n static displayName = 'Facebook'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n playerID = PLAYER_ID_PREFIX + randomString()\r\n load (url, isReady) {\r\n if (isReady) {\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => FB.XFBML.parse())\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => {\r\n FB.init({\r\n appId: this.props.config.facebook.appId,\r\n xfbml: true,\r\n version: 'v2.5'\r\n })\r\n FB.Event.subscribe('xfbml.ready', msg => {\r\n if (msg.type === 'video' && msg.id === this.playerID) {\r\n this.player = msg.instance\r\n this.player.subscribe('startedPlaying', this.props.onPlay)\r\n this.player.subscribe('paused', this.props.onPause)\r\n this.player.subscribe('finishedPlaying', this.props.onEnded)\r\n this.player.subscribe('startedBuffering', this.props.onBuffer)\r\n this.player.subscribe('error', this.props.onError)\r\n this.callPlayer('unmute')\r\n this.props.onReady()\r\n }\r\n })\r\n })\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n if (fraction !== 0) {\r\n this.callPlayer('unmute')\r\n }\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.callPlayer('getDuration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('getCurrentPosition')\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: 'black'\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Facebook)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Facebook.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//cdn.embed.ly/player-0.1.0.min.js'\r\nconst SDK_GLOBAL = 'playerjs'\r\nconst MATCH_URL = /streamable\\.com\\/([a-z0-9]+)$/\r\n\r\nexport class Streamable extends Component {\r\n static displayName = 'Streamable'\r\n static canPlay = url => MATCH_URL.test(url)\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n secondsLoaded = null\r\n load (url) {\r\n getSDK(SDK_URL, SDK_GLOBAL).then(playerjs => {\r\n if (!this.iframe) return\r\n this.player = new playerjs.Player(this.iframe)\r\n this.player.setLoop(this.props.loop)\r\n this.player.on('ready', this.props.onReady)\r\n this.player.on('play', this.props.onPlay)\r\n this.player.on('pause', this.props.onPause)\r\n this.player.on('seeked', this.props.onSeek)\r\n this.player.on('ended', this.props.onEnded)\r\n this.player.on('error', this.props.onError)\r\n this.player.on('timeupdate', ({ duration, seconds }) => {\r\n this.duration = duration\r\n this.currentTime = seconds\r\n })\r\n this.player.on('buffered', ({ percent }) => {\r\n if (this.duration) {\r\n this.secondsLoaded = this.duration * percent\r\n }\r\n })\r\n }, this.props.onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('setCurrentTime', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction * 100)\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return this.secondsLoaded\r\n }\r\n ref = iframe => {\r\n this.iframe = iframe\r\n }\r\n render () {\r\n const id = this.props.url.match(MATCH_URL)[1]\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Streamable)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Streamable.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//fast.wistia.com/assets/external/E-v1.js'\r\nconst SDK_GLOBAL = 'Wistia'\r\nconst MATCH_URL = /(?:wistia\\.com|wi\\.st)\\/(?:medias|embed)\\/(.*)$/\r\n\r\nexport class Wistia extends Component {\r\n static displayName = 'Wistia'\r\n static canPlay = url => MATCH_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n getID (url) {\r\n return url && url.match(MATCH_URL)[1]\r\n }\r\n load (url) {\r\n const { controls, onReady, onPlay, onPause, onSeek, onEnded, config } = this.props\r\n getSDK(SDK_URL, SDK_GLOBAL).then(() => {\r\n window._wq = window._wq || []\r\n window._wq.push({\r\n id: this.getID(url),\r\n options: {\r\n controlsVisibleOnLoad: controls,\r\n ...config.wistia.options\r\n },\r\n onReady: player => {\r\n this.player = player\r\n this.player.bind('play', onPlay)\r\n this.player.bind('pause', onPause)\r\n this.player.bind('seek', onSeek)\r\n this.player.bind('end', onEnded)\r\n onReady()\r\n }\r\n })\r\n })\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n this.callPlayer('remove')\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('time', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('volume', fraction)\r\n }\r\n setPlaybackRate (rate) {\r\n this.callPlayer('playbackRate', rate)\r\n }\r\n getDuration () {\r\n return this.callPlayer('duration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('time')\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n render () {\r\n const id = this.getID(this.props.url)\r\n const className = `wistia_embed wistia_async_${id}`\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Wistia)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Wistia.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, randomString } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//player.twitch.tv/js/embed/v1.js'\r\nconst SDK_GLOBAL = 'Twitch'\r\nconst MATCH_VIDEO_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/videos\\/(\\d+)($|\\?)/\r\nconst MATCH_CHANNEL_URL = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-z0-9_]+)($|\\?)/\r\nconst PLAYER_ID_PREFIX = 'twitch-player-'\r\n\r\nexport class Twitch extends Component {\r\n static displayName = 'Twitch'\r\n static canPlay = url => MATCH_VIDEO_URL.test(url) || MATCH_CHANNEL_URL.test(url)\r\n static loopOnEnded = true\r\n\r\n callPlayer = callPlayer\r\n playerID = PLAYER_ID_PREFIX + randomString()\r\n load (url, isReady) {\r\n const { playsinline, onError, config } = this.props\r\n const isChannel = MATCH_CHANNEL_URL.test(url)\r\n const id = isChannel ? url.match(MATCH_CHANNEL_URL)[1] : url.match(MATCH_VIDEO_URL)[1]\r\n if (isReady) {\r\n if (isChannel) {\r\n this.player.setChannel(id)\r\n } else {\r\n this.player.setVideo('v' + id)\r\n }\r\n return\r\n }\r\n getSDK(SDK_URL, SDK_GLOBAL).then(Twitch => {\r\n this.player = new Twitch.Player(this.playerID, {\r\n video: isChannel ? '' : id,\r\n channel: isChannel ? id : '',\r\n height: '100%',\r\n width: '100%',\r\n playsinline: playsinline,\r\n autoplay: this.props.playing,\r\n ...config.twitch.options\r\n })\r\n const { READY, PLAY, PAUSE, ENDED } = Twitch.Player\r\n this.player.addEventListener(READY, this.props.onReady)\r\n this.player.addEventListener(PLAY, this.props.onPlay)\r\n this.player.addEventListener(PAUSE, this.props.onPause)\r\n this.player.addEventListener(ENDED, this.props.onEnded)\r\n }, onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n this.callPlayer('pause')\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n this.callPlayer('setVolume', fraction)\r\n }\r\n getDuration () {\r\n return this.callPlayer('getDuration')\r\n }\r\n getCurrentTime () {\r\n return this.callPlayer('getCurrentTime')\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n render () {\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Twitch)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Twitch.js","import React, { Component } from 'react'\r\n\r\nimport { callPlayer, getSDK, queryString } from '../utils'\r\nimport createSinglePlayer from '../singlePlayer'\r\n\r\nconst SDK_URL = '//widget.mixcloud.com/media/js/widgetApi.js'\r\nconst SDK_GLOBAL = 'Mixcloud'\r\nconst MATCH_URL = /mixcloud\\.com\\/([^/]+\\/[^/]+)/\r\n\r\nexport class Mixcloud extends Component {\r\n static displayName = 'Mixcloud'\r\n static canPlay = url => MATCH_URL.test(url)\r\n\r\n callPlayer = callPlayer\r\n duration = null\r\n currentTime = null\r\n secondsLoaded = null\r\n load (url) {\r\n getSDK(SDK_URL, SDK_GLOBAL).then(Mixcloud => {\r\n this.player = Mixcloud.PlayerWidget(this.iframe)\r\n this.player.ready.then(() => {\r\n this.player.events.play.on(this.props.onPlay)\r\n this.player.events.pause.on(this.props.onPause)\r\n this.player.events.ended.on(this.props.onEnded)\r\n this.player.events.error.on(this.props.error)\r\n this.player.events.progress.on((seconds, duration) => {\r\n this.currentTime = seconds\r\n this.duration = duration\r\n })\r\n this.props.onReady()\r\n })\r\n }, this.props.onError)\r\n }\r\n play () {\r\n this.callPlayer('play')\r\n }\r\n pause () {\r\n this.callPlayer('pause')\r\n }\r\n stop () {\r\n // Nothing to do\r\n }\r\n seekTo (seconds) {\r\n this.callPlayer('seek', seconds)\r\n }\r\n setVolume (fraction) {\r\n // No volume support\r\n }\r\n getDuration () {\r\n return this.duration\r\n }\r\n getCurrentTime () {\r\n return this.currentTime\r\n }\r\n getSecondsLoaded () {\r\n return null\r\n }\r\n ref = iframe => {\r\n this.iframe = iframe\r\n }\r\n render () {\r\n const { url, config } = this.props\r\n const id = url.match(MATCH_URL)[1]\r\n const style = {\r\n width: '100%',\r\n height: '100%'\r\n }\r\n const query = queryString({\r\n ...config.mixcloud.options,\r\n feed: `/${id}/`\r\n })\r\n // We have to give the iframe a key here to prevent a\r\n // weird dialog appearing when loading a new track\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default createSinglePlayer(Mixcloud)\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/players/Mixcloud.js","import React from 'react'\r\n\r\nimport Player from './Player'\r\nimport { YouTube } from './players/YouTube'\r\nimport { SoundCloud } from './players/SoundCloud'\r\nimport { Vimeo } from './players/Vimeo'\r\nimport { DailyMotion } from './players/DailyMotion'\r\n\r\nconst PRELOAD_PLAYERS = [\r\n {\r\n Player: YouTube,\r\n configKey: 'youtube',\r\n url: 'https://www.youtube.com/watch?v=GlCmAC4MHek'\r\n },\r\n {\r\n Player: SoundCloud,\r\n configKey: 'soundcloud',\r\n url: 'https://soundcloud.com/seucheu/john-cage-433-8-bit-version'\r\n },\r\n {\r\n Player: Vimeo,\r\n configKey: 'vimeo',\r\n url: 'https://vimeo.com/127250231'\r\n },\r\n {\r\n Player: DailyMotion,\r\n configKey: 'dailymotion',\r\n url: 'http://www.dailymotion.com/video/xqdpyk'\r\n }\r\n]\r\n\r\nexport default function renderPreloadPlayers (url, config) {\r\n const players = []\r\n\r\n for (let player of PRELOAD_PLAYERS) {\r\n if (!player.Player.canPlay(url) && config[player.configKey].preload) {\r\n players.push(\r\n \r\n )\r\n }\r\n }\r\n\r\n return players\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/preload.js"],"sourceRoot":""}
\ No newline at end of file
diff --git a/src/demo/App.css b/examples/react/public/App.css
similarity index 62%
rename from src/demo/App.css
rename to examples/react/public/App.css
index e938e0726..2e25b57d2 100644
--- a/src/demo/App.css
+++ b/examples/react/public/App.css
@@ -1,5 +1,7 @@
-$column-width: 480px;
-$gutter-width: 20px;
+:root {
+ --column-width: 480px;
+ --gutter-width: 20px;
+}
.app {
margin: auto;
@@ -10,26 +12,23 @@ $gutter-width: 20px;
.section {
display: inline-block;
- max-width: $column-width;
- margin: $gutter-width;
+ max-width: var(--column-width);
+ margin: var(--gutter-width);
text-align: left;
vertical-align: top;
}
.player-wrapper {
width: 480px;
- height: 270px;
-}
-
-.react-player {
- margin-bottom: 10px;
+ aspect-ratio: 16 / 9;
background: rgba(0, 0, 0, .1);
+ margin-bottom: 10px;
}
.faded {
- color: rgba(0, 0, 0, .5);
+ color: rgba(0, 0, 0,.6);
}
.footer {
- margin: $gutter-width;
+ margin: var(--gutter-width);
}
diff --git a/examples/react/public/defaults.css b/examples/react/public/defaults.css
new file mode 100644
index 000000000..c45b26e85
--- /dev/null
+++ b/examples/react/public/defaults.css
@@ -0,0 +1,121 @@
+:root {
+ /*
+ * Variables with --color-base prefix define
+ * the hue, and saturation values to be used for
+ * hsla colors.
+ *
+ * ex:
+ *
+ * --color-base-{color}: {hue}, {saturation};
+ *
+ */
+
+ --color-base-white: 0 0%;
+ --color-base-black: 240 100%;
+ --color-base-gray: 60 3%;
+
+ /*
+ * Color palettes are made using --color-base
+ * variables, along with a lightness value to
+ * define different variants.
+ *
+ */
+
+ --color-gray-5: var(--color-base-gray) 5%;
+ --color-gray-10: var(--color-base-gray) 10%;
+ --color-gray-20: var(--color-base-gray) 20%;
+ --color-gray-30: var(--color-base-gray) 30%;
+ --color-gray-40: var(--color-base-gray) 40%;
+ --color-gray-50: var(--color-base-gray) 50%;
+ --color-gray-60: var(--color-base-gray) 60%;
+ --color-gray-70: var(--color-base-gray) 70%;
+ --color-gray-80: var(--color-base-gray) 80%;
+ --color-gray-90: var(--color-base-gray) 90%;
+ --color-gray-95: var(--color-base-gray) 95%;
+}
+
+body {
+ margin-right: 10px;
+ margin-left: 10px;
+ font-size: 14px;
+ line-height: 1.4;
+}
+
+em {
+ font-style: italic;
+}
+
+body,
+h1,
+h2,
+h3 {
+ font-weight: 300;
+ margin-bottom: 1em;
+}
+
+h1 { font-size: 20px; }
+h2 { font-size: 16px; margin-top: 1em; }
+
+table,
+progress {
+ width: 100%;
+}
+
+th,
+td,
+[type=text],
+textarea {
+ margin-right: 5px;
+ padding: 3px 6px;
+}
+
+th {
+ width: 10%;
+ font-weight: 500;
+ text-align: right;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+
+[type=text],
+textarea {
+ width: 200px;
+ padding: 5px;
+ border: 1px solid hsl(var(--color-gray-70));
+ border-radius: 3px;
+ outline: 0;
+}
+
+[type=text]:focus,
+textarea:focus {
+ border-color: hsl(var(--color-gray-50));
+ box-shadow: 0 0 5px hsl(var(--color-gray-90));
+}
+
+textarea {
+ height: 100px;
+ font-family: monospace;
+ vertical-align: bottom;
+}
+
+button {
+ cursor: pointer;
+ margin: 3px;
+ padding: 6px 12px;
+ border: 0;
+ border-radius: 3px;
+ outline: 0;
+ background-color: hsl(var(--color-gray-95));
+}
+
+button:focus {
+ background-color: hsl(var(--color-gray-90));
+}
+
+button:hover {
+ background-color: hsl(var(--color-gray-80));
+}
+
+button:active {
+ background-color: hsl(var(--color-gray-70));
+}
diff --git a/examples/react/public/index.html b/examples/react/public/index.html
new file mode 100644
index 000000000..94a3ac23c
--- /dev/null
+++ b/examples/react/public/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+ ReactPlayer Demo
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/react/public/range.css b/examples/react/public/range.css
new file mode 100644
index 000000000..577d40994
--- /dev/null
+++ b/examples/react/public/range.css
@@ -0,0 +1,83 @@
+/*
+// Styling Cross-Browser Compatible Range Inputs with Sass
+// Github: https://github.com/darlanrod/input-range-sass
+// Author: Darlan Rod https://github.com/darlanrod
+// Version 1.4.1
+// MIT License
+*/
+/* Transformed to plain CSS and removed -ms selectors */
+
+:root {
+ --track-color: #eee;
+ --thumb-color: #666;
+ --thumb-radius: 12px;
+ --thumb-height: 12px;
+ --thumb-width: 12px;
+ --thumb-shadow-size: 0;
+ --thumb-shadow-blur: 0;
+ --thumb-shadow-color: #111;
+ --thumb-border-width: 0;
+ --thumb-border-color: #fff;
+ --track-width: 100%;
+ --track-height: 10px;
+ --track-shadow-size: 0;
+ --track-shadow-blur: 0;
+ --track-shadow-color: #222;
+ --track-border-width: 0;
+ --track-border-color: #000;
+ --track-radius: 5px;
+}
+
+[type='range'] {
+ -webkit-appearance: none;
+ margin: var(--thumb-height) / 2 0;
+ width: var(--track-width);
+}
+
+[type='range']:focus {
+ outline: 0;
+}
+
+[type='range']::-webkit-slider-runnable-track {
+ cursor: pointer;
+ height: var(--track-height);
+ transition: all 0.2s ease;
+ width: var(--track-width);
+ background: var(--track-color);
+ border: var(--track-border-width) solid var(--track-border-color);
+ border-radius: var(--track-radius);
+ box-shadow: var(--track-shadow-size) var(--track-shadow-size) var(--track-shadow-blur) var(--track-shadow-color), 0 0 var(--track-shadow-size) lighten(var(--track-shadow-color), 5%);
+}
+
+[type='range']::-webkit-slider-thumb {
+ -webkit-appearance: none;
+ cursor: pointer;
+ width: var(--thumb-width);
+ height: var(--thumb-height);
+ background: var(--thumb-color);
+ border: var(--thumb-border-width) solid var(--thumb-border-color);
+ border-radius: var(--thumb-radius);
+ margin-top: calc((var(--track-border-width) * -2 + var(--track-height)) / 2 - (var(--thumb-height) / 2));
+ box-shadow: var(--thumb-shadow-size) var(--thumb-shadow-size) var(--thumb-shadow-blur) var(--thumb-shadow-color);
+}
+
+[type='range']::-moz-range-track {
+ cursor: pointer;
+ height: var(--track-height);
+ transition: all 0.2s ease;
+ width: var(--track-width);
+ background: var(--track-color);
+ border: var(--track-border-width) solid var(--track-border-color);
+ border-radius: var(--track-radius);
+ box-shadow: var(--track-shadow-size) var(--track-shadow-size) var(--track-shadow-blur) var(--track-shadow-color);
+}
+
+[type='range']::-moz-range-thumb {
+ cursor: pointer;
+ width: var(--thumb-width);
+ height: var(--thumb-height);
+ background: var(--thumb-color);
+ border: var(--thumb-border-width) solid var(--thumb-border-color);
+ border-radius: var(--thumb-radius);
+ box-shadow: var(--thumb-shadow-size) var(--thumb-shadow-size) var(--thumb-shadow-blur) var(--thumb-shadow-color);
+}
diff --git a/src/demo/reset.css b/examples/react/public/reset.css
similarity index 100%
rename from src/demo/reset.css
rename to examples/react/public/reset.css
diff --git a/examples/react/src/App.tsx b/examples/react/src/App.tsx
new file mode 100644
index 000000000..d34b60415
--- /dev/null
+++ b/examples/react/src/App.tsx
@@ -0,0 +1,586 @@
+// biome-ignore lint/style/useImportType:
+import React, { useState, useRef, useCallback } from 'react';
+import screenfull from 'screenfull';
+
+import { version } from '../../../package.json';
+import ReactPlayer from '../../../';
+import Duration from './Duration';
+
+const App = () => {
+ const playerRef = useRef(null);
+ const urlInputRef = useRef(null);
+
+ const initialState = {
+ src: undefined,
+ pip: false,
+ playing: false,
+ controls: false,
+ light: false,
+ volume: 1,
+ muted: false,
+ played: 0,
+ loaded: 0,
+ duration: 0,
+ playbackRate: 1.0,
+ loop: false,
+ seeking: false,
+ loadedSeconds: 0,
+ playedSeconds: 0,
+ };
+
+ type PlayerState = Omit & {
+ src?: string;
+ };
+
+ const [state, setState] = useState(initialState);
+
+ const load = (src?: string) => {
+ setState(prevState => ({
+ ...prevState,
+ src,
+ played: 0,
+ loaded: 0,
+ pip: false,
+ }));
+ };
+
+ const handlePlayPause = () => {
+ setState(prevState => ({ ...prevState, playing: !prevState.playing }));
+ };
+
+ const handleStop = () => {
+ setState(prevState => ({ ...prevState, src: undefined, playing: false }));
+ };
+
+ const handleToggleControls = () => {
+ setState(prevState => ({ ...prevState, controls: !prevState.controls }));
+ };
+
+ const handleToggleLight = () => {
+ setState(prevState => ({ ...prevState, light: !prevState.light }));
+ };
+
+ const handleToggleLoop = () => {
+ setState(prevState => ({ ...prevState, loop: !prevState.loop }));
+ };
+
+ const handleVolumeChange = (event: React.SyntheticEvent) => {
+ const inputTarget = event.target as HTMLInputElement;
+ setState(prevState => ({ ...prevState, volume: Number.parseFloat(inputTarget.value) }));
+ };
+
+ const handleToggleMuted = () => {
+ setState(prevState => ({ ...prevState, muted: !prevState.muted }));
+ };
+
+ const handleSetPlaybackRate = (event: React.SyntheticEvent) => {
+ const buttonTarget = event.target as HTMLButtonElement;
+ setState(prevState => ({
+ ...prevState,
+ playbackRate: Number.parseFloat(`${buttonTarget.dataset.value}`)
+ }));
+ };
+
+ const handleRateChange = () => {
+ const player = playerRef.current;
+ if (!player) return;
+
+ setState(prevState => ({ ...prevState, playbackRate: player.playbackRate }));
+ };
+
+ const handleTogglePIP = () => {
+ setState(prevState => ({ ...prevState, pip: !prevState.pip }));
+ };
+
+ const handlePlay = () => {
+ console.log('onPlay');
+ setState(prevState => ({ ...prevState, playing: true }));
+ };
+
+ const handleEnterPictureInPicture = () => {
+ console.log('onEnterPictureInPicture');
+ setState(prevState => ({ ...prevState, pip: true }));
+ };
+
+ const handleLeavePictureInPicture = () => {
+ console.log('onLeavePictureInPicture');
+ setState(prevState => ({ ...prevState, pip: false }));
+ };
+
+ const handlePause = () => {
+ console.log('onPause');
+ setState(prevState => ({ ...prevState, playing: false }));
+ };
+
+ const handleSeekMouseDown = () => {
+ setState(prevState => ({ ...prevState, seeking: true }));
+ };
+
+ const handleSeekChange = (event: React.SyntheticEvent) => {
+ const inputTarget = event.target as HTMLInputElement;
+ setState(prevState => ({ ...prevState, played: Number.parseFloat(inputTarget.value) }));
+ };
+
+ const handleSeekMouseUp = (event: React.SyntheticEvent) => {
+ const inputTarget = event.target as HTMLInputElement;
+ setState(prevState => ({ ...prevState, seeking: false }));
+ if (playerRef.current) {
+ playerRef.current.currentTime = Number.parseFloat(inputTarget.value) * playerRef.current.duration;
+ }
+ };
+
+ const handleProgress = () => {
+ const player = playerRef.current;
+ // We only want to update time slider if we are not currently seeking
+ if (!player || state.seeking || !player.buffered?.length) return;
+
+ console.log('onProgress');
+
+ setState(prevState => ({
+ ...prevState,
+ loadedSeconds: player.buffered?.end(player.buffered?.length - 1),
+ loaded: player.buffered?.end(player.buffered?.length - 1) / player.duration,
+ }));
+ };
+
+ const handleTimeUpdate = () => {
+ const player = playerRef.current;
+ // We only want to update time slider if we are not currently seeking
+ if (!player || state.seeking) return;
+
+ console.log('onTimeUpdate', player.currentTime);
+
+ if (!player.duration) return;
+
+ setState(prevState => ({
+ ...prevState,
+ playedSeconds: player.currentTime,
+ played: player.currentTime / player.duration,
+ }));
+ };
+
+ const handleEnded = () => {
+ console.log('onEnded');
+ setState(prevState => ({ ...prevState, playing: prevState.loop }));
+ };
+
+ const handleDurationChange = () => {
+ const player = playerRef.current;
+ if (!player) return;
+
+ console.log('onDurationChange', player.duration);
+ setState(prevState => ({ ...prevState, duration: player.duration }));
+ };
+
+ const handleClickFullscreen = () => {
+ const reactPlayer = document.querySelector('.react-player');
+ if (reactPlayer) screenfull.request(reactPlayer);
+ };
+
+ const renderLoadButton = (src: string, label: string) => {
+ return (
+ load(src)}>
+ {label}
+
+ );
+ };
+
+ const setPlayerRef = useCallback((player: HTMLVideoElement) => {
+ if (!player) return;
+ playerRef.current = player;
+ console.log(player);
+ }, []);
+
+ const handleLoadCustomUrl = () => {
+ if (urlInputRef.current?.value) {
+ setState(prevState => ({ ...prevState, src: urlInputRef.current?.value }));
+ }
+ };
+
+ const {
+ src,
+ playing,
+ controls,
+ light,
+ volume,
+ muted,
+ loop,
+ played,
+ loaded,
+ duration,
+ playbackRate,
+ pip,
+ } = state;
+
+ const SEPARATOR = ' · ';
+
+ return (
+
+
+ ReactPlayer Demo
+
+ console.log('onLoadStart')}
+ onReady={() => console.log('onReady')}
+ onStart={(e) => console.log('onStart', e)}
+ onPlay={handlePlay}
+ onEnterPictureInPicture={handleEnterPictureInPicture}
+ onLeavePictureInPicture={handleLeavePictureInPicture}
+ onPause={handlePause}
+ onRateChange={handleRateChange}
+ onSeeking={(e) => console.log('onSeeking', e)}
+ onSeeked={(e) => console.log('onSeeked', e)}
+ onEnded={handleEnded}
+ onError={(e) => console.log('onError', e)}
+ onTimeUpdate={handleTimeUpdate}
+ onProgress={handleProgress}
+ onDurationChange={handleDurationChange}
+ />
+
+
+
+
+
+
+
+
+ HTML
+
+ {renderLoadButton(
+ 'https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_1MB.mp4',
+ 'mp4'
+ )}
+ {renderLoadButton(
+ 'https://test-videos.co.uk/vids/bigbuckbunny/webm/vp8/360/Big_Buck_Bunny_360_10s_1MB.webm',
+ 'webm'
+ )}
+ {renderLoadButton(
+ 'https://filesamples.com/samples/video/ogv/sample_640x360.ogv',
+ 'ogv'
+ )}
+ {renderLoadButton(
+ 'https://storage.googleapis.com/media-session/elephants-dream/the-wires.mp3',
+ 'mp3'
+ )}
+
+
+
+ HLS
+
+ {renderLoadButton(
+ 'https://stream.mux.com/VcmKA6aqzIzlg3MayLJDnbF55kX00mds028Z65QxvBYaA.m3u8',
+ 'HLS (m3u8)'
+ )}
+
+
+
+ DASH
+
+ {renderLoadButton(
+ 'https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fps_640x360_800k.mpd',
+ 'DASH (mpd)'
+ )}
+
+
+
+ Mux
+
+ {renderLoadButton(
+ 'https://stream.mux.com/maVbJv2GSYNRgS02kPXOOGdJMWGU1mkA019ZUjYE7VU7k',
+ 'Test A'
+ )}
+ {renderLoadButton(
+ 'https://stream.mux.com/Sc89iWAyNkhJ3P1rQ02nrEdCFTnfT01CZ2KmaEcxXfB008',
+ 'Test B'
+ )}
+
+
+
+ YouTube
+
+ {renderLoadButton('https://www.youtube.com/watch?v=oUFJJNQGwhk', 'Test A')}
+ {renderLoadButton('https://www.youtube.com/watch?v=jNgP6d9HraI', 'Test B')}
+ {renderLoadButton('https://www.youtube.com/playlist?list=PLRfhDHeBTBJ7MU5DX4P_oBIRN457ah9lA', 'Playlist')}
+
+
+
+ Vimeo
+
+ {renderLoadButton('https://vimeo.com/90509568', 'Test A')}
+ {renderLoadButton('https://vimeo.com/169599296', 'Test B')}
+
+
+
+ Wistia
+
+ {renderLoadButton('https://home.wistia.com/medias/e4a27b971d', 'Test A')}
+ {renderLoadButton('https://home.wistia.com/medias/29b0fbf547', 'Test B')}
+ {renderLoadButton('https://home.wistia.com/medias/bq6epni33s', 'Test C')}
+
+
+
+ Spotify
+
+ {renderLoadButton('https://open.spotify.com/episode/5Jo9ncrz2liWiKj8inZwD2', 'Test A')}
+
+
+
+ Twitch
+
+ {renderLoadButton('https://www.twitch.tv/videos/106400740', 'Test A')}
+ {renderLoadButton('https://www.twitch.tv/kronovi', 'Test B')}
+
+
+
+ TikTok
+
+ {renderLoadButton('https://www.tiktok.com/@_luwes/video/7527476667770522893', 'Test A')}
+ {renderLoadButton('https://www.tiktok.com/@scout2015/video/6718335390845095173', 'Test B')}
+
+
+
+ Custom
+
+
+
+ Load
+
+
+
+
+
+
+ State
+
+
+
+
+ src
+ {src || 'null'}
+
+
+ playing
+ {playing ? 'true' : 'false'}
+
+
+ volume
+ {volume.toFixed(3)}
+
+
+ speed
+ {playbackRate}
+
+
+ played
+ {played.toFixed(3)}
+
+
+ loaded
+ {loaded.toFixed(3)}
+
+
+ duration
+
+
+
+
+
+ elapsed
+
+
+
+
+
+ remaining
+
+
+
+
+
+
+
+
+ Version {version}
+ {SEPARATOR}
+ GitHub
+ {SEPARATOR}
+ npm
+
+
+ );
+};
+
+export default App;
diff --git a/examples/react/src/Duration.tsx b/examples/react/src/Duration.tsx
new file mode 100644
index 000000000..dc1942ad9
--- /dev/null
+++ b/examples/react/src/Duration.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+
+export default function Duration({ className, seconds }: { className?: string; seconds: number }) {
+ return (
+
+ {format(seconds)}
+
+ );
+}
+
+function format(seconds: number) {
+ const date = new Date(seconds * 1000);
+ const hh = date.getUTCHours();
+ const mm = date.getUTCMinutes();
+ const ss = pad(date.getUTCSeconds());
+ if (hh) {
+ return `${hh}:${pad(mm)}:${ss}`;
+ }
+ return `${mm}:${ss}`;
+}
+
+function pad(string: string | number) {
+ return (`0${string}`).slice(-2);
+}
diff --git a/examples/react/src/index.tsx b/examples/react/src/index.tsx
new file mode 100644
index 000000000..4e1fb46ed
--- /dev/null
+++ b/examples/react/src/index.tsx
@@ -0,0 +1,7 @@
+import React from 'react';
+import { createRoot } from 'react-dom/client';
+import App from './App';
+
+const container = document.getElementById('app');
+const root = createRoot(container as HTMLElement);
+root.render( );
diff --git a/index.d.ts b/index.d.ts
deleted file mode 100644
index d1fa129b9..000000000
--- a/index.d.ts
+++ /dev/null
@@ -1,106 +0,0 @@
-import * as React from 'react';
-
-export interface SourceProps {
- src: string;
- type: string;
-}
-
-export interface TrackProps {
- kind: string;
- src: string;
- srcLang: string;
- default?: boolean;
-}
-
-export interface SoundCloudConfig {
- options?: Object;
-}
-
-export interface YouTubeConfig {
- playerVars?: Object;
- preload?: boolean;
-}
-
-export interface FacebookConfig {
- appId: string;
-}
-
-export interface DailyMotionConfig {
- params?: Object;
- preload?: boolean;
-}
-
-export interface VimeoConfig {
- iframeParams?: Object;
- preload?: boolean;
-}
-
-export interface WistiaConfig {
- options?: Object;
-}
-
-export interface MixcloudConfig {
- options?: Object;
-}
-
-export interface FileConfig {
- attributes?: Object;
- tracks?: TrackProps[];
- forceAudio?: boolean;
- forceHLS?: boolean;
- forceDASH?: boolean;
-}
-
-export interface Config {
- soundcloud?: SoundCloudConfig;
- youtube?: YouTubeConfig;
- facebook?: FacebookConfig;
- dailymotion?: DailyMotionConfig;
- vimeo?: VimeoConfig;
- file?: FileConfig;
- wistia?: WistiaConfig;
- mixcloud?: MixcloudConfig;
-}
-
-export interface ReactPlayerProps {
- url?: string | string[] | SourceProps[];
- playing?: boolean;
- loop?: boolean;
- controls?: boolean;
- volume?: number;
- muted?: boolean;
- playbackRate?: number;
- width?: string | number;
- height?: string | number;
- style?: Object;
- progressInterval?: number;
- playsinline?: boolean;
- wrapper?: any;
- config?: Config;
- soundcloudConfig?: SoundCloudConfig;
- youtubeConfig?: YouTubeConfig;
- facebookConfig?: FacebookConfig;
- dailymotionConfig?: DailyMotionConfig;
- vimeoConfig?: VimeoConfig;
- fileConfig?: FileConfig;
- wistiaConfig?: WistiaConfig;
- onReady?(): void;
- onStart?(): void;
- onPlay?(): void;
- onPause?(): void;
- onBuffer?(): void;
- onEnded?(): void;
- onError?(error: any): void;
- onDuration?(duration: number): void;
- onSeek?(seconds: number): void;
- onProgress?(state: { played: number, playedSeconds: number, loaded: number, loadedSeconds: number }): void;
- [otherProps: string]: any;
-}
-
-export default class ReactPlayer extends React.Component {
- static canPlay(url: string): boolean;
- seekTo(fraction: number): void;
- getCurrentTime(): number;
- getDuration(): number;
- getInternalPlayer(key?: string): Object;
-}
diff --git a/index.html b/index.html
deleted file mode 100644
index bc42239b1..000000000
--- a/index.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
- ReactPlayer Demo
-
-
-
-
-
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 000000000..ef66be460
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3946 @@
+{
+ "name": "react-player",
+ "version": "3.4.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "react-player",
+ "version": "3.4.0",
+ "license": "MIT",
+ "dependencies": {
+ "@mux/mux-player-react": "^3.8.0",
+ "cloudflare-video-element": "^1.3.4",
+ "dash-video-element": "^0.3.0",
+ "hls-video-element": "^1.5.9",
+ "spotify-audio-element": "^1.0.3",
+ "tiktok-video-element": "^0.1.1",
+ "twitch-video-element": "^0.1.5",
+ "vimeo-video-element": "^1.6.1",
+ "wistia-video-element": "^1.3.5",
+ "youtube-video-element": "^1.8.0"
+ },
+ "devDependencies": {
+ "@biomejs/biome": "1.8.2",
+ "@types/node": "^20.14.6",
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
+ "@types/react-test-renderer": "^18.3.0",
+ "auto-changelog": "^2.0.0",
+ "builder": "file:./scripts/builder",
+ "c8": "^8.0.1",
+ "codecov": "^3.6.5",
+ "cross-env": "^7.0.2",
+ "esbuild": "^0.21.5",
+ "npm-run-all": "^4.1.5",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-test-renderer": "^18.3.1",
+ "rimraf": "^3.0.2",
+ "screenfull": "^5.0.2",
+ "sinon": "^16.0.0",
+ "tester": "file:./scripts/tester",
+ "typescript": "^5.4.5",
+ "zora": "^5.2.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18 || ^19",
+ "react": "^17.0.2 || ^18 || ^19",
+ "react-dom": "^17.0.2 || ^18 || ^19"
+ }
+ },
+ "node_modules/@bcoe/v8-coverage": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
+ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
+ "dev": true
+ },
+ "node_modules/@biomejs/biome": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.8.2.tgz",
+ "integrity": "sha512-XafCzLgs0xbH0bCjYKxQ63ig2V86fZQMq1jiy5pyLToWk9aHxA8GAUxyBtklPHtPYZPGEPOYglQHj4jyfUp+Iw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT OR Apache-2.0",
+ "bin": {
+ "biome": "bin/biome"
+ },
+ "engines": {
+ "node": ">=14.21.3"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/biome"
+ },
+ "optionalDependencies": {
+ "@biomejs/cli-darwin-arm64": "1.8.2",
+ "@biomejs/cli-darwin-x64": "1.8.2",
+ "@biomejs/cli-linux-arm64": "1.8.2",
+ "@biomejs/cli-linux-arm64-musl": "1.8.2",
+ "@biomejs/cli-linux-x64": "1.8.2",
+ "@biomejs/cli-linux-x64-musl": "1.8.2",
+ "@biomejs/cli-win32-arm64": "1.8.2",
+ "@biomejs/cli-win32-x64": "1.8.2"
+ }
+ },
+ "node_modules/@biomejs/cli-darwin-arm64": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.8.2.tgz",
+ "integrity": "sha512-l9msLsTcSIAPqMsPIhodQmb50sEfaXPLQ0YW4cdj6INmd8iaOh/V9NceQb2366vACTJgcWDQ2RzlvURek1T68g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@biomejs/cli-darwin-x64": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.8.2.tgz",
+ "integrity": "sha512-Fc4y/FuIxRSiB3TJ+y27vFDE/HJt4QgBuymktsIKEcBZvnKfsRjxvzVDunccRn4xbKgepnp+fn6BoS+ZIg/I3Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@biomejs/cli-linux-arm64": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.8.2.tgz",
+ "integrity": "sha512-Q99qwP0qibkZxm2kfnt37OxeIlliDYf5ogi3zX9ij2DULzc+KtPA9Uj0wCljcJofOBsBYaHc7597Q+Bf/251ww==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@biomejs/cli-linux-arm64-musl": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.8.2.tgz",
+ "integrity": "sha512-WpT41QJJvkZa1eZq0WmD513zkC6AYaMI39HJKmKeiUeX2NZirG+bxv1YRDhqkns1NbBqo3+qrJqBkPmOW+xAVA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@biomejs/cli-linux-x64": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.8.2.tgz",
+ "integrity": "sha512-bjhhUVFchFid2gOjrvBe4fg8BShcpyFQTHuB/QQnfGxs1ddrGP30yq3fHfc6S6MoCcz9Tjd3Zzq1EfWfyy5iHA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@biomejs/cli-linux-x64-musl": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.8.2.tgz",
+ "integrity": "sha512-rk1Wj4d3LIlAlIAS1m2jlyfOjkNbuY1lfwKvWIAeZC51yDMzwhRD7cReE5PE+jqLDtq60PX38hDPeKd7nA1S6A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@biomejs/cli-win32-arm64": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.8.2.tgz",
+ "integrity": "sha512-EUbqmCmNWT5xhnxHrCAEBzJB1AnLqxTYoRjlxiCMzGvsy5jQzhCanJ8CT9kNsApW3pfPWBWkoTa7qrwWmwnEGA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@biomejs/cli-win32-x64": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.8.2.tgz",
+ "integrity": "sha512-n9H5oRUCk1uNezMgyJh9+hZdtfD8PXLLeq8DUzTycIhl0I1BulIoZ/uxWgRVDFDwAR1JHu1AykISCRFNGnc4iA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT OR Apache-2.0",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=14.21.3"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+ "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.19",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
+ "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
+ }
+ },
+ "node_modules/@mux/mux-data-google-ima": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@mux/mux-data-google-ima/-/mux-data-google-ima-0.2.8.tgz",
+ "integrity": "sha512-0ZEkHdcZ6bS8QtcjFcoJeZxJTpX7qRIledf4q1trMWPznugvtajCjCM2kieK/pzkZj1JM6liDRFs1PJSfVUs2A==",
+ "license": "MIT",
+ "dependencies": {
+ "mux-embed": "5.9.0"
+ }
+ },
+ "node_modules/@mux/mux-player": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.8.0.tgz",
+ "integrity": "sha512-2KcJdW4BBX8JDcXpclFKaNBsqpebtaEfTzwm5lPP1Lf6y5OMILvf2tqVCOczurREVFyaEoVD71vL0I5Vvqb1dA==",
+ "license": "MIT",
+ "dependencies": {
+ "@mux/mux-video": "0.27.2",
+ "@mux/playback-core": "0.31.2",
+ "media-chrome": "~4.15.1",
+ "player.style": "^0.3.0"
+ }
+ },
+ "node_modules/@mux/mux-player-react": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.8.0.tgz",
+ "integrity": "sha512-c9TKtK9nsSpXOuC1LVLmmHA+Zlpcx4mzgGaA7ZlukrGMfoXWvA90ROSVAAjXRA+UKSHdLIbvNofgG3P6rEE/4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@mux/mux-player": "3.8.0",
+ "@mux/playback-core": "0.31.2",
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^17.0.0-0 || ^18 || ^18.0.0-0 || ^19 || ^19.0.0-0",
+ "react": "^17.0.2 || ^17.0.0-0 || ^18 || ^18.0.0-0 || ^19 || ^19.0.0-0",
+ "react-dom": "^17.0.2 || ^17.0.2-0 || ^18 || ^18.0.0-0 || ^19 || ^19.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@mux/mux-video": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.27.2.tgz",
+ "integrity": "sha512-VAqSw/3kS/qBzjyFSX3wClIX5Kdk6eXXlhxIJRWlClYvUKGm9ruhd7HzkwZVOJguvUh5QbGoiGWBEW2xkNIXzw==",
+ "license": "MIT",
+ "dependencies": {
+ "@mux/mux-data-google-ima": "0.2.8",
+ "@mux/playback-core": "0.31.2",
+ "castable-video": "~1.1.11",
+ "custom-media-element": "~1.4.5",
+ "media-tracks": "~0.3.3"
+ }
+ },
+ "node_modules/@mux/playback-core": {
+ "version": "0.31.2",
+ "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.31.2.tgz",
+ "integrity": "sha512-bhOVTGAuKCQuDzNOc3XvDq7vsgqy2DAacLP0WdJciUKjfZhs3oA11NbKG7qAN6akPnZVfgn0Jn/sJN8TRjE30A==",
+ "license": "MIT",
+ "dependencies": {
+ "hls.js": "~1.6.13",
+ "mux-embed": "^5.8.3"
+ }
+ },
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
+ }
+ },
+ "node_modules/@sinonjs/samsam": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz",
+ "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^2.0.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
+ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
+ "dev": true
+ },
+ "node_modules/@svta/common-media-library": {
+ "version": "0.12.4",
+ "resolved": "https://registry.npmjs.org/@svta/common-media-library/-/common-media-library-0.12.4.tgz",
+ "integrity": "sha512-9EuOoaNmz7JrfGwjsrD9SxF9otU5TNMnbLu1yU4BeLK0W5cDxVXXR58Z89q9u2AnHjIctscjMTYdlqQ1gojTuw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.14.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.6.tgz",
+ "integrity": "sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.8",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz",
+ "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ==",
+ "devOptional": true
+ },
+ "node_modules/@types/react": {
+ "version": "18.3.3",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz",
+ "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==",
+ "devOptional": true,
+ "dependencies": {
+ "@types/prop-types": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz",
+ "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-test-renderer": {
+ "version": "18.3.0",
+ "resolved": "https://registry.npmjs.org/@types/react-test-renderer/-/react-test-renderer-18.3.0.tgz",
+ "integrity": "sha512-HW4MuEYxfDbOHQsVlY/XtOvNHftCVEPhJF2pQXXwcUiUF+Oyb0usgp48HSgpK5rt8m9KZb22yqOeZm+rrVG8gw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@vimeo/player": {
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/@vimeo/player/-/player-2.29.0.tgz",
+ "integrity": "sha512-9JjvjeqUndb9otCCFd0/+2ESsLk7VkDE6sxOBy9iy2ukezuQbplVRi+g9g59yAurKofbmTi/KcKxBGO/22zWRw==",
+ "license": "MIT",
+ "dependencies": {
+ "native-promise-only": "0.8.1",
+ "weakmap-polyfill": "2.0.4"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "dependencies": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "node_modules/argv": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz",
+ "integrity": "sha512-dEamhpPEwRUBpLNHeuCm/v+g0anFByHahxodVO/BbAarHVBBg2MccCwf9K+o1Pof+2btdnkJelYVUWjW/VrATw==",
+ "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
+ "dev": true,
+ "engines": {
+ "node": ">=0.6.10"
+ }
+ },
+ "node_modules/array-buffer-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/arraybuffer.prototype.slice": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
+ "is-shared-array-buffer": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/auto-changelog": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/auto-changelog/-/auto-changelog-2.4.0.tgz",
+ "integrity": "sha512-vh17hko1c0ItsEcw6m7qPRf3m45u+XK5QyCrrBFViElZ8jnKrPC1roSznrd1fIB/0vR/zawdECCRJtTuqIXaJw==",
+ "dev": true,
+ "dependencies": {
+ "commander": "^7.2.0",
+ "handlebars": "^4.7.7",
+ "node-fetch": "^2.6.1",
+ "parse-github-url": "^1.0.2",
+ "semver": "^7.3.5"
+ },
+ "bin": {
+ "auto-changelog": "src/index.js"
+ },
+ "engines": {
+ "node": ">=8.3"
+ }
+ },
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
+ "dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/bcp-47": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-2.1.0.tgz",
+ "integrity": "sha512-9IIS3UPrvIa1Ej+lVDdDwO7zLehjqsaByECw0bu2RRGP73jALm6FYbzI5gWbgHLvNdkvfXB5YrSbocZdOS0c0w==",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-alphanumerical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/bcp-47-match": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz",
+ "integrity": "sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/bcp-47-normalize": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/bcp-47-normalize/-/bcp-47-normalize-2.3.0.tgz",
+ "integrity": "sha512-8I/wfzqQvttUFz7HVJgIZ7+dj3vUaIyIxYXaTRP1YWoSDfzt6TUmxaKZeuXR62qBmYr+nvuWINFRl6pZ5DlN4Q==",
+ "license": "MIT",
+ "dependencies": {
+ "bcp-47": "^2.0.0",
+ "bcp-47-match": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/builder": {
+ "resolved": "scripts/builder",
+ "link": true
+ },
+ "node_modules/c8": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-8.0.1.tgz",
+ "integrity": "sha512-EINpopxZNH1mETuI0DzRA4MZpAUH+IFiRhnmFD3vFr3vdrgxqi3VfE3KL0AIL+zDq8rC9bZqwM/VDmmoe04y7w==",
+ "dev": true,
+ "dependencies": {
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@istanbuljs/schema": "^0.1.3",
+ "find-up": "^5.0.0",
+ "foreground-child": "^2.0.0",
+ "istanbul-lib-coverage": "^3.2.0",
+ "istanbul-lib-report": "^3.0.1",
+ "istanbul-reports": "^3.1.6",
+ "rimraf": "^3.0.2",
+ "test-exclude": "^6.0.0",
+ "v8-to-istanbul": "^9.0.0",
+ "yargs": "^17.7.2",
+ "yargs-parser": "^21.1.1"
+ },
+ "bin": {
+ "c8": "bin/c8.js"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/castable-video": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/castable-video/-/castable-video-1.1.11.tgz",
+ "integrity": "sha512-LCRTK6oe7SB1SiUQFzZCo6D6gcEzijqBTVIuj3smKpQdesXM18QTbCVqWgh9MfOeQgTx/i9ji5jGcdqNPeWg2g==",
+ "license": "MIT",
+ "dependencies": {
+ "custom-media-element": "~1.4.5"
+ }
+ },
+ "node_modules/ce-la-react": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/ce-la-react/-/ce-la-react-0.3.1.tgz",
+ "integrity": "sha512-g0YwpZDPIwTwFumGTzNHcgJA6VhFfFCJkSNdUdC04br2UfU+56JDrJrJva3FZ7MToB4NDHAFBiPE/PZdNl1mQA==",
+ "license": "BSD-3-Clause",
+ "peerDependencies": {
+ "react": ">=17.0.0"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk/node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk/node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/cliui/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cliui/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cloudflare-video-element": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/cloudflare-video-element/-/cloudflare-video-element-1.3.4.tgz",
+ "integrity": "sha512-F9g+tXzGEXI6v6L48qXxr8vnR8+L6yy7IhpJxK++lpzuVekMHTixxH7/dzLuq6OacVGziU4RB5pzZYJ7/LYtJg==",
+ "license": "MIT"
+ },
+ "node_modules/codecov": {
+ "version": "3.8.3",
+ "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.8.3.tgz",
+ "integrity": "sha512-Y8Hw+V3HgR7V71xWH2vQ9lyS358CbGCldWlJFR0JirqoGtOoas3R3/OclRTvgUYFK29mmJICDPauVKmpqbwhOA==",
+ "deprecated": "https://about.codecov.io/blog/codecov-uploader-deprecation-plan/",
+ "dev": true,
+ "dependencies": {
+ "argv": "0.0.2",
+ "ignore-walk": "3.0.4",
+ "js-yaml": "3.14.1",
+ "teeny-request": "7.1.1",
+ "urlgrey": "1.0.0"
+ },
+ "bin": {
+ "codecov": "bin/codecov"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/codem-isoboxer": {
+ "version": "0.3.10",
+ "resolved": "https://registry.npmjs.org/codem-isoboxer/-/codem-isoboxer-0.3.10.tgz",
+ "integrity": "sha512-eNk3TRV+xQMJ1PEj0FQGY8KD4m0GPxT487XJ+Iftm7mVa9WpPFDMWqPt+46buiP5j5Wzqe5oMIhqBcAeKfygSA==",
+ "license": "MIT"
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true
+ },
+ "node_modules/cross-env": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz",
+ "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.1"
+ },
+ "bin": {
+ "cross-env": "src/bin/cross-env.js",
+ "cross-env-shell": "src/bin/cross-env-shell.js"
+ },
+ "engines": {
+ "node": ">=10.14",
+ "npm": ">=6",
+ "yarn": ">=1"
+ }
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "devOptional": true
+ },
+ "node_modules/custom-media-element": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/custom-media-element/-/custom-media-element-1.4.5.tgz",
+ "integrity": "sha512-cjrsQufETwxjvwZbYbKBCJNvmQ2++G9AvT45zDi7NXL9k2PdVcs2h0jQz96J6G4TMKRCcEsoJ+QTgQD00Igtjw==",
+ "license": "MIT"
+ },
+ "node_modules/dash-video-element": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/dash-video-element/-/dash-video-element-0.3.0.tgz",
+ "integrity": "sha512-Pe+BxG153n+CH++3gmWMApVXEUs767YGxsRebdNZRSZdXjbv7OGbsitYbjNMC4QAjCWBvBjIclAYV4hoc7OWSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "custom-media-element": "^1.4.5",
+ "dashjs": "^5.0.3",
+ "media-tracks": "^0.3.4"
+ }
+ },
+ "node_modules/dashjs": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/dashjs/-/dashjs-5.0.3.tgz",
+ "integrity": "sha512-TXndNnCUjFjF2nYBxDVba+hWRpVkadkQ8flLp7kHkem+5+wZTfRShJCnVkPUosmjS0YPE9fVNLbYPJxHBeQZvA==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@svta/common-media-library": "^0.12.4",
+ "bcp-47-match": "^2.0.3",
+ "bcp-47-normalize": "^2.3.0",
+ "codem-isoboxer": "0.3.10",
+ "fast-deep-equal": "3.1.3",
+ "html-entities": "^2.5.2",
+ "imsc": "^1.1.5",
+ "localforage": "^1.10.0",
+ "path-browserify": "^1.0.1",
+ "ua-parser-js": "^1.0.37"
+ }
+ },
+ "node_modules/data-view-buffer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz",
+ "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz",
+ "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/data-view-byte-offset": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz",
+ "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-data-view": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/diff": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
+ "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz",
+ "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "data-view-buffer": "^1.0.1",
+ "data-view-byte-length": "^1.0.1",
+ "data-view-byte-offset": "^1.0.0",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.0.0",
+ "es-set-tostringtag": "^2.0.3",
+ "es-to-primitive": "^1.2.1",
+ "function.prototype.name": "^1.1.6",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
+ "globalthis": "^1.0.3",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2",
+ "has-proto": "^1.0.3",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.2",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
+ "is-callable": "^1.2.7",
+ "is-data-view": "^1.0.1",
+ "is-negative-zero": "^2.0.3",
+ "is-regex": "^1.1.4",
+ "is-shared-array-buffer": "^1.0.3",
+ "is-string": "^1.0.7",
+ "is-typed-array": "^1.1.13",
+ "is-weakref": "^1.0.2",
+ "object-inspect": "^1.13.1",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.2",
+ "safe-regex-test": "^1.0.3",
+ "string.prototype.trim": "^1.2.9",
+ "string.prototype.trimend": "^1.0.8",
+ "string.prototype.trimstart": "^1.0.8",
+ "typed-array-buffer": "^1.0.2",
+ "typed-array-byte-length": "^1.0.1",
+ "typed-array-byte-offset": "^1.0.2",
+ "typed-array-length": "^1.0.6",
+ "unbox-primitive": "^1.0.2",
+ "which-typed-array": "^1.1.15"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-object-atoms": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz",
+ "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
+ },
+ "node_modules/fast-url-parser": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz",
+ "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^1.3.2"
+ }
+ },
+ "node_modules/fast-url-parser/node_modules/punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
+ "dev": true
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dev": true,
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
+ "node_modules/foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "dev": true,
+ "dependencies": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
+ "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.2.0",
+ "es-abstract": "^1.22.1",
+ "functions-have-names": "^1.2.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/get-symbol-description": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/globalthis": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+ "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/handlebars": {
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.2",
+ "source-map": "^0.6.1",
+ "wordwrap": "^1.0.0"
+ },
+ "bin": {
+ "handlebars": "bin/handlebars"
+ },
+ "engines": {
+ "node": ">=0.4.7"
+ },
+ "optionalDependencies": {
+ "uglify-js": "^3.1.4"
+ }
+ },
+ "node_modules/has": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
+ "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
+ "dev": true,
+ "dependencies": {
+ "es-define-property": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-proto": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/hls-video-element": {
+ "version": "1.5.9",
+ "resolved": "https://registry.npmjs.org/hls-video-element/-/hls-video-element-1.5.9.tgz",
+ "integrity": "sha512-hDXhSI3IpSSODJF8ecNzDHKP5cqsouOuKDMjoTexyFePKr9KpXVCPAnVrXFTTH8VbOim4xkLtPkVJFt7J1Rs6w==",
+ "license": "MIT",
+ "dependencies": {
+ "custom-media-element": "^1.4.5",
+ "hls.js": "^1.6.5",
+ "media-tracks": "^0.3.4"
+ }
+ },
+ "node_modules/hls.js": {
+ "version": "1.6.14",
+ "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.14.tgz",
+ "integrity": "sha512-CSpT2aXsv71HST8C5ETeVo+6YybqCpHBiYrCRQSn3U5QUZuLTSsvtq/bj+zuvjLVADeKxoebzo16OkH8m1+65Q==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true
+ },
+ "node_modules/html-entities": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz",
+ "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/mdevils"
+ },
+ {
+ "type": "patreon",
+ "url": "https://patreon.com/mdevils"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "node_modules/http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "dev": true,
+ "dependencies": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "6",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/ignore-walk": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz",
+ "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "node_modules/immediate": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
+ "license": "MIT"
+ },
+ "node_modules/imsc": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/imsc/-/imsc-1.1.5.tgz",
+ "integrity": "sha512-V8je+CGkcvGhgl2C1GlhqFFiUOIEdwXbXLiu1Fcubvvbo+g9inauqT3l0pNYXGoLPBj3jxtZz9t+wCopMkwadQ==",
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "sax": "1.2.1"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
+ "dev": true,
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "hasown": "^2.0.0",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
+ "license": "MIT",
+ "dependencies": {
+ "is-alphabetical": "^2.0.0",
+ "is-decimal": "^2.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-array-buffer": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-callable": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+ "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-data-view": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz",
+ "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==",
+ "dev": true,
+ "dependencies": {
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-decimal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-shared-array-buffer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-typed-array": {
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
+ "dev": true,
+ "dependencies": {
+ "which-typed-array": "^1.1.14"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "dev": true
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
+ "dev": true,
+ "dependencies": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^4.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/istanbul-reports": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
+ "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
+ "dev": true,
+ "dependencies": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "node_modules/just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "dev": true
+ },
+ "node_modules/lie": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
+ "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==",
+ "license": "MIT",
+ "dependencies": {
+ "immediate": "~3.0.5"
+ }
+ },
+ "node_modules/localforage": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz",
+ "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "lie": "3.1.1"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
+ "dev": true
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/make-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/media-chrome": {
+ "version": "4.15.1",
+ "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.15.1.tgz",
+ "integrity": "sha512-Hxqr0qQ67ewmRaLJBqe5ayu53txFX+DODb9xBSHgTbw7j+gITGZ4llbPPEmqMlDnatw7IsF+AUh9rJYbpnn4ZQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ce-la-react": "^0.3.0"
+ }
+ },
+ "node_modules/media-tracks": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/media-tracks/-/media-tracks-0.3.4.tgz",
+ "integrity": "sha512-5SUElzGMYXA7bcyZBL1YzLTxH9Iyw1AeYNJxzByqbestrrtB0F3wfiWUr7aROpwodO4fwnxOt78Xjb3o3ONNQg==",
+ "license": "MIT"
+ },
+ "node_modules/memorystream": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
+ "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.10.0"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node_modules/mux-embed": {
+ "version": "5.9.0",
+ "resolved": "https://registry.npmjs.org/mux-embed/-/mux-embed-5.9.0.tgz",
+ "integrity": "sha512-wmunL3uoPhma/tWy8PrDPZkvJpXvSFBwbD3KkC4PG8Ztjfb1X3hRJwGUAQyRz7z99b/ovLm2UTTitrkvStjH4w==",
+ "license": "MIT"
+ },
+ "node_modules/native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha512-zkVhZUA3y8mbz652WrL5x0fB0ehrBkulWT3TomAQ9iDtyXZvzKeEA6GPxAItBYeNYl5yngKRX612qHOhvMkDeg==",
+ "license": "MIT"
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true
+ },
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "node_modules/nise": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz",
+ "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^2.0.0",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ }
+ },
+ "node_modules/nise/node_modules/@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "dev": true,
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-package-data/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/npm-run-all": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
+ "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "chalk": "^2.4.1",
+ "cross-spawn": "^6.0.5",
+ "memorystream": "^0.3.1",
+ "minimatch": "^3.0.4",
+ "pidtree": "^0.3.0",
+ "read-pkg": "^3.0.0",
+ "shell-quote": "^1.6.1",
+ "string.prototype.padend": "^3.0.0"
+ },
+ "bin": {
+ "npm-run-all": "bin/npm-run-all/index.js",
+ "run-p": "bin/run-p/index.js",
+ "run-s": "bin/run-s/index.js"
+ },
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "dependencies": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "engines": {
+ "node": ">=4.8"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/npm-run-all/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "has-symbols": "^1.0.3",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/parse-github-url": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz",
+ "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==",
+ "dev": true,
+ "bin": {
+ "parse-github-url": "cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
+ "dev": true,
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-browserify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
+ "license": "MIT"
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "dev": true,
+ "dependencies": {
+ "isarray": "0.0.1"
+ }
+ },
+ "node_modules/pidtree": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
+ "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
+ "dev": true,
+ "bin": {
+ "pidtree": "bin/pidtree.js"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/player.style": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.3.0.tgz",
+ "integrity": "sha512-ny1TbqA2ZsUd6jzN+F034+UMXVK7n5SrwepsrZ2gIqVz00Hn0ohCUbbUdst/2IOFCy0oiTbaOXkSFxRw1RmSlg==",
+ "license": "MIT",
+ "workspaces": [
+ ".",
+ "site",
+ "examples/*",
+ "scripts/*",
+ "themes/*"
+ ],
+ "dependencies": {
+ "media-chrome": "~4.14.0"
+ }
+ },
+ "node_modules/player.style/node_modules/media-chrome": {
+ "version": "4.14.0",
+ "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.14.0.tgz",
+ "integrity": "sha512-IEdFb4blyF15vLvQzLIn6USJBv7Kf2ne+TfLQKBYI5Z0f9VEBVZz5MKy4Uhi0iA9lStl2S9ENIujJRuJIa5OiA==",
+ "license": "MIT",
+ "dependencies": {
+ "ce-la-react": "^0.3.0"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/react": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-shallow-renderer": {
+ "version": "16.15.0",
+ "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz",
+ "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==",
+ "dev": true,
+ "dependencies": {
+ "object-assign": "^4.1.1",
+ "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-test-renderer": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.3.1.tgz",
+ "integrity": "sha512-KkAgygexHUkQqtvvx/otwxtuFu5cVjfzTCtjXLH9boS19/Nbtg84zS7wIQn39G8IlrhThBpQsMKkq5ZHZIYFXA==",
+ "dev": true,
+ "dependencies": {
+ "react-is": "^18.3.1",
+ "react-shallow-renderer": "^16.15.0",
+ "scheduler": "^0.23.2"
+ },
+ "peerDependencies": {
+ "react": "^18.3.1"
+ }
+ },
+ "node_modules/react-test-renderer/node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
+ "dev": true
+ },
+ "node_modules/read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
+ "dev": true,
+ "dependencies": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/read-pkg/node_modules/load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/read-pkg/node_modules/path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/read-pkg/node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/safe-array-concat": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz",
+ "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "get-intrinsic": "^1.2.4",
+ "has-symbols": "^1.0.3",
+ "isarray": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/safe-array-concat/node_modules/isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ },
+ "node_modules/safe-regex-test": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "is-regex": "^1.1.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/sax": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==",
+ "license": "ISC"
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/screenfull": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz",
+ "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/set-function-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
+ "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "dev": true,
+ "dependencies": {
+ "define-data-property": "^1.0.1",
+ "functions-have-names": "^1.2.3",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shell-quote": {
+ "version": "1.8.1",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+ "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/sinon": {
+ "version": "16.1.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.0.tgz",
+ "integrity": "sha512-ZSgzF0vwmoa8pq0GEynqfdnpEDyP1PkYmEChnkjW0Vyh8IDlyFEJ+fkMhCP0il6d5cJjPl2PUsnUSAuP5sttOQ==",
+ "dev": true,
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^10.3.0",
+ "@sinonjs/samsam": "^8.0.0",
+ "diff": "^5.1.0",
+ "nise": "^5.1.4",
+ "supports-color": "^7.2.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/sinon"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/spdx-correct": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
+ "dev": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
+ "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
+ "dev": true
+ },
+ "node_modules/spotify-audio-element": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/spotify-audio-element/-/spotify-audio-element-1.0.3.tgz",
+ "integrity": "sha512-I1/qD8cg/UnTlCIMiKSdZUJTyYfYhaqFK7LIVElc48eOqUUbVCaw1bqL8I6mJzdMJTh3eoNyF/ewvB7NoS/g9A==",
+ "license": "MIT"
+ },
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+ "dev": true
+ },
+ "node_modules/stream-events": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz",
+ "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==",
+ "dev": true,
+ "dependencies": {
+ "stubs": "^3.0.0"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string.prototype.padend": {
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz",
+ "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.2",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trim": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz",
+ "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.23.0",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz",
+ "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimstart": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+ "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "define-properties": "^1.2.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/stubs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
+ "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==",
+ "dev": true
+ },
+ "node_modules/super-media-element": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/super-media-element/-/super-media-element-1.4.2.tgz",
+ "integrity": "sha512-9pP/CVNp4NF2MNlRzLwQkjiTgKKe9WYXrLh9+8QokWmMxz+zt2mf1utkWLco26IuA3AfVcTb//qtlTIjY3VHxA==",
+ "license": "MIT"
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/teeny-request": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-7.1.1.tgz",
+ "integrity": "sha512-iwY6rkW5DDGq8hE2YgNQlKbptYpY5Nn2xecjQiNjOXWbKzPGUfmeUBCSQbbr306d7Z7U2N0TPl+/SwYRfua1Dg==",
+ "dev": true,
+ "dependencies": {
+ "http-proxy-agent": "^4.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "node-fetch": "^2.6.1",
+ "stream-events": "^1.0.5",
+ "uuid": "^8.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "dependencies": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/tester": {
+ "resolved": "scripts/tester",
+ "link": true
+ },
+ "node_modules/tiktok-video-element": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/tiktok-video-element/-/tiktok-video-element-0.1.1.tgz",
+ "integrity": "sha512-BaiVzvNz2UXDKTdSrXzrNf4q6Ecc+/utYUh7zdEu2jzYcJVDoqYbVfUl0bCfMoOeeAqg28vD/yN63Y3E9jOrlA==",
+ "license": "MIT"
+ },
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "dev": true
+ },
+ "node_modules/twitch-video-element": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/twitch-video-element/-/twitch-video-element-0.1.5.tgz",
+ "integrity": "sha512-3UdWMa5ytWFdpgJAM6XEqqRK/1FvWdJVcKDOw4IHBPt4p52E+4fXT42fBdRZFfoxBPXQNZUDDNHFW8wIopD7Og==",
+ "license": "MIT"
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/typed-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/typed-array-byte-length": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-byte-offset": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typed-array-length": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz",
+ "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.4.5",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+ "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/ua-parser-js": {
+ "version": "1.0.40",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.40.tgz",
+ "integrity": "sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ua-parser-js"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/faisalman"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/faisalman"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "ua-parser-js": "script/cli.js"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "dev": true,
+ "optional": true,
+ "bin": {
+ "uglifyjs": "bin/uglifyjs"
+ },
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/urlgrey": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-1.0.0.tgz",
+ "integrity": "sha512-hJfIzMPJmI9IlLkby8QrsCykQ+SXDeO2W5Q9QTW3QpqZVTx4a/K7p8/5q+/isD8vsbVaFgql/gvAoQCRQ2Cb5w==",
+ "dev": true,
+ "dependencies": {
+ "fast-url-parser": "^1.1.3"
+ }
+ },
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "dev": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/v8-to-istanbul": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz",
+ "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
+ "@types/istanbul-lib-coverage": "^2.0.1",
+ "convert-source-map": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10.12.0"
+ }
+ },
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "node_modules/vimeo-video-element": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/vimeo-video-element/-/vimeo-video-element-1.6.1.tgz",
+ "integrity": "sha512-UwDLzhgg98pct1xb6799I1vRDXIzaAX6rs1TG/QOf6y+VrXpTFrI7mYz2gnj9QCtBcGK68f4z64A+MRYRsLJaQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@vimeo/player": "2.29.0"
+ }
+ },
+ "node_modules/weakmap-polyfill": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/weakmap-polyfill/-/weakmap-polyfill-2.0.4.tgz",
+ "integrity": "sha512-ZzxBf288iALJseijWelmECm/1x7ZwQn3sMYIkDr2VvZp7r6SEKuT8D0O9Wiq6L9Nl5mazrOMcmiZE/2NCenaxw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "dev": true
+ },
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "dev": true,
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "dependencies": {
+ "is-bigint": "^1.0.1",
+ "is-boolean-object": "^1.1.0",
+ "is-number-object": "^1.0.4",
+ "is-string": "^1.0.5",
+ "is-symbol": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/which-typed-array": {
+ "version": "1.1.15",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz",
+ "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==",
+ "dev": true,
+ "dependencies": {
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/wistia-video-element": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/wistia-video-element/-/wistia-video-element-1.3.5.tgz",
+ "integrity": "sha512-aIG0xEtclPb9xfklAkOwHFv/BMiH3Ql0yWWKQ1XyUCoSDaF3sOD+JNLmakOChvn2LLUX7FqH/mYb8bXT4ACnMw==",
+ "license": "MIT",
+ "dependencies": {
+ "super-media-element": "~1.4.2"
+ }
+ },
+ "node_modules/wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "dev": true,
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/youtube-video-element": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/youtube-video-element/-/youtube-video-element-1.8.0.tgz",
+ "integrity": "sha512-u3M0MgO+KUtVwIyKJXZXXJ0As0k6d5NflOrh1GjyG8NNOp+liW2nFU29hpXeUcxUWbVKhudIYd39hMVeEgCilQ==",
+ "license": "MIT"
+ },
+ "node_modules/zora": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/zora/-/zora-5.2.0.tgz",
+ "integrity": "sha512-FSZOvfJVfMWhk/poictNsDBCXq/Z+2Zu2peWs6d8OhWWb9nY++czw95D47hdw06L/kfjasLevwrbUtnXyWLAJw==",
+ "dev": true
+ },
+ "scripts/builder": {
+ "version": "0.0.0",
+ "dev": true,
+ "bin": {
+ "builder": "builder.js"
+ }
+ },
+ "scripts/tester": {
+ "version": "0.0.0",
+ "dev": true,
+ "bin": {
+ "tester": "tester.js"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 349878253..c17ed3b12 100644
--- a/package.json
+++ b/package.json
@@ -1,28 +1,95 @@
{
"name": "react-player",
- "version": "1.3.0",
- "description": "A React component for playing a variety of URLs, including file paths, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia and DailyMotion",
- "main": "lib/ReactPlayer.js",
- "typings": "index.d.ts",
- "scripts": {
- "clean": "rimraf lib demo",
- "start": "webpack-dev-server",
- "lint": "standard --verbose | snazzy",
- "test": "cross-env NODE_ENV=test babel-node ./node_modules/karma/bin/karma start test/karma.config.js",
- "coverage": "codecov",
- "build:lib": "cross-env NODE_ENV=production babel src -d lib --ignore src/demo",
- "build:demo": "cross-env NODE_ENV=production webpack --config webpack.demo.babel.js",
- "build:dist": "cross-env NODE_ENV=production webpack --config webpack.dist.babel.js",
- "build:standalone": "cross-env NODE_ENV=production webpack --config webpack.standalone.babel.js",
- "preversion": "npm run lint",
- "version": "auto-changelog -p && npm run build:dist && npm run build:standalone && git add CHANGELOG.md dist",
- "prepublishOnly": "npm run build:lib && npm run build:dist",
- "postpublish": "npm run clean"
+ "version": "3.4.0",
+ "description": "A React component for playing a variety of URLs, including file paths, Mux, YouTube, Vimeo, and Wistia",
+ "author": "Pete Cook (https://github.com/cookpete)",
+ "license": "MIT",
+ "homepage": "https://github.com/cookpete/react-player",
+ "bugs": {
+ "url": "https://github.com/cookpete/react-player/issues"
},
"repository": {
"type": "git",
- "url": "https://github.com/CookPete/react-player.git"
+ "url": "git+https://github.com/cookpete/react-player.git"
+ },
+ "files": [
+ "dist"
+ ],
+ "main": "dist/index.js",
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.js"
+ },
+ "./*": {
+ "types": "./dist/*.d.ts",
+ "default": "./dist/*.js"
+ }
+ },
+ "scripts": {
+ "clean": "rimraf dist demo coverage",
+ "start": "run-p 'types -- -w' 'build:esm -- --watch=forever' 'build:demo -- --watch=forever --servedir=demo'",
+ "lint": "biome lint src/*",
+ "test": "tester test/*.tsx test/*/*.tsx test/*.js test/*/*.js --outdir=disttest --platform=node --format=esm --bundle --external:sinon --external:zora --target=esnext --sourcemap=inline",
+ "test:coverage": "c8 --src src --exclude 'test/**' --exclude 'node_modules/**' --exclude 'scripts/**' --exclude-after-remap npm test",
+ "test:codecov": "npm run test:coverage && c8 report --reporter json && codecov -f coverage/coverage-final.json",
+ "types": "tsc",
+ "build": "run-s types build:*",
+ "build:esm": "builder \"src/**/*.*s*\" --outdir=dist --format=esm",
+ "prebuild:demo": "rimraf demo && cp -r examples/react/public demo",
+ "build:demo": "builder ./examples/react/src/index.js --format=esm --splitting --bundle --outdir=demo --minify",
+ "preversion": "run-s lint test",
+ "version": "auto-changelog -p && git add CHANGELOG.md",
+ "prepublishOnly": "npm run build",
+ "postpublish": "npm run clean"
+ },
+ "peerDependencies": {
+ "@types/react": "^17.0.0 || ^18 || ^19",
+ "react": "^17.0.2 || ^18 || ^19",
+ "react-dom": "^17.0.2 || ^18 || ^19"
+ },
+ "dependencies": {
+ "@mux/mux-player-react": "^3.8.0",
+ "cloudflare-video-element": "^1.3.4",
+ "dash-video-element": "^0.3.0",
+ "hls-video-element": "^1.5.9",
+ "spotify-audio-element": "^1.0.3",
+ "tiktok-video-element": "^0.1.1",
+ "twitch-video-element": "^0.1.5",
+ "vimeo-video-element": "^1.6.1",
+ "wistia-video-element": "^1.3.5",
+ "youtube-video-element": "^1.8.0"
+ },
+ "devDependencies": {
+ "@biomejs/biome": "1.8.2",
+ "@types/node": "^20.14.6",
+ "@types/react": "^18.3.3",
+ "@types/react-dom": "^18.3.0",
+ "@types/react-test-renderer": "^18.3.0",
+ "auto-changelog": "^2.0.0",
+ "builder": "file:./scripts/builder",
+ "c8": "^8.0.1",
+ "codecov": "^3.6.5",
+ "cross-env": "^7.0.2",
+ "esbuild": "^0.21.5",
+ "npm-run-all": "^4.1.5",
+ "react": "^18.3.1",
+ "react-dom": "^18.3.1",
+ "react-test-renderer": "^18.3.1",
+ "rimraf": "^3.0.2",
+ "screenfull": "^5.0.2",
+ "sinon": "^16.0.0",
+ "tester": "file:./scripts/tester",
+ "typescript": "^5.4.5",
+ "zora": "^5.2.0"
},
+ "auto-changelog": {
+ "breakingPattern": "Breaking changes:"
+ },
+ "sideEffects": [
+ "./test/**/*"
+ ],
"keywords": [
"react",
"media",
@@ -30,114 +97,10 @@
"video",
"audio",
"youtube",
- "facebook",
- "twitch",
- "soundcloud",
- "streamable",
"vimeo",
"wistia",
- "dailymotion",
"hls",
"dash",
"react-component"
- ],
- "author": "Pete Cook (http://github.com/cookpete)",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/CookPete/react-player/issues"
- },
- "homepage": "https://github.com/CookPete/react-player",
- "peerDependencies": {
- "react": "*"
- },
- "devDependencies": {
- "auto-changelog": "^1.2.2",
- "babel-cli": "^6.26.0",
- "babel-core": "^6.16.0",
- "babel-eslint": "^8.2.1",
- "babel-loader": "^7.0.0",
- "babel-plugin-add-module-exports": "^0.2.1",
- "babel-plugin-istanbul": "^4.1.4",
- "babel-plugin-transform-es3-member-expression-literals": "^6.8.0",
- "babel-plugin-transform-es3-property-literals": "^6.8.0",
- "babel-polyfill": "^6.26.0",
- "babel-preset-env": "^1.6.1",
- "babel-preset-react": "^6.16.0",
- "babel-preset-stage-0": "^6.16.0",
- "chai": "^4.0.2",
- "codecov": "^3.0.0",
- "cross-env": "^5.1.3",
- "css-loader": "^0.28.9",
- "exports-loader": "^0.6.3",
- "extract-text-webpack-plugin": "^3.0.2",
- "html-webpack-plugin": "^2.30.1",
- "karma": "^2.0.0",
- "karma-chai": "^0.1.0",
- "karma-chrome-launcher": "^2.0.0",
- "karma-cli": "^1.0.1",
- "karma-coverage": "^1.1.1",
- "karma-mocha": "^1.2.0",
- "karma-mocha-reporter": "^2.2.0",
- "karma-sourcemap-loader": "^0.3.7",
- "karma-webpack": "^2.0.9",
- "mocha": "^4.1.0",
- "postcss-automath": "^1.0.1",
- "postcss-loader": "^2.0.10",
- "postcss-nested": "^3.0.0",
- "postcss-sassy-mixins": "^2.1.0",
- "postcss-simple-vars": "^4.1.0",
- "react": "^16.2.0",
- "react-dom": "^16.2.0",
- "react-hot-loader": "^4.0.0-beta.15",
- "rimraf": "^2.5.4",
- "screenfull": "^3.3.2",
- "snazzy": "^7.0.0",
- "standard": "^11.0.0-beta.0",
- "style-loader": "^0.19.1",
- "webpack": "^3.10.0",
- "webpack-dev-server": "^2.11.0",
- "whatwg-fetch": "^2.0.1"
- },
- "dependencies": {
- "deepmerge": "^2.0.1",
- "load-script": "^1.0.0",
- "prop-types": "^15.5.6"
- },
- "babel": {
- "presets": [
- "env",
- "stage-0",
- "react"
- ],
- "plugins": [
- "react-hot-loader/babel"
- ],
- "env": {
- "production": {
- "plugins": [
- "transform-es3-member-expression-literals",
- "transform-es3-property-literals"
- ]
- },
- "test": {
- "plugins": [
- "istanbul"
- ]
- }
- }
- },
- "postcss": {
- "plugins": {
- "postcss-nested": {},
- "postcss-sassy-mixins": {},
- "postcss-simple-vars": {},
- "postcss-automath": {}
- }
- },
- "standard": {
- "parser": "babel-eslint",
- "ignore": [
- "/dist/*"
- ]
- }
+ ]
}
diff --git a/scripts/builder/builder.js b/scripts/builder/builder.js
new file mode 100755
index 000000000..7c7adc20f
--- /dev/null
+++ b/scripts/builder/builder.js
@@ -0,0 +1,121 @@
+#!/usr/bin/env node
+import { parseArgs } from 'node:util'
+import esbuild from 'esbuild'
+import process from 'node:process'
+import { realpath } from 'node:fs/promises'
+import { fileURLToPath } from 'node:url'
+
+const nodePath = await realpath(process.argv[1])
+const modulePath = await realpath(fileURLToPath(import.meta.url))
+const isCLI = nodePath === modulePath
+
+if (isCLI) cliBuild()
+
+export async function cliBuild () {
+ const { values: args, positionals } = parseArgs({
+ options: {},
+ strict: false,
+ allowPositionals: true
+ })
+
+ await build(positionals, args)
+}
+
+export async function build (positionals, args) {
+ // https://esbuild.github.io/api/#live-reload
+ const livereloadJs = 'new EventSource(\'/esbuild\').addEventListener(\'change\', () => location.reload());'
+
+ // Assigns external modules to global variables.
+ // https://github.com/evanw/esbuild/issues/337
+ const plugins = {
+ 'global-externals': (arg) => {
+ const options = JSON.parse(arg)
+ const filter = new RegExp(`^${Object.keys(options)}$`)
+
+ return {
+ name: 'global-externals-plugin',
+ setup (build) {
+ build.onResolve({ filter }, (args) => ({
+ path: args.path,
+ namespace: 'global-externals-plugin'
+ }))
+ build.onLoad({ filter: /.*/, namespace: 'global-externals-plugin' }, (args) => {
+ const contents = `module.exports = ${options[args.path]}`
+ return { contents }
+ })
+ }
+ }
+ }
+ }
+
+ const options = {
+ logLevel: 'info',
+ entryPoints: positionals,
+ outfile: args.outfile,
+ outdir: args.outfile ? undefined : args.outdir ?? 'dist',
+ target: args.target ?? 'es2019',
+ bundle: args.bundle,
+ minify: args.minify,
+ format: args.format,
+ platform: args.platform,
+ sourcemap: args.sourcemap,
+ splitting: args.splitting,
+ globalName: args['global-name'],
+ external: argsArray(args, 'external'),
+ outExtension: argsObject(args, 'out-extension'),
+ banner: argsObject(args, 'banner'),
+ plugins: Object.entries(argsObject(args, 'plugin'))
+ .map(([name, options]) => plugins[name](options)),
+ define: {
+ 'globalThis.__TEST__': 'false',
+ ...argsObject(args, 'define')
+ },
+ loader: {
+ '.js': 'jsx',
+ ...argsObject(args, 'loader')
+ },
+ footer: {
+ ...argsObject(args, 'footer'),
+ js: (args['footer:js'] ?? '') +
+ (args.livereload ? `\n${livereloadJs}` : '')
+ }
+ }
+
+ if (process.env.NODE_ENV) {
+ options.define['process.env.NODE_ENV'] ||= `"${process.env.NODE_ENV}"`
+ }
+
+ // console.log(options)
+
+ if (args.watch) {
+ const ctx = await esbuild.context(options)
+
+ await ctx.watch()
+
+ if (args.servedir) {
+ await ctx.serve({
+ servedir: args.servedir
+ })
+ }
+
+ return
+ }
+
+ await esbuild.build(options)
+}
+
+function argsArray (args, name) {
+ return Object.keys(args)
+ .filter(k => k.startsWith(`${name}:`))
+ .map(k => k.slice(`${name}:`.length))
+}
+
+function argsObject (args, name) {
+ return Object.keys(args)
+ .filter(k => k.startsWith(`${name}:`))
+ .reduce((acc, k) => {
+ const key = k.slice(`${name}:`.length)
+ acc[key] = args[k]
+ return acc
+ }, {})
+}
diff --git a/scripts/builder/package.json b/scripts/builder/package.json
new file mode 100644
index 000000000..02632261c
--- /dev/null
+++ b/scripts/builder/package.json
@@ -0,0 +1,10 @@
+{
+ "private": true,
+ "name": "builder",
+ "version": "0.0.0",
+ "type": "module",
+ "main": "./builder.js",
+ "bin": {
+ "builder": "./builder.js"
+ }
+}
diff --git a/scripts/tester/package.json b/scripts/tester/package.json
new file mode 100644
index 000000000..476c3ff97
--- /dev/null
+++ b/scripts/tester/package.json
@@ -0,0 +1,10 @@
+{
+ "private": true,
+ "name": "tester",
+ "version": "0.0.0",
+ "type": "module",
+ "main": "./tester.js",
+ "bin": {
+ "tester": "./tester.js"
+ }
+}
diff --git a/scripts/tester/tester.js b/scripts/tester/tester.js
new file mode 100755
index 000000000..1ab897dd1
--- /dev/null
+++ b/scripts/tester/tester.js
@@ -0,0 +1,62 @@
+#!/usr/bin/env node
+import { parseArgs, promisify } from 'node:util';
+import process from 'node:process';
+import { realpath } from 'node:fs/promises';
+import { exec } from 'node:child_process';
+import { fileURLToPath } from 'node:url';
+import { build } from 'builder';
+
+const asyncExec = promisify(exec);
+const nodePath = await realpath(process.argv[1]);
+const modulePath = await realpath(fileURLToPath(import.meta.url));
+const isCLI = nodePath === modulePath;
+
+if (isCLI) cliTest();
+
+export async function cliTest() {
+ console.time('\n⚡ Tested in');
+
+ const { values: args, positionals } = parseArgs({
+ options: {},
+ strict: false,
+ allowPositionals: true,
+ });
+
+ await test(positionals, args);
+
+ console.timeEnd('\n⚡ Tested in');
+}
+
+export async function test(positionals, args) {
+ // Set flag for running tests in development mode, required for `act()`.
+ args['define:process.env.NODE_ENV'] = '"development"';
+
+ // Set flag for adding stubs used in tests.
+ args['define:globalThis.__TEST__'] = 'true';
+
+ await build(positionals, args);
+
+ await cmd(`echo '{"type": "module"}' > ${args.outdir}/package.json`);
+
+ // Ignore test/helpers/ folder for running tests.
+ positionals = positionals.filter((p) => !p.startsWith('test/helpers/'));
+
+ for (let file of positionals) {
+ file = file.replace(/\.tsx?/, '.js');
+ console.log(await cmd(`node --enable-source-maps dist${file}`));
+ }
+}
+
+async function cmd(command, opts = {}) {
+ command = command.trim().replace(/\s+/g, ' ');
+
+ if (opts.verbose) console.log(`${command}`);
+
+ const { stdout, stderr } = await asyncExec(command);
+
+ if (stderr) {
+ console.error(`\n${stderr}`);
+ }
+
+ return stdout.trim();
+}
diff --git a/src/HtmlPlayer.tsx b/src/HtmlPlayer.tsx
new file mode 100644
index 000000000..76aa2e4a9
--- /dev/null
+++ b/src/HtmlPlayer.tsx
@@ -0,0 +1,15 @@
+import React from 'react';
+import { AUDIO_EXTENSIONS } from './patterns.js';
+import type { VideoElementProps } from './types.js';
+
+const HtmlPlayer = React.forwardRef((props, ref) => {
+ const Media = AUDIO_EXTENSIONS.test(`${props.src}`) ? 'audio' : 'video';
+
+ return (
+
+ {props.children}
+
+ );
+});
+
+export default HtmlPlayer;
diff --git a/src/Player.js b/src/Player.js
deleted file mode 100644
index 821e7a3e7..000000000
--- a/src/Player.js
+++ /dev/null
@@ -1,196 +0,0 @@
-import React, { Component } from 'react'
-
-import { propTypes, defaultProps } from './props'
-
-const SEEK_ON_PLAY_EXPIRY = 5000
-
-export default class Player extends Component {
- static displayName = 'Player'
- static propTypes = propTypes
- static defaultProps = defaultProps
- mounted = false
- isReady = false
- isPlaying = false // Track playing state internally to prevent bugs
- isLoading = true // Use isLoading to prevent onPause when switching URL
- startOnPlay = true
- seekOnPlay = null
- onDurationCalled = false
- componentDidMount () {
- this.mounted = true
- this.player.load(this.props.url)
- this.progress()
- }
- componentWillUnmount () {
- clearTimeout(this.progressTimeout)
- if (this.isReady) {
- this.player.stop()
- }
- this.mounted = false
- }
- componentWillReceiveProps (nextProps) {
- // Invoke player methods based on incoming props
- const { url, playing, volume, muted, playbackRate } = this.props
- if (url !== nextProps.url) {
- this.isLoading = true
- this.startOnPlay = true
- this.onDurationCalled = false
- this.player.load(nextProps.url, this.isReady)
- }
- if (!playing && nextProps.playing && !this.isPlaying) {
- this.player.play()
- }
- if (playing && !nextProps.playing && this.isPlaying) {
- this.player.pause()
- }
- if (nextProps.volume !== null) {
- if (volume !== nextProps.volume && !nextProps.muted) {
- this.player.setVolume(nextProps.volume)
- }
- if (muted !== nextProps.muted) {
- this.player.setVolume(nextProps.muted ? 0 : nextProps.volume)
- }
- }
- if (playbackRate !== nextProps.playbackRate && this.player.setPlaybackRate) {
- this.player.setPlaybackRate(nextProps.playbackRate)
- }
- }
- getDuration () {
- if (!this.isReady) return null
- return this.player.getDuration()
- }
- getCurrentTime () {
- if (!this.isReady) return null
- return this.player.getCurrentTime()
- }
- getSecondsLoaded () {
- if (!this.isReady) return null
- return this.player.getSecondsLoaded()
- }
- getInternalPlayer = (key) => {
- if (!this.player) return null
- return this.player[key]
- }
- progress = () => {
- if (this.props.url && this.player && this.isReady) {
- const playedSeconds = this.getCurrentTime() || 0
- const loadedSeconds = this.getSecondsLoaded()
- const duration = this.getDuration()
- if (duration) {
- const progress = {
- playedSeconds,
- played: playedSeconds / duration
- }
- if (loadedSeconds !== null) {
- progress.loadedSeconds = loadedSeconds
- progress.loaded = loadedSeconds / duration
- }
- // Only call onProgress if values have changed
- if (progress.played !== this.prevPlayed || progress.loaded !== this.prevLoaded) {
- this.props.onProgress(progress)
- }
- this.prevPlayed = progress.played
- this.prevLoaded = progress.loaded
- }
- }
- this.progressTimeout = setTimeout(this.progress, this.props.progressFrequency || this.props.progressInterval)
- }
- seekTo (amount) {
- // When seeking before player is ready, store value and seek later
- if (!this.isReady && amount !== 0) {
- this.seekOnPlay = amount
- setTimeout(() => {
- this.seekOnPlay = null
- }, SEEK_ON_PLAY_EXPIRY)
- return
- }
- if (amount > 0 && amount < 1) {
- // Convert fraction to seconds based on duration
- const duration = this.player.getDuration()
- if (!duration) {
- console.warn('ReactPlayer: could not seek using fraction – duration not yet available')
- return
- }
- this.player.seekTo(duration * amount)
- return
- }
- this.player.seekTo(amount)
- }
- onReady = () => {
- if (!this.mounted) return
- this.isReady = true
- this.isLoading = false
- const { onReady, playing, volume, muted } = this.props
- onReady()
- if (muted || volume !== null) {
- this.player.setVolume(muted ? 0 : volume)
- }
- if (playing) {
- this.player.play()
- }
- this.onDurationCheck()
- }
- onPlay = () => {
- this.isPlaying = true
- this.isLoading = false
- const { onStart, onPlay, playbackRate } = this.props
- if (this.startOnPlay) {
- if (this.player.setPlaybackRate) {
- this.player.setPlaybackRate(playbackRate)
- }
- onStart()
- this.startOnPlay = false
- }
- onPlay()
- if (this.seekOnPlay) {
- this.seekTo(this.seekOnPlay)
- this.seekOnPlay = null
- }
- this.onDurationCheck()
- }
- onPause = (e) => {
- this.isPlaying = false
- if (!this.isLoading) {
- this.props.onPause(e)
- }
- }
- onEnded = () => {
- const { activePlayer, loop, onEnded } = this.props
- if (activePlayer.loopOnEnded && loop) {
- this.seekTo(0)
- }
- if (!loop) {
- this.isPlaying = false
- }
- onEnded()
- }
- onDurationCheck = () => {
- clearTimeout(this.durationCheckTimeout)
- const duration = this.getDuration()
- if (duration) {
- if (!this.onDurationCalled) {
- this.props.onDuration(duration)
- this.onDurationCalled = true
- }
- } else {
- this.durationCheckTimeout = setTimeout(this.onDurationCheck, 100)
- }
- }
- ref = player => {
- if (player) {
- this.player = player
- }
- }
- render () {
- const Player = this.props.activePlayer
- return (
-
- )
- }
-}
diff --git a/src/Player.tsx b/src/Player.tsx
new file mode 100644
index 000000000..c88fab27e
--- /dev/null
+++ b/src/Player.tsx
@@ -0,0 +1,120 @@
+import React, { useCallback, useEffect, useRef } from 'react';
+import type { SyntheticEvent } from 'react';
+import type { PlayerEntry } from './players.js';
+import type { ReactPlayerProps } from './types.js';
+
+type Player = React.ForwardRefExoticComponent<
+ ReactPlayerProps & {
+ activePlayer: PlayerEntry['player'];
+ }
+>;
+
+const Player: Player = React.forwardRef((props, ref) => {
+ const { playing, pip } = props;
+
+ const Player = props.activePlayer;
+ const playerRef = useRef(null);
+ const startOnPlayRef = useRef(true);
+
+ useEffect(() => {
+ if (!playerRef.current) return;
+
+ // Use strict equality for `playing`, if it's nullish, don't do anything.
+ if (playerRef.current.paused && playing === true) {
+ playerRef.current.play();
+ }
+ if (!playerRef.current.paused && playing === false) {
+ playerRef.current.pause();
+ }
+
+ playerRef.current.playbackRate = props.playbackRate ?? 1;
+ playerRef.current.volume = props.volume ?? 1;
+ });
+
+ useEffect(() => {
+ if (!playerRef.current || !globalThis.document) return;
+
+ if (pip && !document.pictureInPictureElement) {
+ try {
+ playerRef.current.requestPictureInPicture?.();
+ } catch (err) {}
+ }
+
+ if (!pip && document.pictureInPictureElement) {
+ try {
+ // @ts-ignore
+ playerRef.current.exitPictureInPicture?.();
+ document.exitPictureInPicture?.();
+ } catch (err) {}
+ }
+ }, [pip]);
+
+ const handleLoadStart = (event: SyntheticEvent) => {
+ startOnPlayRef.current = true;
+ props.onReady?.();
+ props.onLoadStart?.(event);
+ };
+
+ const handlePlay = (event: SyntheticEvent) => {
+ if (startOnPlayRef.current) {
+ startOnPlayRef.current = false;
+ props.onStart?.(event);
+ }
+ props.onPlay?.(event);
+ };
+
+ if (!Player) {
+ return null;
+ }
+
+ // Filter out ReactPlayer-specific event handlers to prevent them from being passed down
+ // to the underlying HTML video element, which causes React warnings about unknown
+ // event handler properties
+ const eventProps: Record = {};
+ const reactPlayerEventHandlers = ['onReady', 'onStart'];
+
+ for (const key in props) {
+ if (key.startsWith('on') && !reactPlayerEventHandlers.includes(key)) {
+ eventProps[key] = props[key as keyof ReactPlayerProps];
+ }
+ }
+
+ return (
+ {
+ playerRef.current = node;
+
+ if (typeof ref === 'function') {
+ ref(node);
+ } else if (ref !== null) {
+ ref.current = node;
+ }
+ },
+ [ref]
+ )}
+ src={props.src}
+ crossOrigin={props.crossOrigin}
+ preload={props.preload}
+ controls={props.controls}
+ muted={props.muted}
+ autoPlay={props.autoPlay}
+ loop={props.loop}
+ playsInline={props.playsInline}
+ disableRemotePlayback={props.disableRemotePlayback}
+ config={props.config}
+ onLoadStart={handleLoadStart}
+ onPlay={handlePlay}
+ >
+ {props.children}
+
+ );
+});
+
+Player.displayName = 'Player';
+
+export default Player;
diff --git a/src/Preview.tsx b/src/Preview.tsx
new file mode 100644
index 000000000..d1ef176ab
--- /dev/null
+++ b/src/Preview.tsx
@@ -0,0 +1,124 @@
+import React, { useState, useEffect } from 'react';
+
+import type { PreviewProps } from './types';
+
+const ICON_SIZE = '64px';
+
+const cache: Record = {};
+
+const Preview = ({
+ src,
+ light,
+ oEmbedUrl,
+ onClickPreview,
+ playIcon,
+ previewTabIndex,
+ previewAriaLabel,
+}: PreviewProps) => {
+ const [image, setImage] = useState(null);
+
+ useEffect(() => {
+ if (!src || !light || !oEmbedUrl) return;
+ fetchImage({ src, light, oEmbedUrl });
+ }, [src, light, oEmbedUrl]);
+
+ const fetchImage = async ({
+ src,
+ light,
+ oEmbedUrl,
+ }: {
+ src: string;
+ light: boolean | string | React.ReactElement;
+ oEmbedUrl: string;
+ }) => {
+ if (React.isValidElement(light)) {
+ return;
+ }
+ if (typeof light === 'string') {
+ setImage(light);
+ return;
+ }
+ if (cache[src]) {
+ setImage(cache[src]);
+ return;
+ }
+ setImage(null);
+
+ const response = await fetch(oEmbedUrl.replace('{url}', src));
+ const data = await response.json();
+
+ if (data.thumbnail_url) {
+ const fetchedImage = data.thumbnail_url
+ .replace('height=100', 'height=480')
+ .replace('-d_295x166', '-d_640');
+ setImage(fetchedImage);
+ cache[src] = fetchedImage;
+ }
+ };
+
+ const handleKeyPress = (e: React.KeyboardEvent) => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ onClickPreview?.(e);
+ }
+ };
+
+ const handleClick = (e: React.MouseEvent) => {
+ onClickPreview?.(e);
+ };
+
+ const isElement = React.isValidElement(light);
+
+ const flexCenter = {
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ };
+
+ const styles = {
+ preview: {
+ width: '100%',
+ height: '100%',
+ backgroundImage: image && !isElement ? `url(http://github.com/$%7Bimage%7D)` : undefined,
+ backgroundSize: 'cover',
+ backgroundPosition: 'center',
+ cursor: 'pointer',
+ ...flexCenter,
+ },
+ shadow: {
+ background: 'radial-gradient(rgb(0, 0, 0, 0.3), rgba(0, 0, 0, 0) 60%)',
+ borderRadius: ICON_SIZE,
+ width: ICON_SIZE,
+ height: ICON_SIZE,
+ position: isElement ? 'absolute' as const : undefined,
+ ...flexCenter,
+ },
+ playIcon: {
+ borderStyle: 'solid',
+ borderWidth: '16px 0 16px 26px',
+ borderColor: 'transparent transparent transparent white',
+ marginLeft: '7px',
+ },
+ };
+
+ const defaultPlayIcon = (
+
+ );
+
+ return (
+
+ {isElement ? light : null}
+ {playIcon || defaultPlayIcon}
+
+ );
+};
+
+export default Preview;
diff --git a/src/ReactPlayer.js b/src/ReactPlayer.js
deleted file mode 100644
index 63213edee..000000000
--- a/src/ReactPlayer.js
+++ /dev/null
@@ -1,100 +0,0 @@
-import React, { Component } from 'react'
-
-import { propTypes, defaultProps, DEPRECATED_CONFIG_PROPS } from './props'
-import { getConfig, omit, isEqual } from './utils'
-import players from './players'
-import Player from './Player'
-import { FilePlayer } from './players/FilePlayer'
-import renderPreloadPlayers from './preload'
-
-const SUPPORTED_PROPS = Object.keys(propTypes)
-
-export default class ReactPlayer extends Component {
- static displayName = 'ReactPlayer'
- static propTypes = propTypes
- static defaultProps = defaultProps
- static canPlay = url => {
- for (let Player of players) {
- if (Player.canPlay(url)) {
- return true
- }
- }
- return false
- }
- config = getConfig(this.props, defaultProps, true)
- componentDidMount () {
- if (this.props.progressFrequency) {
- const message = 'ReactPlayer: %cprogressFrequency%c is deprecated, please use %cprogressInterval%c instead'
- console.warn(message, 'font-weight: bold', '', 'font-weight: bold', '')
- }
- }
- shouldComponentUpdate (nextProps) {
- return !isEqual(this.props, nextProps)
- }
- componentWillUpdate (nextProps) {
- this.config = getConfig(nextProps, defaultProps)
- }
- getDuration = () => {
- if (!this.player) return null
- return this.player.getDuration()
- }
- getCurrentTime = () => {
- if (!this.player) return null
- return this.player.getCurrentTime()
- }
- getInternalPlayer = (key = 'player') => {
- if (!this.player) return null
- return this.player.getInternalPlayer(key)
- }
- seekTo = fraction => {
- if (!this.player) return null
- this.player.seekTo(fraction)
- }
- getActivePlayer (url) {
- for (let Player of players) {
- if (Player.canPlay(url)) {
- return Player
- }
- }
- // Fall back to FilePlayer if nothing else can play the URL
- return FilePlayer
- }
- wrapperRef = wrapper => {
- this.wrapper = wrapper
- }
- activePlayerRef = player => {
- this.player = player
- }
- renderActivePlayer (url) {
- if (!url) return null
- const activePlayer = this.getActivePlayer(url)
- return (
-
- )
- }
- sortPlayers (a, b) {
- // Retain player order to prevent weird iframe behaviour when switching players
- if (a && b) {
- return a.key < b.key ? -1 : 1
- }
- return 0
- }
- render () {
- const { url, style, width, height, wrapper: Wrapper } = this.props
- const otherProps = omit(this.props, SUPPORTED_PROPS, DEPRECATED_CONFIG_PROPS)
- const activePlayer = this.renderActivePlayer(url)
- const preloadPlayers = renderPreloadPlayers(url, this.config)
- const players = [ activePlayer, ...preloadPlayers ].sort(this.sortPlayers)
- return (
-
- {players}
-
- )
- }
-}
diff --git a/src/ReactPlayer.tsx b/src/ReactPlayer.tsx
new file mode 100644
index 000000000..0b452128b
--- /dev/null
+++ b/src/ReactPlayer.tsx
@@ -0,0 +1,143 @@
+import React, { lazy, Suspense, useEffect, useState } from 'react';
+
+import { defaultProps } from './props.js';
+import Player from './Player.js';
+
+import type { ReactPlayerProps } from './types.js';
+import type { PlayerEntry } from './players.js';
+
+const Preview = lazy(() => import(/* webpackChunkName: 'reactPlayerPreview' */ './Preview.js'));
+const customPlayers: PlayerEntry[] = [];
+
+type ReactPlayer = React.ForwardRefExoticComponent<
+ Omit & React.RefAttributes
+> &
+ Partial<{
+ addCustomPlayer: (player: PlayerEntry) => void;
+ removeCustomPlayers: () => void;
+ canPlay: (src: string) => boolean;
+ canEnablePIP: (src: string) => boolean;
+ }>;
+
+export const createReactPlayer = (players: PlayerEntry[], playerFallback: PlayerEntry) => {
+ const getActivePlayer = (src?: string) => {
+ for (const player of [...customPlayers, ...players]) {
+ if (src && player.canPlay(src)) {
+ return player;
+ }
+ }
+ if (playerFallback) {
+ return playerFallback;
+ }
+ return null;
+ };
+
+ const ReactPlayer: ReactPlayer = React.forwardRef((_props, ref) => {
+ const props = { ...defaultProps, ..._props };
+
+ const { src, slot, className, style, width, height, fallback, wrapper } = props;
+ const [showPreview, setShowPreview] = useState(!!props.light);
+
+ useEffect(() => {
+ if (props.light) {
+ setShowPreview(true);
+ } else {
+ setShowPreview(false);
+ }
+ }, [props.light]);
+
+ const handleClickPreview = (e: React.SyntheticEvent) => {
+ setShowPreview(false);
+ props.onClickPreview?.(e);
+ };
+
+ const renderPreview = (src?: string) => {
+ if (!src) return null;
+
+ const { light, playIcon, previewTabIndex, oEmbedUrl, previewAriaLabel } = props;
+ return (
+
+ );
+ };
+
+ const renderActivePlayer = (src?: string) => {
+ const player = getActivePlayer(src);
+ if (!player) return null;
+
+ const { style, width, height, wrapper } = props;
+ const config = props.config?.[player.key as keyof ReactPlayerProps['config']];
+
+ return (
+
+ );
+ };
+
+ const Wrapper: ReactPlayerProps['wrapper'] = wrapper == null ? ForwardChildren : wrapper;
+
+ const UniversalSuspense = fallback === false ? ForwardChildren : Suspense;
+
+ return (
+
+
+ {showPreview ? renderPreview(src) : renderActivePlayer(src)}
+
+
+ );
+ });
+
+ ReactPlayer.displayName = 'ReactPlayer';
+
+ ReactPlayer.addCustomPlayer = (player: PlayerEntry) => {
+ customPlayers.push(player);
+ };
+
+ ReactPlayer.removeCustomPlayers = () => {
+ customPlayers.length = 0;
+ };
+
+ ReactPlayer.canPlay = (src?: string) => {
+ if (src) {
+ for (const Player of [...customPlayers, ...players]) {
+ if (Player.canPlay(src)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ ReactPlayer.canEnablePIP = (src?: string) => {
+ if (src) {
+ for (const Player of [...customPlayers, ...players]) {
+ if (Player.canPlay(src) && Player.canEnablePIP?.()) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ return ReactPlayer;
+};
+
+const ForwardChildren = ({ children }: { children?: React.ReactNode }) => children;
diff --git a/src/demo/.scss-lint.yml b/src/demo/.scss-lint.yml
deleted file mode 100644
index b3e70a417..000000000
--- a/src/demo/.scss-lint.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-linters:
- PropertySortOrder:
- order: smacss
- PropertySpelling:
- extra_properties:
- - composes
diff --git a/src/demo/App.js b/src/demo/App.js
deleted file mode 100644
index 8cce9049d..000000000
--- a/src/demo/App.js
+++ /dev/null
@@ -1,331 +0,0 @@
-import React, { Component } from 'react'
-import { findDOMNode } from 'react-dom'
-import { hot } from 'react-hot-loader'
-import screenfull from 'screenfull'
-
-import './reset.css'
-import './defaults.css'
-import './range.css'
-import './App.css'
-
-import { version } from '../../package.json'
-import ReactPlayer from '../ReactPlayer'
-import Duration from './Duration'
-
-const MULTIPLE_SOURCES = [
- { src: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4', type: 'video/mp4' },
- { src: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv', type: 'video/ogv' },
- { src: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm', type: 'video/webm' }
-]
-
-class App extends Component {
- state = {
- url: null,
- playing: true,
- volume: 0.8,
- muted: false,
- played: 0,
- loaded: 0,
- duration: 0,
- playbackRate: 1.0,
- loop: false
- }
- load = url => {
- this.setState({
- url,
- played: 0,
- loaded: 0
- })
- }
- playPause = () => {
- this.setState({ playing: !this.state.playing })
- }
- stop = () => {
- this.setState({ url: null, playing: false })
- }
- toggleLoop = () => {
- this.setState({ loop: !this.state.loop })
- }
- setVolume = e => {
- this.setState({ volume: parseFloat(e.target.value) })
- }
- toggleMuted = () => {
- this.setState({ muted: !this.state.muted })
- }
- setPlaybackRate = e => {
- this.setState({ playbackRate: parseFloat(e.target.value) })
- }
- onPlay = () => {
- console.log('onPlay')
- this.setState({ playing: true })
- }
- onPause = () => {
- console.log('onPause')
- this.setState({ playing: false })
- }
- onSeekMouseDown = e => {
- this.setState({ seeking: true })
- }
- onSeekChange = e => {
- this.setState({ played: parseFloat(e.target.value) })
- }
- onSeekMouseUp = e => {
- this.setState({ seeking: false })
- this.player.seekTo(parseFloat(e.target.value))
- }
- onProgress = state => {
- console.log('onProgress', state)
- // We only want to update time slider if we are not currently seeking
- if (!this.state.seeking) {
- this.setState(state)
- }
- }
- onEnded = () => {
- console.log('onEnded')
- this.setState({ playing: this.state.loop })
- }
- onDuration = (duration) => {
- console.log('onDuration', duration)
- this.setState({ duration })
- }
- onClickFullscreen = () => {
- screenfull.request(findDOMNode(this.player))
- }
- renderLoadButton = (url, label) => {
- return (
- this.load(url)}>
- {label}
-
- )
- }
- ref = player => {
- this.player = player
- }
- render () {
- const { url, playing, volume, muted, loop, played, loaded, duration, playbackRate } = this.state
- const SEPARATOR = ' · '
-
- return (
-
-
- ReactPlayer Demo
-
- console.log('onReady')}
- onStart={() => console.log('onStart')}
- onPlay={this.onPlay}
- onPause={this.onPause}
- onBuffer={() => console.log('onBuffer')}
- onSeek={e => console.log('onSeek', e)}
- onEnded={this.onEnded}
- onError={e => console.log('onError', e)}
- onProgress={this.onProgress}
- onDuration={this.onDuration}
- />
-
-
-
-
-
-
-
- YouTube
-
- {this.renderLoadButton('https://www.youtube.com/watch?v=oUFJJNQGwhk', 'Test A')}
- {this.renderLoadButton('https://www.youtube.com/watch?v=jNgP6d9HraI', 'Test B')}
-
-
-
- SoundCloud
-
- {this.renderLoadButton('https://soundcloud.com/miami-nights-1984/accelerated', 'Test A')}
- {this.renderLoadButton('https://soundcloud.com/tycho/tycho-awake', 'Test B')}
-
-
-
- Facebook
-
- {this.renderLoadButton('https://www.facebook.com/facebook/videos/10153231379946729/', 'Test A')}
- {this.renderLoadButton('https://www.facebook.com/FacebookDevelopers/videos/10152454700553553/', 'Test B')}
-
-
-
- Vimeo
-
- {this.renderLoadButton('https://vimeo.com/90509568', 'Test A')}
- {this.renderLoadButton('https://vimeo.com/169599296', 'Test B')}
-
-
-
- Twitch
-
- {this.renderLoadButton('https://www.twitch.tv/videos/106400740', 'Test A')}
- {this.renderLoadButton('https://www.twitch.tv/videos/12783852', 'Test B')}
- {this.renderLoadButton('https://www.twitch.tv/kronovi', 'Test C')}
-
-
-
- Streamable
-
- {this.renderLoadButton('https://streamable.com/moo', 'Test A')}
- {this.renderLoadButton('https://streamable.com/ifjh', 'Test B')}
-
-
-
- Wistia
-
- {this.renderLoadButton('https://home.wistia.com/medias/e4a27b971d', 'Test A')}
- {this.renderLoadButton('https://home.wistia.com/medias/29b0fbf547', 'Test B')}
-
-
-
- DailyMotion
-
- {this.renderLoadButton('https://www.dailymotion.com/video/x5e9eog', 'Test A')}
- {this.renderLoadButton('https://www.dailymotion.com/video/x61xx3z', 'Test B')}
-
-
-
- Mixcloud
-
- {this.renderLoadButton('https://www.mixcloud.com/mixcloud/meet-the-curators/', 'Test A')}
- {this.renderLoadButton('https://www.mixcloud.com/mixcloud/mixcloud-curates-4-mary-anne-hobbs-in-conversation-with-dan-deacon/', 'Test B')}
-
-
-
- Files
-
- {this.renderLoadButton('http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4', 'mp4')}
- {this.renderLoadButton('http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv', 'ogv')}
- {this.renderLoadButton('http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm', 'webm')}
- {this.renderLoadButton('https://storage.googleapis.com/media-session/elephants-dream/the-wires.mp3', 'mp3')}
- {this.renderLoadButton(MULTIPLE_SOURCES, 'Multiple')}
- {this.renderLoadButton('https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8', 'HLS (m3u8)')}
- {this.renderLoadButton('http://dash.edgesuite.net/envivio/EnvivioDash3/manifest.mpd', 'DASH (mpd)')}
-
-
-
- Custom URL
-
- { this.urlInput = input }} type='text' placeholder='Enter URL' />
- this.setState({ url: this.urlInput.value })}>Load
-
-
-
-
- State
-
-
-
- url
-
- {(url instanceof Array ? 'Multiple' : url) || 'null'}
-
-
-
- playing
- {playing ? 'true' : 'false'}
-
-
- volume
- {volume.toFixed(3)}
-
-
- played
- {played.toFixed(3)}
-
-
- loaded
- {loaded.toFixed(3)}
-
-
- duration
-
-
-
- elapsed
-
-
-
- remaining
-
-
-
-
-
- Version {version}
- {SEPARATOR}
- GitHub
- {SEPARATOR}
- npm
-
-
- )
- }
-}
-
-export default hot(module)(App)
diff --git a/src/demo/Duration.js b/src/demo/Duration.js
deleted file mode 100644
index d8fcb6e7e..000000000
--- a/src/demo/Duration.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import React from 'react'
-
-export default function Duration ({ className, seconds }) {
- return (
-
- {format(seconds)}
-
- )
-}
-
-function format (seconds) {
- const date = new Date(seconds * 1000)
- const hh = date.getUTCHours()
- const mm = date.getUTCMinutes()
- const ss = pad(date.getUTCSeconds())
- if (hh) {
- return `${hh}:${pad(mm)}:${ss}`
- }
- return `${mm}:${ss}`
-}
-
-function pad (string) {
- return ('0' + string).slice(-2)
-}
diff --git a/src/demo/defaults.css b/src/demo/defaults.css
deleted file mode 100644
index 055dc4815..000000000
--- a/src/demo/defaults.css
+++ /dev/null
@@ -1,73 +0,0 @@
-$light-grey: #eee;
-
-body {
- margin-right: 10px;
- margin-left: 10px;
- font-size: 14px;
- line-height: 1.4;
-}
-
-body,
-h1,
-h2,
-h3 {
- font-weight: 300;
- margin-bottom: 1em;
-}
-
-h1 { font-size: 20px; }
-h2 { font-size: 16px; margin-top: 1em; }
-
-table,
-progress {
- width: 100%;
-}
-
-th,
-td,
-[type=text],
-textarea {
- margin-right: 5px;
- padding: 3px 6px;
-}
-
-th {
- width: 10%;
- font-weight: 500;
- text-align: right;
- white-space: nowrap;
- vertical-align: middle;
-}
-
-[type=text],
-textarea {
- width: 200px;
- padding: 5px;
- border: 1px solid darken($light-grey, 20);
- border-radius: 3px;
- outline: 0;
-
- &:focus {
- border-color: darken($light-grey, 30);
- box-shadow: 0 0 5px $light-grey;
- }
-}
-
-textarea {
- height: 100px;
- font-family: monospace;
- vertical-align: bottom;
-}
-
-button {
- margin: 3px;
- padding: 6px 12px;
- border: 0;
- border-radius: 3px;
- outline: 0;
- background-color: $light-grey;
-
- &:focus { background: darken($light-grey, 5); }
- &:hover { background: darken($light-grey, 10); }
- &:active { background: darken($light-grey, 15); }
-}
diff --git a/src/demo/index.js b/src/demo/index.js
deleted file mode 100644
index beff23619..000000000
--- a/src/demo/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from 'react'
-import { render } from 'react-dom'
-import App from './App'
-
-const container = document.getElementById('app')
-
-render( , container)
diff --git a/src/demo/range.css b/src/demo/range.css
deleted file mode 100644
index 0621bfaaf..000000000
--- a/src/demo/range.css
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-// Styling Cross-Browser Compatible Range Inputs with Sass
-// Github: https://github.com/darlanrod/input-range-sass
-// Author: Darlan Rod https://github.com/darlanrod
-// Version 1.4.1
-// MIT License
-*/
-
-$track-color: #eee;
-$thumb-color: #666;
-
-$thumb-radius: 12px;
-$thumb-height: 12px;
-$thumb-width: 12px;
-$thumb-shadow-size: 0;
-$thumb-shadow-blur: 0;
-$thumb-shadow-color: #111;
-$thumb-border-width: 0;
-$thumb-border-color: #fff;
-
-$track-width: 100%;
-$track-height: 10px;
-$track-shadow-size: 0;
-$track-shadow-blur: 0;
-$track-shadow-color: #222;
-$track-border-width: 0;
-$track-border-color: #000;
-
-$track-radius: 5px;
-$contrast: -5%;
-
-@mixin shadow($shadow-size, $shadow-blur, $shadow-color) {
- box-shadow: $shadow-size $shadow-size $shadow-blur $shadow-color, 0 0 $shadow-size lighten($shadow-color, 5%);
-}
-
-@mixin track {
- cursor: pointer;
- height: $track-height;
- transition: all .2s ease;
- width: $track-width;
-}
-
-@mixin thumb {
- @include shadow($thumb-shadow-size, $thumb-shadow-blur, $thumb-shadow-color);
- background: $thumb-color;
- border: $thumb-border-width solid $thumb-border-color;
- border-radius: $thumb-radius;
- cursor: pointer;
- height: $thumb-height;
- width: $thumb-width;
-}
-
-[type='range'] {
- -webkit-appearance: none;
- margin: $thumb-height / 2 0;
- width: $track-width;
-
- &:focus {
- outline: 0;
-
- &::-webkit-slider-runnable-track {
- background: lighten($track-color, $contrast);
- }
-
- &::-ms-fill-lower {
- background: $track-color;
- }
-
- &::-ms-fill-upper {
- background: lighten($track-color, $contrast);
- }
- }
-
- &::-webkit-slider-runnable-track {
- @include track;
- @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color);
- background: $track-color;
- border: $track-border-width solid $track-border-color;
- border-radius: $track-radius;
- }
-
- &::-webkit-slider-thumb {
- @include thumb;
- -webkit-appearance: none;
- margin-top: ((-$track-border-width * 2 + $track-height) / 2) - ($thumb-height / 2);
- }
-
- &::-moz-range-track {
- @include track;
- @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color);
- background: $track-color;
- border: $track-border-width solid $track-border-color;
- border-radius: $track-radius;
- }
-
- &::-moz-range-thumb {
- @include thumb;
- }
-
- &::-ms-track {
- @include track;
- background: transparent;
- border-color: transparent;
- border-width: ($thumb-height / 2) 0;
- color: transparent;
- }
-
- &::-ms-fill-lower {
- @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color);
- background: darken($track-color, $contrast);
- border: $track-border-width solid $track-border-color;
- border-radius: $track-radius * 2;
- }
-
- &::-ms-fill-upper {
- @include shadow($track-shadow-size, $track-shadow-blur, $track-shadow-color);
- background: $track-color;
- border: $track-border-width solid $track-border-color;
- border-radius: $track-radius * 2;
- }
-
- &::-ms-thumb {
- @include thumb;
- margin-top: 0;
- }
-}
\ No newline at end of file
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 000000000..c76b8e78e
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,9 @@
+'use client';
+
+import players from './players.js';
+import { createReactPlayer } from './ReactPlayer.js';
+
+// Fall back to HtmlPlayer if nothing else can play the URL
+const fallback = players[players.length - 1];
+
+export default createReactPlayer(players, fallback);
diff --git a/src/patterns.ts b/src/patterns.ts
new file mode 100644
index 000000000..37809c317
--- /dev/null
+++ b/src/patterns.ts
@@ -0,0 +1,45 @@
+export const AUDIO_EXTENSIONS =
+ /\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\?)/i;
+export const VIDEO_EXTENSIONS = /\.(mp4|og[gv]|webm|mov|m4v)(#t=[,\d+]+)?($|\?)/i;
+export const HLS_EXTENSIONS = /\.(m3u8)($|\?)/i;
+export const DASH_EXTENSIONS = /\.(mpd)($|\?)/i;
+// Match Mux m3u8 URLs without the extension so users can use hls.js with Mux by adding the `.m3u8` extension. https://regexr.com/7um5f
+export const MATCH_URL_MUX = /stream\.mux\.com\/(?!\w+\.m3u8)(\w+)/;
+export const MATCH_URL_YOUTUBE =
+ /(?:youtu\.be\/|youtube(?:-nocookie|education)?\.com\/(?:embed\/|v\/|watch\/|watch\?v=|watch\?.+&v=|shorts\/|live\/))((\w|-){11})|youtube\.com\/playlist\?list=|youtube\.com\/user\//;
+export const MATCH_URL_VIMEO = /vimeo\.com\/(?!progressive_redirect).+/;
+export const MATCH_URL_WISTIA =
+ /(?:wistia\.(?:com|net)|wi\.st)\/(?:medias|embed)\/(?:iframe\/)?([^?]+)/;
+export const MATCH_URL_SPOTIFY = /open\.spotify\.com\/(\w+)\/(\w+)/i;
+export const MATCH_URL_TWITCH = /(?:www\.|go\.)?twitch\.tv\/([a-zA-Z0-9_]+|(videos?\/|\?video=)\d+)($|\?)/;
+export const MATCH_URL_TIKTOK = /tiktok\.com\/(?:player\/v1\/|share\/video\/|@[^/]+\/video\/)([0-9]+)/;
+
+const canPlayFile = (url: string, test: (u: string) => boolean) => {
+ if (Array.isArray(url)) {
+ for (const item of url) {
+ if (typeof item === 'string' && canPlayFile(item, test)) {
+ return true;
+ }
+ if (canPlayFile(item.src, test)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ return test(url);
+};
+
+export const canPlay = {
+ html: (url: string) =>
+ canPlayFile(url, (u: string) => AUDIO_EXTENSIONS.test(u) || VIDEO_EXTENSIONS.test(u)),
+ hls: (url: string) => canPlayFile(url, (u: string) => HLS_EXTENSIONS.test(u)),
+ dash: (url: string) => canPlayFile(url, (u: string) => DASH_EXTENSIONS.test(u)),
+ mux: (url: string) => MATCH_URL_MUX.test(url),
+ youtube: (url: string) => MATCH_URL_YOUTUBE.test(url),
+ vimeo: (url: string) =>
+ MATCH_URL_VIMEO.test(url) && !VIDEO_EXTENSIONS.test(url) && !HLS_EXTENSIONS.test(url),
+ wistia: (url: string) => MATCH_URL_WISTIA.test(url),
+ spotify: (url: string) => MATCH_URL_SPOTIFY.test(url),
+ twitch: (url: string) => MATCH_URL_TWITCH.test(url),
+ tiktok: (url: string) => MATCH_URL_TIKTOK.test(url),
+};
diff --git a/src/players.ts b/src/players.ts
new file mode 100644
index 000000000..10a4d1e66
--- /dev/null
+++ b/src/players.ts
@@ -0,0 +1,105 @@
+import { lazy } from 'react';
+import { canPlay } from './patterns.js';
+import type { VideoElementProps } from './types.js';
+import HtmlPlayer from './HtmlPlayer.js';
+
+export type PlayerEntry = {
+ key: string;
+ name: string;
+ canPlay: (src: string) => boolean;
+ canEnablePIP?: () => boolean;
+ player?:
+ | React.ComponentType
+ | React.LazyExoticComponent>;
+};
+
+const Players: PlayerEntry[] = [
+ {
+ key: 'hls',
+ name: 'hls.js',
+ canPlay: canPlay.hls,
+ canEnablePIP: () => true,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerHls' */ 'hls-video-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'dash',
+ name: 'dash.js',
+ canPlay: canPlay.dash,
+ canEnablePIP: () => true,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerDash' */ 'dash-video-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'mux',
+ name: 'Mux',
+ canPlay: canPlay.mux,
+ canEnablePIP: () => true,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerMux' */ '@mux/mux-player-react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'youtube',
+ name: 'YouTube',
+ canPlay: canPlay.youtube,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerYouTube' */ 'youtube-video-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'vimeo',
+ name: 'Vimeo',
+ canPlay: canPlay.vimeo,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerVimeo' */ 'vimeo-video-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'wistia',
+ name: 'Wistia',
+ canPlay: canPlay.wistia,
+ canEnablePIP: () => true,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerWistia' */ 'wistia-video-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'spotify',
+ name: 'Spotify',
+ canPlay: canPlay.spotify,
+ canEnablePIP: () => false,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerSpotify' */ 'spotify-audio-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'twitch',
+ name: 'Twitch',
+ canPlay: canPlay.twitch,
+ canEnablePIP: () => false,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerTwitch' */ 'twitch-video-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'tiktok',
+ name: 'TikTok',
+ canPlay: canPlay.tiktok,
+ canEnablePIP: () => false,
+ player: lazy(
+ () => import(/* webpackChunkName: 'reactPlayerTiktok' */ 'tiktok-video-element/react')
+ ) as React.LazyExoticComponent>,
+ },
+ {
+ key: 'html',
+ name: 'html',
+ canPlay: canPlay.html,
+ canEnablePIP: () => true,
+ player: HtmlPlayer,
+ },
+];
+
+export default Players;
diff --git a/src/players/DailyMotion.js b/src/players/DailyMotion.js
deleted file mode 100644
index f25e62f18..000000000
--- a/src/players/DailyMotion.js
+++ /dev/null
@@ -1,104 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK, parseStartTime } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = 'https://api.dmcdn.net/all.js'
-const SDK_GLOBAL = 'DM'
-const SDK_GLOBAL_READY = 'dmAsyncInit'
-const MATCH_URL = /dailymotion\.com\/(video|hub)\/([^_]+)[^#]*(#video=([^_&]+))?/
-
-export class DailyMotion extends Component {
- static displayName = 'DailyMotion'
- static canPlay = url => MATCH_URL.test(url)
- static loopOnEnded = true
-
- callPlayer = callPlayer
- parseId (url) {
- const m = url.match(MATCH_URL)
- return m[4] || m[2]
- }
- load (url) {
- const { controls, config, onError, playing } = this.props
- const id = this.parseId(url)
- if (this.player) {
- this.player.load(id, {
- start: parseStartTime(url),
- autoplay: playing
- })
- return
- }
- getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, DM => DM.player).then(DM => {
- if (!this.container) return
- const Player = DM.player
- this.player = new Player(this.container, {
- width: '100%',
- height: '100%',
- video: id,
- params: {
- controls: controls,
- autoplay: this.props.playing,
- start: parseStartTime(url),
- origin: window.location.origin,
- ...config.dailymotion.params
- },
- events: {
- apiready: this.props.onReady,
- seeked: () => this.props.onSeek(this.player.currentTime),
- video_end: this.props.onEnded,
- durationchange: this.onDurationChange,
- pause: this.props.onPause,
- playing: this.props.onPlay,
- waiting: this.props.onBuffer,
- error: event => onError(event)
- }
- })
- }, onError)
- }
- onDurationChange = () => {
- const duration = this.getDuration()
- this.props.onDuration(duration)
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- // Nothing to do
- }
- seekTo (seconds) {
- this.callPlayer('seek', seconds)
- }
- setVolume (fraction) {
- this.callPlayer('setVolume', fraction)
- }
- getDuration () {
- return this.player.duration || null
- }
- getCurrentTime () {
- return this.player.currentTime
- }
- getSecondsLoaded () {
- return this.player.bufferedTime
- }
- ref = container => {
- this.container = container
- }
- render () {
- const style = {
- width: '100%',
- height: '100%',
- backgroundColor: 'black',
- ...this.props.style
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(DailyMotion)
diff --git a/src/players/Facebook.js b/src/players/Facebook.js
deleted file mode 100644
index 0c19a9829..000000000
--- a/src/players/Facebook.js
+++ /dev/null
@@ -1,90 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK, randomString } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = '//connect.facebook.net/en_US/sdk.js'
-const SDK_GLOBAL = 'FB'
-const SDK_GLOBAL_READY = 'fbAsyncInit'
-const MATCH_URL = /facebook\.com\/([^/?].+\/)?video(s|\.php)[/?].*$/
-const PLAYER_ID_PREFIX = 'facebook-player-'
-
-export class Facebook extends Component {
- static displayName = 'Facebook'
- static canPlay = url => MATCH_URL.test(url)
- static loopOnEnded = true
-
- callPlayer = callPlayer
- playerID = PLAYER_ID_PREFIX + randomString()
- load (url, isReady) {
- if (isReady) {
- getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => FB.XFBML.parse())
- return
- }
- getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY).then(FB => {
- FB.init({
- appId: this.props.config.facebook.appId,
- xfbml: true,
- version: 'v2.5'
- })
- FB.Event.subscribe('xfbml.ready', msg => {
- if (msg.type === 'video' && msg.id === this.playerID) {
- this.player = msg.instance
- this.player.subscribe('startedPlaying', this.props.onPlay)
- this.player.subscribe('paused', this.props.onPause)
- this.player.subscribe('finishedPlaying', this.props.onEnded)
- this.player.subscribe('startedBuffering', this.props.onBuffer)
- this.player.subscribe('error', this.props.onError)
- this.callPlayer('unmute')
- this.props.onReady()
- }
- })
- })
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- // Nothing to do
- }
- seekTo (seconds) {
- this.callPlayer('seek', seconds)
- }
- setVolume (fraction) {
- if (fraction !== 0) {
- this.callPlayer('unmute')
- }
- this.callPlayer('setVolume', fraction)
- }
- getDuration () {
- return this.callPlayer('getDuration')
- }
- getCurrentTime () {
- return this.callPlayer('getCurrentPosition')
- }
- getSecondsLoaded () {
- return null
- }
- render () {
- const style = {
- width: '100%',
- height: '100%',
- backgroundColor: 'black'
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(Facebook)
diff --git a/src/players/FilePlayer.js b/src/players/FilePlayer.js
deleted file mode 100644
index 26efea95c..000000000
--- a/src/players/FilePlayer.js
+++ /dev/null
@@ -1,190 +0,0 @@
-import React, { Component } from 'react'
-
-import { getSDK } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const AUDIO_EXTENSIONS = /\.(m4a|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx)($|\?)/i
-const VIDEO_EXTENSIONS = /\.(mp4|og[gv]|webm|mov|m4v)($|\?)/i
-const HLS_EXTENSIONS = /\.(m3u8)($|\?)/i
-const HLS_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/hls.js/0.8.9/hls.min.js'
-const HLS_GLOBAL = 'Hls'
-const DASH_EXTENSIONS = /\.(mpd)($|\?)/i
-const DASH_SDK_URL = 'https://cdnjs.cloudflare.com/ajax/libs/dashjs/2.6.5/dash.all.min.js'
-const DASH_GLOBAL = 'dashjs'
-
-function canPlay (url) {
- if (url instanceof Array) {
- for (let item of url) {
- if (typeof item === 'string' && canPlay(item)) {
- return true
- }
- if (canPlay(item.src)) {
- return true
- }
- }
- return false
- }
- return (
- AUDIO_EXTENSIONS.test(url) ||
- VIDEO_EXTENSIONS.test(url) ||
- HLS_EXTENSIONS.test(url) ||
- DASH_EXTENSIONS.test(url)
- )
-}
-
-export class FilePlayer extends Component {
- static displayName = 'FilePlayer'
- static canPlay = canPlay
-
- componentDidMount () {
- this.addListeners()
- }
- componentWillReceiveProps (nextProps) {
- if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(nextProps)) {
- this.removeListeners()
- }
- }
- componentDidUpdate (prevProps) {
- if (this.shouldUseAudio(this.props) !== this.shouldUseAudio(prevProps)) {
- this.addListeners()
- }
- }
- componentWillUnmount () {
- this.removeListeners()
- }
- addListeners () {
- const { onReady, onPlay, onPause, onEnded, onError, playsinline } = this.props
- this.player.addEventListener('canplay', onReady)
- this.player.addEventListener('play', onPlay)
- this.player.addEventListener('pause', onPause)
- this.player.addEventListener('seeked', this.onSeek)
- this.player.addEventListener('ended', onEnded)
- this.player.addEventListener('error', onError)
- if (playsinline) {
- this.player.setAttribute('playsinline', '')
- this.player.setAttribute('webkit-playsinline', '')
- }
- }
- removeListeners () {
- const { onReady, onPlay, onPause, onEnded, onError } = this.props
- this.player.removeEventListener('canplay', onReady)
- this.player.removeEventListener('play', onPlay)
- this.player.removeEventListener('pause', onPause)
- this.player.removeEventListener('seeked', this.onSeek)
- this.player.removeEventListener('ended', onEnded)
- this.player.removeEventListener('error', onError)
- }
- onSeek = e => {
- this.props.onSeek(e.target.currentTime)
- }
- shouldUseAudio (props) {
- return AUDIO_EXTENSIONS.test(props.url) || props.config.file.forceAudio
- }
- shouldUseHLS (url) {
- const iOS =
- typeof navigator !== 'undefined' &&
- /iPad|iPhone|iPod/.test(navigator.userAgent) &&
- !window.MSStream
- return (HLS_EXTENSIONS.test(url) && !iOS) || this.props.config.file.forceHLS
- }
- shouldUseDASH (url) {
- return DASH_EXTENSIONS.test(url) || this.props.config.file.forceDASH
- }
- load (url) {
- if (this.shouldUseHLS(url)) {
- getSDK(HLS_SDK_URL, HLS_GLOBAL).then(Hls => {
- this.hls = new Hls(this.props.config.file.hlsOptions)
- this.hls.on(Hls.Events.ERROR, (e, data) => {
- this.props.onError(e, data, this.hls, Hls)
- })
- this.hls.loadSource(url)
- this.hls.attachMedia(this.player)
- })
- }
- if (this.shouldUseDASH(url)) {
- getSDK(DASH_SDK_URL, DASH_GLOBAL).then(dashjs => {
- this.dash = dashjs.MediaPlayer().create()
- this.dash.initialize(this.player, url, this.props.playing)
- this.dash.getDebug().setLogToBrowserConsole(false)
- })
- }
- }
- play () {
- const promise = this.player.play()
- if (promise) {
- promise.catch(this.props.onError)
- }
- }
- pause () {
- this.player.pause()
- }
- stop () {
- this.player.removeAttribute('src')
- if (this.hls) {
- this.hls.destroy()
- }
- if (this.dash) {
- this.dash.reset()
- }
- }
- seekTo (seconds) {
- this.player.currentTime = seconds
- }
- setVolume (fraction) {
- this.player.volume = fraction
- }
- setPlaybackRate (rate) {
- this.player.playbackRate = rate
- }
- getDuration () {
- return this.player.duration
- }
- getCurrentTime () {
- return this.player.currentTime
- }
- getSecondsLoaded () {
- if (this.player.buffered.length === 0) return 0
- return this.player.buffered.end(0)
- }
- renderSource = (source, index) => {
- if (typeof source === 'string') {
- return
- }
- return
- }
- renderTrack = (track, index) => {
- return
- }
- ref = player => {
- this.player = player
- }
- render () {
- const { url, loop, controls, config, width, height } = this.props
- const useAudio = this.shouldUseAudio(this.props)
- const useHLS = this.shouldUseHLS(url)
- const useDASH = this.shouldUseDASH(url)
- const Element = useAudio ? 'audio' : 'video'
- const src = url instanceof Array || useHLS || useDASH ? undefined : url
- const style = {
- width: !width || width === 'auto' ? width : '100%',
- height: !height || height === 'auto' ? height : '100%'
- }
- return (
-
- {url instanceof Array &&
- url.map(this.renderSource)
- }
- {config.file.tracks.map(this.renderTrack)}
-
- )
- }
-}
-
-export default createSinglePlayer(FilePlayer)
diff --git a/src/players/Mixcloud.js b/src/players/Mixcloud.js
deleted file mode 100644
index 2ea9d477a..000000000
--- a/src/players/Mixcloud.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK, queryString } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = '//widget.mixcloud.com/media/js/widgetApi.js'
-const SDK_GLOBAL = 'Mixcloud'
-const MATCH_URL = /mixcloud\.com\/([^/]+\/[^/]+)/
-
-export class Mixcloud extends Component {
- static displayName = 'Mixcloud'
- static canPlay = url => MATCH_URL.test(url)
-
- callPlayer = callPlayer
- duration = null
- currentTime = null
- secondsLoaded = null
- load (url) {
- getSDK(SDK_URL, SDK_GLOBAL).then(Mixcloud => {
- this.player = Mixcloud.PlayerWidget(this.iframe)
- this.player.ready.then(() => {
- this.player.events.play.on(this.props.onPlay)
- this.player.events.pause.on(this.props.onPause)
- this.player.events.ended.on(this.props.onEnded)
- this.player.events.error.on(this.props.error)
- this.player.events.progress.on((seconds, duration) => {
- this.currentTime = seconds
- this.duration = duration
- })
- this.props.onReady()
- })
- }, this.props.onError)
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- // Nothing to do
- }
- seekTo (seconds) {
- this.callPlayer('seek', seconds)
- }
- setVolume (fraction) {
- // No volume support
- }
- getDuration () {
- return this.duration
- }
- getCurrentTime () {
- return this.currentTime
- }
- getSecondsLoaded () {
- return null
- }
- ref = iframe => {
- this.iframe = iframe
- }
- render () {
- const { url, config } = this.props
- const id = url.match(MATCH_URL)[1]
- const style = {
- width: '100%',
- height: '100%'
- }
- const query = queryString({
- ...config.mixcloud.options,
- feed: `/${id}/`
- })
- // We have to give the iframe a key here to prevent a
- // weird dialog appearing when loading a new track
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(Mixcloud)
diff --git a/src/players/SoundCloud.js b/src/players/SoundCloud.js
deleted file mode 100644
index 820741452..000000000
--- a/src/players/SoundCloud.js
+++ /dev/null
@@ -1,89 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = 'https://w.soundcloud.com/player/api.js'
-const SDK_GLOBAL = 'SC'
-const MATCH_URL = /(soundcloud\.com|snd\.sc)\/.+$/
-
-export class SoundCloud extends Component {
- static displayName = 'SoundCloud'
- static canPlay = url => MATCH_URL.test(url)
- static loopOnEnded = true
-
- callPlayer = callPlayer
- duration = null
- currentTime = null
- fractionLoaded = null
- load (url, isReady) {
- getSDK(SDK_URL, SDK_GLOBAL).then(SC => {
- if (!this.iframe) return
- const { PLAY, PLAY_PROGRESS, PAUSE, FINISH, ERROR } = SC.Widget.Events
- if (!isReady) {
- this.player = SC.Widget(this.iframe)
- this.player.bind(PLAY, this.props.onPlay)
- this.player.bind(PAUSE, this.props.onPause)
- this.player.bind(PLAY_PROGRESS, e => {
- this.currentTime = e.currentPosition / 1000
- this.fractionLoaded = e.loadedProgress
- })
- this.player.bind(FINISH, () => this.props.onEnded())
- this.player.bind(ERROR, e => this.props.onError(e))
- }
- this.player.load(url, {
- ...this.props.config.soundcloud.options,
- callback: () => {
- this.player.getDuration(duration => {
- this.duration = duration / 1000
- this.props.onReady()
- })
- }
- })
- })
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- // Nothing to do
- }
- seekTo (seconds) {
- this.callPlayer('seekTo', seconds * 1000)
- }
- setVolume (fraction) {
- this.callPlayer('setVolume', fraction * 100)
- }
- getDuration () {
- return this.duration
- }
- getCurrentTime () {
- return this.currentTime
- }
- getSecondsLoaded () {
- return this.fractionLoaded * this.duration
- }
- ref = iframe => {
- this.iframe = iframe
- }
- render () {
- const style = {
- width: '100%',
- height: '100%',
- ...this.props.style
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(SoundCloud)
diff --git a/src/players/Streamable.js b/src/players/Streamable.js
deleted file mode 100644
index 3898bf455..000000000
--- a/src/players/Streamable.js
+++ /dev/null
@@ -1,86 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = '//cdn.embed.ly/player-0.1.0.min.js'
-const SDK_GLOBAL = 'playerjs'
-const MATCH_URL = /streamable\.com\/([a-z0-9]+)$/
-
-export class Streamable extends Component {
- static displayName = 'Streamable'
- static canPlay = url => MATCH_URL.test(url)
-
- callPlayer = callPlayer
- duration = null
- currentTime = null
- secondsLoaded = null
- load (url) {
- getSDK(SDK_URL, SDK_GLOBAL).then(playerjs => {
- if (!this.iframe) return
- this.player = new playerjs.Player(this.iframe)
- this.player.setLoop(this.props.loop)
- this.player.on('ready', this.props.onReady)
- this.player.on('play', this.props.onPlay)
- this.player.on('pause', this.props.onPause)
- this.player.on('seeked', this.props.onSeek)
- this.player.on('ended', this.props.onEnded)
- this.player.on('error', this.props.onError)
- this.player.on('timeupdate', ({ duration, seconds }) => {
- this.duration = duration
- this.currentTime = seconds
- })
- this.player.on('buffered', ({ percent }) => {
- if (this.duration) {
- this.secondsLoaded = this.duration * percent
- }
- })
- }, this.props.onError)
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- // Nothing to do
- }
- seekTo (seconds) {
- this.callPlayer('setCurrentTime', seconds)
- }
- setVolume (fraction) {
- this.callPlayer('setVolume', fraction * 100)
- }
- getDuration () {
- return this.duration
- }
- getCurrentTime () {
- return this.currentTime
- }
- getSecondsLoaded () {
- return this.secondsLoaded
- }
- ref = iframe => {
- this.iframe = iframe
- }
- render () {
- const id = this.props.url.match(MATCH_URL)[1]
- const style = {
- width: '100%',
- height: '100%'
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(Streamable)
diff --git a/src/players/Twitch.js b/src/players/Twitch.js
deleted file mode 100644
index c8f56010b..000000000
--- a/src/players/Twitch.js
+++ /dev/null
@@ -1,83 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK, randomString } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = '//player.twitch.tv/js/embed/v1.js'
-const SDK_GLOBAL = 'Twitch'
-const MATCH_VIDEO_URL = /(?:www\.|go\.)?twitch\.tv\/videos\/(\d+)($|\?)/
-const MATCH_CHANNEL_URL = /(?:www\.|go\.)?twitch\.tv\/([a-z0-9_]+)($|\?)/
-const PLAYER_ID_PREFIX = 'twitch-player-'
-
-export class Twitch extends Component {
- static displayName = 'Twitch'
- static canPlay = url => MATCH_VIDEO_URL.test(url) || MATCH_CHANNEL_URL.test(url)
- static loopOnEnded = true
-
- callPlayer = callPlayer
- playerID = PLAYER_ID_PREFIX + randomString()
- load (url, isReady) {
- const { playsinline, onError, config } = this.props
- const isChannel = MATCH_CHANNEL_URL.test(url)
- const id = isChannel ? url.match(MATCH_CHANNEL_URL)[1] : url.match(MATCH_VIDEO_URL)[1]
- if (isReady) {
- if (isChannel) {
- this.player.setChannel(id)
- } else {
- this.player.setVideo('v' + id)
- }
- return
- }
- getSDK(SDK_URL, SDK_GLOBAL).then(Twitch => {
- this.player = new Twitch.Player(this.playerID, {
- video: isChannel ? '' : id,
- channel: isChannel ? id : '',
- height: '100%',
- width: '100%',
- playsinline: playsinline,
- autoplay: this.props.playing,
- ...config.twitch.options
- })
- const { READY, PLAY, PAUSE, ENDED } = Twitch.Player
- this.player.addEventListener(READY, this.props.onReady)
- this.player.addEventListener(PLAY, this.props.onPlay)
- this.player.addEventListener(PAUSE, this.props.onPause)
- this.player.addEventListener(ENDED, this.props.onEnded)
- }, onError)
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- this.callPlayer('pause')
- }
- seekTo (seconds) {
- this.callPlayer('seek', seconds)
- }
- setVolume (fraction) {
- this.callPlayer('setVolume', fraction)
- }
- getDuration () {
- return this.callPlayer('getDuration')
- }
- getCurrentTime () {
- return this.callPlayer('getCurrentTime')
- }
- getSecondsLoaded () {
- return null
- }
- render () {
- const style = {
- width: '100%',
- height: '100%'
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(Twitch)
diff --git a/src/players/Vimeo.js b/src/players/Vimeo.js
deleted file mode 100644
index 12c4689d8..000000000
--- a/src/players/Vimeo.js
+++ /dev/null
@@ -1,96 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = 'https://player.vimeo.com/api/player.js'
-const SDK_GLOBAL = 'Vimeo'
-const MATCH_URL = /vimeo\.com\//
-
-export class Vimeo extends Component {
- static displayName = 'Vimeo'
- static canPlay = url => MATCH_URL.test(url)
-
- callPlayer = callPlayer
- duration = null
- currentTime = null
- secondsLoaded = null
- load (url) {
- this.duration = null
- getSDK(SDK_URL, SDK_GLOBAL).then(Vimeo => {
- if (!this.container) return
- this.player = new Vimeo.Player(this.container, {
- ...this.props.config.vimeo.playerOptions,
- url,
- loop: this.props.loop
- })
- this.player.ready().then(() => {
- const iframe = this.container.querySelector('iframe')
- iframe.style.width = '100%'
- iframe.style.height = '100%'
- }).catch(this.props.onError)
- this.player.on('loaded', () => {
- this.props.onReady()
- this.player.getDuration().then(duration => {
- this.duration = duration
- })
- })
- this.player.on('play', this.props.onPlay)
- this.player.on('pause', this.props.onPause)
- this.player.on('seeked', e => this.props.onSeek(e.seconds))
- this.player.on('ended', this.props.onEnded)
- this.player.on('error', this.props.onError)
- this.player.on('timeupdate', ({ seconds }) => {
- this.currentTime = seconds
- })
- this.player.on('progress', ({ seconds }) => {
- this.secondsLoaded = seconds
- })
- }, this.props.onError)
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- this.callPlayer('unload')
- }
- seekTo (seconds) {
- this.callPlayer('setCurrentTime', seconds)
- }
- setVolume (fraction) {
- this.callPlayer('setVolume', fraction)
- }
- getDuration () {
- return this.duration
- }
- getCurrentTime () {
- return this.currentTime
- }
- getSecondsLoaded () {
- return this.secondsLoaded
- }
- ref = container => {
- this.container = container
- }
- render () {
- const style = {
- width: '100%',
- height: '100%',
- overflow: 'hidden',
- backgroundColor: 'black',
- ...this.props.style
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(Vimeo)
diff --git a/src/players/Wistia.js b/src/players/Wistia.js
deleted file mode 100644
index c3b350391..000000000
--- a/src/players/Wistia.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = '//fast.wistia.com/assets/external/E-v1.js'
-const SDK_GLOBAL = 'Wistia'
-const MATCH_URL = /(?:wistia\.com|wi\.st)\/(?:medias|embed)\/(.*)$/
-
-export class Wistia extends Component {
- static displayName = 'Wistia'
- static canPlay = url => MATCH_URL.test(url)
- static loopOnEnded = true
-
- callPlayer = callPlayer
- getID (url) {
- return url && url.match(MATCH_URL)[1]
- }
- load (url) {
- const { controls, onReady, onPlay, onPause, onSeek, onEnded, config } = this.props
- getSDK(SDK_URL, SDK_GLOBAL).then(() => {
- window._wq = window._wq || []
- window._wq.push({
- id: this.getID(url),
- options: {
- controlsVisibleOnLoad: controls,
- ...config.wistia.options
- },
- onReady: player => {
- this.player = player
- this.player.bind('play', onPlay)
- this.player.bind('pause', onPause)
- this.player.bind('seek', onSeek)
- this.player.bind('end', onEnded)
- onReady()
- }
- })
- })
- }
- play () {
- this.callPlayer('play')
- }
- pause () {
- this.callPlayer('pause')
- }
- stop () {
- this.callPlayer('remove')
- }
- seekTo (seconds) {
- this.callPlayer('time', seconds)
- }
- setVolume (fraction) {
- this.callPlayer('volume', fraction)
- }
- setPlaybackRate (rate) {
- this.callPlayer('playbackRate', rate)
- }
- getDuration () {
- return this.callPlayer('duration')
- }
- getCurrentTime () {
- return this.callPlayer('time')
- }
- getSecondsLoaded () {
- return null
- }
- render () {
- const id = this.getID(this.props.url)
- const className = `wistia_embed wistia_async_${id}`
- const style = {
- width: '100%',
- height: '100%'
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(Wistia)
diff --git a/src/players/YouTube.js b/src/players/YouTube.js
deleted file mode 100644
index 47a5b4c66..000000000
--- a/src/players/YouTube.js
+++ /dev/null
@@ -1,102 +0,0 @@
-import React, { Component } from 'react'
-
-import { callPlayer, getSDK, parseStartTime } from '../utils'
-import createSinglePlayer from '../singlePlayer'
-
-const SDK_URL = 'https://www.youtube.com/iframe_api'
-const SDK_GLOBAL = 'YT'
-const SDK_GLOBAL_READY = 'onYouTubeIframeAPIReady'
-const MATCH_URL = /(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})/
-
-export class YouTube extends Component {
- static displayName = 'YouTube'
- static canPlay = url => MATCH_URL.test(url)
- static loopOnEnded = true
-
- callPlayer = callPlayer
- load (url, isReady) {
- const { playsinline, controls, config, onError } = this.props
- const id = url && url.match(MATCH_URL)[1]
- if (isReady) {
- this.player.cueVideoById({
- videoId: id,
- startSeconds: parseStartTime(url)
- })
- return
- }
- getSDK(SDK_URL, SDK_GLOBAL, SDK_GLOBAL_READY, YT => YT.loaded).then(YT => {
- if (!this.container) return
- this.player = new YT.Player(this.container, {
- width: '100%',
- height: '100%',
- videoId: id,
- playerVars: {
- controls: controls ? 1 : 0,
- start: parseStartTime(url),
- origin: window.location.origin,
- playsinline: playsinline,
- ...config.youtube.playerVars
- },
- events: {
- onReady: this.props.onReady,
- onStateChange: this.onStateChange,
- onError: event => onError(event.data)
- }
- })
- }, onError)
- }
- onStateChange = ({ data }) => {
- const { onPlay, onPause, onBuffer, onEnded, onReady } = this.props
- const { PLAYING, PAUSED, BUFFERING, ENDED, CUED } = window[SDK_GLOBAL].PlayerState
- if (data === PLAYING) onPlay()
- if (data === PAUSED) onPause()
- if (data === BUFFERING) onBuffer()
- if (data === ENDED) onEnded()
- if (data === CUED) onReady()
- }
- play () {
- this.callPlayer('playVideo')
- }
- pause () {
- this.callPlayer('pauseVideo')
- }
- stop () {
- if (!document.body.contains(this.callPlayer('getIframe'))) return
- this.callPlayer('stopVideo')
- }
- seekTo (amount) {
- this.callPlayer('seekTo', amount)
- }
- setVolume (fraction) {
- this.callPlayer('setVolume', fraction * 100)
- }
- setPlaybackRate (rate) {
- this.callPlayer('setPlaybackRate', rate)
- }
- getDuration () {
- return this.callPlayer('getDuration')
- }
- getCurrentTime () {
- return this.callPlayer('getCurrentTime')
- }
- getSecondsLoaded () {
- return this.callPlayer('getVideoLoadedFraction') * this.getDuration()
- }
- ref = container => {
- this.container = container
- }
- render () {
- const style = {
- width: '100%',
- height: '100%',
- ...this.props.style
- }
- return (
-
- )
- }
-}
-
-export default createSinglePlayer(YouTube)
diff --git a/src/players/index.js b/src/players/index.js
deleted file mode 100644
index 38a6dfb80..000000000
--- a/src/players/index.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { YouTube } from './YouTube'
-import { SoundCloud } from './SoundCloud'
-import { Vimeo } from './Vimeo'
-import { Facebook } from './Facebook'
-import { Streamable } from './Streamable'
-import { Wistia } from './Wistia'
-import { Twitch } from './Twitch'
-import { DailyMotion } from './DailyMotion'
-import { Mixcloud } from './Mixcloud'
-import { FilePlayer } from './FilePlayer'
-
-export default [
- YouTube,
- SoundCloud,
- Vimeo,
- Facebook,
- Streamable,
- Wistia,
- Twitch,
- DailyMotion,
- Mixcloud,
- FilePlayer
-]
diff --git a/src/preload.js b/src/preload.js
deleted file mode 100644
index 43f32365d..000000000
--- a/src/preload.js
+++ /dev/null
@@ -1,50 +0,0 @@
-import React from 'react'
-
-import Player from './Player'
-import { YouTube } from './players/YouTube'
-import { SoundCloud } from './players/SoundCloud'
-import { Vimeo } from './players/Vimeo'
-import { DailyMotion } from './players/DailyMotion'
-
-const PRELOAD_PLAYERS = [
- {
- Player: YouTube,
- configKey: 'youtube',
- url: 'https://www.youtube.com/watch?v=GlCmAC4MHek'
- },
- {
- Player: SoundCloud,
- configKey: 'soundcloud',
- url: 'https://soundcloud.com/seucheu/john-cage-433-8-bit-version'
- },
- {
- Player: Vimeo,
- configKey: 'vimeo',
- url: 'https://vimeo.com/127250231'
- },
- {
- Player: DailyMotion,
- configKey: 'dailymotion',
- url: 'http://www.dailymotion.com/video/xqdpyk'
- }
-]
-
-export default function renderPreloadPlayers (url, config) {
- const players = []
-
- for (let player of PRELOAD_PLAYERS) {
- if (!player.Player.canPlay(url) && config[player.configKey].preload) {
- players.push(
-
- )
- }
- }
-
- return players
-}
diff --git a/src/props.js b/src/props.js
deleted file mode 100644
index a8230e307..000000000
--- a/src/props.js
+++ /dev/null
@@ -1,164 +0,0 @@
-import PropTypes from 'prop-types'
-
-const { string, bool, number, array, oneOfType, shape, object, func } = PropTypes
-
-export const propTypes = {
- url: oneOfType([ string, array ]),
- playing: bool,
- loop: bool,
- controls: bool,
- volume: number,
- muted: bool,
- playbackRate: number,
- width: oneOfType([ string, number ]),
- height: oneOfType([ string, number ]),
- style: object,
- progressInterval: number,
- playsinline: bool,
- wrapper: oneOfType([ string, func ]),
- config: shape({
- soundcloud: shape({
- options: object
- }),
- youtube: shape({
- playerVars: object,
- preload: bool
- }),
- facebook: shape({
- appId: string
- }),
- dailymotion: shape({
- params: object,
- preload: bool
- }),
- vimeo: shape({
- iframeParams: object,
- preload: bool
- }),
- file: shape({
- attributes: object,
- tracks: array,
- forceAudio: bool,
- forceHLS: bool,
- forceDASH: bool,
- hlsOptions: object
- }),
- wistia: shape({
- options: object
- }),
- mixcloud: shape({
- options: object
- }),
- twitch: shape({
- options: object
- })
- }),
- onReady: func,
- onStart: func,
- onPlay: func,
- onPause: func,
- onBuffer: func,
- onEnded: func,
- onError: func,
- onDuration: func,
- onSeek: func,
- onProgress: func
-}
-
-export const defaultProps = {
- playing: false,
- loop: false,
- controls: false,
- volume: null,
- muted: false,
- playbackRate: 1,
- width: '640px',
- height: '360px',
- style: {},
- progressInterval: 1000,
- playsinline: false,
- wrapper: 'div',
- config: {
- soundcloud: {
- options: {
- visual: true, // Undocumented, but makes player fill container and look better
- buying: false,
- liking: false,
- download: false,
- sharing: false,
- show_comments: false,
- show_playcount: false
- }
- },
- youtube: {
- playerVars: {
- autoplay: 0,
- playsinline: 1,
- showinfo: 0,
- rel: 0,
- iv_load_policy: 3,
- modestbranding: 1
- },
- preload: false
- },
- facebook: {
- appId: '1309697205772819'
- },
- dailymotion: {
- params: {
- api: 1,
- 'endscreen-enable': false
- },
- preload: false
- },
- vimeo: {
- playerOptions: {
- autopause: false,
- autoplay: false,
- byline: false,
- portrait: false,
- title: false
- },
- preload: false
- },
- file: {
- attributes: {},
- tracks: [],
- forceAudio: false,
- forceHLS: false,
- forceDASH: false,
- hlsOptions: {}
- },
- wistia: {
- options: {}
- },
- mixcloud: {
- options: {
- hide_cover: 1
- }
- },
- twitch: {
- options: {}
- }
- },
- onReady: function () {},
- onStart: function () {},
- onPlay: function () {},
- onPause: function () {},
- onBuffer: function () {},
- onEnded: function () {},
- onError: function () {},
- onDuration: function () {},
- onSeek: function () {},
- onProgress: function () {}
-}
-
-export const DEPRECATED_CONFIG_PROPS = [
- 'soundcloudConfig',
- 'youtubeConfig',
- 'facebookConfig',
- 'dailymotionConfig',
- 'vimeoConfig',
- 'fileConfig',
- 'wistiaConfig'
-]
diff --git a/src/props.ts b/src/props.ts
new file mode 100644
index 000000000..ec93c0192
--- /dev/null
+++ b/src/props.ts
@@ -0,0 +1,31 @@
+import type { ReactPlayerProps } from './types.js';
+
+export const defaultProps: ReactPlayerProps = {
+ // Falsy values don't need to be defined
+ //
+ // native video attrs
+ // src: undefined,
+ // preload: undefined,
+ // crossOrigin: undefined,
+ // autoPlay: false,
+ // muted: false,
+ // loop: false,
+ // controls: false,
+ // playsInline: false,
+ // disableRemotePlayback: false,
+ width: '320px',
+ height: '180px',
+
+ // native video props
+ volume: 1,
+ playbackRate: 1,
+
+ // custom props
+ // playing: undefined,
+ // pip: false,
+ // light: false,
+ // fallback: null,
+ previewTabIndex: 0,
+ previewAriaLabel: '',
+ oEmbedUrl: 'https://noembed.com/embed?url={url}',
+};
diff --git a/src/singlePlayer.js b/src/singlePlayer.js
deleted file mode 100644
index 544b3bea9..000000000
--- a/src/singlePlayer.js
+++ /dev/null
@@ -1,43 +0,0 @@
-import React, { Component } from 'react'
-
-import { propTypes, defaultProps, DEPRECATED_CONFIG_PROPS } from './props'
-import { getConfig, omit, isEqual } from './utils'
-import Player from './Player'
-
-const SUPPORTED_PROPS = Object.keys(propTypes)
-
-export default function createSinglePlayer (activePlayer) {
- return class SinglePlayer extends Component {
- static displayName = `${activePlayer.displayName}Player`
- static propTypes = propTypes
- static defaultProps = defaultProps
- static canPlay = activePlayer.canPlay
-
- shouldComponentUpdate (nextProps) {
- return !isEqual(this.props, nextProps)
- }
- componentWillUpdate (nextProps) {
- this.config = getConfig(nextProps, defaultProps)
- }
- ref = player => {
- this.player = player
- }
- render () {
- if (!activePlayer.canPlay(this.props.url)) {
- return null
- }
- const { style, width, height, wrapper: Wrapper } = this.props
- const otherProps = omit(this.props, SUPPORTED_PROPS, DEPRECATED_CONFIG_PROPS)
- return (
-
-
-
- )
- }
- }
-}
diff --git a/src/standalone.js b/src/standalone.js
deleted file mode 100644
index 052c9f72d..000000000
--- a/src/standalone.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import React from 'react'
-import { render } from 'react-dom'
-import ReactPlayer from './ReactPlayer'
-
-export default function renderReactPlayer (container, props) {
- render( , container)
-}
diff --git a/src/types.ts b/src/types.ts
new file mode 100644
index 000000000..411f4f2b7
--- /dev/null
+++ b/src/types.ts
@@ -0,0 +1,58 @@
+import type { MediaHTMLAttributes, SyntheticEvent } from 'react';
+import type HlsVideoElement from 'hls-video-element';
+import type SpotifyAudioElement from 'spotify-audio-element';
+import type YouTubeVideoElement from 'youtube-video-element';
+import type VimeoVideoElement from 'vimeo-video-element';
+import type TwitchVideoElement from 'twitch-video-element';
+import type TikTokVideoElement from 'tiktok-video-element';
+
+interface VideoHTMLAttributes extends MediaHTMLAttributes {
+ height?: number | string | undefined;
+ playsInline?: boolean | undefined;
+ poster?: string | undefined;
+ width?: number | string | undefined;
+ disablePictureInPicture?: boolean | undefined;
+ disableRemotePlayback?: boolean | undefined;
+ onEnterPictureInPicture?: ((this: HTMLVideoElement, ev: Event) => void) | undefined;
+ onLeavePictureInPicture?: ((this: HTMLVideoElement, ev: Event) => void) | undefined;
+}
+
+export interface VideoElementProps
+ extends React.DetailedHTMLProps, HTMLVideoElement> {
+ playbackRate?: number;
+ volume?: number;
+ config?: Config;
+}
+
+export interface ReactPlayerProps extends PreviewProps, VideoElementProps {
+ config?: Config;
+ fallback?: React.ReactNode;
+ onReady?: () => void;
+ onStart?: (event: SyntheticEvent) => void;
+ pip?: boolean;
+ playing?: boolean;
+ wrapper?: string | React.ComponentType>;
+}
+
+export interface PreviewProps {
+ src?: string;
+ light?: boolean | string | React.ReactElement;
+ oEmbedUrl?: string;
+ onClickPreview?: (event: React.SyntheticEvent) => void;
+ playIcon?: React.ReactNode;
+ previewAriaLabel?: string;
+ previewTabIndex?: number;
+}
+
+export interface Config {
+ dash?: Record;
+ hls?: HlsVideoElement['config'];
+ html?: Record;
+ mux?: Record;
+ spotify?: SpotifyAudioElement['config'];
+ tiktok?: TikTokVideoElement['config'];
+ twitch?: TwitchVideoElement['config'];
+ vimeo?: VimeoVideoElement['config'];
+ wistia?: Record;
+ youtube?: YouTubeVideoElement['config'];
+}
diff --git a/src/utils.js b/src/utils.js
deleted file mode 100644
index 132ee5ab6..000000000
--- a/src/utils.js
+++ /dev/null
@@ -1,151 +0,0 @@
-import loadScript from 'load-script'
-import merge from 'deepmerge'
-
-import { DEPRECATED_CONFIG_PROPS } from './props'
-
-const MATCH_START_QUERY = /[?](?:start|t)=([0-9hms]+)/
-const MATCH_START_STAMP = /(\d+)(h|m|s)/g
-const MATCH_NUMERIC = /^\d+$/
-
-// Parse YouTube URL for a start time param, ie ?t=1h14m30s
-// and return the start time in seconds
-export function parseStartTime (url) {
- const match = url.match(MATCH_START_QUERY)
- if (match) {
- const stamp = match[1]
- if (stamp.match(MATCH_START_STAMP)) {
- return parseStartStamp(stamp)
- }
- if (MATCH_NUMERIC.test(stamp)) {
- return parseInt(stamp, 10)
- }
- }
- return 0
-}
-
-function parseStartStamp (stamp) {
- let seconds = 0
- let array = MATCH_START_STAMP.exec(stamp)
- while (array !== null) {
- const [, count, period] = array
- if (period === 'h') seconds += parseInt(count, 10) * 60 * 60
- if (period === 'm') seconds += parseInt(count, 10) * 60
- if (period === 's') seconds += parseInt(count, 10)
- array = MATCH_START_STAMP.exec(stamp)
- }
- return seconds
-}
-
-// http://stackoverflow.com/a/38622545
-export function randomString () {
- return Math.random().toString(36).substr(2, 5)
-}
-
-export function queryString (object) {
- return Object
- .keys(object)
- .map(key => `${key}=${object[key]}`)
- .join('&')
-}
-
-// Util function to load an external SDK
-// or return the SDK if it is already loaded
-export function getSDK (url, sdkGlobal, sdkReady = null, isLoaded = () => true) {
- if (window[sdkGlobal] && isLoaded(window[sdkGlobal])) {
- return Promise.resolve(window[sdkGlobal])
- }
- return new Promise((resolve, reject) => {
- if (sdkReady) {
- const previousOnReady = window[sdkReady]
- window[sdkReady] = function () {
- if (previousOnReady) previousOnReady()
- resolve(window[sdkGlobal])
- }
- }
- loadScript(url, err => {
- if (err) reject(err)
- if (!sdkReady) {
- resolve(window[sdkGlobal])
- }
- })
- })
-}
-
-export function getConfig (props, defaultProps, showWarning) {
- let config = merge(defaultProps.config, props.config)
- for (let p of DEPRECATED_CONFIG_PROPS) {
- if (props[p]) {
- const key = p.replace(/Config$/, '')
- config = merge(config, { [key]: props[p] })
- if (showWarning) {
- const link = 'https://github.com/CookPete/react-player#config-prop'
- const message = `ReactPlayer: %c${p} %cis deprecated, please use the config prop instead – ${link}`
- console.warn(message, 'font-weight: bold', '')
- }
- }
- }
- return config
-}
-
-export function omit (object, ...arrays) {
- const omitKeys = [].concat(...arrays)
- const output = {}
- const keys = Object.keys(object)
- for (let key of keys) {
- if (omitKeys.indexOf(key) === -1) {
- output[key] = object[key]
- }
- }
- return output
-}
-
-export function callPlayer (method, ...args) {
- // Util method for calling a method on this.player
- // but guard against errors and console.warn instead
- if (!this.player || !this.player[method]) {
- let message = `ReactPlayer: ${this.constructor.displayName} player could not call %c${method}%c – `
- if (!this.player) {
- message += 'The player was not available'
- } else if (!this.player[method]) {
- message += 'The method was not available'
- }
- console.warn(message, 'font-weight: bold', '')
- return null
- }
- return this.player[method](...args)
-}
-
-export function isObject (val) {
- return val !== null && typeof val === 'object'
-}
-
-// Deep comparison of two objects but ignoring
-// functions, for use in shouldComponentUpdate
-export function isEqual (a, b) {
- if (typeof a === 'function' && typeof b === 'function') {
- return true
- }
- if (a instanceof Array && b instanceof Array) {
- if (a.length !== b.length) {
- return false
- }
- for (let i = 0; i !== a.length; i++) {
- if (!isEqual(a[i], b[i])) {
- return false
- }
- }
- return true
- }
- if (isObject(a) && isObject(b)) {
- if (Object.keys(a).length !== Object.keys(b).length) {
- return false
- }
- for (let key of Object.keys(a)) {
- if (!isEqual(a[key], b[key])) {
- return false
- }
- }
- return true
- }
- return a === b
-}
diff --git a/test/Player.test.tsx b/test/Player.test.tsx
new file mode 100644
index 000000000..9fa853222
--- /dev/null
+++ b/test/Player.test.tsx
@@ -0,0 +1,46 @@
+import './helpers/server-safe-globals.js';
+import { test } from 'zora';
+import sinon from 'sinon';
+import React from 'react';
+import Player from '../src/Player';
+
+// Mock the activePlayer component
+const MockActivePlayer = React.forwardRef((props, ref) => {
+ return React.createElement('video', { ...props, ref });
+});
+
+test('filters out ReactPlayer-specific event handlers to prevent React warnings', async (t) => {
+ // Mock console.warn to capture warnings
+ const originalWarn = console.warn;
+ const warnings: string[] = [];
+ console.warn = sinon.fake((...args) => {
+ warnings.push(args.join(' '));
+ });
+
+ const props = {
+ activePlayer: MockActivePlayer,
+ onReady: sinon.fake(),
+ onStart: sinon.fake(),
+ onPlay: sinon.fake(),
+ onPause: sinon.fake(),
+ onEnded: sinon.fake(),
+ onLoadStart: sinon.fake(),
+ // These should be passed through to the underlying video element
+ onLoadedMetadata: sinon.fake(),
+ onCanPlay: sinon.fake(),
+ onError: sinon.fake(),
+ };
+
+ // Just verify that the component can be created without errors
+ // The actual filtering logic is tested by the fact that no warnings are generated
+ t.ok(React.createElement(Player, props));
+
+ // Check that no warnings about unknown event handlers were logged
+ const unknownEventHandlerWarnings = warnings.filter(warning =>
+ warning.includes('Unknown event handler property')
+ );
+ t.equal(unknownEventHandlerWarnings.length, 0);
+
+ // Restore console.warn
+ console.warn = originalWarn;
+});
diff --git a/test/Player.tsx b/test/Player.tsx
new file mode 100644
index 000000000..48201759d
--- /dev/null
+++ b/test/Player.tsx
@@ -0,0 +1,114 @@
+import './helpers/server-safe-globals.js';
+import { test } from 'zora';
+import sinon from 'sinon';
+import { act } from 'react-test-renderer';
+import React from 'react';
+import Player from '../src/Player';
+import HtmlPlayer from '../src/HtmlPlayer';
+import { render } from './helpers/helpers';
+
+test('video.load()', async (t) => {
+ const videoRef: React.Ref = React.createRef();
+ render( );
+
+ const loadstart = sinon.fake();
+ videoRef.current?.addEventListener('loadstart', loadstart);
+
+ await Promise.resolve();
+ t.ok(loadstart.calledOnce);
+});
+
+test('video.play()', async (t) => {
+ const videoRef: React.Ref = React.createRef();
+ const wrapper = render( );
+
+ const play = sinon.fake();
+ videoRef.current?.addEventListener('play', play);
+
+ act(() => {
+ wrapper.update( );
+ });
+ await Promise.resolve();
+
+ t.ok(play.calledOnce);
+ t.equal(videoRef.current?.paused, false);
+});
+
+test('video.pause()', async (t) => {
+ const videoRef: React.Ref = React.createRef();
+ const wrapper = render( );
+
+ const pause = sinon.fake();
+ videoRef.current?.addEventListener('pause', pause);
+
+ act(() => {
+ wrapper.update( );
+ });
+ await Promise.resolve();
+
+ t.ok(pause.calledOnce);
+ t.equal(videoRef.current?.paused, true);
+});
+
+test('video.volume = 0.5', async (t) => {
+ const videoRef: React.Ref = React.createRef();
+ const wrapper = render( );
+
+ act(() => {
+ wrapper.update( );
+ });
+ await Promise.resolve();
+
+ t.equal(videoRef.current?.volume, 0.5);
+});
+
+test('video.muted = true', async (t) => {
+ let videoRef: React.Ref = React.createRef();
+ const wrapper = render( );
+ t.equal(videoRef.current?.muted, false);
+
+ act(() => {
+ videoRef = React.createRef();
+ wrapper.update( );
+ });
+ await Promise.resolve();
+
+ t.equal(videoRef.current?.muted, true);
+});
+
+test('video.muted = false', async (t) => {
+ let videoRef: React.Ref = React.createRef();
+ const wrapper = render( );
+ t.equal(videoRef.current?.muted, true);
+
+ act(() => {
+ videoRef = React.createRef();
+ wrapper.update( );
+ });
+ await Promise.resolve();
+
+ t.equal(videoRef.current?.muted, false);
+});
+
+test('video.playbackRate = 0.5', async (t) => {
+ const videoRef: React.Ref = React.createRef();
+ const wrapper = render( );
+
+ act(() => {
+ wrapper.update( );
+ });
+ await Promise.resolve();
+
+ t.equal(videoRef.current?.playbackRate, 0.5);
+});
+
+await test('video.duration', async (t) => {
+ const videoRef: React.Ref = React.createRef();
+ render( );
+
+ await new Promise((resolve) => {
+ videoRef.current?.addEventListener('durationchange', resolve);
+ });
+
+ t.equal(videoRef.current?.duration, 10);
+});
diff --git a/test/ReactPlayer/instanceMethods.js b/test/ReactPlayer/instanceMethods.js
new file mode 100644
index 000000000..eddd189f4
--- /dev/null
+++ b/test/ReactPlayer/instanceMethods.js
@@ -0,0 +1,56 @@
+import { test } from 'zora';
+import sinon from 'sinon';
+import React from 'react';
+import { create } from 'react-test-renderer';
+import ReactPlayer from '../../src/index';
+
+const COMMON_METHODS = ['getDuration', 'getCurrentTime', 'getSecondsLoaded', 'getInternalPlayer'];
+
+// for (const method of COMMON_METHODS) {
+// test(`${method}()`, t => {
+// const instance = create( ).getInstance()
+// instance.references.player({ [method]: () => 123 })
+// t.ok(instance[method]() === 123)
+// })
+
+// test(`${method}() - null`, t => {
+// const instance = create( ).getInstance()
+// t.ok(instance[method]() === null)
+// })
+// }
+
+// test('getInternalPlayer() - default', t => {
+// const instance = create( ).getInstance()
+// const getInternalPlayer = sinon.fake.returns('abc')
+// instance.references.player({ getInternalPlayer })
+// t.ok(instance.getInternalPlayer() === 'abc')
+// t.ok(getInternalPlayer.calledOnceWith('player'))
+// })
+
+// test('seekTo()', t => {
+// const instance = create( ).getInstance()
+// instance.references.player({ seekTo: sinon.fake() })
+// instance.seekTo(5)
+// t.ok(instance.player.seekTo.calledOnce)
+// t.ok(instance.player.seekTo.calledWith(5))
+// })
+
+// test('seekTo() - null', t => {
+// const instance = create( ).getInstance()
+// t.ok(instance.seekTo() === null)
+// })
+
+// test('onReady()', t => {
+// const onReady = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handleReady()
+// t.ok(onReady.calledWith(instance))
+// })
+
+// test('refs', t => {
+// const instance = create( ).getInstance()
+// instance.references.player('abc')
+// instance.references.wrapper('def')
+// t.ok(instance.player === 'abc')
+// t.ok(instance.wrapper === 'def')
+// })
diff --git a/test/ReactPlayer/props.tsx b/test/ReactPlayer/props.tsx
new file mode 100644
index 000000000..9f6c058c2
--- /dev/null
+++ b/test/ReactPlayer/props.tsx
@@ -0,0 +1,27 @@
+import '../helpers/server-safe-globals.js';
+import { test } from 'zora';
+import React from 'react';
+import { create } from 'react-test-renderer';
+import ReactPlayer from '../../src/index';
+import { render } from '../helpers/helpers';
+
+test('className', async (t) => {
+ const wrapper = render( );
+ t.equal(wrapper.root.findByType('video').props.className, 'react-player');
+});
+
+test('style', (t) => {
+ const wrapper = render( );
+ t.equal(wrapper.root.findByType('video').props.style.marginTop, '1rem');
+});
+
+test('wrapper - string', (t) => {
+ const wrapper = create( );
+ t.equal(wrapper.toJSON().type, 'span');
+});
+
+test('wrapper - element', (t) => {
+ const Element = () => null;
+ const wrapper = create( );
+ t.ok(wrapper.root.findByType(Element));
+});
diff --git a/test/ReactPlayer/render.js b/test/ReactPlayer/render.js
new file mode 100644
index 000000000..15a28ebcf
--- /dev/null
+++ b/test/ReactPlayer/render.js
@@ -0,0 +1,22 @@
+import React from 'react';
+import { test } from 'zora';
+import { create } from 'react-test-renderer';
+import ReactPlayer from '../../src/index';
+import Player from '../../src/Player';
+import HtmlPlayer from '../../src/HtmlPlayer';
+
+globalThis.window = { MediaStream: Object };
+
+test.skip('render', (t) => {
+ const wrapper = create( );
+ t.ok(wrapper.equals({null}
));
+});
+
+test.skip('fallback player', (t) => {
+ const wrapper = create( );
+ t.ok(
+ wrapper
+ .childAt(0)
+ .matchesElement( )
+ );
+});
diff --git a/test/ReactPlayer/staticMethods.js b/test/ReactPlayer/staticMethods.js
new file mode 100644
index 000000000..e4c7982cf
--- /dev/null
+++ b/test/ReactPlayer/staticMethods.js
@@ -0,0 +1,30 @@
+import { test } from 'zora';
+import React from 'react';
+import { create } from 'react-test-renderer';
+import '../helpers/server-safe-globals';
+import ReactPlayer from '../../src/index';
+import Player from '../../src/Player';
+
+test('canPlay()', (t) => {
+ t.ok(ReactPlayer.canPlay('https://www.youtube.com/watch?v=oUFJJNQGwhk'));
+ t.ok(ReactPlayer.canPlay('https://youtube.com/shorts/370kwJ-x5TY?feature=share'));
+ t.ok(ReactPlayer.canPlay('https://vimeo.com/90509568'));
+ t.ok(ReactPlayer.canPlay('https://home.wistia.com/medias/e4a27b971d'));
+ t.ok(ReactPlayer.canPlay('http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'));
+ t.ok(ReactPlayer.canPlay('http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4#t=1'));
+ t.notOk(ReactPlayer.canPlay('http://example.com/random/path'));
+});
+
+test('addCustomPlayer()', (t) => {
+ const CustomPlayer = React.forwardRef(() => );
+ CustomPlayer.displayName = 'CustomPlayer';
+ CustomPlayer.canPlay = (src) => /example\.com/.test(src);
+
+ ReactPlayer.addCustomPlayer(CustomPlayer);
+ const wrapper = create( );
+ t.ok(ReactPlayer.canPlay('http://example.com/random/path'));
+ t.ok(wrapper.root.findByType(Player));
+ t.equal(wrapper.root.findByType(Player).props.activePlayer, CustomPlayer);
+ ReactPlayer.removeCustomPlayers();
+ t.notOk(ReactPlayer.canPlay('http://example.com/random/path'));
+});
diff --git a/test/helpers/helpers.tsx b/test/helpers/helpers.tsx
new file mode 100644
index 000000000..7de2fa70c
--- /dev/null
+++ b/test/helpers/helpers.tsx
@@ -0,0 +1,46 @@
+import { test } from 'zora'
+import sinon from 'sinon'
+import React from 'react'
+import { ReactTestRenderer, act, create } from 'react-test-renderer'
+
+export function render(comp: React.ReactElement): ReactTestRenderer {
+ let result;
+ act(() => {
+ result = create(comp, {
+ createNodeMock: (element) => {
+ if (element.type === 'video') {
+ const video = document.createElement('video');
+ video.src = element.props.src;
+ video.muted = element.props.muted;
+ return video;
+ }
+ },
+ });
+ });
+ return result;
+}
+
+export function containsMatchingElement (wrapper, comp) {
+ return isObjectContained(create(comp).toJSON(), wrapper.toJSON())
+}
+
+export function isObjectContained (subObject, jsonObject) {
+ if (typeof subObject !== 'object' || typeof jsonObject !== 'object') {
+ return false
+ }
+
+ for (const key in subObject) {
+ if (!(key in jsonObject)) {
+ return false
+ }
+
+ if (typeof subObject[key] === 'object' && typeof jsonObject[key] === 'object') {
+ if (!isObjectContained(subObject[key], jsonObject[key])) {
+ return false
+ }
+ } else if (subObject[key] !== jsonObject[key]) {
+ return false
+ }
+ }
+ return true
+}
diff --git a/test/helpers/server-safe-globals.js b/test/helpers/server-safe-globals.js
new file mode 100644
index 000000000..471848c9f
--- /dev/null
+++ b/test/helpers/server-safe-globals.js
@@ -0,0 +1,110 @@
+// Prevent from Node.Timeout to hang the process
+const oldSetTimeout = globalThis.setTimeout;
+// @ts-ignore
+globalThis.setTimeout = (callback, delay) => {
+ const timeout = oldSetTimeout(callback, delay);
+ oldSetTimeout(() => {
+ timeout.unref();
+ }, 100);
+};
+
+class Element extends EventTarget {
+ style = {};
+ querySelector = () => new Element();
+ contains = () => true;
+}
+
+class HTMLVideoElement extends Element {
+ #attrs = {
+ muted: false,
+ src: '',
+ };
+
+ constructor() {
+ super();
+ this.paused = true;
+ this.volume = 1;
+ this.currentTime = 0;
+ this.duration = NaN;
+ this.playbackRate = 1;
+ }
+
+ setAttribute(name, value) {
+ if (name === 'src') {
+ this.#attrs.src = value;
+ this.load();
+ } else {
+ this.#attrs[name] = value;
+ }
+ }
+
+ getAttribute(name) {
+ return this.#attrs[name];
+ }
+
+ get src() {
+ return this.getAttribute('src');
+ }
+
+ set src(value) {
+ this.setAttribute('src', value);
+ }
+
+ get muted() {
+ return this.getAttribute('muted');
+ }
+
+ set muted(value) {
+ this.setAttribute('muted', !!value);
+ }
+
+ async load() {
+ await Promise.resolve();
+ this.dispatchEvent(new Event('loadstart'));
+
+ await Promise.resolve();
+ this.duration = 10;
+ this.dispatchEvent(new Event('durationchange'));
+ this.dispatchEvent(new Event('loadedmetadata'));
+ this.dispatchEvent(new Event('loadeddata'));
+ this.dispatchEvent(new Event('canplay'));
+ }
+
+ pause() {
+ this.paused = true;
+ this.dispatchEvent(new Event('pause'));
+ }
+
+ async play() {
+ this.paused = false;
+ this.dispatchEvent(new Event('play'));
+ await Promise.resolve();
+ this.dispatchEvent(new Event('playing'));
+ }
+}
+
+class MediaStream {}
+
+const document = {
+ head: new Element(),
+ body: new Element(),
+ createElement: (type) => {
+ if (type === 'video') {
+ return new HTMLVideoElement();
+ }
+ return new Element();
+ },
+ getElementById: () => new Element(),
+};
+
+const globalThisShim = {
+ location: { origin: 'origin' },
+ navigator: {},
+ URL: { createObjectURL: () => 'mockObjectURL' },
+ document,
+ MediaStream,
+};
+
+globalThis.document = document;
+globalThis.window = globalThisShim;
+Object.assign(globalThis, globalThisShim);
diff --git a/test/karma.config.js b/test/karma.config.js
deleted file mode 100644
index 793d15037..000000000
--- a/test/karma.config.js
+++ /dev/null
@@ -1,40 +0,0 @@
-import webpackConfig from '../webpack.config.babel'
-
-export default function (config) {
- config.set({
- browsers: [process.env.TRAVIS ? 'ChromeTravis' : 'Chrome'],
- singleRun: true,
- frameworks: ['mocha', 'chai'],
- files: ['karma.webpack.js'],
- preprocessors: {
- 'karma.webpack.js': ['webpack', 'sourcemap']
- },
- reporters: ['mocha', 'coverage'],
- webpack: {
- ...webpackConfig,
- devtool: 'inline-source-map'
- },
- webpackServer: {
- noInfo: true
- },
- client: {
- mocha: {
- timeout: 60000,
- retries: 9
- }
- },
- browserNoActivityTimeout: 60000,
- coverageReporter: {
- dir: 'coverage',
- reporters: [
- { type: 'lcov', subdir: '.' }
- ]
- },
- customLaunchers: {
- ChromeTravis: {
- base: 'Chrome',
- flags: ['--no-sandbox']
- }
- }
- })
-}
diff --git a/test/karma.webpack.js b/test/karma.webpack.js
deleted file mode 100644
index 59e712c81..000000000
--- a/test/karma.webpack.js
+++ /dev/null
@@ -1,2 +0,0 @@
-const context = require.context('./specs', true, /\.js$/)
-context.keys().forEach(context)
diff --git a/test/react-player-tests.tsx b/test/react-player-tests.tsx
new file mode 100644
index 000000000..ecbad9546
--- /dev/null
+++ b/test/react-player-tests.tsx
@@ -0,0 +1,227 @@
+// const COMMON_METHODS = ['getDuration', 'getCurrentTime', 'getSecondsLoaded']
+
+// for (const method of COMMON_METHODS) {
+// test(`${method}()`, t => {
+// const instance = create( ).getInstance()
+// instance.player = { [method]: () => 123 }
+// instance.isReady = true
+// t.ok(instance[method]() === 123)
+// })
+
+// test(`${method}() - null`, t => {
+// const instance = create( ).getInstance()
+// t.ok(instance[method]() === null)
+// })
+// }
+
+// test('progress()', t => {
+// const load = sinon.fake()
+// const onProgress = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({
+// load,
+// getCurrentTime: sinon.fake.returns(10),
+// getSecondsLoaded: sinon.fake.returns(20),
+// getDuration: sinon.fake.returns(40)
+// })
+// instance.isReady = true
+// instance.progress()
+// instance.progress() // Call twice to ensure onProgress is not called again
+// t.ok(onProgress.calledOnceWith({
+// loaded: 0.5,
+// loadedSeconds: 20,
+// played: 0.25,
+// playedSeconds: 10
+// }))
+// })
+
+// test('progress() handlePlayerMount', t => {
+// const load = sinon.fake()
+// const onProgress = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.isReady = true
+// instance.handlePlayerMount({
+// load,
+// getCurrentTime: sinon.fake.returns(10),
+// getSecondsLoaded: sinon.fake.returns(20),
+// getDuration: sinon.fake.returns(40)
+// })
+// t.ok(onProgress.calledWith({
+// loaded: 0.5,
+// loadedSeconds: 20,
+// played: 0.25,
+// playedSeconds: 10
+// }))
+// })
+
+// test('seekTo() - seconds', t => {
+// const load = sinon.fake()
+// const seekTo = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load, seekTo })
+// instance.isReady = true
+// instance.seekTo(10)
+// t.ok(seekTo.calledOnceWith(10))
+// })
+
+// test('seekTo() - fraction', t => {
+// const load = sinon.fake()
+// const seekTo = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({
+// load,
+// seekTo,
+// getDuration: sinon.fake.returns(10)
+// })
+// instance.isReady = true
+// instance.seekTo(0.5)
+// t.ok(seekTo.calledOnceWith(5))
+// })
+
+// test('seekTo() - warning', t => {
+// const stub = sinon.stub(console, 'warn')
+// const load = sinon.fake()
+// const seekTo = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({
+// load,
+// seekTo,
+// getDuration: sinon.fake.returns(null)
+// })
+// instance.isReady = true
+// instance.seekTo(0.5)
+// t.ok(seekTo.notCalled)
+// t.ok(stub.calledOnce)
+// stub.restore()
+// })
+
+// test('seekTo() - set seekOnPlay', t => {
+// const load = sinon.fake()
+// const seekTo = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load, seekTo })
+// instance.isReady = false
+// instance.seekTo(10)
+// t.ok(seekTo.notCalled)
+// t.ok(instance.seekOnPlay === 10)
+// })
+
+// test('onReady()', t => {
+// const onReady = sinon.fake()
+// const load = sinon.fake()
+// const setVolume = sinon.fake()
+// const play = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load, setVolume, play })
+// instance.handleDurationCheck = sinon.fake()
+// instance.isReady = true
+// instance.handleReady()
+// t.ok(setVolume.calledOnceWith(1))
+// t.ok(play.calledOnce)
+// })
+
+// test('loadOnReady', t => {
+// const load = sinon.fake()
+// const play = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load, play })
+// instance.handleDurationCheck = sinon.fake()
+// instance.loadOnReady = 'file.mp4'
+// instance.handleReady()
+// t.ok(load.calledWith('file.mp4'))
+// t.ok(play.notCalled)
+// })
+
+// test('onPlay()', t => {
+// const onPlay = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load: () => {} })
+// instance.handleDurationCheck = sinon.fake()
+// instance.handlePlay()
+// t.ok(onPlay.calledOnce)
+// t.ok(instance.isPlaying)
+// t.notOk(instance.isLoading)
+// })
+
+// test('onStart()', t => {
+// const onStart = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load: () => {} })
+// instance.handleDurationCheck = sinon.fake()
+// instance.startOnPlay = true
+// instance.handlePlay()
+// t.ok(onStart.calledOnce)
+// t.notOk(instance.startOnPlay)
+// })
+
+// test('seekOnPlay', t => {
+// const seekTo = sinon.stub(Player.prototype, 'seekTo')
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load: () => {} })
+// instance.handleDurationCheck = sinon.fake()
+// instance.seekOnPlay = 10
+// instance.handlePlay()
+// t.ok(seekTo.calledOnceWith(10))
+// t.ok(instance.seekOnPlay === null)
+// seekTo.restore()
+// })
+
+// test('onPause()', t => {
+// const onPause = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.isLoading = false
+// instance.handlePause()
+// t.ok(onPause.calledOnce)
+// t.notOk(instance.isPlaying)
+// })
+
+// test('onPause() - isLoading', t => {
+// const onPause = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.isLoading = true
+// instance.handlePause()
+// t.ok(onPause.notCalled)
+// })
+
+// test('onEnded()', t => {
+// const activePlayer = () => null
+// const onEnded = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.isPlaying = true
+// instance.handleEnded()
+// t.ok(onEnded.calledOnce)
+// t.notOk(instance.isPlaying)
+// })
+
+// test('loopOnEnded', t => {
+// const activePlayer = () => null
+// activePlayer.loopOnEnded = true
+// const seekTo = sinon.stub(Player.prototype, 'seekTo')
+// const instance = create( ).getInstance()
+// instance.handlePlayerMount({ load: () => {} })
+// instance.isPlaying = true
+// instance.handleEnded()
+// t.ok(seekTo.calledOnceWith(0))
+// t.ok(instance.isPlaying)
+// seekTo.restore()
+// })
+
+// test('handleDurationCheck', t => {
+// const onDuration = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.getDuration = sinon.fake.returns(10)
+// instance.handleDurationCheck()
+// instance.handleDurationCheck() // Call twice to ensure onDuration is not called again
+// t.ok(onDuration.calledOnceWith(10))
+// t.ok(instance.onDurationCalled)
+// })
+
+// test('durationCheckTimeout', t => {
+// const onDuration = sinon.fake()
+// const instance = create( ).getInstance()
+// instance.getDuration = sinon.fake.returns(null)
+// instance.durationCheckTimeout = null
+// instance.handleDurationCheck()
+// t.ok(onDuration.notCalled)
+// t.truthy(instance.durationCheckTimeout)
+// })
diff --git a/test/specs/ReactPlayer.js b/test/specs/ReactPlayer.js
deleted file mode 100644
index 2a70b3a1c..000000000
--- a/test/specs/ReactPlayer.js
+++ /dev/null
@@ -1,430 +0,0 @@
-/* eslint-disable no-unused-expressions */
-
-import React from 'react'
-import { render, unmountComponentAtNode } from 'react-dom'
-
-import ReactPlayer from '../../src/ReactPlayer'
-
-const { describe, it, expect, beforeEach, afterEach } = window
-
-const TEST_URLS = [
- {
- name: 'FilePlayer',
- url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv',
- switchTo: 'https://storage.googleapis.com/media-session/elephants-dream/the-wires.mp3',
- error: 'http://example.com/error.ogv',
- onSeek: true
- },
- {
- name: 'FilePlayer (multiple string sources)',
- url: [
- 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
- 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv',
- 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm'
- ]
- },
- {
- name: 'FilePlayer (multiple object sources)',
- url: [
- { src: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4', type: 'video/mp4' },
- { src: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv', type: 'video/ogv' },
- { src: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm', type: 'video/webm' }
- ]
- },
- {
- name: 'FilePlayer (HLS)',
- url: 'https://bitdash-a.akamaihd.net/content/MI201109210084_1/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8'
- },
- {
- name: 'FilePlayer (DASH)',
- url: 'http://dash.edgesuite.net/envivio/EnvivioDash3/manifest.mpd'
- },
- {
- name: 'YouTube',
- url: 'https://www.youtube.com/watch?v=M7lc1UVf-VE',
- switchTo: 'https://www.youtube.com/watch?v=oUFJJNQGwhk',
- error: 'https://www.youtube.com/watch?v=xxxxxxxxxxx'
- },
- {
- name: 'SoundCloud',
- url: 'https://soundcloud.com/miami-nights-1984/accelerated',
- switchTo: 'https://soundcloud.com/tycho/tycho-awake',
- error: 'https://soundcloud.com/xxxxxxxxxxx/xxxxxxxxxxx'
- },
- {
- name: 'Facebook',
- url: 'https://www.facebook.com/facebook/videos/10153231379946729/',
- switchTo: 'https://www.facebook.com/FacebookDevelopers/videos/10152454700553553/'
- },
- {
- name: 'Vimeo',
- url: 'https://vimeo.com/90509568',
- switchTo: 'https://vimeo.com/169599296',
- error: 'http://vimeo.com/00000000',
- onSeek: true
- },
- {
- name: 'Twitch',
- url: 'https://www.twitch.tv/videos/106400740',
- switchTo: 'https://www.twitch.tv/videos/175705374'
- },
- {
- name: 'Streamable',
- url: 'https://streamable.com/moo',
- switchTo: 'https://streamable.com/ifjh'
- },
- {
- name: 'Wistia',
- url: 'https://home.wistia.com/medias/e4a27b971d',
- switchTo: 'https://home.wistia.com/medias/29b0fbf547',
- onSeek: true,
- skip: true
- },
- {
- name: 'DailyMotion',
- url: 'https://www.dailymotion.com/video/x5e9eog',
- switchTo: 'https://www.dailymotion.com/video/x61xx3z',
- error: 'http://www.dailymotion.com/video/x6c0xvb',
- onSeek: true,
- skip: true
- },
- {
- name: 'Mixcloud',
- url: 'https://www.mixcloud.com/mixcloud/meet-the-curators/',
- switchTo: 'https://www.mixcloud.com/mixcloud/mixcloud-curates-4-mary-anne-hobbs-in-conversation-with-dan-deacon/',
- skip: true
- }
-]
-
-describe('ReactPlayer', () => {
- let div // Top level div to render into
- let player // Top level player var that will always contain the latest player instance
-
- // Test util for rendering a player
- function renderPlayer (props, onMount) {
- const ref = p => {
- if (p) {
- player = p
- if (onMount) {
- onMount()
- }
- }
- }
- // Note that playing is set to true by default
- render( , div)
- }
-
- // Test util for rendering a player and then changing props after a short time
- function renderPlayerChange (props, changeProps, onChange) {
- renderPlayer({
- ...props,
- onProgress: p => {
- if (changeProps && p.playedSeconds > 3) {
- renderPlayer({ ...props, ...changeProps })
- if (onChange) {
- onChange()
- }
- }
- if (props.onProgress) {
- props.onProgress(p)
- }
- }
- })
- }
-
- beforeEach(() => {
- div = document.createElement('div')
- document.body.appendChild(div)
- })
-
- afterEach(() => {
- unmountComponentAtNode(div)
- document.body.removeChild(div)
- })
-
- for (let test of TEST_URLS) {
- const desc = test.skip ? describe.skip : (test.only ? describe.only : describe)
- desc(test.name, () => {
- it('canPlay', () => {
- expect(ReactPlayer.canPlay(test.url)).to.be.true
- expect(ReactPlayer.canPlay('random-string')).to.be.false
- })
-
- it('onReady, onStart, onPlay, onDuration, onProgress', done => {
- // Use a count object to ensure everything is called at least once
- let count = {}
- const bump = key => {
- count[key] = count[key] || 0
- count[key]++
- if (Object.keys(count).length === 5) {
- done()
- }
- }
- renderPlayer({
- url: test.url,
- onReady: () => bump('onReady'),
- onStart: () => bump('onStart'),
- onPlay: () => bump('onPlay'),
- onDuration: secs => bump('onDuration'),
- onProgress: progress => bump('onProgress')
- })
- })
-
- it('onPause', done => {
- const props = {
- url: test.url,
- onPause: () => done(),
- playing: true
- }
- renderPlayerChange(props, { playing: false })
- })
-
- it('should not play if playing is false', done => {
- renderPlayer({
- url: test.url,
- playing: false,
- onReady: () => setTimeout(done, 1000),
- onPlay: () => done('should not play if playing is false')
- })
- })
-
- it('plays after a delay', done => {
- const playPlayer = () => {
- renderPlayer({
- url: test.url,
- playing: true,
- onPlay: () => done()
- })
- }
- renderPlayer({
- url: test.url,
- playing: false,
- onReady: () => setTimeout(playPlayer, 1000)
- })
- })
-
- it('volume change does not error', done => {
- renderPlayerChange(
- { url: test.url, volume: 1 },
- { volume: 0.5 },
- () => setTimeout(done, 1000)
- )
- })
-
- it('muted change does not error', done => {
- renderPlayerChange(
- { url: test.url, muted: false },
- { muted: true },
- () => setTimeout(done, 1000)
- )
- })
-
- it('playbackRate change does not error', done => {
- renderPlayerChange(
- { url: test.url, playbackRate: 1 },
- { playbackRate: 0.5 },
- () => setTimeout(done, 1000)
- )
- })
-
- it('renders twice without error', done => {
- const go = () => renderPlayer({ url: test.url })
- go()
- setTimeout(go, 1000)
- setTimeout(done, 2000)
- })
-
- if (test.switchTo) {
- it('switches URL', done => {
- renderPlayerChange(
- { url: test.url },
- { url: test.switchTo, onPlay: () => done() }
- )
- })
- }
-
- if (test.error) {
- it('onError', done => {
- renderPlayer({ url: test.error, onError: () => done() })
- })
- }
-
- it('seekTo, onEnded', done => {
- let duration
- let seeked = false
- renderPlayer({
- url: test.url,
- onDuration: d => { duration = d },
- onProgress: p => {
- if (!seeked && duration && p.playedSeconds > 1) {
- player.seekTo(duration - 1)
- seeked = true
- }
- },
- onEnded: () => done()
- })
- })
-
- if (test.onSeek) {
- it('onSeek', done => {
- renderPlayer({
- url: test.url,
- onProgress: p => {
- if (p.playedSeconds >= 1) {
- player.seekTo(10)
- }
- },
- onSeek: () => done()
- })
- })
-
- it('seekTo fraction', done => {
- renderPlayer({
- url: test.url,
- onProgress: p => {
- if (p.playedSeconds >= 1) {
- player.seekTo(0.5)
- }
- },
- onSeek: () => done()
- })
- })
-
- it('seekOnPlay', done => {
- renderPlayer({
- url: test.url,
- onSeek: () => done()
- }, () => player.seekTo(3))
- })
- }
- })
- }
-
- describe.skip('instance methods', () => {
- beforeEach(done => {
- renderPlayer({
- url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4',
- onReady: () => done()
- })
- })
-
- it('returns correctly', () => {
- expect(player.getInternalPlayer()).to.exist
- expect(player.getCurrentTime()).to.be.a('number')
- expect(player.getDuration()).to.be.a('number')
- })
- })
-
- describe('fall back to FilePlayer', () => {
- beforeEach(done => {
- renderPlayer({ url: 'http://example.com/random/path' }, () => done())
- })
-
- it('falls back to FilePlayer', () => {
- const video = player.getInternalPlayer()
- expect(video).to.be.a('HTMLVideoElement')
- expect(video.src).to.equal('http://example.com/random/path')
- })
- })
-
- describe('preloading', () => {
- beforeEach(done => {
- renderPlayer({
- url: null,
- config: {
- youtube: { preload: true },
- vimeo: { preload: true },
- dailymotion: { preload: true }
- }
- }, () => done())
- })
-
- it('renders with preload config', () => {
- expect(player.wrapper).to.be.a('HTMLDivElement')
- expect(player.wrapper.childNodes).to.have.length(3)
- for (let node of player.wrapper.childNodes) {
- expect(node).to.be.a('HTMLDivElement')
- expect(node.style.display).to.equal('none')
- }
- })
- })
-
- describe('FilePlayer tracks', () => {
- beforeEach(done => {
- renderPlayer({
- url: 'file.mp4',
- playsinline: true, // Not required but good for coverage
- config: { file: {
- tracks: [
- { kind: 'subtitles', src: 'subs/subtitles.en.vtt', srcLang: 'en', default: true },
- { kind: 'subtitles', src: 'subs/subtitles.ja.vtt', srcLang: 'ja' },
- { kind: 'subtitles', src: 'subs/subtitles.de.vtt', srcLang: 'de' }
- ]
- }}
- }, () => done())
- })
-
- it('renders with tracks', () => {
- expect(player.wrapper).to.be.a('HTMLDivElement')
- expect(player.wrapper.querySelectorAll('track')).to.have.length(3)
- })
- })
-
- // onPause being called was a bug that has been fixed
- // so skip this test for now
- it.skip('Twitch switches from video to channel', done => {
- renderPlayerChange(
- { url: 'https://www.twitch.tv/videos/106400740' },
- {
- url: 'https://www.twitch.tv/twitchdev',
- onPlay: () => done(),
- onPause: () => done()
- }
- )
- })
-
- it('does not error when seeking using fraction when duration is not available', done => {
- renderPlayer({
- url: 'https://www.youtube.com/watch?v=M7lc1UVf-VE',
- onReady: () => {
- player.getInternalPlayer().getDuration = () => null // Pretty hacky but it does the job
- player.seekTo(0.5)
- setTimeout(done, 1000)
- }
- })
- })
-
- it('canPlay returns false', () => {
- expect(ReactPlayer.canPlay('http://example.com/')).to.be.false
- expect(ReactPlayer.canPlay('file.txt')).to.be.false
- expect(ReactPlayer.canPlay([ 'http://example.com/', 'file.txt' ])).to.be.false
- })
-
- describe('wrapper prop', () => {
- it('defaults wrapper to a div', () => {
- renderPlayer({
- url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'
- })
- expect(player.wrapper).to.be.a('HTMLDivElement')
- })
-
- it('supports custom wrapper elements', () => {
- renderPlayer({
- wrapper: 'p',
- url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'
- })
- expect(player.wrapper).to.be.a('HTMLParagraphElement')
- })
-
- it('supports custom wrapper components', () => {
- const CustomWrapper = ({ children }) => {children}
- renderPlayer({
- wrapper: CustomWrapper,
- url: 'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4'
- })
- const el = document.getElementById('test-hook')
- expect(el.dataset.fakeAttribute).to.equal('woah')
- expect(el.querySelectorAll('video').length).to.equal(1)
- })
- })
-})
diff --git a/test/specs/canPlay.js b/test/specs/canPlay.js
deleted file mode 100644
index 972ba7b69..000000000
--- a/test/specs/canPlay.js
+++ /dev/null
@@ -1,108 +0,0 @@
-/* eslint-disable no-unused-expressions */
-
-import { SoundCloud } from '../../src/players/SoundCloud'
-import { YouTube } from '../../src/players/YouTube'
-import { Vimeo } from '../../src/players/Vimeo'
-import { Wistia } from '../../src/players/Wistia'
-import { Twitch } from '../../src/players/Twitch'
-
-const { describe, it, expect } = window
-
-describe('canPlay', () => {
- describe('YouTube', () => {
- it('knows what it can play', () => {
- expect(YouTube.canPlay('youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('www.youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('//www.youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('https://www.youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('https://www.youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('http://www.youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('https://youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('http://youtube.com/watch?v=12345678901')).to.be.true
- expect(YouTube.canPlay('http://youtu.be/12345678901')).to.be.true
- })
-
- it('knows what it can\'t play', () => {
- expect(YouTube.canPlay('http://soundcloud.com/artist-name/title-name')).to.be.false
- expect(YouTube.canPlay('http://vimeo.com/1234')).to.be.false
- })
- })
-
- describe('SoundCloud', () => {
- it('knows what it can play', () => {
- expect(SoundCloud.canPlay('soundcloud.com/artist-name/title-name')).to.be.true
- expect(SoundCloud.canPlay('//soundcloud.com/artist-name/title-name')).to.be.true
- expect(SoundCloud.canPlay('http://soundcloud.com/artist-name/title-name')).to.be.true
- expect(SoundCloud.canPlay('http://soundcloud.com/artist_name/title_name')).to.be.true
- expect(SoundCloud.canPlay('http://snd.sc/artist-name/title-name')).to.be.true
- expect(SoundCloud.canPlay('http://soundcloud.com/artist-only')).to.be.true
- })
-
- it('knows what it can\'t play', () => {
- expect(SoundCloud.canPlay('https://www.youtube.com/watch?v=12345678901')).to.be.false
- expect(SoundCloud.canPlay('http://vimeo.com/1234')).to.be.false
- })
- })
-
- describe('Vimeo', () => {
- it('knows what it can play', () => {
- expect(Vimeo.canPlay('vimeo.com/1234')).to.be.true
- expect(Vimeo.canPlay('//vimeo.com/1234')).to.be.true
- expect(Vimeo.canPlay('http://vimeo.com/1234')).to.be.true
- expect(Vimeo.canPlay('https://vimeo.com/1234')).to.be.true
- expect(Vimeo.canPlay('https://www.vimeo.com/1234')).to.be.true
- expect(Vimeo.canPlay('https://vimeo.com/ondemand/tinact/84954874')).to.be.true
- expect(Vimeo.canPlay('https://vimeo.com/channels/staffpicks/40004005')).to.be.true
- expect(Vimeo.canPlay('https://vimeo.com/groups/motion/videos/73234721')).to.be.true
- expect(Vimeo.canPlay('https://vimeo.com/album/3953264/video/166790294')).to.be.true
- expect(Vimeo.canPlay('https://player.vimeo.com/video/40004005')).to.be.true
- expect(Vimeo.canPlay('https://vimeo.com/yannickcerrutti/annecydroneinmotion')).to.be.true
- })
-
- it('knows what it can\'t play', () => {
- expect(Vimeo.canPlay('http://soundcloud.com/artist-name/title-name')).to.be.false
- expect(Vimeo.canPlay('https://www.youtube.com/watch?v=1234')).to.be.false
- })
- })
-
- describe('Wistia', () => {
- it('knows what it can play', () => {
- expect(Wistia.canPlay('fast.wistia.com/medias/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('//fast.wistia.com/medias/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('https://fast.wistia.com/medias/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('http://fast.wistia.com/medias/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('https://fast.wi.st/medias/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('http://fast.wi.st/medias/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('https://fast.wistia.com/embed/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('http://fast.wistia.com/embed/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('https://fast.wi.st/embed/e4a27b971d')).to.be.true
- expect(Wistia.canPlay('http://fast.wi.st/embed/e4a27b971d')).to.be.true
- })
-
- it('knows what it can\'t play', () => {
- expect(Wistia.canPlay('http://soundcloud.com/artist-name/title-name')).to.be.false
- expect(Wistia.canPlay('http://vimeo.com/1234')).to.be.false
- expect(Wistia.canPlay('https://www.youtube.com/watch?v=1234')).to.be.false
- })
- })
-
- describe('Twitch', () => {
- it('knows what it can play', () => {
- expect(Twitch.canPlay('twitch.tv/videos/106400740')).to.be.true
- expect(Twitch.canPlay('www.twitch.tv/videos/106400740')).to.be.true
- expect(Twitch.canPlay('//www.twitch.tv/videos/106400740')).to.be.true
- expect(Twitch.canPlay('https://www.twitch.tv/videos/106400740')).to.be.true
- expect(Twitch.canPlay('https://www.twitch.tv/kronovi')).to.be.true
- expect(Twitch.canPlay('https://twitch.tv/videos/106400740')).to.be.true
- expect(Twitch.canPlay('https://twitch.tv/kronovi')).to.be.true
- expect(Twitch.canPlay('https://go.twitch.tv/videos/186996540')).to.be.true
- expect(Twitch.canPlay('https://go.twitch.tv/kronovi')).to.be.true
- })
-
- it('knows what it can\'t play', () => {
- expect(Twitch.canPlay('http://soundcloud.com/artist-name/title-name')).to.be.false
- expect(Twitch.canPlay('http://vimeo.com/1234')).to.be.false
- expect(Twitch.canPlay('https://www.youtube.com/watch?v=1234')).to.be.false
- })
- })
-})
diff --git a/test/specs/utils.js b/test/specs/utils.js
deleted file mode 100644
index a68f29946..000000000
--- a/test/specs/utils.js
+++ /dev/null
@@ -1,238 +0,0 @@
-import { parseStartTime, randomString, omit, getConfig, callPlayer, isEqual } from '../../src/utils'
-
-const { describe, it, expect } = window
-
-describe('parseStartTime', () => {
- const YOUTUBE_URL = 'http://youtu.be/12345678901'
-
- it('parses seconds', () => {
- expect(parseStartTime(YOUTUBE_URL + '?start=162')).to.equal(162)
- })
-
- it('parses stamps', () => {
- expect(parseStartTime(YOUTUBE_URL + '?start=48s')).to.equal(48)
- expect(parseStartTime(YOUTUBE_URL + '?start=3m15s')).to.equal(195)
- expect(parseStartTime(YOUTUBE_URL + '?start=1h36m17s')).to.equal(5777)
- })
-
- it('parses with other params', () => {
- expect(parseStartTime(YOUTUBE_URL + '?param=1&start=32')).to.equal(32)
- })
-
- it('parses using t', () => {
- expect(parseStartTime(YOUTUBE_URL + '?t=32')).to.equal(32)
- })
-
- it('parses using a hash', () => {
- expect(parseStartTime(YOUTUBE_URL + '#t=32')).to.equal(32)
- expect(parseStartTime(YOUTUBE_URL + '#start=32')).to.equal(32)
- })
-
- it('parses using a hash', () => {
- expect(parseStartTime(YOUTUBE_URL + '#t=32')).to.equal(32)
- expect(parseStartTime(YOUTUBE_URL + '#start=32')).to.equal(32)
- })
-
- it('returns 0 for invalid stamps', () => {
- expect(parseStartTime(YOUTUBE_URL)).to.equal(0)
- expect(parseStartTime(YOUTUBE_URL + '?start=')).to.equal(0)
- expect(parseStartTime(YOUTUBE_URL + '?start=hms')).to.equal(0)
- expect(parseStartTime(YOUTUBE_URL + '?start=invalid')).to.equal(0)
- expect(parseStartTime(YOUTUBE_URL + '?strat=32')).to.equal(0)
- expect(parseStartTime(YOUTUBE_URL + '#s=32')).to.equal(0)
- })
-})
-
-describe('randomString', () => {
- it('returns a 5 character string', () => {
- expect(randomString()).to.be.a('string')
- expect(randomString()).to.have.lengthOf(5)
- })
-
- it('returns different strings', () => {
- const a = randomString()
- const b = randomString()
- const c = randomString()
- expect(a).to.not.equal(b)
- expect(a).to.not.equal(c)
- expect(b).to.not.equal(c)
- })
-})
-
-describe('omit', () => {
- const object = {
- a: 1,
- b: 2,
- c: 3,
- d: 4,
- e: 5
- }
-
- it('omits properties from an object', () => {
- expect(omit(object, ['a', 'b', 'c'])).to.deep.equal({
- d: 4,
- e: 5
- })
- })
-
- it('handles multiple array parameters', () => {
- expect(omit(object, ['a'], ['b'], ['c'])).to.deep.equal({
- d: 4,
- e: 5
- })
- })
-})
-
-describe('getConfig', () => {
- it('merges configs', () => {
- const defaultProps = {
- config: {
- youtube: {
- playerVars: {
- autoplay: 0,
- playsinline: 1
- },
- preload: false
- }
- }
- }
- const props = {
- config: {
- youtube: {
- playerVars: {
- playsinline: 0,
- showinfo: 1
- },
- preload: true
- }
- }
- }
- const config = getConfig(props, defaultProps)
- expect(config).to.deep.equal({
- youtube: {
- playerVars: {
- autoplay: 0,
- playsinline: 0,
- showinfo: 1
- },
- preload: true
- }
- })
- })
-
- it('converts old style config', () => {
- const props = {
- config: {},
- youtubeConfig: {
- playerVars: {
- playsinline: 0,
- showinfo: 1
- },
- preload: true
- }
- }
- const config = getConfig(props, { config: {} }, true)
- expect(config).to.deep.equal({
- youtube: {
- playerVars: {
- playsinline: 0,
- showinfo: 1
- },
- preload: true
- }
- })
- })
-})
-
-describe('callPlayer', () => {
- it('calls a player method', () => {
- const fakePlayer = {
- player: {
- testMethod: () => 'result'
- }
- }
- expect(callPlayer.call(fakePlayer, 'testMethod')).to.equal('result')
- })
-
- it('returns null when player is not available', () => {
- const fakePlayer = {
- constructor: {
- displayName: 'TestPlayer'
- },
- player: null
- }
- expect(callPlayer.call(fakePlayer, 'testMethod')).to.equal(null)
- })
-
- it('returns null when method is not available', () => {
- const fakePlayer = {
- constructor: {
- displayName: 'TestPlayer'
- },
- player: {
- testMethod: null
- }
- }
- expect(callPlayer.call(fakePlayer, 'testMethod')).to.equal(null)
- })
-})
-
-describe('isEqual', () => {
- it('returns true', () => {
- const a = {
- b: { c: 3, d: 4 },
- c: [1, 2, 3],
- d: [{ a: 1 }, { b: 2 }]
- }
- const b = {
- b: { c: 3, d: 4 },
- c: [1, 2, 3],
- d: [{ a: 1 }, { b: 2 }]
- }
- expect(isEqual(a, b)).to.equal(true)
- })
-
- it('returns false when deep property differs', () => {
- const a = {
- b: { c: 3, d: 4 },
- c: [1, 2, 3],
- d: [{ a: 1 }, { b: 2 }]
- }
- const b = {
- b: { c: 3, d: 4 },
- c: [1, 2, 3],
- d: [{ a: 1 }, { b: 3 }]
- }
- expect(isEqual(a, b)).to.equal(false)
- })
-
- it('returns false when array size differs', () => {
- const a = {
- b: { c: 3, d: 4 },
- c: [1, 2, 3],
- d: [{ a: 1 }, { b: 2 }]
- }
- const b = {
- b: { c: 3, d: 4 },
- c: [1, 2],
- d: [{ a: 1 }, { b: 3 }]
- }
- expect(isEqual(a, b)).to.equal(false)
- })
-
- it('ignores functions', () => {
- const a = {
- b: { c: 3, d: 4 },
- c: [1, 2, 3],
- d: [{ a: 1 }, { b: 2 }],
- e: () => {}
- }
- const b = {
- b: { c: 3, d: 4 },
- c: [1, 2, 3],
- d: [{ a: 1 }, { b: 2 }],
- e: () => {}
- }
- expect(isEqual(a, b)).to.equal(true)
- })
-})
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 000000000..21b7f6a9c
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,23 @@
+{
+ "compilerOptions": {
+ "preserveWatchOutput": true,
+ "target": "es2022",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "react",
+ "incremental": true,
+ "declaration": true,
+ "emitDeclarationOnly": true,
+ "rootDir": "src",
+ "outDir": "dist",
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules"]
+}
diff --git a/webpack.config.babel.js b/webpack.config.babel.js
deleted file mode 100644
index 84dbab601..000000000
--- a/webpack.config.babel.js
+++ /dev/null
@@ -1,78 +0,0 @@
-import { join } from 'path'
-import webpack from 'webpack'
-import { extract } from 'extract-text-webpack-plugin'
-import HtmlWebpackPlugin from 'html-webpack-plugin'
-
-const PORT = 3000
-const PRODUCTION = process.env.NODE_ENV === 'production'
-const PUBLIC_PATH = PRODUCTION ? '' : `http://localhost:${PORT}/`
-
-const PATH_DEMO = join(__dirname, 'demo')
-const PATH_SRC = join(__dirname, 'src')
-const PATH_INDEX = join(__dirname, 'index.html')
-const PATH_TESTS = join(__dirname, 'test', 'specs')
-
-export const plugins = [
- new HtmlWebpackPlugin({
- template: PATH_INDEX,
- minify: {
- collapseWhitespace: true,
- quoteCharacter: '\''
- }
- })
-]
-
-export default {
- devtool: 'cheap-module-eval-source-map',
- entry: [
- `webpack-dev-server/client?http://localhost:${PORT}`,
- 'webpack/hot/only-dev-server',
- './src/demo/index'
- ],
- module: {
- rules: [
- {
- test: /\.js$/,
- loader: 'babel-loader',
- include: [ PATH_SRC, PATH_TESTS ]
- },
- {
- test: /\.css$/,
- use: styleLoader([
- 'style-loader',
- 'css-loader?sourceMap',
- 'postcss-loader?sourceMap'
- ]),
- include: PATH_SRC
- }
- ]
- },
- output: {
- path: PATH_DEMO,
- filename: 'app.js',
- publicPath: PUBLIC_PATH
- },
- plugins: [
- ...plugins,
- new webpack.HotModuleReplacementPlugin(),
- new webpack.NoEmitOnErrorsPlugin(),
- new webpack.NamedModulesPlugin()
- ],
- devServer: {
- port: PORT,
- publicPath: PUBLIC_PATH,
- hot: true,
- historyApiFallback: true,
- stats: {
- colors: true
- }
- }
-}
-
-function styleLoader (loaders) {
- if (process.env.NODE_ENV === 'production') {
- const [ fallback, ...use ] = loaders
- return extract({ fallback, use })
- }
- return loaders
-}
diff --git a/webpack.demo.babel.js b/webpack.demo.babel.js
deleted file mode 100644
index 871015124..000000000
--- a/webpack.demo.babel.js
+++ /dev/null
@@ -1,34 +0,0 @@
-import webpack from 'webpack'
-import ExtractTextPlugin from 'extract-text-webpack-plugin'
-import config, { plugins } from './webpack.config.babel'
-
-export const minifyPlugins = [
- new webpack.DefinePlugin({
- 'process.env': {
- NODE_ENV: JSON.stringify('production')
- }
- }),
- new webpack.optimize.UglifyJsPlugin({
- sourceMap: true,
- comments: false,
- mangle: {
- except: [ 'ReactPlayer' ]
- }
- }),
- new webpack.LoaderOptionsPlugin({ minimize: true })
-]
-
-export default {
- ...config,
- devtool: 'source-map',
- entry: [
- 'babel-polyfill',
- 'whatwg-fetch',
- './src/demo/index'
- ],
- plugins: [
- ...plugins,
- ...minifyPlugins,
- new ExtractTextPlugin({ filename: 'app.css' })
- ]
-}
diff --git a/webpack.dist.babel.js b/webpack.dist.babel.js
deleted file mode 100644
index b8766434f..000000000
--- a/webpack.dist.babel.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import path from 'path'
-import config, { minifyPlugins } from './webpack.demo.babel'
-
-export default {
- ...config,
- entry: './src/ReactPlayer',
- output: {
- path: path.join(__dirname, 'dist'),
- filename: 'ReactPlayer.js',
- library: 'ReactPlayer'
- },
- externals: {
- 'react': 'React'
- },
- module: {
- rules: [
- {
- test: /\.js$/,
- loader: 'babel-loader',
- options: {
- plugins: ['add-module-exports']
- }
- }
- ]
- },
- plugins: minifyPlugins
-}
diff --git a/webpack.standalone.babel.js b/webpack.standalone.babel.js
deleted file mode 100644
index 54cb936d6..000000000
--- a/webpack.standalone.babel.js
+++ /dev/null
@@ -1,24 +0,0 @@
-import path from 'path'
-import config, { minifyPlugins } from './webpack.demo.babel'
-
-export default {
- ...config,
- entry: './src/standalone.js',
- output: {
- path: path.join(__dirname, 'dist'),
- filename: 'ReactPlayer.standalone.js',
- library: 'renderReactPlayer'
- },
- module: {
- rules: [
- {
- test: /\.js$/,
- loader: 'babel-loader',
- options: {
- plugins: ['add-module-exports']
- }
- }
- ]
- },
- plugins: minifyPlugins
-}
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index 7fd1c6e3d..000000000
--- a/yarn.lock
+++ /dev/null
@@ -1,7928 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@babel/code-frame@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
- dependencies:
- chalk "^2.0.0"
- esutils "^2.0.2"
- js-tokens "^3.0.0"
-
-"@babel/helper-function-name@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
- dependencies:
- "@babel/helper-get-function-arity" "7.0.0-beta.36"
- "@babel/template" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
-
-"@babel/helper-get-function-arity@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
- dependencies:
- "@babel/types" "7.0.0-beta.36"
-
-"@babel/template@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
- dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
- lodash "^4.2.0"
-
-"@babel/traverse@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
- dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/helper-function-name" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
- debug "^3.0.1"
- globals "^11.1.0"
- invariant "^2.2.0"
- lodash "^4.2.0"
-
-"@babel/types@7.0.0-beta.36":
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
- dependencies:
- esutils "^2.0.2"
- lodash "^4.2.0"
- to-fast-properties "^2.0.0"
-
-JSONStream@^1.0.3:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea"
- dependencies:
- jsonparse "^1.2.0"
- through ">=2.2.7 <3"
-
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-
-abbrev@1.0.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
-
-accepts@1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca"
- dependencies:
- mime-types "~2.1.11"
- negotiator "0.6.1"
-
-accepts@~1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
- dependencies:
- mime-types "~2.1.16"
- negotiator "0.6.1"
-
-acorn-dynamic-import@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
- dependencies:
- acorn "^4.0.3"
-
-acorn-jsx@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
- dependencies:
- acorn "^3.0.4"
-
-acorn@^3.0.4:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-
-acorn@^4.0.3:
- version "4.0.13"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
-
-acorn@^5.0.0, acorn@^5.2.1:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
-
-addressparser@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746"
-
-after@0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
-
-agent-base@2:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7"
- dependencies:
- extend "~3.0.0"
- semver "~5.0.1"
-
-ajv-keywords@^2.0.0, ajv-keywords@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
-
-ajv@^4.9.1:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
- dependencies:
- co "^4.6.0"
- json-stable-stringify "^1.0.1"
-
-ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0:
- version "5.5.2"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
- dependencies:
- co "^4.6.0"
- fast-deep-equal "^1.0.0"
- fast-json-stable-stringify "^2.0.0"
- json-schema-traverse "^0.3.0"
-
-align-text@^0.1.1, align-text@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
- dependencies:
- kind-of "^3.0.2"
- longest "^1.0.1"
- repeat-string "^1.5.2"
-
-alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-escapes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
-
-ansi-html@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-regex@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-ansi-styles@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
- dependencies:
- color-convert "^1.9.0"
-
-anymatch@^1.3.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
- dependencies:
- micromatch "^2.1.5"
- normalize-path "^2.0.0"
-
-anymatch@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
- dependencies:
- micromatch "^3.1.4"
- normalize-path "^2.1.1"
-
-aproba@^1.0.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
-
-are-we-there-yet@~1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.6"
-
-argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
- dependencies:
- sprintf-js "~1.0.2"
-
-argv@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/argv/-/argv-0.0.2.tgz#ecbd16f8949b157183711b1bda334f37840185ab"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-diff@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-
-arr-flatten@^1.0.1, arr-flatten@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-
-arr-union@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-
-array-filter@~0.0.0:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
-
-array-find-index@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-
-array-flatten@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
-
-array-flatten@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
-
-array-includes@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
- dependencies:
- define-properties "^1.1.2"
- es-abstract "^1.7.0"
-
-array-map@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
-
-array-reduce@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
-
-array-slice@^0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
-
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-array-unique@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-
-arraybuffer.slice@~0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
-
-arrify@^1.0.0, arrify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asap@~2.0.3:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
-
-asn1.js@^4.0.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
- dependencies:
- bn.js "^4.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assert-plus@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-
-assert@^1.1.1, assert@^1.4.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
- dependencies:
- util "0.10.3"
-
-assertion-error@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
-
-assign-symbols@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-
-ast-types@0.x.x:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd"
-
-astw@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917"
- dependencies:
- acorn "^4.0.3"
-
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-async-limiter@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
-
-async@1.x, async@^1.4.0, async@^1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-
-async@^2.1.2, async@^2.4.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
- dependencies:
- lodash "^4.14.0"
-
-async@~0.9.0:
- version "0.9.2"
- resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
-
-async@~2.1.2:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc"
- dependencies:
- lodash "^4.14.0"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-atob@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d"
-
-auto-changelog@^1.2.2:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/auto-changelog/-/auto-changelog-1.3.0.tgz#a49bc9267a953d8d0a2beae41831da689144b81f"
- dependencies:
- babel-polyfill "^6.26.0"
- commander "^2.9.0"
- fs-extra "^5.0.0"
- handlebars "^4.0.11"
- parse-github-url "^1.0.1"
- semver "^5.1.0"
-
-autoprefixer@^6.3.1:
- version "6.7.7"
- resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
- dependencies:
- browserslist "^1.7.6"
- caniuse-db "^1.0.30000634"
- normalize-range "^0.1.2"
- num2fraction "^1.2.2"
- postcss "^5.2.16"
- postcss-value-parser "^3.2.3"
-
-aws-sign2@~0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-
-aws-sign2@~0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-
-aws4@^1.2.1, aws4@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
-
-axios@^0.15.3:
- version "0.15.3"
- resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053"
- dependencies:
- follow-redirects "1.0.0"
-
-babel-cli@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1"
- dependencies:
- babel-core "^6.26.0"
- babel-polyfill "^6.26.0"
- babel-register "^6.26.0"
- babel-runtime "^6.26.0"
- commander "^2.11.0"
- convert-source-map "^1.5.0"
- fs-readdir-recursive "^1.0.0"
- glob "^7.1.2"
- lodash "^4.17.4"
- output-file-sync "^1.1.2"
- path-is-absolute "^1.0.1"
- slash "^1.0.0"
- source-map "^0.5.6"
- v8flags "^2.1.1"
- optionalDependencies:
- chokidar "^1.6.1"
-
-babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
- dependencies:
- chalk "^1.1.3"
- esutils "^2.0.2"
- js-tokens "^3.0.2"
-
-babel-core@^6.16.0, babel-core@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
- dependencies:
- babel-code-frame "^6.26.0"
- babel-generator "^6.26.0"
- babel-helpers "^6.24.1"
- babel-messages "^6.23.0"
- babel-register "^6.26.0"
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- convert-source-map "^1.5.0"
- debug "^2.6.8"
- json5 "^0.5.1"
- lodash "^4.17.4"
- minimatch "^3.0.4"
- path-is-absolute "^1.0.1"
- private "^0.1.7"
- slash "^1.0.0"
- source-map "^0.5.6"
-
-babel-eslint@^8.2.1:
- version "8.2.1"
- resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
- dependencies:
- "@babel/code-frame" "7.0.0-beta.36"
- "@babel/traverse" "7.0.0-beta.36"
- "@babel/types" "7.0.0-beta.36"
- babylon "7.0.0-beta.36"
- eslint-scope "~3.7.1"
- eslint-visitor-keys "^1.0.0"
-
-babel-generator@^6.18.0, babel-generator@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
- dependencies:
- babel-messages "^6.23.0"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- detect-indent "^4.0.0"
- jsesc "^1.3.0"
- lodash "^4.17.4"
- source-map "^0.5.6"
- trim-right "^1.0.1"
-
-babel-helper-bindify-decorators@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330"
- dependencies:
- babel-runtime "^6.22.0"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
- dependencies:
- babel-helper-explode-assignable-expression "^6.24.1"
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-builder-react-jsx@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
- dependencies:
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- esutils "^2.0.2"
-
-babel-helper-call-delegate@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
- dependencies:
- babel-helper-hoist-variables "^6.24.1"
- babel-runtime "^6.22.0"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-define-map@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
- dependencies:
- babel-helper-function-name "^6.24.1"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- lodash "^4.17.4"
-
-babel-helper-explode-assignable-expression@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
- dependencies:
- babel-runtime "^6.22.0"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-explode-class@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb"
- dependencies:
- babel-helper-bindify-decorators "^6.24.1"
- babel-runtime "^6.22.0"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-function-name@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
- dependencies:
- babel-helper-get-function-arity "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-get-function-arity@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-hoist-variables@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-optimise-call-expression@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-helper-regex@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
- dependencies:
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- lodash "^4.17.4"
-
-babel-helper-remap-async-to-generator@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
- dependencies:
- babel-helper-function-name "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helper-replace-supers@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
- dependencies:
- babel-helper-optimise-call-expression "^6.24.1"
- babel-messages "^6.23.0"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-helpers@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
- dependencies:
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-loader@^7.0.0:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
- dependencies:
- find-cache-dir "^1.0.0"
- loader-utils "^1.0.2"
- mkdirp "^0.5.1"
-
-babel-messages@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-add-module-exports@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.2.1.tgz#9ae9a1f4a8dc67f0cdec4f4aeda1e43a5ff65e25"
-
-babel-plugin-check-es2015-constants@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-istanbul@^4.1.4:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
- dependencies:
- find-up "^2.1.0"
- istanbul-lib-instrument "^1.7.5"
- test-exclude "^4.1.1"
-
-babel-plugin-syntax-async-functions@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
-
-babel-plugin-syntax-async-generators@^6.5.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
-
-babel-plugin-syntax-class-constructor-call@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416"
-
-babel-plugin-syntax-class-properties@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
-
-babel-plugin-syntax-decorators@^6.13.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
-
-babel-plugin-syntax-do-expressions@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d"
-
-babel-plugin-syntax-dynamic-import@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
-
-babel-plugin-syntax-exponentiation-operator@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
-
-babel-plugin-syntax-export-extensions@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721"
-
-babel-plugin-syntax-flow@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
-
-babel-plugin-syntax-function-bind@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46"
-
-babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
-
-babel-plugin-syntax-object-rest-spread@^6.8.0:
- version "6.13.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
-
-babel-plugin-syntax-trailing-function-commas@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
-
-babel-plugin-transform-async-generator-functions@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db"
- dependencies:
- babel-helper-remap-async-to-generator "^6.24.1"
- babel-plugin-syntax-async-generators "^6.5.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
- dependencies:
- babel-helper-remap-async-to-generator "^6.24.1"
- babel-plugin-syntax-async-functions "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-class-constructor-call@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9"
- dependencies:
- babel-plugin-syntax-class-constructor-call "^6.18.0"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-class-properties@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
- dependencies:
- babel-helper-function-name "^6.24.1"
- babel-plugin-syntax-class-properties "^6.8.0"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-decorators@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
- dependencies:
- babel-helper-explode-class "^6.24.1"
- babel-plugin-syntax-decorators "^6.13.0"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-types "^6.24.1"
-
-babel-plugin-transform-do-expressions@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb"
- dependencies:
- babel-plugin-syntax-do-expressions "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-arrow-functions@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-block-scoping@^6.23.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
- dependencies:
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- lodash "^4.17.4"
-
-babel-plugin-transform-es2015-classes@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
- dependencies:
- babel-helper-define-map "^6.24.1"
- babel-helper-function-name "^6.24.1"
- babel-helper-optimise-call-expression "^6.24.1"
- babel-helper-replace-supers "^6.24.1"
- babel-messages "^6.23.0"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-computed-properties@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
- dependencies:
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-destructuring@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-for-of@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-function-name@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
- dependencies:
- babel-helper-function-name "^6.24.1"
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-literals@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
- dependencies:
- babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
- dependencies:
- babel-plugin-transform-strict-mode "^6.24.1"
- babel-runtime "^6.26.0"
- babel-template "^6.26.0"
- babel-types "^6.26.0"
-
-babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
- dependencies:
- babel-helper-hoist-variables "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-modules-umd@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
- dependencies:
- babel-plugin-transform-es2015-modules-amd "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-object-super@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
- dependencies:
- babel-helper-replace-supers "^6.24.1"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-parameters@^6.23.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
- dependencies:
- babel-helper-call-delegate "^6.24.1"
- babel-helper-get-function-arity "^6.24.1"
- babel-runtime "^6.22.0"
- babel-template "^6.24.1"
- babel-traverse "^6.24.1"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-spread@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-sticky-regex@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
- dependencies:
- babel-helper-regex "^6.24.1"
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-template-literals@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-unicode-regex@^6.22.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
- dependencies:
- babel-helper-regex "^6.24.1"
- babel-runtime "^6.22.0"
- regexpu-core "^2.0.0"
-
-babel-plugin-transform-es3-member-expression-literals@^6.8.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-es3-property-literals@^6.8.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
- dependencies:
- babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
- babel-plugin-syntax-exponentiation-operator "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-export-extensions@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653"
- dependencies:
- babel-plugin-syntax-export-extensions "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-flow-strip-types@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
- dependencies:
- babel-plugin-syntax-flow "^6.18.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-function-bind@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97"
- dependencies:
- babel-plugin-syntax-function-bind "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-object-rest-spread@^6.22.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
- dependencies:
- babel-plugin-syntax-object-rest-spread "^6.8.0"
- babel-runtime "^6.26.0"
-
-babel-plugin-transform-react-display-name@^6.23.0:
- version "6.25.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-react-jsx-self@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
- dependencies:
- babel-plugin-syntax-jsx "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-react-jsx-source@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
- dependencies:
- babel-plugin-syntax-jsx "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-react-jsx@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
- dependencies:
- babel-helper-builder-react-jsx "^6.24.1"
- babel-plugin-syntax-jsx "^6.8.0"
- babel-runtime "^6.22.0"
-
-babel-plugin-transform-regenerator@^6.22.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
- dependencies:
- regenerator-transform "^0.10.0"
-
-babel-plugin-transform-strict-mode@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
- dependencies:
- babel-runtime "^6.22.0"
- babel-types "^6.24.1"
-
-babel-polyfill@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153"
- dependencies:
- babel-runtime "^6.26.0"
- core-js "^2.5.0"
- regenerator-runtime "^0.10.5"
-
-babel-preset-env@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
- dependencies:
- babel-plugin-check-es2015-constants "^6.22.0"
- babel-plugin-syntax-trailing-function-commas "^6.22.0"
- babel-plugin-transform-async-to-generator "^6.22.0"
- babel-plugin-transform-es2015-arrow-functions "^6.22.0"
- babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
- babel-plugin-transform-es2015-block-scoping "^6.23.0"
- babel-plugin-transform-es2015-classes "^6.23.0"
- babel-plugin-transform-es2015-computed-properties "^6.22.0"
- babel-plugin-transform-es2015-destructuring "^6.23.0"
- babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
- babel-plugin-transform-es2015-for-of "^6.23.0"
- babel-plugin-transform-es2015-function-name "^6.22.0"
- babel-plugin-transform-es2015-literals "^6.22.0"
- babel-plugin-transform-es2015-modules-amd "^6.22.0"
- babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
- babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
- babel-plugin-transform-es2015-modules-umd "^6.23.0"
- babel-plugin-transform-es2015-object-super "^6.22.0"
- babel-plugin-transform-es2015-parameters "^6.23.0"
- babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
- babel-plugin-transform-es2015-spread "^6.22.0"
- babel-plugin-transform-es2015-sticky-regex "^6.22.0"
- babel-plugin-transform-es2015-template-literals "^6.22.0"
- babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
- babel-plugin-transform-es2015-unicode-regex "^6.22.0"
- babel-plugin-transform-exponentiation-operator "^6.22.0"
- babel-plugin-transform-regenerator "^6.22.0"
- browserslist "^2.1.2"
- invariant "^2.2.2"
- semver "^5.3.0"
-
-babel-preset-flow@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
- dependencies:
- babel-plugin-transform-flow-strip-types "^6.22.0"
-
-babel-preset-react@^6.16.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
- dependencies:
- babel-plugin-syntax-jsx "^6.3.13"
- babel-plugin-transform-react-display-name "^6.23.0"
- babel-plugin-transform-react-jsx "^6.24.1"
- babel-plugin-transform-react-jsx-self "^6.22.0"
- babel-plugin-transform-react-jsx-source "^6.22.0"
- babel-preset-flow "^6.23.0"
-
-babel-preset-stage-0@^6.16.0:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a"
- dependencies:
- babel-plugin-transform-do-expressions "^6.22.0"
- babel-plugin-transform-function-bind "^6.22.0"
- babel-preset-stage-1 "^6.24.1"
-
-babel-preset-stage-1@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0"
- dependencies:
- babel-plugin-transform-class-constructor-call "^6.24.1"
- babel-plugin-transform-export-extensions "^6.22.0"
- babel-preset-stage-2 "^6.24.1"
-
-babel-preset-stage-2@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1"
- dependencies:
- babel-plugin-syntax-dynamic-import "^6.18.0"
- babel-plugin-transform-class-properties "^6.24.1"
- babel-plugin-transform-decorators "^6.24.1"
- babel-preset-stage-3 "^6.24.1"
-
-babel-preset-stage-3@^6.24.1:
- version "6.24.1"
- resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395"
- dependencies:
- babel-plugin-syntax-trailing-function-commas "^6.22.0"
- babel-plugin-transform-async-generator-functions "^6.24.1"
- babel-plugin-transform-async-to-generator "^6.24.1"
- babel-plugin-transform-exponentiation-operator "^6.24.1"
- babel-plugin-transform-object-rest-spread "^6.22.0"
-
-babel-register@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
- dependencies:
- babel-core "^6.26.0"
- babel-runtime "^6.26.0"
- core-js "^2.5.0"
- home-or-tmp "^2.0.0"
- lodash "^4.17.4"
- mkdirp "^0.5.1"
- source-map-support "^0.4.15"
-
-babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.11.0"
-
-babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
- dependencies:
- babel-runtime "^6.26.0"
- babel-traverse "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- lodash "^4.17.4"
-
-babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
- dependencies:
- babel-code-frame "^6.26.0"
- babel-messages "^6.23.0"
- babel-runtime "^6.26.0"
- babel-types "^6.26.0"
- babylon "^6.18.0"
- debug "^2.6.8"
- globals "^9.18.0"
- invariant "^2.2.2"
- lodash "^4.17.4"
-
-babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
- dependencies:
- babel-runtime "^6.26.0"
- esutils "^2.0.2"
- lodash "^4.17.4"
- to-fast-properties "^1.0.3"
-
-babylon@7.0.0-beta.36:
- version "7.0.0-beta.36"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
-
-babylon@^6.18.0:
- version "6.18.0"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
-
-backo2@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
-
-balanced-match@^0.4.2:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
-
-balanced-match@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-base64-arraybuffer@0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8"
-
-base64-js@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
-
-base64id@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6"
-
-base@^0.11.1:
- version "0.11.2"
- resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
- dependencies:
- cache-base "^1.0.1"
- class-utils "^0.3.5"
- component-emitter "^1.2.1"
- define-property "^1.0.0"
- isobject "^3.0.1"
- mixin-deep "^1.2.0"
- pascalcase "^0.1.1"
-
-batch@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
- dependencies:
- tweetnacl "^0.14.3"
-
-better-assert@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522"
- dependencies:
- callsite "1.0.0"
-
-big.js@^3.1.3:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
-
-binary-extensions@^1.0.0:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
-
-bl@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398"
- dependencies:
- readable-stream "~2.0.5"
-
-blob@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921"
-
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- dependencies:
- inherits "~2.0.0"
-
-bluebird@^3.3.0, bluebird@^3.4.7:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
-
-bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
- version "4.11.8"
- resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
-
-body-parser@1.18.2, body-parser@^1.16.1:
- version "1.18.2"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
- dependencies:
- bytes "3.0.0"
- content-type "~1.0.4"
- debug "2.6.9"
- depd "~1.1.1"
- http-errors "~1.6.2"
- iconv-lite "0.4.19"
- on-finished "~2.3.0"
- qs "6.5.1"
- raw-body "2.3.2"
- type-is "~1.6.15"
-
-bonjour@^3.5.0:
- version "3.5.0"
- resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
- dependencies:
- array-flatten "^2.1.0"
- deep-equal "^1.0.1"
- dns-equal "^1.0.0"
- dns-txt "^2.0.2"
- multicast-dns "^6.0.1"
- multicast-dns-service-types "^1.1.0"
-
-boolbase@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
-
-boom@2.x.x:
- version "2.10.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
- dependencies:
- hoek "2.x.x"
-
-boom@4.x.x:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
- dependencies:
- hoek "4.x.x"
-
-boom@5.x.x:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
- dependencies:
- hoek "4.x.x"
-
-brace-expansion@^1.1.7:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
- dependencies:
- balanced-match "^1.0.0"
- concat-map "0.0.1"
-
-braces@^0.1.2:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6"
- dependencies:
- expand-range "^0.1.0"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-braces@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.0.tgz#a46941cb5fb492156b3d6a656e06c35364e3e66e"
- dependencies:
- arr-flatten "^1.1.0"
- array-unique "^0.3.2"
- define-property "^1.0.0"
- extend-shallow "^2.0.1"
- fill-range "^4.0.0"
- isobject "^3.0.1"
- repeat-element "^1.1.2"
- snapdragon "^0.8.1"
- snapdragon-node "^2.0.1"
- split-string "^3.0.2"
- to-regex "^3.0.1"
-
-brorand@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
-
-browser-pack@^6.0.1:
- version "6.0.3"
- resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.3.tgz#91ca96518583ef580ab063a309de62e407767a39"
- dependencies:
- JSONStream "^1.0.3"
- combine-source-map "~0.8.0"
- defined "^1.0.0"
- safe-buffer "^5.1.1"
- through2 "^2.0.0"
- umd "^3.0.0"
-
-browser-resolve@^1.11.0, browser-resolve@^1.7.0:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
- dependencies:
- resolve "1.1.7"
-
-browser-stdout@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f"
-
-browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
- dependencies:
- buffer-xor "^1.0.3"
- cipher-base "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.3"
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-browserify-cipher@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
- dependencies:
- browserify-aes "^1.0.4"
- browserify-des "^1.0.0"
- evp_bytestokey "^1.0.0"
-
-browserify-des@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
- dependencies:
- cipher-base "^1.0.1"
- des.js "^1.0.0"
- inherits "^2.0.1"
-
-browserify-rsa@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
- dependencies:
- bn.js "^4.1.0"
- randombytes "^2.0.1"
-
-browserify-sign@^4.0.0:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
- dependencies:
- bn.js "^4.1.1"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.2"
- elliptic "^6.0.0"
- inherits "^2.0.1"
- parse-asn1 "^5.0.0"
-
-browserify-zlib@^0.2.0, browserify-zlib@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
- dependencies:
- pako "~1.0.5"
-
-browserify@^14.5.0:
- version "14.5.0"
- resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.5.0.tgz#0bbbce521acd6e4d1d54d8e9365008efb85a9cc5"
- dependencies:
- JSONStream "^1.0.3"
- assert "^1.4.0"
- browser-pack "^6.0.1"
- browser-resolve "^1.11.0"
- browserify-zlib "~0.2.0"
- buffer "^5.0.2"
- cached-path-relative "^1.0.0"
- concat-stream "~1.5.1"
- console-browserify "^1.1.0"
- constants-browserify "~1.0.0"
- crypto-browserify "^3.0.0"
- defined "^1.0.0"
- deps-sort "^2.0.0"
- domain-browser "~1.1.0"
- duplexer2 "~0.1.2"
- events "~1.1.0"
- glob "^7.1.0"
- has "^1.0.0"
- htmlescape "^1.1.0"
- https-browserify "^1.0.0"
- inherits "~2.0.1"
- insert-module-globals "^7.0.0"
- labeled-stream-splicer "^2.0.0"
- module-deps "^4.0.8"
- os-browserify "~0.3.0"
- parents "^1.0.1"
- path-browserify "~0.0.0"
- process "~0.11.0"
- punycode "^1.3.2"
- querystring-es3 "~0.2.0"
- read-only-stream "^2.0.0"
- readable-stream "^2.0.2"
- resolve "^1.1.4"
- shasum "^1.0.0"
- shell-quote "^1.6.1"
- stream-browserify "^2.0.0"
- stream-http "^2.0.0"
- string_decoder "~1.0.0"
- subarg "^1.0.0"
- syntax-error "^1.1.1"
- through2 "^2.0.0"
- timers-browserify "^1.0.1"
- tty-browserify "~0.0.0"
- url "~0.11.0"
- util "~0.10.1"
- vm-browserify "~0.0.1"
- xtend "^4.0.0"
-
-browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
- version "1.7.7"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
- dependencies:
- caniuse-db "^1.0.30000639"
- electron-to-chromium "^1.2.7"
-
-browserslist@^2.1.2:
- version "2.11.3"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2"
- dependencies:
- caniuse-lite "^1.0.30000792"
- electron-to-chromium "^1.3.30"
-
-buffer-indexof@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
-
-buffer-xor@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
-
-buffer@^4.3.0:
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
-buffer@^5.0.2:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.8.tgz#84daa52e7cf2fa8ce4195bc5cf0f7809e0930b24"
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
-
-buildmail@4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72"
- dependencies:
- addressparser "1.0.1"
- libbase64 "0.1.0"
- libmime "3.0.0"
- libqp "1.1.0"
- nodemailer-fetch "1.6.0"
- nodemailer-shared "1.1.0"
- punycode "1.4.1"
-
-builtin-modules@^1.0.0, builtin-modules@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-
-builtin-status-codes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
-
-bytes@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
-
-cache-base@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
- dependencies:
- collection-visit "^1.0.0"
- component-emitter "^1.2.1"
- get-value "^2.0.6"
- has-value "^1.0.0"
- isobject "^3.0.1"
- set-value "^2.0.0"
- to-object-path "^0.3.0"
- union-value "^1.0.0"
- unset-value "^1.0.0"
-
-cached-path-relative@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7"
-
-caller-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
- dependencies:
- callsites "^0.2.0"
-
-callsite@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20"
-
-callsites@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
-
-camel-case@3.0.x:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
- dependencies:
- no-case "^2.2.0"
- upper-case "^1.1.1"
-
-camelcase-keys@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
- dependencies:
- camelcase "^2.0.0"
- map-obj "^1.0.0"
-
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-camelcase@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-
-camelcase@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-
-camelcase@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
-
-caniuse-api@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
- dependencies:
- browserslist "^1.3.6"
- caniuse-db "^1.0.30000529"
- lodash.memoize "^4.1.2"
- lodash.uniq "^4.5.0"
-
-caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
- version "1.0.30000793"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000793.tgz#3c00c66e423a7a1907c7dd96769a78b2afa8a72e"
-
-caniuse-lite@^1.0.30000792:
- version "1.0.30000792"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz#d0cea981f8118f3961471afbb43c9a1e5bbf0332"
-
-caseless@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
-
-caseless@~0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
-center-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
- dependencies:
- align-text "^0.1.3"
- lazy-cache "^1.0.3"
-
-chai@^4.0.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/chai/-/chai-4.1.2.tgz#0f64584ba642f0f2ace2806279f4f06ca23ad73c"
- dependencies:
- assertion-error "^1.0.1"
- check-error "^1.0.1"
- deep-eql "^3.0.0"
- get-func-name "^2.0.0"
- pathval "^1.0.0"
- type-detect "^4.0.0"
-
-chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- dependencies:
- ansi-styles "^2.2.1"
- escape-string-regexp "^1.0.2"
- has-ansi "^2.0.0"
- strip-ansi "^3.0.0"
- supports-color "^2.0.0"
-
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
- dependencies:
- ansi-styles "^3.1.0"
- escape-string-regexp "^1.0.5"
- supports-color "^4.0.0"
-
-chardet@^0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
-
-check-error@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
-
-chokidar@^1.4.1, chokidar@^1.6.1, chokidar@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
-chokidar@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.0.tgz#6686313c541d3274b2a5c01233342037948c911b"
- dependencies:
- anymatch "^2.0.0"
- async-each "^1.0.0"
- braces "^2.3.0"
- glob-parent "^3.1.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^4.0.0"
- normalize-path "^2.1.1"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
-cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-circular-json@^0.3.1:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
-
-circular-json@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.4.0.tgz#c448ea998b7fe31ecf472ec29c6b608e2e2a62fd"
-
-clap@^1.0.9:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
- dependencies:
- chalk "^1.1.3"
-
-class-utils@^0.3.5:
- version "0.3.6"
- resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
- dependencies:
- arr-union "^3.1.0"
- define-property "^0.2.5"
- isobject "^3.0.0"
- static-extend "^0.1.1"
-
-clean-css@4.1.x:
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
- dependencies:
- source-map "0.5.x"
-
-cli-cursor@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
- dependencies:
- restore-cursor "^2.0.0"
-
-cli-width@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
-
-cliui@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
- dependencies:
- center-align "^0.1.1"
- right-align "^0.1.1"
- wordwrap "0.0.2"
-
-cliui@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wrap-ansi "^2.0.0"
-
-clone@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-co@~3.0.6:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda"
-
-coa@~1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
- dependencies:
- q "^1.1.2"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-codecov@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/codecov/-/codecov-3.0.0.tgz#c273b8c4f12945723e8dc9d25803d89343e5f28e"
- dependencies:
- argv "0.0.2"
- request "2.81.0"
- urlgrey "0.4.4"
-
-collection-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
- dependencies:
- map-visit "^1.0.0"
- object-visit "^1.0.0"
-
-color-convert@^1.3.0, color-convert@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
- dependencies:
- color-name "^1.1.1"
-
-color-name@^1.0.0, color-name@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-
-color-string@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
- dependencies:
- color-name "^1.0.0"
-
-color@^0.11.0:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
- dependencies:
- clone "^1.0.2"
- color-convert "^1.3.0"
- color-string "^0.3.0"
-
-colormin@^1.0.5:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
- dependencies:
- color "^0.11.0"
- css-color-names "0.0.4"
- has "^1.0.1"
-
-colors@^1.1.0, colors@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-
-combine-lists@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6"
- dependencies:
- lodash "^4.5.0"
-
-combine-source-map@~0.7.1:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e"
- dependencies:
- convert-source-map "~1.1.0"
- inline-source-map "~0.6.0"
- lodash.memoize "~3.0.3"
- source-map "~0.5.3"
-
-combine-source-map@~0.8.0:
- version "0.8.0"
- resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b"
- dependencies:
- convert-source-map "~1.1.0"
- inline-source-map "~0.6.0"
- lodash.memoize "~3.0.3"
- source-map "~0.5.3"
-
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@2.11.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
-
-commander@2.12.x:
- version "2.12.2"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
-
-commander@^2.11.0, commander@^2.9.0, commander@~2.13.0:
- version "2.13.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
-
-commondir@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
-
-component-bind@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"
-
-component-emitter@1.2.1, component-emitter@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
-
-component-inherit@0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
-
-compressible@~2.0.11:
- version "2.0.12"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
- dependencies:
- mime-db ">= 1.30.0 < 2"
-
-compression@^1.5.2:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db"
- dependencies:
- accepts "~1.3.4"
- bytes "3.0.0"
- compressible "~2.0.11"
- debug "2.6.9"
- on-headers "~1.0.1"
- safe-buffer "5.1.1"
- vary "~1.1.2"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-concat-stream@^1.5.0, concat-stream@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
- dependencies:
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-concat-stream@~1.5.0, concat-stream@~1.5.1:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
- dependencies:
- inherits "~2.0.1"
- readable-stream "~2.0.0"
- typedarray "~0.0.5"
-
-connect-history-api-fallback@^1.3.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
-
-connect@^3.6.0:
- version "3.6.5"
- resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.5.tgz#fb8dde7ba0763877d0ec9df9dac0b4b40e72c7da"
- dependencies:
- debug "2.6.9"
- finalhandler "1.0.6"
- parseurl "~1.3.2"
- utils-merge "1.0.1"
-
-console-browserify@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
- dependencies:
- date-now "^0.1.4"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-constants-browserify@^1.0.0, constants-browserify@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
-
-contains-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
-
-content-disposition@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
-
-content-type@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-
-convert-source-map@^1.5.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
-
-convert-source-map@~1.1.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860"
-
-cookie-signature@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
-
-cookie@0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
-
-copy-descriptor@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-
-core-js@^1.0.0:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
-
-core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.0:
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
- dependencies:
- is-directory "^0.3.1"
- js-yaml "^3.4.3"
- minimist "^1.2.0"
- object-assign "^4.1.0"
- os-homedir "^1.0.1"
- parse-json "^2.2.0"
- require-from-string "^1.1.0"
-
-create-ecdh@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
- dependencies:
- bn.js "^4.1.0"
- elliptic "^6.0.0"
-
-create-hash@^1.1.0, create-hash@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
- dependencies:
- cipher-base "^1.0.1"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- sha.js "^2.4.0"
-
-create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
- dependencies:
- cipher-base "^1.0.3"
- create-hash "^1.1.0"
- inherits "^2.0.1"
- ripemd160 "^2.0.0"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-cross-env@^5.1.3:
- version "5.1.3"
- resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.3.tgz#f8ae18faac87692b0a8b4d2f7000d4ec3a85dfd7"
- dependencies:
- cross-spawn "^5.1.0"
- is-windows "^1.0.0"
-
-cross-spawn@^5.0.1, cross-spawn@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
- dependencies:
- lru-cache "^4.0.1"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-cryptiles@2.x.x:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
- dependencies:
- boom "2.x.x"
-
-cryptiles@3.x.x:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
- dependencies:
- boom "5.x.x"
-
-crypto-browserify@^3.0.0, crypto-browserify@^3.11.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
- dependencies:
- browserify-cipher "^1.0.0"
- browserify-sign "^4.0.0"
- create-ecdh "^4.0.0"
- create-hash "^1.1.0"
- create-hmac "^1.1.0"
- diffie-hellman "^5.0.0"
- inherits "^2.0.1"
- pbkdf2 "^3.0.3"
- public-encrypt "^4.0.0"
- randombytes "^2.0.0"
- randomfill "^1.0.3"
-
-css-color-names@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
-
-css-loader@^0.28.9:
- version "0.28.9"
- resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.9.tgz#68064b85f4e271d7ce4c48a58300928e535d1c95"
- dependencies:
- babel-code-frame "^6.26.0"
- css-selector-tokenizer "^0.7.0"
- cssnano "^3.10.0"
- icss-utils "^2.1.0"
- loader-utils "^1.0.2"
- lodash.camelcase "^4.3.0"
- object-assign "^4.1.1"
- postcss "^5.0.6"
- postcss-modules-extract-imports "^1.2.0"
- postcss-modules-local-by-default "^1.2.0"
- postcss-modules-scope "^1.1.0"
- postcss-modules-values "^1.3.0"
- postcss-value-parser "^3.3.0"
- source-list-map "^2.0.0"
-
-css-select@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
- dependencies:
- boolbase "~1.0.0"
- css-what "2.1"
- domutils "1.5.1"
- nth-check "~1.0.1"
-
-css-selector-tokenizer@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
- dependencies:
- cssesc "^0.1.0"
- fastparse "^1.1.1"
- regexpu-core "^1.0.0"
-
-css-what@2.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
-
-cssesc@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
-
-cssnano@^3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
- dependencies:
- autoprefixer "^6.3.1"
- decamelize "^1.1.2"
- defined "^1.0.0"
- has "^1.0.1"
- object-assign "^4.0.1"
- postcss "^5.0.14"
- postcss-calc "^5.2.0"
- postcss-colormin "^2.1.8"
- postcss-convert-values "^2.3.4"
- postcss-discard-comments "^2.0.4"
- postcss-discard-duplicates "^2.0.1"
- postcss-discard-empty "^2.0.1"
- postcss-discard-overridden "^0.1.1"
- postcss-discard-unused "^2.2.1"
- postcss-filter-plugins "^2.0.0"
- postcss-merge-idents "^2.1.5"
- postcss-merge-longhand "^2.0.1"
- postcss-merge-rules "^2.0.3"
- postcss-minify-font-values "^1.0.2"
- postcss-minify-gradients "^1.0.1"
- postcss-minify-params "^1.0.4"
- postcss-minify-selectors "^2.0.4"
- postcss-normalize-charset "^1.1.0"
- postcss-normalize-url "^3.0.7"
- postcss-ordered-values "^2.1.0"
- postcss-reduce-idents "^2.2.2"
- postcss-reduce-initial "^1.0.0"
- postcss-reduce-transforms "^1.0.3"
- postcss-svgo "^2.1.1"
- postcss-unique-selectors "^2.0.2"
- postcss-value-parser "^3.2.3"
- postcss-zindex "^2.0.1"
-
-csso@~2.3.1:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
- dependencies:
- clap "^1.0.9"
- source-map "^0.5.3"
-
-currently-unhandled@^0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
- dependencies:
- array-find-index "^1.0.1"
-
-custom-event@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
-
-d@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
- dependencies:
- es5-ext "^0.10.9"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-data-uri-to-buffer@1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835"
-
-date-format@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8"
-
-date-now@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-
-dateformat@^1.0.6:
- version "1.0.12"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
- dependencies:
- get-stdin "^4.0.1"
- meow "^3.3.0"
-
-debug-log@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
-
-debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9:
- version "2.6.9"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
- dependencies:
- ms "2.0.0"
-
-debug@3.1.0, debug@^3.0.1, debug@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
- dependencies:
- ms "2.0.0"
-
-debug@~2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
- dependencies:
- ms "0.7.1"
-
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-decode-uri-component@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
-
-deep-eql@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
- dependencies:
- type-detect "^4.0.0"
-
-deep-equal@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
-
-deep-extend@~0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
-
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-
-deepmerge@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.0.1.tgz#25c1c24f110fb914f80001b925264dd77f3f4312"
-
-define-properties@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
- dependencies:
- foreach "^2.0.5"
- object-keys "^1.0.8"
-
-define-property@^0.2.5:
- version "0.2.5"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
- dependencies:
- is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
- dependencies:
- is-descriptor "^1.0.0"
-
-defined@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-
-degenerator@~1.0.2:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095"
- dependencies:
- ast-types "0.x.x"
- escodegen "1.x.x"
- esprima "3.x.x"
-
-deglob@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a"
- dependencies:
- find-root "^1.0.0"
- glob "^7.0.5"
- ignore "^3.0.9"
- pkg-config "^1.1.0"
- run-parallel "^1.1.2"
- uniq "^1.0.1"
-
-del@^2.0.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
- dependencies:
- globby "^5.0.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- rimraf "^2.2.8"
-
-del@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
- dependencies:
- globby "^6.1.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- p-map "^1.1.1"
- pify "^3.0.0"
- rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-depd@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
-
-depd@~1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
-
-deps-sort@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5"
- dependencies:
- JSONStream "^1.0.3"
- shasum "^1.0.0"
- subarg "^1.0.0"
- through2 "^2.0.0"
-
-des.js@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
- dependencies:
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
-
-destroy@~1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
-
-detect-indent@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
- dependencies:
- repeating "^2.0.0"
-
-detect-libc@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
-
-detect-node@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
-
-detective@^4.0.0:
- version "4.7.1"
- resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e"
- dependencies:
- acorn "^5.2.1"
- defined "^1.0.0"
-
-di@^0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c"
-
-diff@3.3.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75"
-
-diffie-hellman@^5.0.0:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
- dependencies:
- bn.js "^4.1.0"
- miller-rabin "^4.0.0"
- randombytes "^2.0.0"
-
-dns-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
-
-dns-packet@^1.0.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
- dependencies:
- ip "^1.1.0"
- safe-buffer "^5.0.1"
-
-dns-txt@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
- dependencies:
- buffer-indexof "^1.0.0"
-
-doctrine@1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
- dependencies:
- esutils "^2.0.2"
- isarray "^1.0.0"
-
-doctrine@^2.0.0, doctrine@^2.0.2:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
- dependencies:
- esutils "^2.0.2"
-
-dom-converter@~0.1:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
- dependencies:
- utila "~0.3"
-
-dom-serialize@^2.2.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b"
- dependencies:
- custom-event "~1.0.0"
- ent "~2.2.0"
- extend "^3.0.0"
- void-elements "^2.0.0"
-
-dom-serializer@0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
- dependencies:
- domelementtype "~1.1.1"
- entities "~1.1.1"
-
-dom-walk@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
-
-domain-browser@^1.1.1, domain-browser@~1.1.0:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
-
-domelementtype@1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
-
-domelementtype@~1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
-
-domhandler@2.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
- dependencies:
- domelementtype "1"
-
-domutils@1.1:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
- dependencies:
- domelementtype "1"
-
-domutils@1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
- dependencies:
- dom-serializer "0"
- domelementtype "1"
-
-dot-prop@^4.1.1:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
- dependencies:
- is-obj "^1.0.0"
-
-double-ended-queue@^2.1.0-0:
- version "2.1.0-0"
- resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c"
-
-duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
- dependencies:
- readable-stream "^2.0.2"
-
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
-ee-first@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-
-electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
- version "1.3.31"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.31.tgz#00d832cba9fe2358652b0c48a8816c8e3a037e9f"
-
-elliptic@^6.0.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
- dependencies:
- bn.js "^4.4.0"
- brorand "^1.0.1"
- hash.js "^1.0.0"
- hmac-drbg "^1.0.0"
- inherits "^2.0.1"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.0"
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
-
-encodeurl@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20"
-
-encoding@^0.1.11:
- version "0.1.12"
- resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
- dependencies:
- iconv-lite "~0.4.13"
-
-engine.io-client@~3.1.0:
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.4.tgz#4fcf1370b47163bd2ce9be2733972430350d4ea1"
- dependencies:
- component-emitter "1.2.1"
- component-inherit "0.0.3"
- debug "~2.6.9"
- engine.io-parser "~2.1.1"
- has-cors "1.1.0"
- indexof "0.0.1"
- parseqs "0.0.5"
- parseuri "0.0.5"
- ws "~3.3.1"
- xmlhttprequest-ssl "~1.5.4"
- yeast "0.1.2"
-
-engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196"
- dependencies:
- after "0.8.2"
- arraybuffer.slice "~0.0.7"
- base64-arraybuffer "0.1.5"
- blob "0.0.4"
- has-binary2 "~1.0.2"
-
-engine.io@~3.1.0:
- version "3.1.4"
- resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.4.tgz#3d0211b70a552ce841ffc7da8627b301a9a4162e"
- dependencies:
- accepts "1.3.3"
- base64id "1.0.0"
- cookie "0.3.1"
- debug "~2.6.9"
- engine.io-parser "~2.1.0"
- ws "~3.3.1"
- optionalDependencies:
- uws "~0.14.4"
-
-enhanced-resolve@^3.4.0:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.4.0"
- object-assign "^4.0.1"
- tapable "^0.2.7"
-
-ent@~2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d"
-
-entities@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
-
-errno@^0.1.1, errno@^0.1.3:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
- dependencies:
- prr "~1.0.1"
-
-error-ex@^1.2.0, error-ex@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
- dependencies:
- is-arrayish "^0.2.1"
-
-error-stack-parser@^1.3.6:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-1.3.6.tgz#e0e73b93e417138d1cd7c0b746b1a4a14854c292"
- dependencies:
- stackframe "^0.3.1"
-
-es-abstract@^1.7.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
- dependencies:
- es-to-primitive "^1.1.1"
- function-bind "^1.1.1"
- has "^1.0.1"
- is-callable "^1.1.3"
- is-regex "^1.0.4"
-
-es-to-primitive@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
- dependencies:
- is-callable "^1.1.1"
- is-date-object "^1.0.1"
- is-symbol "^1.0.1"
-
-es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.38"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3"
- dependencies:
- es6-iterator "~2.0.3"
- es6-symbol "~3.1.1"
-
-es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
- dependencies:
- d "1"
- es5-ext "^0.10.35"
- es6-symbol "^3.1.1"
-
-es6-map@^0.1.3:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-set "~0.1.5"
- es6-symbol "~3.1.1"
- event-emitter "~0.3.5"
-
-es6-set@~0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
- es6-iterator "~2.0.1"
- es6-symbol "3.1.1"
- event-emitter "~0.3.5"
-
-es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-es6-weak-map@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
- dependencies:
- d "1"
- es5-ext "^0.10.14"
- es6-iterator "^2.0.1"
- es6-symbol "^3.1.1"
-
-escape-html@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
-
-escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@1.8.x:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
-escodegen@1.x.x:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
- dependencies:
- esprima "^3.1.3"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.5.6"
-
-escope@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
- dependencies:
- es6-map "^0.1.3"
- es6-weak-map "^2.0.1"
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint-config-standard-jsx@4.0.2:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz#009e53c4ddb1e9ee70b4650ffe63a7f39f8836e1"
-
-eslint-config-standard@11.0.0-beta.0:
- version "11.0.0-beta.0"
- resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-11.0.0-beta.0.tgz#f8afe69803d95c685a4b8392b8793188eb03cbb3"
-
-eslint-import-resolver-node@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
- dependencies:
- debug "^2.6.9"
- resolve "^1.5.0"
-
-eslint-module-utils@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
- dependencies:
- debug "^2.6.8"
- pkg-dir "^1.0.0"
-
-eslint-plugin-import@~2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
- dependencies:
- builtin-modules "^1.1.1"
- contains-path "^0.1.0"
- debug "^2.6.8"
- doctrine "1.5.0"
- eslint-import-resolver-node "^0.3.1"
- eslint-module-utils "^2.1.1"
- has "^1.0.1"
- lodash.cond "^4.3.0"
- minimatch "^3.0.3"
- read-pkg-up "^2.0.0"
-
-eslint-plugin-node@~5.2.1:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-5.2.1.tgz#80df3253c4d7901045ec87fa660a284e32bdca29"
- dependencies:
- ignore "^3.3.6"
- minimatch "^3.0.4"
- resolve "^1.3.3"
- semver "5.3.0"
-
-eslint-plugin-promise@~3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75"
-
-eslint-plugin-react@~7.5.1:
- version "7.5.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b"
- dependencies:
- doctrine "^2.0.0"
- has "^1.0.1"
- jsx-ast-utils "^2.0.0"
- prop-types "^15.6.0"
-
-eslint-plugin-standard@~3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2"
-
-eslint-scope@^3.7.1, eslint-scope@~3.7.1:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
- dependencies:
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint-visitor-keys@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
-
-eslint@~4.13.0:
- version "4.13.1"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.13.1.tgz#0055e0014464c7eb7878caf549ef2941992b444f"
- dependencies:
- ajv "^5.3.0"
- babel-code-frame "^6.22.0"
- chalk "^2.1.0"
- concat-stream "^1.6.0"
- cross-spawn "^5.1.0"
- debug "^3.0.1"
- doctrine "^2.0.2"
- eslint-scope "^3.7.1"
- espree "^3.5.2"
- esquery "^1.0.0"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- file-entry-cache "^2.0.0"
- functional-red-black-tree "^1.0.1"
- glob "^7.1.2"
- globals "^11.0.1"
- ignore "^3.3.3"
- imurmurhash "^0.1.4"
- inquirer "^3.0.6"
- is-resolvable "^1.0.0"
- js-yaml "^3.9.1"
- json-stable-stringify-without-jsonify "^1.0.1"
- levn "^0.3.0"
- lodash "^4.17.4"
- minimatch "^3.0.2"
- mkdirp "^0.5.1"
- natural-compare "^1.4.0"
- optionator "^0.8.2"
- path-is-inside "^1.0.2"
- pluralize "^7.0.0"
- progress "^2.0.0"
- require-uncached "^1.0.3"
- semver "^5.3.0"
- strip-ansi "^4.0.0"
- strip-json-comments "~2.0.1"
- table "^4.0.1"
- text-table "~0.2.0"
-
-espree@^3.5.2:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
- dependencies:
- acorn "^5.2.1"
- acorn-jsx "^3.0.0"
-
-esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-
-esprima@3.x.x, esprima@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
-
-esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
-
-esquery@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
- dependencies:
- estraverse "^4.0.0"
-
-esrecurse@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
- dependencies:
- estraverse "^4.1.0"
- object-assign "^4.0.1"
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
-
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-etag@~1.8.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
-
-event-emitter@~0.3.5:
- version "0.3.5"
- resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
- dependencies:
- d "1"
- es5-ext "~0.10.14"
-
-eventemitter3@1.x.x:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
-
-events@^1.0.0, events@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
-
-eventsource@0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
- dependencies:
- original ">=0.0.5"
-
-evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
- dependencies:
- md5.js "^1.3.4"
- safe-buffer "^5.1.1"
-
-execa@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
- dependencies:
- cross-spawn "^5.0.1"
- get-stream "^3.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
-expand-braces@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea"
- dependencies:
- array-slice "^0.2.3"
- array-unique "^0.2.1"
- braces "^0.1.2"
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-brackets@^2.1.4:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
- dependencies:
- debug "^2.3.3"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- posix-character-classes "^0.1.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-expand-range@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044"
- dependencies:
- is-number "^0.1.1"
- repeat-string "^0.2.2"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- dependencies:
- fill-range "^2.1.0"
-
-exports-loader@^0.6.3:
- version "0.6.4"
- resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.6.4.tgz#d70fc6121975b35fc12830cf52754be2740fc886"
- dependencies:
- loader-utils "^1.0.2"
- source-map "0.5.x"
-
-express@^4.16.2:
- version "4.16.2"
- resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
- dependencies:
- accepts "~1.3.4"
- array-flatten "1.1.1"
- body-parser "1.18.2"
- content-disposition "0.5.2"
- content-type "~1.0.4"
- cookie "0.3.1"
- cookie-signature "1.0.6"
- debug "2.6.9"
- depd "~1.1.1"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- etag "~1.8.1"
- finalhandler "1.1.0"
- fresh "0.5.2"
- merge-descriptors "1.0.1"
- methods "~1.1.2"
- on-finished "~2.3.0"
- parseurl "~1.3.2"
- path-to-regexp "0.1.7"
- proxy-addr "~2.0.2"
- qs "6.5.1"
- range-parser "~1.2.0"
- safe-buffer "5.1.1"
- send "0.16.1"
- serve-static "1.13.1"
- setprototypeof "1.1.0"
- statuses "~1.3.1"
- type-is "~1.6.15"
- utils-merge "1.0.1"
- vary "~1.1.2"
-
-extend-shallow@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
- dependencies:
- is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
- dependencies:
- assign-symbols "^1.0.0"
- is-extendable "^1.0.1"
-
-extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
-
-external-editor@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
- dependencies:
- chardet "^0.4.0"
- iconv-lite "^0.4.17"
- tmp "^0.0.33"
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- dependencies:
- is-extglob "^1.0.0"
-
-extglob@^2.0.2:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
- dependencies:
- array-unique "^0.3.2"
- define-property "^1.0.0"
- expand-brackets "^2.1.4"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-extract-text-webpack-plugin@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"
- dependencies:
- async "^2.4.1"
- loader-utils "^1.1.0"
- schema-utils "^0.3.0"
- webpack-sources "^1.0.1"
-
-extsprintf@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-
-extsprintf@^1.2.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
-
-fast-deep-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
-
-fast-json-stable-stringify@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
-
-fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.4:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-
-fastparse@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
-
-faye-websocket@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
- dependencies:
- websocket-driver ">=0.5.1"
-
-faye-websocket@~0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
- dependencies:
- websocket-driver ">=0.5.1"
-
-fbjs@^0.8.16:
- version "0.8.16"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
- dependencies:
- core-js "^1.0.0"
- isomorphic-fetch "^2.1.1"
- loose-envify "^1.0.0"
- object-assign "^4.1.0"
- promise "^7.1.1"
- setimmediate "^1.0.5"
- ua-parser-js "^0.7.9"
-
-figures@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
- dependencies:
- escape-string-regexp "^1.0.5"
-
-file-entry-cache@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
- dependencies:
- flat-cache "^1.2.1"
- object-assign "^4.0.1"
-
-file-uri-to-path@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
-
-filename-regex@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-
-fill-range@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^1.1.3"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-fill-range@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
- dependencies:
- extend-shallow "^2.0.1"
- is-number "^3.0.0"
- repeat-string "^1.6.1"
- to-regex-range "^2.1.0"
-
-finalhandler@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f"
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.2"
- statuses "~1.3.1"
- unpipe "~1.0.0"
-
-finalhandler@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
- dependencies:
- debug "2.6.9"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- on-finished "~2.3.0"
- parseurl "~1.3.2"
- statuses "~1.3.1"
- unpipe "~1.0.0"
-
-find-cache-dir@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
- dependencies:
- commondir "^1.0.1"
- make-dir "^1.0.0"
- pkg-dir "^2.0.0"
-
-find-root@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
-
-find-up@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
- dependencies:
- path-exists "^2.0.0"
- pinkie-promise "^2.0.0"
-
-find-up@^2.0.0, find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- dependencies:
- locate-path "^2.0.0"
-
-flat-cache@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
- dependencies:
- circular-json "^0.3.1"
- del "^2.0.2"
- graceful-fs "^4.1.2"
- write "^0.2.1"
-
-flatten@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
-
-follow-redirects@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37"
- dependencies:
- debug "^2.2.0"
-
-for-in@^1.0.1, for-in@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-
-for-own@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
- dependencies:
- for-in "^1.0.1"
-
-foreach@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.11"
-
-form-data@~2.1.1:
- version "2.1.4"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-form-data@~2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-forwarded@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
-
-fragment-cache@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
- dependencies:
- map-cache "^0.2.2"
-
-fresh@0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
-
-fs-access@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a"
- dependencies:
- null-check "^1.0.0"
-
-fs-extra@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^4.0.0"
- universalify "^0.1.0"
-
-fs-readdir-recursive@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@^1.0.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
- dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.39"
-
-fstream-ignore@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
- dependencies:
- fstream "^1.0.0"
- inherits "2"
- minimatch "^3.0.0"
-
-fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-ftp@~0.3.10:
- version "0.3.10"
- resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d"
- dependencies:
- readable-stream "1.1.x"
- xregexp "2.0.0"
-
-function-bind@^1.0.2, function-bind@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-
-functional-red-black-tree@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
-
-gauge@~2.7.3:
- version "2.7.4"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-generate-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- dependencies:
- is-property "^1.0.0"
-
-get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
-
-get-func-name@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
-
-get-stdin@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-
-get-stdin@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
-
-get-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-
-get-uri@2:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59"
- dependencies:
- data-uri-to-buffer "1"
- debug "2"
- extend "3"
- file-uri-to-path "1"
- ftp "~0.3.10"
- readable-stream "2"
-
-get-value@^2.0.3, get-value@^2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-
-getpass@^0.1.1:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
- dependencies:
- assert-plus "^1.0.0"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- dependencies:
- is-glob "^2.0.0"
-
-glob-parent@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
- dependencies:
- is-glob "^3.1.0"
- path-dirname "^1.0.0"
-
-glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.4"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^5.0.15:
- version "5.0.15"
- resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@^6.0.4:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "2 || 3"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-global@^4.3.0:
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f"
- dependencies:
- min-document "^2.19.0"
- process "~0.5.1"
-
-globals@^11.0.1, globals@^11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
-
-globals@^9.18.0:
- version "9.18.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
-
-globby@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
- dependencies:
- array-union "^1.0.1"
- arrify "^1.0.0"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-globby@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
- dependencies:
- array-union "^1.0.1"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-growl@1.10.3:
- version "1.10.3"
- resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f"
-
-handle-thing@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
-
-handlebars@^4.0.1, handlebars@^4.0.11:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
- dependencies:
- async "^1.4.0"
- optimist "^0.6.1"
- source-map "^0.4.4"
- optionalDependencies:
- uglify-js "^2.6"
-
-har-schema@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
-
-har-schema@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-
-har-validator@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
- dependencies:
- chalk "^1.1.1"
- commander "^2.9.0"
- is-my-json-valid "^2.12.4"
- pinkie-promise "^2.0.0"
-
-har-validator@~4.2.1:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
- dependencies:
- ajv "^4.9.1"
- har-schema "^1.0.5"
-
-har-validator@~5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
- dependencies:
- ajv "^5.1.0"
- har-schema "^2.0.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- dependencies:
- ansi-regex "^2.0.0"
-
-has-binary2@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98"
- dependencies:
- isarray "2.0.1"
-
-has-cors@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has-flag@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-has-value@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
- dependencies:
- get-value "^2.0.3"
- has-values "^0.1.4"
- isobject "^2.0.0"
-
-has-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
- dependencies:
- get-value "^2.0.6"
- has-values "^1.0.0"
- isobject "^3.0.0"
-
-has-values@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-
-has-values@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-has@^1.0.0, has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
- dependencies:
- function-bind "^1.0.2"
-
-hash-base@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
- dependencies:
- inherits "^2.0.1"
-
-hash-base@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
- dependencies:
- inherits "^2.0.3"
- minimalistic-assert "^1.0.0"
-
-hawk@3.1.3, hawk@~3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
- dependencies:
- boom "2.x.x"
- cryptiles "2.x.x"
- hoek "2.x.x"
- sntp "1.x.x"
-
-hawk@~6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
- dependencies:
- boom "4.x.x"
- cryptiles "3.x.x"
- hoek "4.x.x"
- sntp "2.x.x"
-
-he@1.1.1, he@1.1.x:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
-
-hipchat-notifier@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e"
- dependencies:
- lodash "^4.0.0"
- request "^2.0.0"
-
-hmac-drbg@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
- dependencies:
- hash.js "^1.0.3"
- minimalistic-assert "^1.0.0"
- minimalistic-crypto-utils "^1.0.1"
-
-hoek@2.x.x:
- version "2.16.3"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-
-hoek@4.x.x:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-
-hoist-non-react-statics@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
-
-home-or-tmp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.1"
-
-hosted-git-info@^2.1.4:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
-
-hpack.js@^2.1.6:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
- dependencies:
- inherits "^2.0.1"
- obuf "^1.0.0"
- readable-stream "^2.0.1"
- wbuf "^1.1.0"
-
-html-comment-regex@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
-
-html-entities@^1.2.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
-
-html-minifier@^3.2.3:
- version "3.5.8"
- resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.8.tgz#5ccdb1f73a0d654e6090147511f6e6b2ee312700"
- dependencies:
- camel-case "3.0.x"
- clean-css "4.1.x"
- commander "2.12.x"
- he "1.1.x"
- ncname "1.0.x"
- param-case "2.1.x"
- relateurl "0.2.x"
- uglify-js "3.3.x"
-
-html-webpack-plugin@^2.30.1:
- version "2.30.1"
- resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5"
- dependencies:
- bluebird "^3.4.7"
- html-minifier "^3.2.3"
- loader-utils "^0.2.16"
- lodash "^4.17.3"
- pretty-error "^2.0.2"
- toposort "^1.0.0"
-
-htmlescape@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351"
-
-htmlparser2@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
- dependencies:
- domelementtype "1"
- domhandler "2.1"
- domutils "1.1"
- readable-stream "1.0"
-
-http-deceiver@^1.2.7:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
-
-http-errors@1.6.2, http-errors@~1.6.2:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
- dependencies:
- depd "1.1.1"
- inherits "2.0.3"
- setprototypeof "1.0.3"
- statuses ">= 1.3.1 < 2"
-
-http-parser-js@>=0.4.0:
- version "0.4.9"
- resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1"
-
-http-proxy-agent@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a"
- dependencies:
- agent-base "2"
- debug "2"
- extend "3"
-
-http-proxy-middleware@~0.17.4:
- version "0.17.4"
- resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
- dependencies:
- http-proxy "^1.16.2"
- is-glob "^3.1.0"
- lodash "^4.17.2"
- micromatch "^2.3.11"
-
-http-proxy@^1.13.0, http-proxy@^1.16.2:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
- dependencies:
- eventemitter3 "1.x.x"
- requires-port "1.x.x"
-
-http-signature@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
- dependencies:
- assert-plus "^0.2.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-http-signature@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
- dependencies:
- assert-plus "^1.0.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-httpntlm@1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2"
- dependencies:
- httpreq ">=0.4.22"
- underscore "~1.7.0"
-
-httpreq@>=0.4.22:
- version "0.4.24"
- resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f"
-
-https-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
-
-https-proxy-agent@1:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6"
- dependencies:
- agent-base "2"
- debug "2"
- extend "3"
-
-iconv-lite@0.4.15:
- version "0.4.15"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
-
-iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
-
-icss-replace-symbols@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
-
-icss-utils@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
- dependencies:
- postcss "^6.0.1"
-
-ieee754@^1.1.4:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
-
-ignore@^3.0.9, ignore@^3.3.3, ignore@^3.3.6:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
-
-image-size@~0.5.0:
- version "0.5.5"
- resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
-
-import-local@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc"
- dependencies:
- pkg-dir "^2.0.0"
- resolve-cwd "^2.0.0"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-
-indent-string@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
- dependencies:
- repeating "^2.0.0"
-
-indexes-of@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
-
-indexof@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
-
-inflection@~1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f"
-
-inflection@~1.3.0:
- version "1.3.8"
- resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
-
-ini@~1.3.0:
- version "1.3.5"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
-
-inline-source-map@~0.6.0:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5"
- dependencies:
- source-map "~0.5.3"
-
-inquirer@^3.0.6:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
- dependencies:
- ansi-escapes "^3.0.0"
- chalk "^2.0.0"
- cli-cursor "^2.1.0"
- cli-width "^2.0.0"
- external-editor "^2.0.4"
- figures "^2.0.0"
- lodash "^4.3.0"
- mute-stream "0.0.7"
- run-async "^2.2.0"
- rx-lite "^4.0.8"
- rx-lite-aggregates "^4.0.8"
- string-width "^2.1.0"
- strip-ansi "^4.0.0"
- through "^2.3.6"
-
-insert-module-globals@^7.0.0:
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.1.tgz#c03bf4e01cb086d5b5e5ace8ad0afe7889d638c3"
- dependencies:
- JSONStream "^1.0.3"
- combine-source-map "~0.7.1"
- concat-stream "~1.5.1"
- is-buffer "^1.1.0"
- lexical-scope "^1.2.0"
- process "~0.11.0"
- through2 "^2.0.0"
- xtend "^4.0.0"
-
-internal-ip@1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c"
- dependencies:
- meow "^3.3.0"
-
-interpret@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
-
-invariant@^2.2.0, invariant@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
- dependencies:
- loose-envify "^1.0.0"
-
-invert-kv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-
-ip@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590"
-
-ip@^1.1.0, ip@^1.1.2, ip@^1.1.4, ip@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
-
-ipaddr.js@1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
-
-is-absolute-url@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
-
-is-accessor-descriptor@^0.1.6:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
- dependencies:
- kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
- dependencies:
- kind-of "^6.0.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- dependencies:
- binary-extensions "^1.0.0"
-
-is-buffer@^1.1.0, is-buffer@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-
-is-builtin-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
- dependencies:
- builtin-modules "^1.0.0"
-
-is-callable@^1.1.1, is-callable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
-
-is-data-descriptor@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
- dependencies:
- kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
- dependencies:
- kind-of "^6.0.0"
-
-is-date-object@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
-
-is-descriptor@^0.1.0:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
- dependencies:
- is-accessor-descriptor "^0.1.6"
- is-data-descriptor "^0.1.4"
- kind-of "^5.0.0"
-
-is-descriptor@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
- dependencies:
- is-accessor-descriptor "^1.0.0"
- is-data-descriptor "^1.0.0"
- kind-of "^6.0.2"
-
-is-directory@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
-
-is-dotfile@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- dependencies:
- is-primitive "^2.0.0"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-
-is-extendable@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
- dependencies:
- is-plain-object "^2.0.4"
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-
-is-extglob@^2.1.0, is-extglob@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-
-is-finite@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- dependencies:
- is-extglob "^1.0.0"
-
-is-glob@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
- dependencies:
- is-extglob "^2.1.0"
-
-is-glob@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
- dependencies:
- is-extglob "^2.1.1"
-
-is-my-json-valid@^2.12.4:
- version "2.17.1"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471"
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
-is-number@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806"
-
-is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- dependencies:
- kind-of "^3.0.2"
-
-is-number@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
- dependencies:
- kind-of "^3.0.2"
-
-is-obj@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
-
-is-odd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-1.0.0.tgz#3b8a932eb028b3775c39bb09e91767accdb69088"
- dependencies:
- is-number "^3.0.0"
-
-is-path-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-
-is-path-in-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
- dependencies:
- is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
- dependencies:
- path-is-inside "^1.0.1"
-
-is-plain-obj@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
- dependencies:
- isobject "^3.0.1"
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-
-is-property@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
-
-is-regex@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
- dependencies:
- has "^1.0.1"
-
-is-resolvable@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4"
-
-is-stream@^1.0.1, is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-
-is-svg@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
- dependencies:
- html-comment-regex "^1.1.0"
-
-is-symbol@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-is-utf8@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-
-is-windows@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
-
-is-wsl@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
-
-isarray@0.0.1, isarray@~0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isarray@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e"
-
-isbinaryfile@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621"
-
-isexe@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- dependencies:
- isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-
-isomorphic-fetch@^2.1.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
- dependencies:
- node-fetch "^1.0.1"
- whatwg-fetch ">=0.10.0"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-istanbul-lib-coverage@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
-
-istanbul-lib-instrument@^1.7.5:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
- dependencies:
- babel-generator "^6.18.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
- babylon "^6.18.0"
- istanbul-lib-coverage "^1.1.1"
- semver "^5.3.0"
-
-istanbul@^0.4.0:
- version "0.4.5"
- resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b"
- dependencies:
- abbrev "1.0.x"
- async "1.x"
- escodegen "1.8.x"
- esprima "2.7.x"
- glob "^5.0.15"
- handlebars "^4.0.1"
- js-yaml "3.x"
- mkdirp "0.5.x"
- nopt "3.x"
- once "1.x"
- resolve "1.1.x"
- supports-color "^3.1.0"
- which "^1.1.1"
- wordwrap "^1.0.0"
-
-js-base64@^2.1.9:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.1.tgz#e02813181cd53002888e918935467acb2910e596"
-
-js-tokens@^3.0.0, js-tokens@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-
-js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.9.1:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
- dependencies:
- argparse "^1.0.7"
- esprima "^4.0.0"
-
-js-yaml@~3.7.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
- dependencies:
- argparse "^1.0.7"
- esprima "^2.6.0"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
-jsesc@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-
-jsesc@~0.5.0:
- version "0.5.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
-
-json-loader@^0.5.4:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
-
-json-parse-better-errors@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a"
-
-json-schema-traverse@^0.3.0:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify-without-jsonify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
-
-json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- dependencies:
- jsonify "~0.0.0"
-
-json-stable-stringify@~0.0.0:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45"
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-json3@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
-
-json5@^0.5.0, json5@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
-
-jsonfile@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsonparse@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
-
-jsonpointer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
-
-jsprim@^1.2.2:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
- dependencies:
- assert-plus "1.0.0"
- extsprintf "1.3.0"
- json-schema "0.2.3"
- verror "1.10.0"
-
-jsx-ast-utils@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
- dependencies:
- array-includes "^3.0.3"
-
-karma-chai@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/karma-chai/-/karma-chai-0.1.0.tgz#bee5ad40400517811ae34bb945f762909108b79a"
-
-karma-chrome-launcher@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf"
- dependencies:
- fs-access "^1.0.0"
- which "^1.2.1"
-
-karma-cli@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/karma-cli/-/karma-cli-1.0.1.tgz#ae6c3c58a313a1d00b45164c455b9b86ce17f960"
- dependencies:
- resolve "^1.1.6"
-
-karma-coverage@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6"
- dependencies:
- dateformat "^1.0.6"
- istanbul "^0.4.0"
- lodash "^3.8.0"
- minimatch "^3.0.0"
- source-map "^0.5.1"
-
-karma-mocha-reporter@^2.2.0:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560"
- dependencies:
- chalk "^2.1.0"
- log-symbols "^2.1.0"
- strip-ansi "^4.0.0"
-
-karma-mocha@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-1.3.0.tgz#eeaac7ffc0e201eb63c467440d2b69c7cf3778bf"
- dependencies:
- minimist "1.2.0"
-
-karma-sourcemap-loader@^0.3.7:
- version "0.3.7"
- resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8"
- dependencies:
- graceful-fs "^4.1.2"
-
-karma-webpack@^2.0.9:
- version "2.0.9"
- resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.9.tgz#61c88091f7dd910635134c032b266a465affb57f"
- dependencies:
- async "~0.9.0"
- loader-utils "^0.2.5"
- lodash "^3.8.0"
- source-map "^0.5.6"
- webpack-dev-middleware "^1.12.0"
-
-karma@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.0.tgz#a02698dd7f0f05ff5eb66ab8f65582490b512e58"
- dependencies:
- bluebird "^3.3.0"
- body-parser "^1.16.1"
- browserify "^14.5.0"
- chokidar "^1.4.1"
- colors "^1.1.0"
- combine-lists "^1.0.0"
- connect "^3.6.0"
- core-js "^2.2.0"
- di "^0.0.1"
- dom-serialize "^2.2.0"
- expand-braces "^0.1.1"
- glob "^7.1.1"
- graceful-fs "^4.1.2"
- http-proxy "^1.13.0"
- isbinaryfile "^3.0.0"
- lodash "^4.17.4"
- log4js "^2.3.9"
- mime "^1.3.4"
- minimatch "^3.0.2"
- optimist "^0.6.1"
- qjobs "^1.1.4"
- range-parser "^1.2.0"
- rimraf "^2.6.0"
- safe-buffer "^5.0.1"
- socket.io "2.0.4"
- source-map "^0.6.1"
- tmp "0.0.33"
- useragent "^2.1.12"
-
-killable@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
- dependencies:
- is-buffer "^1.1.5"
-
-kind-of@^5.0.0, kind-of@^5.0.2:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-
-kind-of@^6.0.0, kind-of@^6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
-
-labeled-stream-splicer@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59"
- dependencies:
- inherits "^2.0.1"
- isarray "~0.0.1"
- stream-splicer "^2.0.0"
-
-lazy-cache@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lazy-cache@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264"
- dependencies:
- set-getter "^0.1.0"
-
-lcid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
- dependencies:
- invert-kv "^1.0.0"
-
-less@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b"
- optionalDependencies:
- errno "^0.1.1"
- graceful-fs "^4.1.2"
- image-size "~0.5.0"
- mime "^1.2.11"
- mkdirp "^0.5.0"
- promise "^7.1.1"
- request "2.81.0"
- source-map "^0.5.3"
-
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-lexical-scope@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4"
- dependencies:
- astw "^2.0.0"
-
-libbase64@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6"
-
-libmime@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6"
- dependencies:
- iconv-lite "0.4.15"
- libbase64 "0.1.0"
- libqp "1.1.0"
-
-libqp@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8"
-
-load-json-file@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- strip-bom "^2.0.0"
-
-load-json-file@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- strip-bom "^3.0.0"
-
-load-json-file@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^4.0.0"
- pify "^3.0.0"
- strip-bom "^3.0.0"
-
-load-script@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4"
-
-loader-runner@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
-
-loader-utils@^0.2.16, loader-utils@^0.2.5:
- version "0.2.17"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
- dependencies:
- big.js "^3.1.3"
- emojis-list "^2.0.0"
- json5 "^0.5.0"
- object-assign "^4.0.1"
-
-loader-utils@^1.0.2, loader-utils@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
- dependencies:
- big.js "^3.1.3"
- emojis-list "^2.0.0"
- json5 "^0.5.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-lodash.camelcase@^4.3.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
-
-lodash.cond@^4.3.0:
- version "4.5.2"
- resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
-
-lodash.memoize@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
-
-lodash.memoize@~3.0.3:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f"
-
-lodash.uniq@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-
-lodash@^3.8.0:
- version "3.10.1"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6"
-
-lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.5.0:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
-
-log-symbols@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6"
- dependencies:
- chalk "^2.0.1"
-
-log4js@^2.3.9:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/log4js/-/log4js-2.4.1.tgz#b0c4e88133e0e3056afdc6f91f7f377576158778"
- dependencies:
- circular-json "^0.4.0"
- date-format "^1.2.0"
- debug "^3.1.0"
- semver "^5.3.0"
- streamroller "^0.7.0"
- optionalDependencies:
- axios "^0.15.3"
- hipchat-notifier "^1.1.0"
- loggly "^1.1.0"
- mailgun-js "^0.7.0"
- nodemailer "^2.5.0"
- redis "^2.7.1"
- slack-node "~0.2.0"
-
-loggly@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee"
- dependencies:
- json-stringify-safe "5.0.x"
- request "2.75.x"
- timespan "2.3.x"
-
-loglevel@^1.4.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
-
-longest@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
- dependencies:
- js-tokens "^3.0.0"
-
-loud-rejection@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
- dependencies:
- currently-unhandled "^0.4.1"
- signal-exit "^3.0.0"
-
-lower-case@^1.1.1:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
-
-lru-cache@2.2.x:
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d"
-
-lru-cache@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
- dependencies:
- pseudomap "^1.0.2"
- yallist "^2.1.2"
-
-lru-cache@~2.6.5:
- version "2.6.5"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5"
-
-macaddress@^0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
-
-mailcomposer@4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4"
- dependencies:
- buildmail "4.0.1"
- libmime "3.0.0"
-
-mailgun-js@^0.7.0:
- version "0.7.15"
- resolved "https://registry.yarnpkg.com/mailgun-js/-/mailgun-js-0.7.15.tgz#ee366a20dac64c3c15c03d6c1b3e0ed795252abb"
- dependencies:
- async "~2.1.2"
- debug "~2.2.0"
- form-data "~2.1.1"
- inflection "~1.10.0"
- is-stream "^1.1.0"
- path-proxy "~1.0.0"
- proxy-agent "~2.0.0"
- q "~1.4.0"
- tsscmp "~1.0.0"
-
-make-dir@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
- dependencies:
- pify "^3.0.0"
-
-map-cache@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-
-map-obj@^1.0.0, map-obj@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
-
-map-visit@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
- dependencies:
- object-visit "^1.0.0"
-
-math-expression-evaluator@^1.2.14:
- version "1.2.17"
- resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
-
-md5.js@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
- dependencies:
- hash-base "^3.0.0"
- inherits "^2.0.1"
-
-media-typer@0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-
-mem@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
- dependencies:
- mimic-fn "^1.0.0"
-
-memory-fs@^0.4.0, memory-fs@~0.4.1:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-meow@^3.3.0:
- version "3.7.0"
- resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
- dependencies:
- camelcase-keys "^2.0.0"
- decamelize "^1.1.2"
- loud-rejection "^1.0.0"
- map-obj "^1.0.1"
- minimist "^1.1.3"
- normalize-package-data "^2.3.4"
- object-assign "^4.0.1"
- read-pkg-up "^1.0.1"
- redent "^1.0.0"
- trim-newlines "^1.0.0"
-
-merge-descriptors@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
-
-methods@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
-
-micromatch@^2.1.5, micromatch@^2.3.11:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-micromatch@^3.1.4:
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.5.tgz#d05e168c206472dfbca985bfef4f57797b4cd4ba"
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- braces "^2.3.0"
- define-property "^1.0.0"
- extend-shallow "^2.0.1"
- extglob "^2.0.2"
- fragment-cache "^0.2.1"
- kind-of "^6.0.0"
- nanomatch "^1.2.5"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-miller-rabin@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
- dependencies:
- bn.js "^4.0.0"
- brorand "^1.0.1"
-
-"mime-db@>= 1.30.0 < 2":
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414"
-
-mime-db@~1.30.0:
- version "1.30.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
-
-mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
- version "2.1.17"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
- dependencies:
- mime-db "~1.30.0"
-
-mime@1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
-
-mime@^1.2.11, mime@^1.3.4, mime@^1.5.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
-
-mimic-fn@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
-
-min-document@^2.19.0:
- version "2.19.0"
- resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
- dependencies:
- dom-walk "^0.1.0"
-
-minimalistic-assert@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
-
-minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
-
-"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
- dependencies:
- brace-expansion "^1.1.7"
-
-minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-minimist@~0.0.1:
- version "0.0.10"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
-
-mixin-deep@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.0.tgz#47a8732ba97799457c8c1eca28f95132d7e8150a"
- dependencies:
- for-in "^1.0.2"
- is-extendable "^1.0.1"
-
-mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
-mocha@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794"
- dependencies:
- browser-stdout "1.3.0"
- commander "2.11.0"
- debug "3.1.0"
- diff "3.3.1"
- escape-string-regexp "1.0.5"
- glob "7.1.2"
- growl "1.10.3"
- he "1.1.1"
- mkdirp "0.5.1"
- supports-color "4.4.0"
-
-module-deps@^4.0.8:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd"
- dependencies:
- JSONStream "^1.0.3"
- browser-resolve "^1.7.0"
- cached-path-relative "^1.0.0"
- concat-stream "~1.5.0"
- defined "^1.0.0"
- detective "^4.0.0"
- duplexer2 "^0.1.2"
- inherits "^2.0.1"
- parents "^1.0.0"
- readable-stream "^2.0.2"
- resolve "^1.1.3"
- stream-combiner2 "^1.1.1"
- subarg "^1.0.0"
- through2 "^2.0.0"
- xtend "^4.0.0"
-
-ms@0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
-
-ms@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-
-multicast-dns-service-types@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
-
-multicast-dns@^6.0.1:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.1.tgz#c5035defa9219d30640558a49298067352098060"
- dependencies:
- dns-packet "^1.0.1"
- thunky "^0.1.0"
-
-mute-stream@0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-
-nan@^2.3.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
-
-nanomatch@^1.2.5:
- version "1.2.7"
- resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.7.tgz#53cd4aa109ff68b7f869591fdc9d10daeeea3e79"
- dependencies:
- arr-diff "^4.0.0"
- array-unique "^0.3.2"
- define-property "^1.0.0"
- extend-shallow "^2.0.1"
- fragment-cache "^0.2.1"
- is-odd "^1.0.0"
- kind-of "^5.0.2"
- object.pick "^1.3.0"
- regex-not "^1.0.0"
- snapdragon "^0.8.1"
- to-regex "^3.0.1"
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-
-ncname@1.0.x:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
- dependencies:
- xml-char-classes "^1.0.0"
-
-negotiator@0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
-
-netmask@~1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35"
-
-no-case@^2.2.0:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
- dependencies:
- lower-case "^1.1.1"
-
-node-fetch@^1.0.1:
- version "1.7.3"
- resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
- dependencies:
- encoding "^0.1.11"
- is-stream "^1.0.1"
-
-node-forge@0.6.33:
- version "0.6.33"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc"
-
-node-libs-browser@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
- dependencies:
- assert "^1.1.1"
- browserify-zlib "^0.2.0"
- buffer "^4.3.0"
- console-browserify "^1.1.0"
- constants-browserify "^1.0.0"
- crypto-browserify "^3.11.0"
- domain-browser "^1.1.1"
- events "^1.0.0"
- https-browserify "^1.0.0"
- os-browserify "^0.3.0"
- path-browserify "0.0.0"
- process "^0.11.10"
- punycode "^1.2.4"
- querystring-es3 "^0.2.0"
- readable-stream "^2.3.3"
- stream-browserify "^2.0.1"
- stream-http "^2.7.2"
- string_decoder "^1.0.0"
- timers-browserify "^2.0.4"
- tty-browserify "0.0.0"
- url "^0.11.0"
- util "^0.10.3"
- vm-browserify "0.0.4"
-
-node-pre-gyp@^0.6.39:
- version "0.6.39"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
- dependencies:
- detect-libc "^1.0.2"
- hawk "3.1.3"
- mkdirp "^0.5.1"
- nopt "^4.0.1"
- npmlog "^4.0.2"
- rc "^1.1.7"
- request "2.81.0"
- rimraf "^2.6.1"
- semver "^5.3.0"
- tar "^2.2.1"
- tar-pack "^3.4.0"
-
-node-uuid@~1.4.7:
- version "1.4.8"
- resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907"
-
-nodemailer-direct-transport@3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86"
- dependencies:
- nodemailer-shared "1.1.0"
- smtp-connection "2.12.0"
-
-nodemailer-fetch@1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4"
-
-nodemailer-shared@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0"
- dependencies:
- nodemailer-fetch "1.6.0"
-
-nodemailer-smtp-pool@2.8.2:
- version "2.8.2"
- resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72"
- dependencies:
- nodemailer-shared "1.1.0"
- nodemailer-wellknown "0.1.10"
- smtp-connection "2.12.0"
-
-nodemailer-smtp-transport@2.7.2:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77"
- dependencies:
- nodemailer-shared "1.1.0"
- nodemailer-wellknown "0.1.10"
- smtp-connection "2.12.0"
-
-nodemailer-wellknown@0.1.10:
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5"
-
-nodemailer@^2.5.0:
- version "2.7.2"
- resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9"
- dependencies:
- libmime "3.0.0"
- mailcomposer "4.0.1"
- nodemailer-direct-transport "3.3.2"
- nodemailer-shared "1.1.0"
- nodemailer-smtp-pool "2.8.2"
- nodemailer-smtp-transport "2.7.2"
- socks "1.1.9"
-
-nopt@3.x:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- dependencies:
- abbrev "1"
-
-nopt@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
- dependencies:
- abbrev "1"
- osenv "^0.1.4"
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
- dependencies:
- hosted-git-info "^2.1.4"
- is-builtin-module "^1.0.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
- dependencies:
- remove-trailing-separator "^1.0.1"
-
-normalize-range@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
-
-normalize-url@^1.4.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
- dependencies:
- object-assign "^4.0.1"
- prepend-http "^1.0.0"
- query-string "^4.1.0"
- sort-keys "^1.0.0"
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- dependencies:
- path-key "^2.0.0"
-
-npmlog@^4.0.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.3"
- set-blocking "~2.0.0"
-
-nth-check@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
- dependencies:
- boolbase "~1.0.0"
-
-null-check@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd"
-
-num2fraction@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-oauth-sign@~0.8.1, oauth-sign@~0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-
-object-component@0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291"
-
-object-copy@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
- dependencies:
- copy-descriptor "^0.1.0"
- define-property "^0.2.5"
- kind-of "^3.0.3"
-
-object-keys@^1.0.8:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
-
-object-visit@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
- dependencies:
- isobject "^3.0.0"
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-object.pick@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
- dependencies:
- isobject "^3.0.1"
-
-obuf@^1.0.0, obuf@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e"
-
-on-finished@~2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
- dependencies:
- ee-first "1.1.1"
-
-on-headers@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
-
-once@1.x, once@^1.3.0, once@^1.3.3:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- dependencies:
- wrappy "1"
-
-onetime@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
- dependencies:
- mimic-fn "^1.0.0"
-
-opn@^5.1.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225"
- dependencies:
- is-wsl "^1.1.0"
-
-optimist@^0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1, optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- wordwrap "~1.0.0"
-
-original@>=0.0.5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b"
- dependencies:
- url-parse "1.0.x"
-
-os-browserify@^0.3.0, os-browserify@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
-
-os-homedir@^1.0.0, os-homedir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-locale@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
- dependencies:
- lcid "^1.0.0"
-
-os-locale@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
- dependencies:
- execa "^0.7.0"
- lcid "^1.0.0"
- mem "^1.1.0"
-
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-osenv@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.0"
-
-output-file-sync@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76"
- dependencies:
- graceful-fs "^4.1.4"
- mkdirp "^0.5.1"
- object-assign "^4.1.0"
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-
-p-limit@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
- dependencies:
- p-try "^1.0.0"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- dependencies:
- p-limit "^1.1.0"
-
-p-map@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
-
-p-try@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
-
-pac-proxy-agent@1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d"
- dependencies:
- agent-base "2"
- debug "2"
- extend "3"
- get-uri "2"
- http-proxy-agent "1"
- https-proxy-agent "1"
- pac-resolver "~2.0.0"
- raw-body "2"
- socks-proxy-agent "2"
-
-pac-resolver@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd"
- dependencies:
- co "~3.0.6"
- degenerator "~1.0.2"
- ip "1.0.1"
- netmask "~1.0.4"
- thunkify "~2.1.1"
-
-pako@~1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
-
-param-case@2.1.x:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
- dependencies:
- no-case "^2.2.0"
-
-parents@^1.0.0, parents@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751"
- dependencies:
- path-platform "~0.11.15"
-
-parse-asn1@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
- dependencies:
- asn1.js "^4.0.0"
- browserify-aes "^1.0.0"
- create-hash "^1.1.0"
- evp_bytestokey "^1.0.0"
- pbkdf2 "^3.0.3"
-
-parse-github-url@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/parse-github-url/-/parse-github-url-1.0.2.tgz#242d3b65cbcdda14bb50439e3242acf6971db395"
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- dependencies:
- error-ex "^1.2.0"
-
-parse-json@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0"
- dependencies:
- error-ex "^1.3.1"
- json-parse-better-errors "^1.0.1"
-
-parseqs@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
- dependencies:
- better-assert "~1.0.0"
-
-parseuri@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a"
- dependencies:
- better-assert "~1.0.0"
-
-parseurl@~1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
-
-pascalcase@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-
-path-browserify@0.0.0, path-browserify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
-
-path-dirname@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
-
-path-exists@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
- dependencies:
- pinkie-promise "^2.0.0"
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-
-path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-is-inside@^1.0.1, path-is-inside@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-
-path-key@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-
-path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-
-path-platform@~0.11.15:
- version "0.11.15"
- resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2"
-
-path-proxy@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e"
- dependencies:
- inflection "~1.3.0"
-
-path-to-regexp@0.1.7:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
-
-path-type@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-path-type@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
- dependencies:
- pify "^2.0.0"
-
-pathval@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
-
-pbkdf2@^3.0.3:
- version "3.0.14"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
- dependencies:
- create-hash "^1.1.2"
- create-hmac "^1.1.4"
- ripemd160 "^2.0.1"
- safe-buffer "^5.0.1"
- sha.js "^2.4.8"
-
-performance-now@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
-
-performance-now@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-
-pify@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-
-pkg-conf@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058"
- dependencies:
- find-up "^2.0.0"
- load-json-file "^4.0.0"
-
-pkg-config@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4"
- dependencies:
- debug-log "^1.0.0"
- find-root "^1.0.0"
- xtend "^4.0.1"
-
-pkg-dir@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
- dependencies:
- find-up "^1.0.0"
-
-pkg-dir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
- dependencies:
- find-up "^2.1.0"
-
-pluralize@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
-
-portfinder@^1.0.9:
- version "1.0.13"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
- dependencies:
- async "^1.5.2"
- debug "^2.2.0"
- mkdirp "0.5.x"
-
-posix-character-classes@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-
-postcss-automath@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/postcss-automath/-/postcss-automath-1.0.1.tgz#fb79ebf959e9b9f4e7af3ff1c8b6cccfc6bc0900"
- dependencies:
- less "^2.7.1"
- postcss "^5.2.4"
- postcss-message-helpers "^2.0.0"
-
-postcss-calc@^5.2.0:
- version "5.3.1"
- resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
- dependencies:
- postcss "^5.0.2"
- postcss-message-helpers "^2.0.0"
- reduce-css-calc "^1.2.6"
-
-postcss-colormin@^2.1.8:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
- dependencies:
- colormin "^1.0.5"
- postcss "^5.0.13"
- postcss-value-parser "^3.2.3"
-
-postcss-convert-values@^2.3.4:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
- dependencies:
- postcss "^5.0.11"
- postcss-value-parser "^3.1.2"
-
-postcss-discard-comments@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
- dependencies:
- postcss "^5.0.14"
-
-postcss-discard-duplicates@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
- dependencies:
- postcss "^5.0.4"
-
-postcss-discard-empty@^2.0.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
- dependencies:
- postcss "^5.0.14"
-
-postcss-discard-overridden@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
- dependencies:
- postcss "^5.0.16"
-
-postcss-discard-unused@^2.2.1:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
- dependencies:
- postcss "^5.0.14"
- uniqs "^2.0.0"
-
-postcss-filter-plugins@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
- dependencies:
- postcss "^5.0.4"
- uniqid "^4.0.0"
-
-postcss-load-config@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
- dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
- postcss-load-options "^1.2.0"
- postcss-load-plugins "^2.3.0"
-
-postcss-load-options@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
- dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
-
-postcss-load-plugins@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
- dependencies:
- cosmiconfig "^2.1.1"
- object-assign "^4.1.0"
-
-postcss-loader@^2.0.10:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.10.tgz#090db0540140bd56a7a7f717c41bc29aeef4c674"
- dependencies:
- loader-utils "^1.1.0"
- postcss "^6.0.0"
- postcss-load-config "^1.2.0"
- schema-utils "^0.3.0"
-
-postcss-merge-idents@^2.1.5:
- version "2.1.7"
- resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.10"
- postcss-value-parser "^3.1.1"
-
-postcss-merge-longhand@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
- dependencies:
- postcss "^5.0.4"
-
-postcss-merge-rules@^2.0.3:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
- dependencies:
- browserslist "^1.5.2"
- caniuse-api "^1.5.2"
- postcss "^5.0.4"
- postcss-selector-parser "^2.2.2"
- vendors "^1.0.0"
-
-postcss-message-helpers@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
-
-postcss-minify-font-values@^1.0.2:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
- dependencies:
- object-assign "^4.0.1"
- postcss "^5.0.4"
- postcss-value-parser "^3.0.2"
-
-postcss-minify-gradients@^1.0.1:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
- dependencies:
- postcss "^5.0.12"
- postcss-value-parser "^3.3.0"
-
-postcss-minify-params@^1.0.4:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
- dependencies:
- alphanum-sort "^1.0.1"
- postcss "^5.0.2"
- postcss-value-parser "^3.0.2"
- uniqs "^2.0.0"
-
-postcss-minify-selectors@^2.0.4:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
- dependencies:
- alphanum-sort "^1.0.2"
- has "^1.0.1"
- postcss "^5.0.14"
- postcss-selector-parser "^2.0.0"
-
-postcss-modules-extract-imports@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
- dependencies:
- postcss "^6.0.1"
-
-postcss-modules-local-by-default@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
- dependencies:
- css-selector-tokenizer "^0.7.0"
- postcss "^6.0.1"
-
-postcss-modules-scope@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
- dependencies:
- css-selector-tokenizer "^0.7.0"
- postcss "^6.0.1"
-
-postcss-modules-values@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
- dependencies:
- icss-replace-symbols "^1.1.0"
- postcss "^6.0.1"
-
-postcss-nested@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/postcss-nested/-/postcss-nested-3.0.0.tgz#cde40bd07a078565f3df72e2dc2665871c724852"
- dependencies:
- postcss "^6.0.14"
- postcss-selector-parser "^3.1.1"
-
-postcss-normalize-charset@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
- dependencies:
- postcss "^5.0.5"
-
-postcss-normalize-url@^3.0.7:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
- dependencies:
- is-absolute-url "^2.0.0"
- normalize-url "^1.4.0"
- postcss "^5.0.14"
- postcss-value-parser "^3.2.3"
-
-postcss-ordered-values@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
- dependencies:
- postcss "^5.0.4"
- postcss-value-parser "^3.0.1"
-
-postcss-reduce-idents@^2.2.2:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
- dependencies:
- postcss "^5.0.4"
- postcss-value-parser "^3.0.2"
-
-postcss-reduce-initial@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
- dependencies:
- postcss "^5.0.4"
-
-postcss-reduce-transforms@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.8"
- postcss-value-parser "^3.0.1"
-
-postcss-sassy-mixins@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/postcss-sassy-mixins/-/postcss-sassy-mixins-2.1.0.tgz#368f200946bfdef6a8b12d68c0f6379b9a222f26"
- dependencies:
- glob "^6.0.4"
- postcss "^5.0.14"
- postcss-simple-vars "^1.2.0"
-
-postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
- dependencies:
- flatten "^1.0.2"
- indexes-of "^1.0.1"
- uniq "^1.0.1"
-
-postcss-selector-parser@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
- dependencies:
- dot-prop "^4.1.1"
- indexes-of "^1.0.1"
- uniq "^1.0.1"
-
-postcss-simple-vars@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-1.2.0.tgz#2e6689921144b74114e765353275a3c32143f150"
- dependencies:
- postcss "^5.0.13"
-
-postcss-simple-vars@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-4.1.0.tgz#043248cfef8d3f51b3486a28c09f8375dbf1b2f9"
- dependencies:
- postcss "^6.0.9"
-
-postcss-svgo@^2.1.1:
- version "2.1.6"
- resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
- dependencies:
- is-svg "^2.0.0"
- postcss "^5.0.14"
- postcss-value-parser "^3.2.3"
- svgo "^0.7.0"
-
-postcss-unique-selectors@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
- dependencies:
- alphanum-sort "^1.0.1"
- postcss "^5.0.4"
- uniqs "^2.0.0"
-
-postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
-
-postcss-zindex@^2.0.1:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
- dependencies:
- has "^1.0.1"
- postcss "^5.0.4"
- uniqs "^2.0.0"
-
-postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16, postcss@^5.2.4:
- version "5.2.18"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
- dependencies:
- chalk "^1.1.3"
- js-base64 "^2.1.9"
- source-map "^0.5.6"
- supports-color "^3.2.3"
-
-postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.9:
- version "6.0.16"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.16.tgz#112e2fe2a6d2109be0957687243170ea5589e146"
- dependencies:
- chalk "^2.3.0"
- source-map "^0.6.1"
- supports-color "^5.1.0"
-
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-prepend-http@^1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-
-pretty-error@^2.0.2:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
- dependencies:
- renderkid "^2.0.1"
- utila "~0.4"
-
-private@^0.1.6, private@^0.1.7:
- version "0.1.8"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
-
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-
-process@^0.11.10, process@~0.11.0:
- version "0.11.10"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
-
-process@~0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
-
-progress@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
-
-promise@^7.1.1:
- version "7.3.1"
- resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
- dependencies:
- asap "~2.0.3"
-
-prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.6.0:
- version "15.6.0"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
- dependencies:
- fbjs "^0.8.16"
- loose-envify "^1.3.1"
- object-assign "^4.1.1"
-
-proxy-addr@~2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
- dependencies:
- forwarded "~0.1.2"
- ipaddr.js "1.5.2"
-
-proxy-agent@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499"
- dependencies:
- agent-base "2"
- debug "2"
- extend "3"
- http-proxy-agent "1"
- https-proxy-agent "1"
- lru-cache "~2.6.5"
- pac-proxy-agent "1"
- socks-proxy-agent "2"
-
-prr@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
-
-pseudomap@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-
-public-encrypt@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
- dependencies:
- bn.js "^4.1.0"
- browserify-rsa "^4.0.0"
- create-hash "^1.1.0"
- parse-asn1 "^5.0.0"
- randombytes "^2.0.1"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
-
-punycode@1.4.1, punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-q@^1.1.2:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
-
-q@~1.4.0:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
-
-qjobs@^1.1.4:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.1.5.tgz#659de9f2cf8dcc27a1481276f205377272382e73"
-
-qs@6.5.1, qs@~6.5.1:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
-
-qs@~6.2.0:
- version "6.2.3"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe"
-
-qs@~6.4.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
-
-query-string@^4.1.0:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
- dependencies:
- object-assign "^4.1.0"
- strict-uri-encode "^1.0.0"
-
-querystring-es3@^0.2.0, querystring-es3@~0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
-
-querystringify@0.0.x:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c"
-
-querystringify@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb"
-
-randomatic@^1.1.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
- dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
-
-randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
- dependencies:
- safe-buffer "^5.1.0"
-
-randomfill@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
- dependencies:
- randombytes "^2.0.5"
- safe-buffer "^5.1.0"
-
-range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
-
-raw-body@2, raw-body@2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
- dependencies:
- bytes "3.0.0"
- http-errors "1.6.2"
- iconv-lite "0.4.19"
- unpipe "1.0.0"
-
-rc@^1.1.7:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.4.tgz#a0f606caae2a3b862bbd0ef85482c0125b315fa3"
- dependencies:
- deep-extend "~0.4.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-react-dom@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
- dependencies:
- fbjs "^0.8.16"
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
- prop-types "^15.6.0"
-
-react-hot-loader@^4.0.0-beta.15:
- version "4.0.0-beta.15"
- resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.0.0-beta.15.tgz#d32d23bad2f2f1f7d084e5a28bebca127066c5bc"
- dependencies:
- fast-levenshtein "^2.0.6"
- global "^4.3.0"
- hoist-non-react-statics "^2.3.1"
- react-stand-in "^4.0.0-beta.15"
- redbox-react "^1.3.6"
- source-map "^0.6.1"
-
-react-stand-in@^4.0.0-beta.15:
- version "4.0.0-beta.15"
- resolved "https://registry.yarnpkg.com/react-stand-in/-/react-stand-in-4.0.0-beta.15.tgz#8c97cb1e6207c86c4deb04913fc5e23e04bdcc13"
- dependencies:
- shallowequal "^1.0.2"
-
-react@^16.2.0:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
- dependencies:
- fbjs "^0.8.16"
- loose-envify "^1.1.0"
- object-assign "^4.1.1"
- prop-types "^15.6.0"
-
-read-only-stream@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0"
- dependencies:
- readable-stream "^2.0.2"
-
-read-pkg-up@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
- dependencies:
- find-up "^1.0.0"
- read-pkg "^1.0.0"
-
-read-pkg-up@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
- dependencies:
- find-up "^2.0.0"
- read-pkg "^2.0.0"
-
-read-pkg@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
- dependencies:
- load-json-file "^1.0.0"
- normalize-package-data "^2.3.2"
- path-type "^1.0.0"
-
-read-pkg@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
- dependencies:
- load-json-file "^2.0.0"
- normalize-package-data "^2.3.2"
- path-type "^2.0.0"
-
-readable-stream@1.0:
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@1.1.x:
- version "1.1.14"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@2, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.3"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- safe-buffer "~5.1.1"
- string_decoder "~1.0.3"
- util-deprecate "~1.0.1"
-
-readable-stream@~2.0.0, readable-stream@~2.0.5:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
- readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-
-redbox-react@^1.3.6:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.5.0.tgz#04dab11557d26651bf3562a67c22ace56c5d3967"
- dependencies:
- error-stack-parser "^1.3.6"
- object-assign "^4.0.1"
- prop-types "^15.5.4"
- sourcemapped-stacktrace "^1.1.6"
-
-redent@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
- dependencies:
- indent-string "^2.1.0"
- strip-indent "^1.0.1"
-
-redis-commands@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b"
-
-redis-parser@^2.6.0:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
-
-redis@^2.7.1:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02"
- dependencies:
- double-ended-queue "^2.1.0-0"
- redis-commands "^1.2.0"
- redis-parser "^2.6.0"
-
-reduce-css-calc@^1.2.6:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
- dependencies:
- balanced-match "^0.4.2"
- math-expression-evaluator "^1.2.14"
- reduce-function-call "^1.0.1"
-
-reduce-function-call@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
- dependencies:
- balanced-match "^0.4.2"
-
-regenerate@^1.2.1:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
-
-regenerator-runtime@^0.10.5:
- version "0.10.5"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
-
-regenerator-runtime@^0.11.0:
- version "0.11.1"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
-
-regenerator-transform@^0.10.0:
- version "0.10.1"
- resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
- dependencies:
- babel-runtime "^6.18.0"
- babel-types "^6.19.0"
- private "^0.1.6"
-
-regex-cache@^0.4.2:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
- dependencies:
- is-equal-shallow "^0.1.3"
-
-regex-not@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.0.tgz#42f83e39771622df826b02af176525d6a5f157f9"
- dependencies:
- extend-shallow "^2.0.1"
-
-regexpu-core@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
- dependencies:
- regenerate "^1.2.1"
- regjsgen "^0.2.0"
- regjsparser "^0.1.4"
-
-regexpu-core@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
- dependencies:
- regenerate "^1.2.1"
- regjsgen "^0.2.0"
- regjsparser "^0.1.4"
-
-regjsgen@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
-
-regjsparser@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
- dependencies:
- jsesc "~0.5.0"
-
-relateurl@0.2.x:
- version "0.2.7"
- resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
-
-remove-trailing-separator@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-
-renderkid@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319"
- dependencies:
- css-select "^1.1.0"
- dom-converter "~0.1"
- htmlparser2 "~3.3.0"
- strip-ansi "^3.0.0"
- utila "~0.3"
-
-repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
-
-repeat-string@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae"
-
-repeat-string@^1.5.2, repeat-string@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-repeating@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
- dependencies:
- is-finite "^1.0.0"
-
-request@2.75.x:
- version "2.75.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- bl "~1.1.2"
- caseless "~0.11.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.0.0"
- har-validator "~2.0.6"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- node-uuid "~1.4.7"
- oauth-sign "~0.8.1"
- qs "~6.2.0"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "~0.4.1"
-
-request@2.81.0:
- version "2.81.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~4.2.1"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- oauth-sign "~0.8.1"
- performance-now "^0.2.0"
- qs "~6.4.0"
- safe-buffer "^5.0.1"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "^0.6.0"
- uuid "^3.0.0"
-
-request@^2.0.0, request@^2.74.0:
- version "2.83.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
- dependencies:
- aws-sign2 "~0.7.0"
- aws4 "^1.6.0"
- caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.1"
- forever-agent "~0.6.1"
- form-data "~2.3.1"
- har-validator "~5.0.3"
- hawk "~6.0.2"
- http-signature "~1.2.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.17"
- oauth-sign "~0.8.2"
- performance-now "^2.1.0"
- qs "~6.5.1"
- safe-buffer "^5.1.1"
- stringstream "~0.0.5"
- tough-cookie "~2.3.3"
- tunnel-agent "^0.6.0"
- uuid "^3.1.0"
-
-requestretry@^1.2.2:
- version "1.12.2"
- resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.12.2.tgz#13ce38a4ce4e809f3c9ec6d4ca3b7b9ba4acf26c"
- dependencies:
- extend "^3.0.0"
- lodash "^4.15.0"
- request "^2.74.0"
- when "^3.7.7"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-
-require-from-string@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
-
-require-main-filename@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
-
-require-uncached@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
- dependencies:
- caller-path "^0.1.0"
- resolve-from "^1.0.0"
-
-requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
-
-resolve-cwd@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
- dependencies:
- resolve-from "^3.0.0"
-
-resolve-from@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
-
-resolve-from@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
-
-resolve-url@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-
-resolve@1.1.7, resolve@1.1.x:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-
-resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.3.3, resolve@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
- dependencies:
- path-parse "^1.0.5"
-
-restore-cursor@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
- dependencies:
- onetime "^2.0.0"
- signal-exit "^3.0.2"
-
-right-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
- dependencies:
- align-text "^0.1.1"
-
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
- dependencies:
- glob "^7.0.5"
-
-ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
- dependencies:
- hash-base "^2.0.0"
- inherits "^2.0.1"
-
-run-async@^2.2.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
- dependencies:
- is-promise "^2.1.0"
-
-run-parallel@^1.1.2:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039"
-
-rx-lite-aggregates@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
- dependencies:
- rx-lite "*"
-
-rx-lite@*, rx-lite@^4.0.8:
- version "4.0.8"
- resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
-
-safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
-
-sax@~1.2.1:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-
-schema-utils@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
- dependencies:
- ajv "^5.0.0"
-
-screenfull@^3.3.2:
- version "3.3.2"
- resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-3.3.2.tgz#a6adf3b3f5556da812725385880600f5b39fbf25"
-
-select-hose@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
-
-selfsigned@^1.9.1:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52"
- dependencies:
- node-forge "0.6.33"
-
-"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
-
-semver@5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-
-semver@~5.0.1:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a"
-
-send@0.16.1:
- version "0.16.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
- dependencies:
- debug "2.6.9"
- depd "~1.1.1"
- destroy "~1.0.4"
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- etag "~1.8.1"
- fresh "0.5.2"
- http-errors "~1.6.2"
- mime "1.4.1"
- ms "2.0.0"
- on-finished "~2.3.0"
- range-parser "~1.2.0"
- statuses "~1.3.1"
-
-serve-index@^1.7.2:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
- dependencies:
- accepts "~1.3.4"
- batch "0.6.1"
- debug "2.6.9"
- escape-html "~1.0.3"
- http-errors "~1.6.2"
- mime-types "~2.1.17"
- parseurl "~1.3.2"
-
-serve-static@1.13.1:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
- dependencies:
- encodeurl "~1.0.1"
- escape-html "~1.0.3"
- parseurl "~1.3.2"
- send "0.16.1"
-
-set-blocking@^2.0.0, set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-
-set-getter@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376"
- dependencies:
- to-object-path "^0.3.0"
-
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
-
-set-value@^0.4.3:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.1"
- to-object-path "^0.3.0"
-
-set-value@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
- dependencies:
- extend-shallow "^2.0.1"
- is-extendable "^0.1.1"
- is-plain-object "^2.0.3"
- split-string "^3.0.1"
-
-setimmediate@^1.0.4, setimmediate@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
-
-setprototypeof@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
-
-setprototypeof@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
-
-sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4:
- version "2.4.9"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d"
- dependencies:
- inherits "^2.0.1"
- safe-buffer "^5.0.1"
-
-shallowequal@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.0.2.tgz#1561dbdefb8c01408100319085764da3fcf83f8f"
-
-shasum@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f"
- dependencies:
- json-stable-stringify "~0.0.0"
- sha.js "~2.4.4"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-
-shell-quote@^1.6.1:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
- dependencies:
- array-filter "~0.0.0"
- array-map "~0.0.0"
- array-reduce "~0.0.0"
- jsonify "~0.0.0"
-
-signal-exit@^3.0.0, signal-exit@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-
-slack-node@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30"
- dependencies:
- requestretry "^1.2.2"
-
-slash@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-
-slice-ansi@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
- dependencies:
- is-fullwidth-code-point "^2.0.0"
-
-smart-buffer@^1.0.13, smart-buffer@^1.0.4:
- version "1.1.15"
- resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16"
-
-smtp-connection@2.12.0:
- version "2.12.0"
- resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1"
- dependencies:
- httpntlm "1.6.1"
- nodemailer-shared "1.1.0"
-
-snapdragon-node@^2.0.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
- dependencies:
- define-property "^1.0.0"
- isobject "^3.0.0"
- snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
- dependencies:
- kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
- version "0.8.1"
- resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370"
- dependencies:
- base "^0.11.1"
- debug "^2.2.0"
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- map-cache "^0.2.2"
- source-map "^0.5.6"
- source-map-resolve "^0.5.0"
- use "^2.0.0"
-
-snazzy@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/snazzy/-/snazzy-7.0.0.tgz#95edaccc4a8d6f80f4ac5cc7b520e8f8f9ac2325"
- dependencies:
- chalk "^1.1.0"
- inherits "^2.0.1"
- minimist "^1.1.1"
- readable-stream "^2.0.6"
- standard-json "^1.0.0"
- text-table "^0.2.0"
-
-sntp@1.x.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
- dependencies:
- hoek "2.x.x"
-
-sntp@2.x.x:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
- dependencies:
- hoek "4.x.x"
-
-socket.io-adapter@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"
-
-socket.io-client@2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e"
- dependencies:
- backo2 "1.0.2"
- base64-arraybuffer "0.1.5"
- component-bind "1.0.0"
- component-emitter "1.2.1"
- debug "~2.6.4"
- engine.io-client "~3.1.0"
- has-cors "1.1.0"
- indexof "0.0.1"
- object-component "0.0.3"
- parseqs "0.0.5"
- parseuri "0.0.5"
- socket.io-parser "~3.1.1"
- to-array "0.1.4"
-
-socket.io-parser@~3.1.1:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2"
- dependencies:
- component-emitter "1.2.1"
- debug "~2.6.4"
- has-binary2 "~1.0.2"
- isarray "2.0.1"
-
-socket.io@2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014"
- dependencies:
- debug "~2.6.6"
- engine.io "~3.1.0"
- socket.io-adapter "~1.1.0"
- socket.io-client "2.0.4"
- socket.io-parser "~3.1.1"
-
-sockjs-client@1.1.4:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
- dependencies:
- debug "^2.6.6"
- eventsource "0.1.6"
- faye-websocket "~0.11.0"
- inherits "^2.0.1"
- json3 "^3.3.2"
- url-parse "^1.1.8"
-
-sockjs@0.3.19:
- version "0.3.19"
- resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d"
- dependencies:
- faye-websocket "^0.10.0"
- uuid "^3.0.1"
-
-socks-proxy-agent@2:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3"
- dependencies:
- agent-base "2"
- extend "3"
- socks "~1.1.5"
-
-socks@1.1.9:
- version "1.1.9"
- resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691"
- dependencies:
- ip "^1.1.2"
- smart-buffer "^1.0.4"
-
-socks@~1.1.5:
- version "1.1.10"
- resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a"
- dependencies:
- ip "^1.1.4"
- smart-buffer "^1.0.13"
-
-sort-keys@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
- dependencies:
- is-plain-obj "^1.0.0"
-
-source-list-map@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
-
-source-map-resolve@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a"
- dependencies:
- atob "^2.0.0"
- decode-uri-component "^0.2.0"
- resolve-url "^0.2.1"
- source-map-url "^0.4.0"
- urix "^0.1.0"
-
-source-map-support@^0.4.15:
- version "0.4.18"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
- dependencies:
- source-map "^0.5.6"
-
-source-map-url@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
-
-source-map@0.5.6:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
-
-source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.3, source-map@~0.5.6:
- version "0.5.7"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-source-map@^0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.6.1, source-map@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- dependencies:
- amdefine ">=0.0.4"
-
-sourcemapped-stacktrace@^1.1.6:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.8.tgz#6b7a3f1a6fb15f6d40e701e23ce404553480d688"
- dependencies:
- source-map "0.5.6"
-
-spdx-correct@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
- dependencies:
- spdx-license-ids "^1.0.2"
-
-spdx-expression-parse@~1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
-
-spdx-license-ids@^1.0.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
-
-spdy-transport@^2.0.18:
- version "2.0.20"
- resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d"
- dependencies:
- debug "^2.6.8"
- detect-node "^2.0.3"
- hpack.js "^2.1.6"
- obuf "^1.1.1"
- readable-stream "^2.2.9"
- safe-buffer "^5.0.1"
- wbuf "^1.7.2"
-
-spdy@^3.4.1:
- version "3.4.7"
- resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
- dependencies:
- debug "^2.6.8"
- handle-thing "^1.2.5"
- http-deceiver "^1.2.7"
- safe-buffer "^5.0.1"
- select-hose "^2.0.0"
- spdy-transport "^2.0.18"
-
-split-string@^3.0.1, split-string@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
- dependencies:
- extend-shallow "^3.0.0"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-sshpk@^1.7.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
-stackframe@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4"
-
-standard-engine@~7.2.0:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.2.0.tgz#d2264d4fe880513750de38095bdc3cac9dc7738d"
- dependencies:
- deglob "^2.1.0"
- get-stdin "^5.0.1"
- minimist "^1.1.0"
- pkg-conf "^2.0.0"
-
-standard-json@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/standard-json/-/standard-json-1.0.2.tgz#82dea4a14c78cd9e35d38cde4b88ac6b62596a23"
- dependencies:
- concat-stream "^1.5.0"
-
-standard@^11.0.0-beta.0:
- version "11.0.0-beta.0"
- resolved "https://registry.yarnpkg.com/standard/-/standard-11.0.0-beta.0.tgz#20fd2cffda4e003402ac95de3c8cae29755e08ee"
- dependencies:
- eslint "~4.13.0"
- eslint-config-standard "11.0.0-beta.0"
- eslint-config-standard-jsx "4.0.2"
- eslint-plugin-import "~2.8.0"
- eslint-plugin-node "~5.2.1"
- eslint-plugin-promise "~3.6.0"
- eslint-plugin-react "~7.5.1"
- eslint-plugin-standard "~3.0.1"
- standard-engine "~7.2.0"
-
-static-extend@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
- dependencies:
- define-property "^0.2.5"
- object-copy "^0.1.0"
-
-"statuses@>= 1.3.1 < 2":
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
-
-statuses@~1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
-
-stream-browserify@^2.0.0, stream-browserify@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-combiner2@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
- dependencies:
- duplexer2 "~0.1.0"
- readable-stream "^2.0.2"
-
-stream-http@^2.0.0, stream-http@^2.7.2:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
- dependencies:
- builtin-status-codes "^3.0.0"
- inherits "^2.0.1"
- readable-stream "^2.3.3"
- to-arraybuffer "^1.0.0"
- xtend "^4.0.0"
-
-stream-splicer@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83"
- dependencies:
- inherits "^2.0.1"
- readable-stream "^2.0.2"
-
-streamroller@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b"
- dependencies:
- date-format "^1.2.0"
- debug "^3.1.0"
- mkdirp "^0.5.1"
- readable-stream "^2.3.0"
-
-strict-uri-encode@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
-
-string-width@^1.0.1, string-width@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^4.0.0"
-
-string_decoder@^1.0.0, string_decoder@~1.0.0, string_decoder@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
- dependencies:
- safe-buffer "~5.1.0"
-
-string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
-stringstream@~0.0.4, stringstream@~0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
- dependencies:
- ansi-regex "^3.0.0"
-
-strip-bom@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
- dependencies:
- is-utf8 "^0.2.0"
-
-strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-
-strip-indent@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
- dependencies:
- get-stdin "^4.0.1"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-style-loader@^0.19.1:
- version "0.19.1"
- resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85"
- dependencies:
- loader-utils "^1.0.2"
- schema-utils "^0.3.0"
-
-subarg@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2"
- dependencies:
- minimist "^1.1.0"
-
-supports-color@4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
- dependencies:
- has-flag "^2.0.0"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-supports-color@^3.1.0, supports-color@^3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
- dependencies:
- has-flag "^1.0.0"
-
-supports-color@^4.0.0, supports-color@^4.2.1:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
- dependencies:
- has-flag "^2.0.0"
-
-supports-color@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
- dependencies:
- has-flag "^2.0.0"
-
-svgo@^0.7.0:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
- dependencies:
- coa "~1.0.1"
- colors "~1.1.2"
- csso "~2.3.1"
- js-yaml "~3.7.0"
- mkdirp "~0.5.1"
- sax "~1.2.1"
- whet.extend "~0.9.9"
-
-syntax-error@^1.1.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.3.0.tgz#1ed9266c4d40be75dc55bf9bb1cb77062bb96ca1"
- dependencies:
- acorn "^4.0.3"
-
-table@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
- dependencies:
- ajv "^5.2.3"
- ajv-keywords "^2.1.0"
- chalk "^2.1.0"
- lodash "^4.17.4"
- slice-ansi "1.0.0"
- string-width "^2.1.1"
-
-tapable@^0.2.7:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
-
-tar-pack@^3.4.0:
- version "3.4.1"
- resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
- dependencies:
- debug "^2.2.0"
- fstream "^1.0.10"
- fstream-ignore "^1.0.5"
- once "^1.3.3"
- readable-stream "^2.1.4"
- rimraf "^2.5.1"
- tar "^2.2.1"
- uid-number "^0.0.6"
-
-tar@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
- dependencies:
- block-stream "*"
- fstream "^1.0.2"
- inherits "2"
-
-test-exclude@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
- dependencies:
- arrify "^1.0.1"
- micromatch "^2.3.11"
- object-assign "^4.1.0"
- read-pkg-up "^1.0.1"
- require-main-filename "^1.0.1"
-
-text-table@^0.2.0, text-table@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-
-through2@^2.0.0:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
- dependencies:
- readable-stream "^2.1.5"
- xtend "~4.0.1"
-
-"through@>=2.2.7 <3", through@^2.3.6:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-
-thunkify@~2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
-
-thunky@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
-
-time-stamp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
-
-timers-browserify@^1.0.1:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d"
- dependencies:
- process "~0.11.0"
-
-timers-browserify@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6"
- dependencies:
- setimmediate "^1.0.4"
-
-timespan@2.3.x:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929"
-
-tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33:
- version "0.0.33"
- resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
- dependencies:
- os-tmpdir "~1.0.2"
-
-to-array@0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890"
-
-to-arraybuffer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
-
-to-fast-properties@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
-
-to-fast-properties@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
-
-to-object-path@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
- dependencies:
- kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
- dependencies:
- is-number "^3.0.0"
- repeat-string "^1.6.1"
-
-to-regex@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae"
- dependencies:
- define-property "^0.2.5"
- extend-shallow "^2.0.1"
- regex-not "^1.0.0"
-
-toposort@^1.0.0:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
-
-tough-cookie@~2.3.0, tough-cookie@~2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
- dependencies:
- punycode "^1.4.1"
-
-trim-newlines@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
-
-trim-right@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
-
-tsscmp@~1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97"
-
-tty-browserify@0.0.0, tty-browserify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
-
-tunnel-agent@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
- dependencies:
- safe-buffer "^5.0.1"
-
-tunnel-agent@~0.4.1:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- dependencies:
- prelude-ls "~1.1.2"
-
-type-detect@^4.0.0:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.6.tgz#88cbce3d13bc675a63f840b3225c180f870786d7"
-
-type-is@~1.6.15:
- version "1.6.15"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
- dependencies:
- media-typer "0.3.0"
- mime-types "~2.1.15"
-
-typedarray@^0.0.6, typedarray@~0.0.5:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-
-ua-parser-js@^0.7.9:
- version "0.7.17"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
-
-uglify-js@3.3.x:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.7.tgz#28463e7c7451f89061d2b235e30925bf5625e14d"
- dependencies:
- commander "~2.13.0"
- source-map "~0.6.1"
-
-uglify-js@^2.6, uglify-js@^2.8.29:
- version "2.8.29"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
- dependencies:
- source-map "~0.5.1"
- yargs "~3.10.0"
- optionalDependencies:
- uglify-to-browserify "~1.0.0"
-
-uglify-to-browserify@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-uglifyjs-webpack-plugin@^0.4.6:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
- dependencies:
- source-map "^0.5.6"
- uglify-js "^2.8.29"
- webpack-sources "^1.0.1"
-
-uid-number@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-
-ultron@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
-
-umd@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e"
-
-underscore@~1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209"
-
-union-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
- dependencies:
- arr-union "^3.1.0"
- get-value "^2.0.6"
- is-extendable "^0.1.1"
- set-value "^0.4.3"
-
-uniq@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
-
-uniqid@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
- dependencies:
- macaddress "^0.2.8"
-
-uniqs@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
-
-universalify@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
-
-unpipe@1.0.0, unpipe@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-
-unset-value@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
- dependencies:
- has-value "^0.3.1"
- isobject "^3.0.0"
-
-upper-case@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
-
-urix@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-
-url-parse@1.0.x:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b"
- dependencies:
- querystringify "0.0.x"
- requires-port "1.0.x"
-
-url-parse@^1.1.8:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986"
- dependencies:
- querystringify "~1.0.0"
- requires-port "~1.0.0"
-
-url@^0.11.0, url@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
-urlgrey@0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/urlgrey/-/urlgrey-0.4.4.tgz#892fe95960805e85519f1cd4389f2cb4cbb7652f"
-
-use@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8"
- dependencies:
- define-property "^0.2.5"
- isobject "^3.0.0"
- lazy-cache "^2.0.2"
-
-user-home@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
-
-useragent@^2.1.12:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.2.1.tgz#cf593ef4f2d175875e8bb658ea92e18a4fd06d8e"
- dependencies:
- lru-cache "2.2.x"
- tmp "0.0.x"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-util@0.10.3, util@^0.10.3, util@~0.10.1:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- dependencies:
- inherits "2.0.1"
-
-utila@~0.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
-
-utila@~0.4:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
-
-utils-merge@1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
-
-uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
-
-uws@~0.14.4:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/uws/-/uws-0.14.5.tgz#67aaf33c46b2a587a5f6666d00f7691328f149dc"
-
-v8flags@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
- dependencies:
- user-home "^1.1.1"
-
-validate-npm-package-license@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
- dependencies:
- spdx-correct "~1.0.0"
- spdx-expression-parse "~1.0.0"
-
-vary@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
-
-vendors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
-
-verror@1.10.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
- dependencies:
- assert-plus "^1.0.0"
- core-util-is "1.0.2"
- extsprintf "^1.2.0"
-
-vm-browserify@0.0.4, vm-browserify@~0.0.1:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
- dependencies:
- indexof "0.0.1"
-
-void-elements@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
-
-watchpack@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
- dependencies:
- async "^2.1.2"
- chokidar "^1.7.0"
- graceful-fs "^4.1.2"
-
-wbuf@^1.1.0, wbuf@^1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe"
- dependencies:
- minimalistic-assert "^1.0.0"
-
-webpack-dev-middleware@1.12.2, webpack-dev-middleware@^1.12.0:
- version "1.12.2"
- resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
- dependencies:
- memory-fs "~0.4.1"
- mime "^1.5.0"
- path-is-absolute "^1.0.0"
- range-parser "^1.0.3"
- time-stamp "^2.0.0"
-
-webpack-dev-server@^2.11.0:
- version "2.11.0"
- resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.0.tgz#e9d4830ab7eb16c6f92ed68b92f6089027960e1b"
- dependencies:
- ansi-html "0.0.7"
- array-includes "^3.0.3"
- bonjour "^3.5.0"
- chokidar "^2.0.0"
- compression "^1.5.2"
- connect-history-api-fallback "^1.3.0"
- debug "^3.1.0"
- del "^3.0.0"
- express "^4.16.2"
- html-entities "^1.2.0"
- http-proxy-middleware "~0.17.4"
- import-local "^1.0.0"
- internal-ip "1.2.0"
- ip "^1.1.5"
- killable "^1.0.0"
- loglevel "^1.4.1"
- opn "^5.1.0"
- portfinder "^1.0.9"
- selfsigned "^1.9.1"
- serve-index "^1.7.2"
- sockjs "0.3.19"
- sockjs-client "1.1.4"
- spdy "^3.4.1"
- strip-ansi "^4.0.0"
- supports-color "^5.1.0"
- webpack-dev-middleware "1.12.2"
- yargs "6.6.0"
-
-webpack-sources@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
- dependencies:
- source-list-map "^2.0.0"
- source-map "~0.6.1"
-
-webpack@^3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725"
- dependencies:
- acorn "^5.0.0"
- acorn-dynamic-import "^2.0.0"
- ajv "^5.1.5"
- ajv-keywords "^2.0.0"
- async "^2.1.2"
- enhanced-resolve "^3.4.0"
- escope "^3.6.0"
- interpret "^1.0.0"
- json-loader "^0.5.4"
- json5 "^0.5.1"
- loader-runner "^2.3.0"
- loader-utils "^1.1.0"
- memory-fs "~0.4.1"
- mkdirp "~0.5.0"
- node-libs-browser "^2.0.0"
- source-map "^0.5.3"
- supports-color "^4.2.1"
- tapable "^0.2.7"
- uglifyjs-webpack-plugin "^0.4.6"
- watchpack "^1.4.0"
- webpack-sources "^1.0.1"
- yargs "^8.0.2"
-
-websocket-driver@>=0.5.1:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
- dependencies:
- http-parser-js ">=0.4.0"
- websocket-extensions ">=0.1.1"
-
-websocket-extensions@>=0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
-
-whatwg-fetch@>=0.10.0, whatwg-fetch@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
-
-when@^3.7.7:
- version "3.7.8"
- resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82"
-
-whet.extend@~0.9.9:
- version "0.9.9"
- resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
-
-which-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-
-which-module@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
-
-which@^1.1.1, which@^1.2.1, which@^1.2.9:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
- dependencies:
- isexe "^2.0.0"
-
-wide-align@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
- dependencies:
- string-width "^1.0.2"
-
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wordwrap@^1.0.0, wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-write@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
- dependencies:
- mkdirp "^0.5.1"
-
-ws@~3.3.1:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
- dependencies:
- async-limiter "~1.0.0"
- safe-buffer "~5.1.0"
- ultron "~1.1.0"
-
-xml-char-classes@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
-
-xmlhttprequest-ssl@~1.5.4:
- version "1.5.5"
- resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
-
-xregexp@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943"
-
-xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-
-y18n@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-
-yallist@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-
-yargs-parser@^4.2.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
- dependencies:
- camelcase "^3.0.0"
-
-yargs-parser@^7.0.0:
- version "7.0.0"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
- dependencies:
- camelcase "^4.1.0"
-
-yargs@6.6.0:
- version "6.6.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
- dependencies:
- camelcase "^3.0.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^1.4.0"
- read-pkg-up "^1.0.1"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^1.0.2"
- which-module "^1.0.0"
- y18n "^3.2.1"
- yargs-parser "^4.2.0"
-
-yargs@^8.0.2:
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
- dependencies:
- camelcase "^4.1.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^2.0.0"
- read-pkg-up "^2.0.0"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^2.0.0"
- which-module "^2.0.0"
- y18n "^3.2.1"
- yargs-parser "^7.0.0"
-
-yargs@~3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
- dependencies:
- camelcase "^1.0.2"
- cliui "^2.1.0"
- decamelize "^1.0.0"
- window-size "0.1.0"
-
-yeast@0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"