diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 92b7b4bec2..0000000000
--- a/.editorconfig
+++ /dev/null
@@ -1,31 +0,0 @@
-# http://editorconfig.org
-root = true
-
-[*]
-charset = utf-8
-end_of_line = lf
-indent_size = 2
-indent_style = space
-insert_final_newline = true
-trim_trailing_whitespace = true
-max_line_length = 100
-
-[*.{ts, tsx}]
-ij_typescript_enforce_trailing_comma = keep
-ij_typescript_use_double_quotes = false
-ij_typescript_force_quote_style = true
-ij_typescript_align_imports = false
-ij_typescript_align_multiline_ternary_operation = false
-ij_typescript_align_multiline_parameters_in_calls = false
-ij_typescript_align_multiline_parameters = false
-ij_typescript_align_multiline_chained_methods = false
-ij_typescript_else_on_new_line = false
-ij_typescript_catch_on_new_line = false
-ij_typescript_spaces_within_interpolation_expressions = false
-
-[*.md]
-max_line_length = 100
-trim_trailing_whitespace = false
-
-[COMMIT_EDITMSG]
-max_line_length = 80
diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index 58d020238b..0000000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,22 +0,0 @@
-module.exports = {
- extends: ['react-app', 'prettier'],
- plugins: ['prettier'],
- rules: {
- 'prettier/prettier': [
- 'error',
- {
- singleQuote: true,
- trailingComma: 'es5',
- tabWidth: 2,
- printWidth: 100,
- semicolons: true,
- quoteProps: 'as-needed',
- jsxSingleQuote: false,
- bracketSpacing: true,
- jsxBracketSameLine: true,
- arrowParens: 'always',
- endOfLine: 'lf',
- },
- ],
- },
-};
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index dbfac2729f..0000000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,100 +0,0 @@
-# These are supported funding model platforms
-
-github: [
- "streamich",
- "wardoost",
- "xobotyi",
- "Belco90",
- "ankithkonda",
- "ayush987goyal",
- "NullVoxPopuli",
- "lintuming",
- "Granipouss",
- "ythecombinator",
- "james2406",
- "jakapatb",
- "MrHuangJser",
- "zaguiini",
- "ppeeou",
- "liuyuchenzh",
- "brickspert",
- "artywhite",
- "PetterIve",
- "realdennis",
- "lvl99",
- "gelove",
- "KusStar",
- "xiaoxiangmoe",
- "nmccready",
- "mattleonowicz",
- "kevinnorris",
- "dubzzz",
- "dependabot[bot]",
- "ShizukuIchi",
- "ManojBahuguna",
- "Jivings",
- "Dosant",
- "zsh2401",
- "xiaoboost",
- "revskill10",
- "mtinner",
- "monkeywithacupcake",
- "mitchheddles",
- "maxzitron",
- "macinjoke",
- "jeetiss",
- "ilyalesik",
- "hijiangtao",
- "f",
- "elliottsj",
- "droganov",
- "denysdovhan",
- "dabuside",
- "benneq",
- "azukaar",
- "ariesjia",
- "andrico1234",
- "adesurirey",
- "OBe95",
- "FredyC",
- "Cretezy",
- "zyy7259",
- "zslabs",
- "vinitsood",
- "uxitten",
- "thevtm",
- "tanem",
- "suyingtao",
- "srph",
- "rkostrzewski",
- "qianL93",
- "o-alexandrov",
- "nucleartux",
- "natew",
- "maxmalov",
- "liaoyinglong",
- "koenvanzuijlen",
- "josmardias",
- "jeemyeong",
- "jazzqi",
- "jakyle",
- "jakeboone02",
- "inker",
- "glarivie",
- "garrettmaring",
- "dovidweisz",
- "daniel-hauser",
- "d-asensio",
- "charlax",
- "TylerR909",
- "Rogdham",
- "OctoD",
- "MajorBreakfast",
- "Jfelix61",
- "Flydiverny",
- "FlickerLogicalStack",
- "DmacMcgreg",
- "Dattaya",
- "Andrey-Bazhanov",
- "AlvaroBernalG"
-]
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
deleted file mode 100644
index 9ac7935abf..0000000000
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-name: Bug report
-about: Create a report if you having any problems using the package
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**What is the current behavior?**
-
-**Steps to reproduce it and if possible a minimal demo of the problem. Your bug will get fixed much faster if we can run your code and it doesn't have extra dependencies other than `react-use`. Paste the link to your [JSFiddle](https://jsfiddle.net) or [CodeSandbox](https://codesandbox.io) example below:**
-
-**What is the expected behavior?**
-
-**A little about versions:**
-- _OS_:
-- _Browser (vendor and version)_:
-- _React_:
-- _`react-use`_:
-- _Did this worked in the previous package version?_
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index e2eb756b9a..0000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-name: Feature request
-about: Have an idea? Great! Let us know, maybe we`ve been waiting only for you =)
-title: ''
-labels: ''
-assignees: ''
-
----
-
-**Is your feature request related to a problem? Please describe.**
-A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
-
-**Describe the solution you'd like**
-A clear and concise description of what you want to happen.
-
-**Describe alternatives you've considered**
-A clear and concise description of any alternative solutions or features you've considered.
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index bfcd240e6f..0000000000
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# Description
-
-
-
-
-## Type of change
-
-
-- [ ] Bug fix _(non-breaking change which fixes an issue)_
-- [ ] New feature _(non-breaking change which adds functionality)_
-- [ ] **Breaking change** _(fix or feature that would cause existing functionality to not work as before)_
-
-# Checklist
-- [ ] Read the [Contributing Guide](https://github.com/streamich/react-use/blob/master/CONTRIBUTING.md)
-- [ ] Perform a code self-review
-- [ ] Comment the code, particularly in hard-to-understand areas
-- [ ] Add documentation
-- [ ] Add hook's story at Storybook
-- [ ] Cover changes with tests
-- [ ] Ensure the test suite passes (`yarn test`)
-- [ ] Provide 100% tests coverage
-- [ ] Make sure code lints (`yarn lint`). Fix it with `yarn lint:fix` in case of failure.
-- [ ] Make sure types are fine (`yarn lint:types`).
-
-
diff --git a/.github/workflows/check-codebase.yml b/.github/workflows/check-codebase.yml
deleted file mode 100644
index be17d2e23d..0000000000
--- a/.github/workflows/check-codebase.yml
+++ /dev/null
@@ -1,90 +0,0 @@
-name: Check codebase
-
-on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
-
-jobs:
- build:
- name: Build
- runs-on: ubuntu-latest
- steps:
- - name: Check out repository
- uses: actions/checkout@v2
-
- - name: Setup node
- uses: actions/setup-node@v1
- with:
- node-version: 20
-
- - name: Install dependencies
- run: yarn install --frozen-lockfile
-
- - name: Run build
- run: yarn build
-
- # storybook:
- # name: Storybook
- # runs-on: ubuntu-latest
- # steps:
- # - name: Check out repository
- # uses: actions/checkout@v2
-
- # - name: Setup node
- # uses: actions/setup-node@v1
- # with:
- # node-version: 20
-
- # - name: Install dependencies
- # run: yarn install --frozen-lockfile
-
- # - name: Run build:storybook
- # run: yarn storybook:build
-
- lint:
- name: Linting
- runs-on: ubuntu-latest
- steps:
- - name: Check out repository
- uses: actions/checkout@v2
-
- - name: Setup node
- uses: actions/setup-node@v1
- with:
- node-version: 20
-
- - name: Install dependencies
- run: yarn install --frozen-lockfile
-
- - name: Lint with ESLint
- run: yarn lint
-
- - name: Lint with TSC
- if: ${{ always() }}
- run: yarn lint:types
-
- unit-tests:
- name: Unit tests
- runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- os: [macos-latest, ubuntu-latest]
- node: [20, 22]
- steps:
- - name: Check out repository
- uses: actions/checkout@v2
-
- - name: Setup node
- uses: actions/setup-node@v1
- with:
- node-version: ${{ matrix.node }}
-
- - name: Install dependencies
- run: yarn install --frozen-lockfile
-
- - name: Run unit tests
- run: yarn test
diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml
deleted file mode 100644
index f732451311..0000000000
--- a/.github/workflows/mirror.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-name: Node.js CI
-
-on:
- push:
- branches: [master]
-
-jobs:
- mirror:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
- - name: Push To Gitlab
- env:
- token: ${{ secrets.GITLAB_TOKEN }}
- run: |
- git config user.name "streamich"
- git config user.email "react-use+streamich@users.noreply.github.com"
- git remote add mirror "https://oauth2:${token}@gitlab.com/streamich/react-use.git"
- git push mirror master
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
deleted file mode 100644
index 81ed2cc471..0000000000
--- a/.github/workflows/release.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: Node.js CI
-
-on:
- push:
- branches: [master, next]
-
-jobs:
- release:
- if: ${{ github.event_name == 'push' && (github.event.ref == 'refs/heads/master' || github.event.ref == 'refs/heads/next') }}
- runs-on: ubuntu-latest
- strategy:
- matrix:
- node-version: [22.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: yarn
- - run: yarn install --frozen-lockfile
- - run: yarn lint
- - run: yarn test
- - run: yarn lint:types
- - run: yarn build
- - name: Semantic Release
- uses: cycjimmy/semantic-release-action@v4
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 95c09a18a6..0000000000
--- a/.gitignore
+++ /dev/null
@@ -1,79 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-
-# IDE files
-.idea
-.vscode
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-
-# nyc test coverage
-.nyc_output
-
-# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
-.grunt
-
-# Bower dependency directory (https://bower.io/)
-bower_components
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (https://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# TypeScript v1 declaration files
-typings/
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variables file
-.env
-
-# next.js build output
-.next
-
-# build output
-lib/
-esm
-
-.DS_Store
-
-src/parser.ts
-
-.cache/
-.puppet-master/
-
-storybook-static/
-package-lock.json
diff --git a/.storybook/addons.js b/.storybook/addons.js
deleted file mode 100644
index 1d7ca1fc50..0000000000
--- a/.storybook/addons.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import '@storybook/addon-knobs/register';
-import '@storybook/addon-options/register';
-import '@storybook/addon-actions/register';
-import '@storybook/addon-notes/register';
diff --git a/.storybook/config.js b/.storybook/config.js
deleted file mode 100644
index 93dcc97cfc..0000000000
--- a/.storybook/config.js
+++ /dev/null
@@ -1,21 +0,0 @@
-import {configure} from '@storybook/react';
-import {setOptions} from '@storybook/addon-options';
-
-setOptions({
- sortStoriesByKind: false,
- showStoriesPanel: true,
- showAddonPanel: true,
- showSearchBox: false,
- addonPanelInRight: true,
- hierarchySeparator: /\//,
- hierarchyRootSeparator: /\|/,
- sidebarAnimations: false,
-});
-
-const req = require.context('../stories/', true, /\.story\.tsx?$/);
-
-const loadStories = () => {
- req.keys().forEach((filename) => req(filename));
-};
-
-configure(loadStories, module);
diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js
deleted file mode 100644
index 5771154606..0000000000
--- a/.storybook/webpack.config.js
+++ /dev/null
@@ -1,39 +0,0 @@
-const path = require('path');
-const { compilerOptions } = require('../tsconfig.json');
-const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
-
-const basedir = path.join(__dirname, '..');
-
-module.exports = async ({ config, mode }) => {
- config.module.rules.push(
- {
- test: /\.md?$/,
- loader: "markdown-loader",
- },
- {
- test: /\.tsx?$/,
- loader: 'ts-loader',
- include: [
- path.join(basedir, 'src'),
- path.join(basedir, 'stories'),
- ],
- options: {
- transpileOnly: true, // use transpileOnly mode to speed-up compilation
- compilerOptions: {
- ...compilerOptions,
- declaration: false,
- },
- },
- },
- );
-
- config.plugins.push(new ForkTsCheckerWebpackPlugin());
-
- config.resolve.extensions = ['.ts', '.tsx', '.js', '.jsx'];
- config.resolve.enforceExtension = false;
-
- // disable the hint about too big bundle
- config.performance.hints = false;
-
- return config;
-};
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 33377a026a..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-language: node_js
-os:
- - linux
-cache:
- yarn: true
- directories:
- - ~/.npm
-notifications:
- email: false
-node_js:
- - '10'
-script:
- - yarn lint
- - yarn test
- - yarn build
- - yarn storybook:build
-matrix:
- allow_failures: []
- fast_finish: true
-branches:
- except:
- - /^v\d+\.\d+\.\d+$/
- - master
- - next
- - gh-pages
diff --git a/0.09bb08b1d5a8a377a6f6.manager.bundle.js b/0.09bb08b1d5a8a377a6f6.manager.bundle.js
new file mode 100644
index 0000000000..5130d85572
--- /dev/null
+++ b/0.09bb08b1d5a8a377a6f6.manager.bundle.js
@@ -0,0 +1,2 @@
+/*! For license information please see 0.09bb08b1d5a8a377a6f6.manager.bundle.js.LICENSE.txt */
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{1403:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"createCopyToClipboardFunction",(function(){return createCopyToClipboardFunction})),__webpack_require__.d(__webpack_exports__,"SyntaxHighlighter",(function(){return syntaxhighlighter_SyntaxHighlighter}));__webpack_require__(120),__webpack_require__(41),__webpack_require__(8),__webpack_require__(244),__webpack_require__(6),__webpack_require__(171),__webpack_require__(5),__webpack_require__(13),__webpack_require__(14),__webpack_require__(9),__webpack_require__(10),__webpack_require__(11),__webpack_require__(17),__webpack_require__(7),__webpack_require__(20),__webpack_require__(48),__webpack_require__(15);var react=__webpack_require__(0),react_default=__webpack_require__.n(react),esm=__webpack_require__(27),dist_esm=__webpack_require__(2),global_window=__webpack_require__(4),window_default=__webpack_require__.n(global_window),memoizerific=__webpack_require__(35),memoizerific_default=__webpack_require__.n(memoizerific),jsx=__webpack_require__(1417),prism_jsx=__webpack_require__.n(jsx).a,bash=__webpack_require__(1456),prism_bash=__webpack_require__.n(bash).a,css=__webpack_require__(1415),prism_css=__webpack_require__.n(css).a,js_extras=__webpack_require__(1452),prism_js_extras=__webpack_require__.n(js_extras).a,json=__webpack_require__(1453),prism_json=__webpack_require__.n(json).a,graphql=__webpack_require__(1458),prism_graphql=__webpack_require__.n(graphql).a,markup=__webpack_require__(1414),prism_markup=__webpack_require__.n(markup).a,markdown=__webpack_require__(1455),prism_markdown=__webpack_require__.n(markdown).a,yaml=__webpack_require__(1454),prism_yaml=__webpack_require__.n(yaml).a,tsx=__webpack_require__(1457),prism_tsx=__webpack_require__.n(tsx).a,typescript=__webpack_require__(1418),prism_typescript=__webpack_require__.n(typescript).a,objectWithoutProperties=__webpack_require__(752),objectWithoutProperties_default=__webpack_require__.n(objectWithoutProperties),objectSpread=__webpack_require__(1416),objectSpread_default=__webpack_require__.n(objectSpread),helpers_extends=__webpack_require__(362),extends_default=__webpack_require__.n(helpers_extends);function createStyleObject(classNames){var elementStyle=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},stylesheet=arguments.length>2?arguments[2]:void 0;return classNames.reduce((function(styleObject,className){return objectSpread_default()({},styleObject,stylesheet[className])}),elementStyle)}function createClassNameString(classNames){return classNames.join(" ")}function createElement(_ref){var node=_ref.node,stylesheet=_ref.stylesheet,_ref$style=_ref.style,style=void 0===_ref$style?{}:_ref$style,useInlineStyles=_ref.useInlineStyles,key=_ref.key,properties=node.properties,type=node.type,TagName=node.tagName,value=node.value;if("text"===type)return value;if(TagName){var childrenCreator=function createChildren(stylesheet,useInlineStyles){var childrenCount=0;return function(children){return childrenCount+=1,children.map((function(child,i){return createElement({node:child,stylesheet:stylesheet,useInlineStyles:useInlineStyles,key:"code-segment-".concat(childrenCount,"-").concat(i)})}))}}(stylesheet,useInlineStyles),nonStylesheetClassNames=useInlineStyles&&properties.className&&properties.className.filter((function(className){return!stylesheet[className]})),className=nonStylesheetClassNames&&nonStylesheetClassNames.length?nonStylesheetClassNames:void 0,props=useInlineStyles?objectSpread_default()({},properties,{className:className&&createClassNameString(className)},{style:createStyleObject(properties.className,Object.assign({},properties.style,style),stylesheet)}):objectSpread_default()({},properties,{className:createClassNameString(properties.className)}),children=childrenCreator(node.children);return react_default.a.createElement(TagName,extends_default()({key:key},props),children)}}var newLineRegex=/\n/g;function AllLineNumbers(_ref2){var codeString=_ref2.codeString,codeStyle=_ref2.codeStyle,_ref2$containerStyle=_ref2.containerStyle,containerStyle=void 0===_ref2$containerStyle?{float:"left",paddingRight:"10px"}:_ref2$containerStyle,_ref2$numberStyle=_ref2.numberStyle,numberStyle=void 0===_ref2$numberStyle?{}:_ref2$numberStyle,startingLineNumber=_ref2.startingLineNumber;return react_default.a.createElement("code",{style:Object.assign({},codeStyle,containerStyle)},function getAllLineNumbers(_ref){var lines=_ref.lines,startingLineNumber=_ref.startingLineNumber,style=_ref.style;return lines.map((function(_,i){var number=i+startingLineNumber;return react_default.a.createElement("span",{key:"line-".concat(i),className:"react-syntax-highlighter-line-number",style:"function"==typeof style?style(number):style},"".concat(number,"\n"))}))}({lines:codeString.replace(/\n$/,"").split("\n"),style:numberStyle,startingLineNumber:startingLineNumber}))}function getInlineLineNumber(lineNumber,inlineLineNumberStyle){return{type:"element",tagName:"span",properties:{key:"line-number--".concat(lineNumber),className:["comment","linenumber","react-syntax-highlighter-line-number"],style:inlineLineNumberStyle},children:[{type:"text",value:lineNumber}]}}function assembleLineNumberStyles(lineNumberStyle,lineNumber,largestLineNumber){var num,len,defaultLineNumberStyle={display:"inline-block",minWidth:(num=largestLineNumber,len=num.toString().length,"".concat(len,"em")),paddingRight:"1em",textAlign:"right",userSelect:"none"},customLineNumberStyle="function"==typeof lineNumberStyle?lineNumberStyle(lineNumber):lineNumberStyle;return objectSpread_default()({},defaultLineNumberStyle,customLineNumberStyle)}function createLineElement(_ref3){var children=_ref3.children,lineNumber=_ref3.lineNumber,lineNumberStyle=_ref3.lineNumberStyle,largestLineNumber=_ref3.largestLineNumber,showInlineLineNumbers=_ref3.showInlineLineNumbers,_ref3$lineProps=_ref3.lineProps,lineProps=void 0===_ref3$lineProps?{}:_ref3$lineProps,_ref3$className=_ref3.className,className=void 0===_ref3$className?[]:_ref3$className,properties="function"==typeof lineProps?lineProps(lineNumber):lineProps;if(properties.className=className,lineNumber&&showInlineLineNumbers){var inlineLineNumberStyle=assembleLineNumberStyles(lineNumberStyle,lineNumber,largestLineNumber);children.unshift(getInlineLineNumber(lineNumber,inlineLineNumberStyle))}return{type:"element",tagName:"span",properties:properties,children:children}}function flattenCodeTree(tree){for(var className=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],newTree=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],i=0;i2&&void 0!==arguments[2]?arguments[2]:[];return createLineElement({children:children,lineNumber:lineNumber,lineNumberStyle:lineNumberStyle,largestLineNumber:largestLineNumber,showInlineLineNumbers:showInlineLineNumbers,lineProps:lineProps,className:className})}function createUnwrappedLine(children,lineNumber){if(lineNumber&&showInlineLineNumbers){var inlineLineNumberStyle=assembleLineNumberStyles(lineNumberStyle,lineNumber,largestLineNumber);children.unshift(getInlineLineNumber(lineNumber,inlineLineNumberStyle))}return children}function createLine(children,lineNumber){var className=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];return wrapLines||className.length>0?createWrappedLine(children,lineNumber,className):createUnwrappedLine(children,lineNumber)}for(var _loop=function _loop(){var node=tree[index],value=node.children[0].value;if(function getNewLines(str){return str.match(newLineRegex)}(value)){var splitValue=value.split("\n");splitValue.forEach((function(text,i){var lineNumber=showLineNumbers&&newTree.length+startingLineNumber,newChild={type:"text",value:"".concat(text,"\n")};if(0===i){var _line=createLine(tree.slice(lastLineBreakIndex+1,index).concat(createLineElement({children:[newChild],className:node.properties.className})),lineNumber);newTree.push(_line)}else if(i===splitValue.length-1){if(tree[index+1]&&tree[index+1].children&&tree[index+1].children[0]){var newElem=createLineElement({children:[{type:"text",value:"".concat(text)}],className:node.properties.className});tree.splice(index+1,0,newElem)}else{var _line2=createLine([newChild],lineNumber,node.properties.className);newTree.push(_line2)}}else{var _line3=createLine([newChild],lineNumber,node.properties.className);newTree.push(_line3)}})),lastLineBreakIndex=index}index++};index=0||(target[key]=source[key]);return target}(source,excluded);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i=48&&code<=57}},1414:function(module,exports,__webpack_require__){"use strict";function markup(Prism){Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/,name:/[^\s<>'"]+/}},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside["internal-subset"].inside=Prism.languages.markup,Prism.hooks.add("wrap",(function(env){"entity"===env.type&&(env.attributes.title=env.content.value.replace(/&/,"&"))})),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function addInlined(tagName,lang){var includedCdataInside={};includedCdataInside["language-"+lang]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[lang]},includedCdataInside.cdata=/^$/i;var inside={"included-cdata":{pattern://i,inside:includedCdataInside}};inside["language-"+lang]={pattern:/[\s\S]+/,inside:Prism.languages[lang]};var def={};def[tagName]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return tagName})),"i"),lookbehind:!0,greedy:!0,inside:inside},Prism.languages.insertBefore("markup","cdata",def)}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml}module.exports=markup,markup.displayName="markup",markup.aliases=["html","mathml","svg","xml","ssml","atom","rss"]},1415:function(module,exports,__webpack_require__){"use strict";function css(Prism){!function(Prism){var string=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;Prism.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+string.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+string.source+"$"),alias:"url"}}},selector:RegExp("[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+string.source+")*(?=\\s*\\{)"),string:{pattern:string,greedy:!0},property:/(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},Prism.languages.css.atrule.inside.rest=Prism.languages.css;var markup=Prism.languages.markup;markup&&(markup.tag.addInlined("style","css"),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/(^|["'\s])style\s*=\s*(?:"[^"]*"|'[^']*')/i,lookbehind:!0,inside:{"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{style:{pattern:/(["'])[\s\S]+(?=["']$)/,lookbehind:!0,alias:"language-css",inside:Prism.languages.css},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},"attr-name":/^style/i}}},markup.tag))}(Prism)}module.exports=css,css.displayName="css",css.aliases=[]},1416:function(module,exports,__webpack_require__){var defineProperty=__webpack_require__(234);module.exports=function _objectSpread(target){for(var i=1;i=]+|\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\}))?|\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}))*\s*\/?)?>/i,Prism.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,Prism.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[^]|[^\\"])*"|'(?:\\[^]|[^\\'])*'|[^\s'">]+)/i,Prism.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,Prism.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\s*\.{3}\s*[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\s*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},Prism.languages.jsx.tag),Prism.languages.insertBefore("inside","attr-value",{script:{pattern:/=(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:Prism.languages.jsx},alias:"language-javascript"}},Prism.languages.jsx.tag);var stringifyToken=function(token){return token?"string"==typeof token?token:"string"==typeof token.content?token.content:token.content.map(stringifyToken).join(""):""},walkTokens=function(tokens){for(var openedTags=[],i=0;i0&&openedTags[openedTags.length-1].tagName===stringifyToken(token.content[0].content[1])&&openedTags.pop():"/>"===token.content[token.content.length-1].content||openedTags.push({tagName:stringifyToken(token.content[0].content[1]),openedBraces:0}):openedTags.length>0&&"punctuation"===token.type&&"{"===token.content?openedTags[openedTags.length-1].openedBraces++:openedTags.length>0&&openedTags[openedTags.length-1].openedBraces>0&&"punctuation"===token.type&&"}"===token.content?openedTags[openedTags.length-1].openedBraces--:notTagNorBrace=!0),(notTagNorBrace||"string"==typeof token)&&openedTags.length>0&&0===openedTags[openedTags.length-1].openedBraces){var plainText=stringifyToken(token);i0&&("string"==typeof tokens[i-1]||"plain-text"===tokens[i-1].type)&&(plainText=stringifyToken(tokens[i-1])+plainText,tokens.splice(i-1,1),i--),tokens[i]=new Prism.Token("plain-text",plainText,null,plainText)}token.content&&"string"!=typeof token.content&&walkTokens(token.content)}};Prism.hooks.add("after-tokenize",(function(env){"jsx"!==env.language&&"tsx"!==env.language||walkTokens(env.tokens)}))}(Prism)}module.exports=jsx,jsx.displayName="jsx",jsx.aliases=[]},1418:function(module,exports,__webpack_require__){"use strict";function typescript(Prism){!function(Prism){Prism.languages.typescript=Prism.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},keyword:/\b(?:abstract|as|asserts|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|undefined|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),delete Prism.languages.typescript.parameter;var typeInside=Prism.languages.extend("typescript",{});delete typeInside["class-name"],Prism.languages.typescript["class-name"].inside=typeInside,Prism.languages.insertBefore("typescript","function",{"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:typeInside}}}}),Prism.languages.ts=Prism.languages.typescript}(Prism)}module.exports=typescript,typescript.displayName="typescript",typescript.aliases=["ts"]},1425:function(module,exports,__webpack_require__){"use strict";(function(global){var ctx="object"==typeof globalThis?globalThis:"object"==typeof self?self:"object"==typeof window?window:"object"==typeof global?global:{},restore=function capture(){var defined="Prism"in ctx,current=defined?ctx.Prism:void 0;return function restore(){defined?ctx.Prism=current:delete ctx.Prism;defined=void 0,current=void 0}}();ctx.Prism={manual:!0,disableWorkerMessageHandler:!0};var h=__webpack_require__(1426),decode=__webpack_require__(1442),Prism=__webpack_require__(1449),markup=__webpack_require__(1414),css=__webpack_require__(1415),clike=__webpack_require__(1450),js=__webpack_require__(1451);restore();var own={}.hasOwnProperty;function Refractor(){}Refractor.prototype=Prism;var refract=new Refractor;function register(grammar){if("function"!=typeof grammar||!grammar.displayName)throw new Error("Expected `function` for `grammar`, got `"+grammar+"`");void 0===refract.languages[grammar.displayName]&&grammar(refract)}module.exports=refract,refract.highlight=function highlight(value,name){var grammar,sup=Prism.highlight;if("string"!=typeof value)throw new Error("Expected `string` for `value`, got `"+value+"`");if("Object"===refract.util.type(name))grammar=name,name=null;else{if("string"!=typeof name)throw new Error("Expected `string` for `name`, got `"+name+"`");if(!own.call(refract.languages,name))throw new Error("Unknown language: `"+name+"` is not registered");grammar=refract.languages[name]}return sup.call(this,value,grammar,name)},refract.register=register,refract.alias=function alias(name,alias){var key,list,length,index,languages=refract.languages,map=name;alias&&((map={})[name]=alias);for(key in map)for(list=map[key],length=(list="string"==typeof list?[list]:list).length,index=-1;++index4&&"data"===normal.slice(0,4)&&valid.test(value)&&("-"===value.charAt(4)?prop=function datasetToProperty(attribute){var value=attribute.slice(5).replace(dash,camelcase);return"data"+value.charAt(0).toUpperCase()+value.slice(1)}(value):value=function datasetToAttribute(property){var value=property.slice(4);if(dash.test(value))return property;"-"!==(value=value.replace(cap,kebab)).charAt(0)&&(value="-"+value);return"data"+value}(value),Type=DefinedInfo);return new Type(prop,value)};var valid=/^data[-\w.:]+$/i,dash=/-[a-z]/g,cap=/[A-Z]/g;function kebab($0){return"-"+$0.toLowerCase()}function camelcase($0){return $0.charAt(1).toUpperCase()}},1439:function(module,exports,__webpack_require__){"use strict";module.exports=function parse(selector,defaultTagName){var subvalue,previous,match,value=selector||"",name=defaultTagName||"div",props={},start=0;for(;start65535&&(output+=fromCharCode((reference-=65536)>>>10|55296),reference=56320|1023&reference),reference=output+fromCharCode(reference))):type!==name&&warning(4,diff)),reference?(flush(),prev=now(),index=end-1,column+=end-start+1,result.push(reference),(next=now()).offset++,handleReference&&handleReference.call(referenceContext,reference,{start:prev,end:next},value.slice(start-1,end)),prev=next):(characters=value.slice(start-1,end),queue+=characters,column+=characters.length,index=end-1)}else 10===character&&(line++,lines++,column=0),character==character?(queue+=fromCharCode(character),column++):flush();return result.join("");function now(){return{line:line,column:column,offset:index+(pos.offset||0)}}function parseError(code,offset){var position=now();position.column+=offset,position.offset+=offset,handleWarning.call(warningContext,messages[code],position,code)}function flush(){queue&&(result.push(queue),handleText&&handleText.call(textContext,queue,{start:prev,end:now()}),queue="")}}(value,settings)};var own={}.hasOwnProperty,fromCharCode=String.fromCharCode,noop=Function.prototype,defaults={warning:null,reference:null,text:null,warningContext:null,referenceContext:null,textContext:null,position:{},additional:null,attribute:!1,nonTerminated:!0},name="named",hexa="hexadecimal",deci="decimal",bases={hexadecimal:16,decimal:10},tests={};tests.named=alphanumerical,tests[deci]=decimal,tests[hexa]=hexadecimal;var messages={};function prohibited(code){return code>=55296&&code<=57343||code>1114111}function disallowed(code){return code>=1&&code<=8||11===code||code>=13&&code<=31||code>=127&&code<=159||code>=64976&&code<=65007||65535==(65535&code)||65534==(65535&code)}messages[1]="Named character references must be terminated by a semicolon",messages[2]="Numeric character references must be terminated by a semicolon",messages[3]="Named character references cannot be empty",messages[4]="Numeric character references cannot be empty",messages[5]="Named character references must be known",messages[6]="Numeric character references cannot be disallowed",messages[7]="Numeric character references cannot be outside the permissible Unicode range"},1443:function(module){module.exports=JSON.parse('{"AElig":"Æ","AMP":"&","Aacute":"Á","Acirc":"Â","Agrave":"À","Aring":"Å","Atilde":"Ã","Auml":"Ä","COPY":"©","Ccedil":"Ç","ETH":"Ð","Eacute":"É","Ecirc":"Ê","Egrave":"È","Euml":"Ë","GT":">","Iacute":"Í","Icirc":"Î","Igrave":"Ì","Iuml":"Ï","LT":"<","Ntilde":"Ñ","Oacute":"Ó","Ocirc":"Ô","Ograve":"Ò","Oslash":"Ø","Otilde":"Õ","Ouml":"Ö","QUOT":"\\"","REG":"®","THORN":"Þ","Uacute":"Ú","Ucirc":"Û","Ugrave":"Ù","Uuml":"Ü","Yacute":"Ý","aacute":"á","acirc":"â","acute":"´","aelig":"æ","agrave":"à","amp":"&","aring":"å","atilde":"ã","auml":"ä","brvbar":"¦","ccedil":"ç","cedil":"¸","cent":"¢","copy":"©","curren":"¤","deg":"°","divide":"÷","eacute":"é","ecirc":"ê","egrave":"è","eth":"ð","euml":"ë","frac12":"½","frac14":"¼","frac34":"¾","gt":">","iacute":"í","icirc":"î","iexcl":"¡","igrave":"ì","iquest":"¿","iuml":"ï","laquo":"«","lt":"<","macr":"¯","micro":"µ","middot":"·","nbsp":" ","not":"¬","ntilde":"ñ","oacute":"ó","ocirc":"ô","ograve":"ò","ordf":"ª","ordm":"º","oslash":"ø","otilde":"õ","ouml":"ö","para":"¶","plusmn":"±","pound":"£","quot":"\\"","raquo":"»","reg":"®","sect":"§","shy":"","sup1":"¹","sup2":"²","sup3":"³","szlig":"ß","thorn":"þ","times":"×","uacute":"ú","ucirc":"û","ugrave":"ù","uml":"¨","uuml":"ü","yacute":"ý","yen":"¥","yuml":"ÿ"}')},1444:function(module){module.exports=JSON.parse('{"0":"�","128":"€","130":"‚","131":"ƒ","132":"„","133":"…","134":"†","135":"‡","136":"ˆ","137":"‰","138":"Š","139":"‹","140":"Œ","142":"Ž","145":"‘","146":"’","147":"“","148":"”","149":"•","150":"–","151":"—","152":"˜","153":"™","154":"š","155":"›","156":"œ","158":"ž","159":"Ÿ"}')},1445:function(module,exports,__webpack_require__){"use strict";module.exports=function hexadecimal(character){var code="string"==typeof character?character.charCodeAt(0):character;return code>=97&&code<=102||code>=65&&code<=70||code>=48&&code<=57}},1446:function(module,exports,__webpack_require__){"use strict";var alphabetical=__webpack_require__(1447),decimal=__webpack_require__(1413);module.exports=function alphanumerical(character){return alphabetical(character)||decimal(character)}},1447:function(module,exports,__webpack_require__){"use strict";module.exports=function alphabetical(character){var code="string"==typeof character?character.charCodeAt(0):character;return code>=97&&code<=122||code>=65&&code<=90}},1448:function(module,exports,__webpack_require__){"use strict";var el;module.exports=function decodeEntity(characters){var char,entity="&"+characters+";";if((el=el||document.createElement("i")).innerHTML=entity,59===(char=el.textContent).charCodeAt(char.length-1)&&"semi"!==characters)return!1;return char!==entity&&char}},1449:function(module,exports,__webpack_require__){(function(global){var Prism=function(_self){var lang=/\blang(?:uage)?-([\w-]+)\b/i,uniqueId=0,_={manual:_self.Prism&&_self.Prism.manual,disableWorkerMessageHandler:_self.Prism&&_self.Prism.disableWorkerMessageHandler,util:{encode:function encode(tokens){return tokens instanceof Token?new Token(tokens.type,encode(tokens.content),tokens.alias):Array.isArray(tokens)?tokens.map(encode):tokens.replace(/&/g,"&").replace(/=rematch.reach);pos+=currentNode.value.length,currentNode=currentNode.next){var str=currentNode.value;if(tokenList.length>text.length)return;if(!(str instanceof Token)){var match,removeCount=1;if(greedy){if(!(match=matchPattern(pattern,pos,text,lookbehind)))break;var from=match.index,to=match.index+match[0].length,p=pos;for(p+=currentNode.value.length;from>=p;)p+=(currentNode=currentNode.next).value.length;if(pos=p-=currentNode.value.length,currentNode.value instanceof Token)continue;for(var k=currentNode;k!==tokenList.tail&&(prematch.reach&&(rematch.reach=reach);var removeFrom=currentNode.prev;before&&(removeFrom=addAfter(tokenList,removeFrom,before),pos+=before.length),removeRange(tokenList,removeFrom,removeCount),currentNode=addAfter(tokenList,removeFrom,new Token(token,inside?_.tokenize(matchStr,inside):matchStr,alias,matchStr)),after&&addAfter(tokenList,currentNode,after),removeCount>1&&matchGrammar(text,tokenList,grammar,currentNode.prev,pos,{cause:token+","+j,reach:reach})}}}}}function LinkedList(){var head={value:null,prev:null,next:null},tail={value:null,prev:head,next:null};head.next=tail,this.head=head,this.tail=tail,this.length=0}function addAfter(list,node,value){var next=node.next,newNode={value:value,prev:node,next:next};return node.next=newNode,next.prev=newNode,list.length++,newNode}function removeRange(list,node,count){for(var next=node.next,i=0;i"+env.content+""+env.tag+">"},!_self.document)return _self.addEventListener?(_.disableWorkerMessageHandler||_self.addEventListener("message",(function(evt){var message=JSON.parse(evt.data),lang=message.language,code=message.code,immediateClose=message.immediateClose;_self.postMessage(_.highlight(code,_.languages[lang],lang)),immediateClose&&_self.close()}),!1),_):_;var script=_.util.currentScript();function highlightAutomaticallyCallback(){_.manual||_.highlightAll()}if(script&&(_.filename=script.src,script.hasAttribute("data-manual")&&(_.manual=!0)),!_.manual){var readyState=document.readyState;"loading"===readyState||"interactive"===readyState&&script&&script.defer?document.addEventListener("DOMContentLoaded",highlightAutomaticallyCallback):window.requestAnimationFrame?window.requestAnimationFrame(highlightAutomaticallyCallback):window.setTimeout(highlightAutomaticallyCallback,16)}return _}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});module.exports&&(module.exports=Prism),void 0!==global&&(global.Prism=Prism)}).call(this,__webpack_require__(58))},1450:function(module,exports,__webpack_require__){"use strict";function clike(Prism){Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}}module.exports=clike,clike.displayName="clike",clike.aliases=[]},1451:function(module,exports,__webpack_require__){"use strict";function javascript(Prism){Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|(?:get|set)(?=\s*[\[$\w\xA0-\uFFFF])|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-flags":/[a-z]+$/,"regex-delimiter":/^\/|\/$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.js=Prism.languages.javascript}module.exports=javascript,javascript.displayName="javascript",javascript.aliases=["js"]},1452:function(module,exports,__webpack_require__){"use strict";function jsExtras(Prism){!function(Prism){function withId(source,flags){return RegExp(source.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),flags)}Prism.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+Prism.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),Prism.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+Prism.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),Prism.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),Prism.languages.insertBefore("javascript","keyword",{imports:{pattern:withId(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:Prism.languages.javascript},exports:{pattern:withId(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:Prism.languages.javascript}}),Prism.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|for|finally|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),Prism.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),Prism.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:withId(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var maybeClassNameTokens=["function","function-variable","method","method-variable","property-access"],i=0;i|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,properties="(?:"+tag.source+"(?:[ \t]+"+anchorOrAlias.source+")?|"+anchorOrAlias.source+"(?:[ \t]+"+tag.source+")?)",plainKey=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),string=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function createValuePattern(value,flags){flags=(flags||"").replace(/m/g,"")+"m";var pattern=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|]|}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return properties})).replace(/<>/g,(function(){return value}));return RegExp(pattern,flags)}Prism.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return properties}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return properties})).replace(/<>/g,(function(){return"(?:"+plainKey+"|"+string+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:createValuePattern(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:createValuePattern(/true|false/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:createValuePattern(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:createValuePattern(string),lookbehind:!0,greedy:!0},number:{pattern:createValuePattern(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:tag,important:anchorOrAlias,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},Prism.languages.yml=Prism.languages.yaml}(Prism)}module.exports=yaml,yaml.displayName="yaml",yaml.aliases=["yml"]},1455:function(module,exports,__webpack_require__){"use strict";function markdown(Prism){!function(Prism){var inner=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?!\n|\r\n?))/.source;function createInline(pattern){return pattern=pattern.replace(//g,(function(){return inner})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+pattern+")")}var tableCell=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,tableRow=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return tableCell})),tableLine=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"font-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:Prism.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+tableRow+tableLine+"(?:"+tableRow+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+tableRow+tableLine+")(?:"+tableRow+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(tableCell),inside:Prism.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+tableRow+")"+tableLine+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+tableRow+"$"),inside:{"table-header":{pattern:RegExp(tableCell),alias:"important",inside:Prism.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\r\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:createInline(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:createInline(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:createInline(/(~~?)(?:(?!~))+?\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},url:{pattern:createInline(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(token){["url","bold","italic","strike"].forEach((function(inside){token!==inside&&(Prism.languages.markdown[token].inside.content.inside[inside]=Prism.languages.markdown[inside])}))})),Prism.hooks.add("after-tokenize",(function(env){"markdown"!==env.language&&"md"!==env.language||function walkTokens(tokens){if(tokens&&"string"!=typeof tokens)for(var i=0,l=tokens.length;i>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+envVars),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};Prism.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+envVars),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:insideString},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:commandAfterHeredoc}},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|(?!\2)[^\\`$])*\2/,lookbehind:!0,greedy:!0,inside:insideString}],environment:{pattern:RegExp("\\$?"+envVars),alias:"constant"},variable:insideString.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|break|cd|continue|eval|exec|exit|export|getopts|hash|pwd|readonly|return|shift|test|times|trap|umask|unset|alias|bind|builtin|caller|command|declare|echo|enable|help|let|local|logout|mapfile|printf|read|readarray|source|type|typeset|ulimit|unalias|set|shopt)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},commandAfterHeredoc.inside=Prism.languages.bash;for(var toBeCopied=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],inside=insideString.variable[1].inside,i=0;i
+ * @author Lea Verou
+ * @namespace
+ * @public
+ */
diff --git a/0.2a31086d.iframe.bundle.js b/0.2a31086d.iframe.bundle.js
new file mode 100644
index 0000000000..6c6bc99539
--- /dev/null
+++ b/0.2a31086d.iframe.bundle.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{"./node_modules/@storybook/preview-web/dist/esm/renderDocs.js":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"renderDocs",(function(){return renderDocs})),__webpack_require__.d(__webpack_exports__,"unmountDocs",(function(){return unmountDocs}));__webpack_require__("./node_modules/regenerator-runtime/runtime.js"),__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js");var react=__webpack_require__("./node_modules/react/index.js"),react_default=__webpack_require__.n(react),react_dom=__webpack_require__("./node_modules/react-dom/index.js"),react_dom_default=__webpack_require__.n(react_dom),wrapper={fontSize:"14px",letterSpacing:"0.2px",margin:"10px 0"},main={margin:"auto",padding:30,borderRadius:10,background:"rgba(0,0,0,0.03)"},heading={textAlign:"center"},NoDocs_NoDocs=function NoDocs(){return react_default.a.createElement("div",{style:wrapper,className:"sb-nodocs sb-wrapper"},react_default.a.createElement("div",{style:main},react_default.a.createElement("h1",{style:heading},"No Docs"),react_default.a.createElement("p",null,"Sorry, but there are no docs for the selected story. To add them, set the story's ",react_default.a.createElement("code",null,"docs")," parameter. If you think this is an error:"),react_default.a.createElement("ul",null,react_default.a.createElement("li",null,"Please check the story definition."),react_default.a.createElement("li",null,"Please check the Storybook config."),react_default.a.createElement("li",null,"Try reloading the page.")),react_default.a.createElement("p",null,"If the problem persists, check the browser console, or the terminal you've run Storybook from.")))};function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise((function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(void 0)}))}}function renderDocs(story,docsContext,element,callback){return function renderDocsAsync(_x,_x2,_x3){return _renderDocsAsync.apply(this,arguments)}(story,docsContext,element).then(callback)}function _renderDocsAsync(){return(_renderDocsAsync=_asyncToGenerator(regeneratorRuntime.mark((function _callee(story,docsContext,element){var _docs$getContainer,_docs$getPage,docs,DocsContainer,Page,docsElement;return regeneratorRuntime.wrap((function _callee$(_context){for(;;)switch(_context.prev=_context.next){case 0:if(!(null!=(docs=story.parameters.docs)&&docs.getPage||null!=docs&&docs.page)||(null!=docs&&docs.getContainer||null!=docs&&docs.container)){_context.next=3;break}throw new Error("No `docs.container` set, did you run `addon-docs/preset`?");case 3:if(_context.t1=docs.container,_context.t1){_context.next=8;break}return _context.next=7,null===(_docs$getContainer=docs.getContainer)||void 0===_docs$getContainer?void 0:_docs$getContainer.call(docs);case 7:_context.t1=_context.sent;case 8:if(_context.t0=_context.t1,_context.t0){_context.next=11;break}_context.t0=function(_ref){var children=_ref.children;return react_default.a.createElement(react_default.a.Fragment,null,children)};case 11:if(DocsContainer=_context.t0,_context.t3=docs.page,_context.t3){_context.next=17;break}return _context.next=16,null===(_docs$getPage=docs.getPage)||void 0===_docs$getPage?void 0:_docs$getPage.call(docs);case 16:_context.t3=_context.sent;case 17:if(_context.t2=_context.t3,_context.t2){_context.next=20;break}_context.t2=NoDocs_NoDocs;case 20:return Page=_context.t2,docsElement=react_default.a.createElement(DocsContainer,{key:story.componentId,context:docsContext},react_default.a.createElement(Page,null)),_context.next=24,new Promise((function(resolve){react_dom_default.a.render(docsElement,element,resolve)}));case 24:case"end":return _context.stop()}}),_callee)})))).apply(this,arguments)}function unmountDocs(element){react_dom_default.a.unmountComponentAtNode(element)}NoDocs_NoDocs.displayName="NoDocs"}}]);
\ No newline at end of file
diff --git a/1.89e4a536f4aebd1178eb.manager.bundle.js b/1.89e4a536f4aebd1178eb.manager.bundle.js
new file mode 100644
index 0000000000..29e092350d
--- /dev/null
+++ b/1.89e4a536f4aebd1178eb.manager.bundle.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{1459:function(module,exports,__webpack_require__){"use strict";var warning=function(){};module.exports=warning},753:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"WithTooltipPure",(function(){return WithTooltip_WithTooltipPure})),__webpack_require__.d(__webpack_exports__,"WithToolTipState",(function(){return WithTooltip_WithToolTipState})),__webpack_require__.d(__webpack_exports__,"WithTooltip",(function(){return WithTooltip_WithToolTipState}));__webpack_require__(17),__webpack_require__(64),__webpack_require__(15),__webpack_require__(5),__webpack_require__(8),__webpack_require__(13),__webpack_require__(6),__webpack_require__(14),__webpack_require__(10),__webpack_require__(11),__webpack_require__(7),__webpack_require__(20),__webpack_require__(9),__webpack_require__(52);var react=__webpack_require__(0),react_default=__webpack_require__.n(react),esm=__webpack_require__(2),global_window=__webpack_require__(4),window_default=__webpack_require__.n(global_window),objectWithoutPropertiesLoose=__webpack_require__(316),esm_extends=__webpack_require__(12),inheritsLoose=__webpack_require__(315),react_dom=__webpack_require__(117),ManagerReferenceNodeContext=react.createContext(),ManagerReferenceNodeSetterContext=react.createContext();function Manager(_ref){var children=_ref.children,_React$useState=react.useState(null),referenceNode=_React$useState[0],setReferenceNode=_React$useState[1];return react.useEffect((function(){return function(){setReferenceNode(null)}}),[setReferenceNode]),react.createElement(ManagerReferenceNodeContext.Provider,{value:referenceNode},react.createElement(ManagerReferenceNodeSetterContext.Provider,{value:setReferenceNode},children))}var unwrapArray=function unwrapArray(arg){return Array.isArray(arg)?arg[0]:arg},safeInvoke=function safeInvoke(fn){if("function"==typeof fn){for(var _len=arguments.length,args=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return fn.apply(void 0,args)}},setRef=function setRef(ref,node){if("function"==typeof ref)return safeInvoke(ref,node);null!=ref&&(ref.current=node)},fromEntries=function fromEntries(entries){return entries.reduce((function(acc,_ref){var key=_ref[0],value=_ref[1];return acc[key]=value,acc}),{})},useIsomorphicLayoutEffect="undefined"!=typeof window&&window.document&&window.document.createElement?react.useLayoutEffect:react.useEffect;function getBoundingClientRect(element){var rect=element.getBoundingClientRect();return{width:rect.width,height:rect.height,top:rect.top,right:rect.right,bottom:rect.bottom,left:rect.left,x:rect.left,y:rect.top}}function getWindow(node){if("[object Window]"!==node.toString()){var ownerDocument=node.ownerDocument;return ownerDocument&&ownerDocument.defaultView||window}return node}function getWindowScroll(node){var win=getWindow(node);return{scrollLeft:win.pageXOffset,scrollTop:win.pageYOffset}}function isElement(node){return node instanceof getWindow(node).Element||node instanceof Element}function isHTMLElement(node){return node instanceof getWindow(node).HTMLElement||node instanceof HTMLElement}function getNodeName(element){return element?(element.nodeName||"").toLowerCase():null}function getDocumentElement(element){return((isElement(element)?element.ownerDocument:element.document)||window.document).documentElement}function getWindowScrollBarX(element){return getBoundingClientRect(getDocumentElement(element)).left+getWindowScroll(element).scrollLeft}function getComputedStyle(element){return getWindow(element).getComputedStyle(element)}function isScrollParent(element){var _getComputedStyle=getComputedStyle(element),overflow=_getComputedStyle.overflow,overflowX=_getComputedStyle.overflowX,overflowY=_getComputedStyle.overflowY;return/auto|scroll|overlay|hidden/.test(overflow+overflowY+overflowX)}function getCompositeRect(elementOrVirtualElement,offsetParent,isFixed){void 0===isFixed&&(isFixed=!1);var documentElement=getDocumentElement(offsetParent),rect=getBoundingClientRect(elementOrVirtualElement),isOffsetParentAnElement=isHTMLElement(offsetParent),scroll={scrollLeft:0,scrollTop:0},offsets={x:0,y:0};return(isOffsetParentAnElement||!isOffsetParentAnElement&&!isFixed)&&(("body"!==getNodeName(offsetParent)||isScrollParent(documentElement))&&(scroll=function getNodeScroll(node){return node!==getWindow(node)&&isHTMLElement(node)?function getHTMLElementScroll(element){return{scrollLeft:element.scrollLeft,scrollTop:element.scrollTop}}(node):getWindowScroll(node)}(offsetParent)),isHTMLElement(offsetParent)?((offsets=getBoundingClientRect(offsetParent)).x+=offsetParent.clientLeft,offsets.y+=offsetParent.clientTop):documentElement&&(offsets.x=getWindowScrollBarX(documentElement))),{x:rect.left+scroll.scrollLeft-offsets.x,y:rect.top+scroll.scrollTop-offsets.y,width:rect.width,height:rect.height}}function getLayoutRect(element){return{x:element.offsetLeft,y:element.offsetTop,width:element.offsetWidth,height:element.offsetHeight}}function getParentNode(element){return"html"===getNodeName(element)?element:element.assignedSlot||element.parentNode||element.host||getDocumentElement(element)}function getScrollParent(node){return["html","body","#document"].indexOf(getNodeName(node))>=0?node.ownerDocument.body:isHTMLElement(node)&&isScrollParent(node)?node:getScrollParent(getParentNode(node))}function listScrollParents(element,list){void 0===list&&(list=[]);var scrollParent=getScrollParent(element),isBody="body"===getNodeName(scrollParent),win=getWindow(scrollParent),target=isBody?[win].concat(win.visualViewport||[],isScrollParent(scrollParent)?scrollParent:[]):scrollParent,updatedList=list.concat(target);return isBody?updatedList:updatedList.concat(listScrollParents(getParentNode(target)))}function isTableElement(element){return["table","td","th"].indexOf(getNodeName(element))>=0}function getTrueOffsetParent(element){if(!isHTMLElement(element)||"fixed"===getComputedStyle(element).position)return null;var offsetParent=element.offsetParent;if(offsetParent){var html=getDocumentElement(offsetParent);if("body"===getNodeName(offsetParent)&&"static"===getComputedStyle(offsetParent).position&&"static"!==getComputedStyle(html).position)return html}return offsetParent}function getOffsetParent(element){for(var window=getWindow(element),offsetParent=getTrueOffsetParent(element);offsetParent&&isTableElement(offsetParent)&&"static"===getComputedStyle(offsetParent).position;)offsetParent=getTrueOffsetParent(offsetParent);return offsetParent&&"body"===getNodeName(offsetParent)&&"static"===getComputedStyle(offsetParent).position?window:offsetParent||function getContainingBlock(element){for(var currentNode=getParentNode(element);isHTMLElement(currentNode)&&["html","body"].indexOf(getNodeName(currentNode))<0;){var css=getComputedStyle(currentNode);if("none"!==css.transform||"none"!==css.perspective||css.willChange&&"auto"!==css.willChange)return currentNode;currentNode=currentNode.parentNode}return null}(element)||window}var enums_top="top",bottom="bottom",right="right",left="left",basePlacements=[enums_top,bottom,right,left],variationPlacements=basePlacements.reduce((function(acc,placement){return acc.concat([placement+"-start",placement+"-end"])}),[]),enums_placements=[].concat(basePlacements,["auto"]).reduce((function(acc,placement){return acc.concat([placement,placement+"-start",placement+"-end"])}),[]),modifierPhases=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function order(modifiers){var map=new Map,visited=new Set,result=[];function sort(modifier){visited.add(modifier.name),[].concat(modifier.requires||[],modifier.requiresIfExists||[]).forEach((function(dep){if(!visited.has(dep)){var depModifier=map.get(dep);depModifier&&sort(depModifier)}})),result.push(modifier)}return modifiers.forEach((function(modifier){map.set(modifier.name,modifier)})),modifiers.forEach((function(modifier){visited.has(modifier.name)||sort(modifier)})),result}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return!args.some((function(element){return!(element&&"function"==typeof element.getBoundingClientRect)}))}function popperGenerator(generatorOptions){void 0===generatorOptions&&(generatorOptions={});var _generatorOptions=generatorOptions,_generatorOptions$def=_generatorOptions.defaultModifiers,defaultModifiers=void 0===_generatorOptions$def?[]:_generatorOptions$def,_generatorOptions$def2=_generatorOptions.defaultOptions,defaultOptions=void 0===_generatorOptions$def2?DEFAULT_OPTIONS:_generatorOptions$def2;return function createPopper(reference,popper,options){void 0===options&&(options=defaultOptions);var fn,pending,state={placement:"bottom",orderedModifiers:[],options:Object.assign(Object.assign({},DEFAULT_OPTIONS),defaultOptions),modifiersData:{},elements:{reference:reference,popper:popper},attributes:{},styles:{}},effectCleanupFns=[],isDestroyed=!1,instance={state:state,setOptions:function setOptions(options){cleanupModifierEffects(),state.options=Object.assign(Object.assign(Object.assign({},defaultOptions),state.options),options),state.scrollParents={reference:isElement(reference)?listScrollParents(reference):reference.contextElement?listScrollParents(reference.contextElement):[],popper:listScrollParents(popper)};var orderedModifiers=function orderModifiers(modifiers){var orderedModifiers=order(modifiers);return modifierPhases.reduce((function(acc,phase){return acc.concat(orderedModifiers.filter((function(modifier){return modifier.phase===phase})))}),[])}(function mergeByName(modifiers){var merged=modifiers.reduce((function(merged,current){var existing=merged[current.name];return merged[current.name]=existing?Object.assign(Object.assign(Object.assign({},existing),current),{},{options:Object.assign(Object.assign({},existing.options),current.options),data:Object.assign(Object.assign({},existing.data),current.data)}):current,merged}),{});return Object.keys(merged).map((function(key){return merged[key]}))}([].concat(defaultModifiers,state.options.modifiers)));return state.orderedModifiers=orderedModifiers.filter((function(m){return m.enabled})),function runModifierEffects(){state.orderedModifiers.forEach((function(_ref3){var name=_ref3.name,_ref3$options=_ref3.options,options=void 0===_ref3$options?{}:_ref3$options,effect=_ref3.effect;if("function"==typeof effect){var cleanupFn=effect({state:state,name:name,instance:instance,options:options}),noopFn=function noopFn(){};effectCleanupFns.push(cleanupFn||noopFn)}}))}(),instance.update()},forceUpdate:function forceUpdate(){if(!isDestroyed){var _state$elements=state.elements,reference=_state$elements.reference,popper=_state$elements.popper;if(areValidElements(reference,popper)){state.rects={reference:getCompositeRect(reference,getOffsetParent(popper),"fixed"===state.options.strategy),popper:getLayoutRect(popper)},state.reset=!1,state.placement=state.options.placement,state.orderedModifiers.forEach((function(modifier){return state.modifiersData[modifier.name]=Object.assign({},modifier.data)}));for(var index=0;index=0?"x":"y"}function computeOffsets(_ref){var offsets,reference=_ref.reference,element=_ref.element,placement=_ref.placement,basePlacement=placement?getBasePlacement(placement):null,variation=placement?getVariation(placement):null,commonX=reference.x+reference.width/2-element.width/2,commonY=reference.y+reference.height/2-element.height/2;switch(basePlacement){case enums_top:offsets={x:commonX,y:reference.y-element.height};break;case bottom:offsets={x:commonX,y:reference.y+reference.height};break;case right:offsets={x:reference.x+reference.width,y:commonY};break;case left:offsets={x:reference.x-element.width,y:commonY};break;default:offsets={x:reference.x,y:reference.y}}var mainAxis=basePlacement?getMainAxisFromPlacement(basePlacement):null;if(null!=mainAxis){var len="y"===mainAxis?"height":"width";switch(variation){case"start":offsets[mainAxis]=offsets[mainAxis]-(reference[len]/2-element[len]/2);break;case"end":offsets[mainAxis]=offsets[mainAxis]+(reference[len]/2-element[len]/2)}}return offsets}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function mapToStyles(_ref2){var _Object$assign2,popper=_ref2.popper,popperRect=_ref2.popperRect,placement=_ref2.placement,offsets=_ref2.offsets,position=_ref2.position,gpuAcceleration=_ref2.gpuAcceleration,adaptive=_ref2.adaptive,_ref3=_ref2.roundOffsets?function roundOffsetsByDPR(_ref){var x=_ref.x,y=_ref.y,dpr=window.devicePixelRatio||1;return{x:Math.round(x*dpr)/dpr||0,y:Math.round(y*dpr)/dpr||0}}(offsets):offsets,_ref3$x=_ref3.x,x=void 0===_ref3$x?0:_ref3$x,_ref3$y=_ref3.y,y=void 0===_ref3$y?0:_ref3$y,hasX=offsets.hasOwnProperty("x"),hasY=offsets.hasOwnProperty("y"),sideX=left,sideY=enums_top,win=window;if(adaptive){var offsetParent=getOffsetParent(popper);offsetParent===getWindow(popper)&&(offsetParent=getDocumentElement(popper)),placement===enums_top&&(sideY=bottom,y-=offsetParent.clientHeight-popperRect.height,y*=gpuAcceleration?1:-1),placement===left&&(sideX=right,x-=offsetParent.clientWidth-popperRect.width,x*=gpuAcceleration?1:-1)}var _Object$assign,commonStyles=Object.assign({position:position},adaptive&&unsetSides);return gpuAcceleration?Object.assign(Object.assign({},commonStyles),{},((_Object$assign={})[sideY]=hasY?"0":"",_Object$assign[sideX]=hasX?"0":"",_Object$assign.transform=(win.devicePixelRatio||1)<2?"translate("+x+"px, "+y+"px)":"translate3d("+x+"px, "+y+"px, 0)",_Object$assign)):Object.assign(Object.assign({},commonStyles),{},((_Object$assign2={})[sideY]=hasY?y+"px":"",_Object$assign2[sideX]=hasX?x+"px":"",_Object$assign2.transform="",_Object$assign2))}var hash={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement(placement){return placement.replace(/left|right|bottom|top/g,(function(matched){return hash[matched]}))}var getOppositeVariationPlacement_hash={start:"end",end:"start"};function getOppositeVariationPlacement(placement){return placement.replace(/start|end/g,(function(matched){return getOppositeVariationPlacement_hash[matched]}))}function contains(parent,child){var rootNode=child.getRootNode&&child.getRootNode();if(parent.contains(child))return!0;if(rootNode&&function isShadowRoot(node){return node instanceof getWindow(node).ShadowRoot||node instanceof ShadowRoot}(rootNode)){var next=child;do{if(next&&parent.isSameNode(next))return!0;next=next.parentNode||next.host}while(next)}return!1}function rectToClientRect(rect){return Object.assign(Object.assign({},rect),{},{left:rect.x,top:rect.y,right:rect.x+rect.width,bottom:rect.y+rect.height})}function getClientRectFromMixedType(element,clippingParent){return"viewport"===clippingParent?rectToClientRect(function getViewportRect(element){var win=getWindow(element),html=getDocumentElement(element),visualViewport=win.visualViewport,width=html.clientWidth,height=html.clientHeight,x=0,y=0;return visualViewport&&(width=visualViewport.width,height=visualViewport.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(x=visualViewport.offsetLeft,y=visualViewport.offsetTop)),{width:width,height:height,x:x+getWindowScrollBarX(element),y:y}}(element)):isHTMLElement(clippingParent)?function getInnerBoundingClientRect(element){var rect=getBoundingClientRect(element);return rect.top=rect.top+element.clientTop,rect.left=rect.left+element.clientLeft,rect.bottom=rect.top+element.clientHeight,rect.right=rect.left+element.clientWidth,rect.width=element.clientWidth,rect.height=element.clientHeight,rect.x=rect.left,rect.y=rect.top,rect}(clippingParent):rectToClientRect(function getDocumentRect(element){var html=getDocumentElement(element),winScroll=getWindowScroll(element),body=element.ownerDocument.body,width=Math.max(html.scrollWidth,html.clientWidth,body?body.scrollWidth:0,body?body.clientWidth:0),height=Math.max(html.scrollHeight,html.clientHeight,body?body.scrollHeight:0,body?body.clientHeight:0),x=-winScroll.scrollLeft+getWindowScrollBarX(element),y=-winScroll.scrollTop;return"rtl"===getComputedStyle(body||html).direction&&(x+=Math.max(html.clientWidth,body?body.clientWidth:0)-width),{width:width,height:height,x:x,y:y}}(getDocumentElement(element)))}function getClippingRect(element,boundary,rootBoundary){var mainClippingParents="clippingParents"===boundary?function getClippingParents(element){var clippingParents=listScrollParents(getParentNode(element)),clipperElement=["absolute","fixed"].indexOf(getComputedStyle(element).position)>=0&&isHTMLElement(element)?getOffsetParent(element):element;return isElement(clipperElement)?clippingParents.filter((function(clippingParent){return isElement(clippingParent)&&contains(clippingParent,clipperElement)&&"body"!==getNodeName(clippingParent)})):[]}(element):[].concat(boundary),clippingParents=[].concat(mainClippingParents,[rootBoundary]),firstClippingParent=clippingParents[0],clippingRect=clippingParents.reduce((function(accRect,clippingParent){var rect=getClientRectFromMixedType(element,clippingParent);return accRect.top=Math.max(rect.top,accRect.top),accRect.right=Math.min(rect.right,accRect.right),accRect.bottom=Math.min(rect.bottom,accRect.bottom),accRect.left=Math.max(rect.left,accRect.left),accRect}),getClientRectFromMixedType(element,firstClippingParent));return clippingRect.width=clippingRect.right-clippingRect.left,clippingRect.height=clippingRect.bottom-clippingRect.top,clippingRect.x=clippingRect.left,clippingRect.y=clippingRect.top,clippingRect}function mergePaddingObject(paddingObject){return Object.assign(Object.assign({},{top:0,right:0,bottom:0,left:0}),paddingObject)}function expandToHashMap(value,keys){return keys.reduce((function(hashMap,key){return hashMap[key]=value,hashMap}),{})}function detectOverflow(state,options){void 0===options&&(options={});var _options=options,_options$placement=_options.placement,placement=void 0===_options$placement?state.placement:_options$placement,_options$boundary=_options.boundary,boundary=void 0===_options$boundary?"clippingParents":_options$boundary,_options$rootBoundary=_options.rootBoundary,rootBoundary=void 0===_options$rootBoundary?"viewport":_options$rootBoundary,_options$elementConte=_options.elementContext,elementContext=void 0===_options$elementConte?"popper":_options$elementConte,_options$altBoundary=_options.altBoundary,altBoundary=void 0!==_options$altBoundary&&_options$altBoundary,_options$padding=_options.padding,padding=void 0===_options$padding?0:_options$padding,paddingObject=mergePaddingObject("number"!=typeof padding?padding:expandToHashMap(padding,basePlacements)),altContext="popper"===elementContext?"reference":"popper",referenceElement=state.elements.reference,popperRect=state.rects.popper,element=state.elements[altBoundary?altContext:elementContext],clippingClientRect=getClippingRect(isElement(element)?element:element.contextElement||getDocumentElement(state.elements.popper),boundary,rootBoundary),referenceClientRect=getBoundingClientRect(referenceElement),popperOffsets=computeOffsets({reference:referenceClientRect,element:popperRect,strategy:"absolute",placement:placement}),popperClientRect=rectToClientRect(Object.assign(Object.assign({},popperRect),popperOffsets)),elementClientRect="popper"===elementContext?popperClientRect:referenceClientRect,overflowOffsets={top:clippingClientRect.top-elementClientRect.top+paddingObject.top,bottom:elementClientRect.bottom-clippingClientRect.bottom+paddingObject.bottom,left:clippingClientRect.left-elementClientRect.left+paddingObject.left,right:elementClientRect.right-clippingClientRect.right+paddingObject.right},offsetData=state.modifiersData.offset;if("popper"===elementContext&&offsetData){var offset=offsetData[placement];Object.keys(overflowOffsets).forEach((function(key){var multiply=[right,bottom].indexOf(key)>=0?1:-1,axis=[enums_top,bottom].indexOf(key)>=0?"y":"x";overflowOffsets[key]+=offset[axis]*multiply}))}return overflowOffsets}function within(min,value,max){return Math.max(min,Math.min(value,max))}function getSideOffsets(overflow,rect,preventedOffsets){return void 0===preventedOffsets&&(preventedOffsets={x:0,y:0}),{top:overflow.top-rect.height-preventedOffsets.y,right:overflow.right-rect.width+preventedOffsets.x,bottom:overflow.bottom-rect.height+preventedOffsets.y,left:overflow.left-rect.width-preventedOffsets.x}}function isAnySideFullyClipped(overflow){return[enums_top,right,bottom,left].some((function(side){return overflow[side]>=0}))}var popper_createPopper=popperGenerator({defaultModifiers:[{name:"eventListeners",enabled:!0,phase:"write",fn:function fn(){},effect:function effect(_ref){var state=_ref.state,instance=_ref.instance,options=_ref.options,_options$scroll=options.scroll,scroll=void 0===_options$scroll||_options$scroll,_options$resize=options.resize,resize=void 0===_options$resize||_options$resize,window=getWindow(state.elements.popper),scrollParents=[].concat(state.scrollParents.reference,state.scrollParents.popper);return scroll&&scrollParents.forEach((function(scrollParent){scrollParent.addEventListener("scroll",instance.update,passive)})),resize&&window.addEventListener("resize",instance.update,passive),function(){scroll&&scrollParents.forEach((function(scrollParent){scrollParent.removeEventListener("scroll",instance.update,passive)})),resize&&window.removeEventListener("resize",instance.update,passive)}},data:{}},{name:"popperOffsets",enabled:!0,phase:"read",fn:function popperOffsets_popperOffsets(_ref){var state=_ref.state,name=_ref.name;state.modifiersData[name]=computeOffsets({reference:state.rects.reference,element:state.rects.popper,strategy:"absolute",placement:state.placement})},data:{}},{name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function computeStyles(_ref4){var state=_ref4.state,options=_ref4.options,_options$gpuAccelerat=options.gpuAcceleration,gpuAcceleration=void 0===_options$gpuAccelerat||_options$gpuAccelerat,_options$adaptive=options.adaptive,adaptive=void 0===_options$adaptive||_options$adaptive,_options$roundOffsets=options.roundOffsets,roundOffsets=void 0===_options$roundOffsets||_options$roundOffsets,commonStyles={placement:getBasePlacement(state.placement),popper:state.elements.popper,popperRect:state.rects.popper,gpuAcceleration:gpuAcceleration};null!=state.modifiersData.popperOffsets&&(state.styles.popper=Object.assign(Object.assign({},state.styles.popper),mapToStyles(Object.assign(Object.assign({},commonStyles),{},{offsets:state.modifiersData.popperOffsets,position:state.options.strategy,adaptive:adaptive,roundOffsets:roundOffsets})))),null!=state.modifiersData.arrow&&(state.styles.arrow=Object.assign(Object.assign({},state.styles.arrow),mapToStyles(Object.assign(Object.assign({},commonStyles),{},{offsets:state.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:roundOffsets})))),state.attributes.popper=Object.assign(Object.assign({},state.attributes.popper),{},{"data-popper-placement":state.placement})},data:{}},{name:"applyStyles",enabled:!0,phase:"write",fn:function applyStyles(_ref){var state=_ref.state;Object.keys(state.elements).forEach((function(name){var style=state.styles[name]||{},attributes=state.attributes[name]||{},element=state.elements[name];isHTMLElement(element)&&getNodeName(element)&&(Object.assign(element.style,style),Object.keys(attributes).forEach((function(name){var value=attributes[name];!1===value?element.removeAttribute(name):element.setAttribute(name,!0===value?"":value)})))}))},effect:function applyStyles_effect(_ref2){var state=_ref2.state,initialStyles={popper:{position:state.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(state.elements.popper.style,initialStyles.popper),state.elements.arrow&&Object.assign(state.elements.arrow.style,initialStyles.arrow),function(){Object.keys(state.elements).forEach((function(name){var element=state.elements[name],attributes=state.attributes[name]||{},style=Object.keys(state.styles.hasOwnProperty(name)?state.styles[name]:initialStyles[name]).reduce((function(style,property){return style[property]="",style}),{});isHTMLElement(element)&&getNodeName(element)&&(Object.assign(element.style,style),Object.keys(attributes).forEach((function(attribute){element.removeAttribute(attribute)})))}))}},requires:["computeStyles"]},{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function offset_offset(_ref2){var state=_ref2.state,options=_ref2.options,name=_ref2.name,_options$offset=options.offset,offset=void 0===_options$offset?[0,0]:_options$offset,data=enums_placements.reduce((function(acc,placement){return acc[placement]=function distanceAndSkiddingToXY(placement,rects,offset){var basePlacement=getBasePlacement(placement),invertDistance=[left,enums_top].indexOf(basePlacement)>=0?-1:1,_ref="function"==typeof offset?offset(Object.assign(Object.assign({},rects),{},{placement:placement})):offset,skidding=_ref[0],distance=_ref[1];return skidding=skidding||0,distance=(distance||0)*invertDistance,[left,right].indexOf(basePlacement)>=0?{x:distance,y:skidding}:{x:skidding,y:distance}}(placement,state.rects,offset),acc}),{}),_data$state$placement=data[state.placement],x=_data$state$placement.x,y=_data$state$placement.y;null!=state.modifiersData.popperOffsets&&(state.modifiersData.popperOffsets.x+=x,state.modifiersData.popperOffsets.y+=y),state.modifiersData[name]=data}},{name:"flip",enabled:!0,phase:"main",fn:function flip(_ref){var state=_ref.state,options=_ref.options,name=_ref.name;if(!state.modifiersData[name]._skip){for(var _options$mainAxis=options.mainAxis,checkMainAxis=void 0===_options$mainAxis||_options$mainAxis,_options$altAxis=options.altAxis,checkAltAxis=void 0===_options$altAxis||_options$altAxis,specifiedFallbackPlacements=options.fallbackPlacements,padding=options.padding,boundary=options.boundary,rootBoundary=options.rootBoundary,altBoundary=options.altBoundary,_options$flipVariatio=options.flipVariations,flipVariations=void 0===_options$flipVariatio||_options$flipVariatio,allowedAutoPlacements=options.allowedAutoPlacements,preferredPlacement=state.options.placement,basePlacement=getBasePlacement(preferredPlacement),fallbackPlacements=specifiedFallbackPlacements||(basePlacement===preferredPlacement||!flipVariations?[getOppositePlacement(preferredPlacement)]:function getExpandedFallbackPlacements(placement){if("auto"===getBasePlacement(placement))return[];var oppositePlacement=getOppositePlacement(placement);return[getOppositeVariationPlacement(placement),oppositePlacement,getOppositeVariationPlacement(oppositePlacement)]}(preferredPlacement)),placements=[preferredPlacement].concat(fallbackPlacements).reduce((function(acc,placement){return acc.concat("auto"===getBasePlacement(placement)?function computeAutoPlacement(state,options){void 0===options&&(options={});var _options=options,placement=_options.placement,boundary=_options.boundary,rootBoundary=_options.rootBoundary,padding=_options.padding,flipVariations=_options.flipVariations,_options$allowedAutoP=_options.allowedAutoPlacements,allowedAutoPlacements=void 0===_options$allowedAutoP?enums_placements:_options$allowedAutoP,variation=getVariation(placement),placements=variation?flipVariations?variationPlacements:variationPlacements.filter((function(placement){return getVariation(placement)===variation})):basePlacements,allowedPlacements=placements.filter((function(placement){return allowedAutoPlacements.indexOf(placement)>=0}));0===allowedPlacements.length&&(allowedPlacements=placements);var overflows=allowedPlacements.reduce((function(acc,placement){return acc[placement]=detectOverflow(state,{placement:placement,boundary:boundary,rootBoundary:rootBoundary,padding:padding})[getBasePlacement(placement)],acc}),{});return Object.keys(overflows).sort((function(a,b){return overflows[a]-overflows[b]}))}(state,{placement:placement,boundary:boundary,rootBoundary:rootBoundary,padding:padding,flipVariations:flipVariations,allowedAutoPlacements:allowedAutoPlacements}):placement)}),[]),referenceRect=state.rects.reference,popperRect=state.rects.popper,checksMap=new Map,makeFallbackChecks=!0,firstFittingPlacement=placements[0],i=0;i=0,len=isVertical?"width":"height",overflow=detectOverflow(state,{placement:placement,boundary:boundary,rootBoundary:rootBoundary,altBoundary:altBoundary,padding:padding}),mainVariationSide=isVertical?isStartVariation?right:left:isStartVariation?bottom:enums_top;referenceRect[len]>popperRect[len]&&(mainVariationSide=getOppositePlacement(mainVariationSide));var altVariationSide=getOppositePlacement(mainVariationSide),checks=[];if(checkMainAxis&&checks.push(overflow[_basePlacement]<=0),checkAltAxis&&checks.push(overflow[mainVariationSide]<=0,overflow[altVariationSide]<=0),checks.every((function(check){return check}))){firstFittingPlacement=placement,makeFallbackChecks=!1;break}checksMap.set(placement,checks)}if(makeFallbackChecks)for(var _loop=function _loop(_i){var fittingPlacement=placements.find((function(placement){var checks=checksMap.get(placement);if(checks)return checks.slice(0,_i).every((function(check){return check}))}));if(fittingPlacement)return firstFittingPlacement=fittingPlacement,"break"},_i=flipVariations?3:1;_i>0;_i--){if("break"===_loop(_i))break}state.placement!==firstFittingPlacement&&(state.modifiersData[name]._skip=!0,state.placement=firstFittingPlacement,state.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}},{name:"preventOverflow",enabled:!0,phase:"main",fn:function preventOverflow(_ref){var state=_ref.state,options=_ref.options,name=_ref.name,_options$mainAxis=options.mainAxis,checkMainAxis=void 0===_options$mainAxis||_options$mainAxis,_options$altAxis=options.altAxis,checkAltAxis=void 0!==_options$altAxis&&_options$altAxis,boundary=options.boundary,rootBoundary=options.rootBoundary,altBoundary=options.altBoundary,padding=options.padding,_options$tether=options.tether,tether=void 0===_options$tether||_options$tether,_options$tetherOffset=options.tetherOffset,tetherOffset=void 0===_options$tetherOffset?0:_options$tetherOffset,overflow=detectOverflow(state,{boundary:boundary,rootBoundary:rootBoundary,padding:padding,altBoundary:altBoundary}),basePlacement=getBasePlacement(state.placement),variation=getVariation(state.placement),isBasePlacement=!variation,mainAxis=getMainAxisFromPlacement(basePlacement),altAxis=function getAltAxis(axis){return"x"===axis?"y":"x"}(mainAxis),popperOffsets=state.modifiersData.popperOffsets,referenceRect=state.rects.reference,popperRect=state.rects.popper,tetherOffsetValue="function"==typeof tetherOffset?tetherOffset(Object.assign(Object.assign({},state.rects),{},{placement:state.placement})):tetherOffset,data={x:0,y:0};if(popperOffsets){if(checkMainAxis){var mainSide="y"===mainAxis?enums_top:left,altSide="y"===mainAxis?bottom:right,len="y"===mainAxis?"height":"width",offset=popperOffsets[mainAxis],min=popperOffsets[mainAxis]+overflow[mainSide],max=popperOffsets[mainAxis]-overflow[altSide],additive=tether?-popperRect[len]/2:0,minLen="start"===variation?referenceRect[len]:popperRect[len],maxLen="start"===variation?-popperRect[len]:-referenceRect[len],arrowElement=state.elements.arrow,arrowRect=tether&&arrowElement?getLayoutRect(arrowElement):{width:0,height:0},arrowPaddingObject=state.modifiersData["arrow#persistent"]?state.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},arrowPaddingMin=arrowPaddingObject[mainSide],arrowPaddingMax=arrowPaddingObject[altSide],arrowLen=within(0,referenceRect[len],arrowRect[len]),minOffset=isBasePlacement?referenceRect[len]/2-additive-arrowLen-arrowPaddingMin-tetherOffsetValue:minLen-arrowLen-arrowPaddingMin-tetherOffsetValue,maxOffset=isBasePlacement?-referenceRect[len]/2+additive+arrowLen+arrowPaddingMax+tetherOffsetValue:maxLen+arrowLen+arrowPaddingMax+tetherOffsetValue,arrowOffsetParent=state.elements.arrow&&getOffsetParent(state.elements.arrow),clientOffset=arrowOffsetParent?"y"===mainAxis?arrowOffsetParent.clientTop||0:arrowOffsetParent.clientLeft||0:0,offsetModifierValue=state.modifiersData.offset?state.modifiersData.offset[state.placement][mainAxis]:0,tetherMin=popperOffsets[mainAxis]+minOffset-offsetModifierValue-clientOffset,tetherMax=popperOffsets[mainAxis]+maxOffset-offsetModifierValue,preventedOffset=within(tether?Math.min(min,tetherMin):min,offset,tether?Math.max(max,tetherMax):max);popperOffsets[mainAxis]=preventedOffset,data[mainAxis]=preventedOffset-offset}if(checkAltAxis){var _mainSide="x"===mainAxis?enums_top:left,_altSide="x"===mainAxis?bottom:right,_offset=popperOffsets[altAxis],_preventedOffset=within(_offset+overflow[_mainSide],_offset,_offset-overflow[_altSide]);popperOffsets[altAxis]=_preventedOffset,data[altAxis]=_preventedOffset-_offset}state.modifiersData[name]=data}},requiresIfExists:["offset"]},{name:"arrow",enabled:!0,phase:"main",fn:function arrow(_ref){var _state$modifiersData$,state=_ref.state,name=_ref.name,arrowElement=state.elements.arrow,popperOffsets=state.modifiersData.popperOffsets,basePlacement=getBasePlacement(state.placement),axis=getMainAxisFromPlacement(basePlacement),len=[left,right].indexOf(basePlacement)>=0?"height":"width";if(arrowElement&&popperOffsets){var paddingObject=state.modifiersData[name+"#persistent"].padding,arrowRect=getLayoutRect(arrowElement),minProp="y"===axis?enums_top:left,maxProp="y"===axis?bottom:right,endDiff=state.rects.reference[len]+state.rects.reference[axis]-popperOffsets[axis]-state.rects.popper[len],startDiff=popperOffsets[axis]-state.rects.reference[axis],arrowOffsetParent=getOffsetParent(arrowElement),clientSize=arrowOffsetParent?"y"===axis?arrowOffsetParent.clientHeight||0:arrowOffsetParent.clientWidth||0:0,centerToReference=endDiff/2-startDiff/2,min=paddingObject[minProp],max=clientSize-arrowRect[len]-paddingObject[maxProp],center=clientSize/2-arrowRect[len]/2+centerToReference,offset=within(min,center,max),axisProp=axis;state.modifiersData[name]=((_state$modifiersData$={})[axisProp]=offset,_state$modifiersData$.centerOffset=offset-center,_state$modifiersData$)}},effect:function arrow_effect(_ref2){var state=_ref2.state,options=_ref2.options,name=_ref2.name,_options$element=options.element,arrowElement=void 0===_options$element?"[data-popper-arrow]":_options$element,_options$padding=options.padding,padding=void 0===_options$padding?0:_options$padding;null!=arrowElement&&("string"!=typeof arrowElement||(arrowElement=state.elements.popper.querySelector(arrowElement)))&&contains(state.elements.popper,arrowElement)&&(state.elements.arrow=arrowElement,state.modifiersData[name+"#persistent"]={padding:mergePaddingObject("number"!=typeof padding?padding:expandToHashMap(padding,basePlacements))})},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]},{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function hide(_ref){var state=_ref.state,name=_ref.name,referenceRect=state.rects.reference,popperRect=state.rects.popper,preventedOffsets=state.modifiersData.preventOverflow,referenceOverflow=detectOverflow(state,{elementContext:"reference"}),popperAltOverflow=detectOverflow(state,{altBoundary:!0}),referenceClippingOffsets=getSideOffsets(referenceOverflow,referenceRect),popperEscapeOffsets=getSideOffsets(popperAltOverflow,popperRect,preventedOffsets),isReferenceHidden=isAnySideFullyClipped(referenceClippingOffsets),hasPopperEscaped=isAnySideFullyClipped(popperEscapeOffsets);state.modifiersData[name]={referenceClippingOffsets:referenceClippingOffsets,popperEscapeOffsets:popperEscapeOffsets,isReferenceHidden:isReferenceHidden,hasPopperEscaped:hasPopperEscaped},state.attributes.popper=Object.assign(Object.assign({},state.attributes.popper),{},{"data-popper-reference-hidden":isReferenceHidden,"data-popper-escaped":hasPopperEscaped})}}]}),react_fast_compare=__webpack_require__(715),react_fast_compare_default=__webpack_require__.n(react_fast_compare),EMPTY_MODIFIERS=[],NOOP=function NOOP(){},NOOP_PROMISE=function NOOP_PROMISE(){return Promise.resolve(null)},Popper_EMPTY_MODIFIERS=[];function Popper(_ref){var _ref$placement=_ref.placement,placement=void 0===_ref$placement?"bottom":_ref$placement,_ref$strategy=_ref.strategy,strategy=void 0===_ref$strategy?"absolute":_ref$strategy,_ref$modifiers=_ref.modifiers,modifiers=void 0===_ref$modifiers?Popper_EMPTY_MODIFIERS:_ref$modifiers,referenceElement=_ref.referenceElement,onFirstUpdate=_ref.onFirstUpdate,innerRef=_ref.innerRef,children=_ref.children,referenceNode=react.useContext(ManagerReferenceNodeContext),_React$useState=react.useState(null),popperElement=_React$useState[0],setPopperElement=_React$useState[1],_React$useState2=react.useState(null),arrowElement=_React$useState2[0],setArrowElement=_React$useState2[1];react.useEffect((function(){setRef(innerRef,popperElement)}),[innerRef,popperElement]);var options=react.useMemo((function(){return{placement:placement,strategy:strategy,onFirstUpdate:onFirstUpdate,modifiers:[].concat(modifiers,[{name:"arrow",enabled:null!=arrowElement,options:{element:arrowElement}}])}}),[placement,strategy,onFirstUpdate,modifiers,arrowElement]),_usePopper=function usePopper(referenceElement,popperElement,options){void 0===options&&(options={});var prevOptions=react.useRef(null),optionsWithDefaults={onFirstUpdate:options.onFirstUpdate,placement:options.placement||"bottom",strategy:options.strategy||"absolute",modifiers:options.modifiers||EMPTY_MODIFIERS},_React$useState=react.useState({styles:{popper:{position:optionsWithDefaults.strategy,left:"0",top:"0"}},attributes:{}}),state=_React$useState[0],setState=_React$useState[1],updateStateModifier=react.useMemo((function(){return{name:"updateState",enabled:!0,phase:"write",fn:function fn(_ref){var state=_ref.state,elements=Object.keys(state.elements);setState({styles:fromEntries(elements.map((function(element){return[element,state.styles[element]||{}]}))),attributes:fromEntries(elements.map((function(element){return[element,state.attributes[element]]})))})},requires:["computeStyles"]}}),[]),popperOptions=react.useMemo((function(){var newOptions={onFirstUpdate:optionsWithDefaults.onFirstUpdate,placement:optionsWithDefaults.placement,strategy:optionsWithDefaults.strategy,modifiers:[].concat(optionsWithDefaults.modifiers,[updateStateModifier,{name:"applyStyles",enabled:!1}])};return react_fast_compare_default()(prevOptions.current,newOptions)?prevOptions.current||newOptions:(prevOptions.current=newOptions,newOptions)}),[optionsWithDefaults.onFirstUpdate,optionsWithDefaults.placement,optionsWithDefaults.strategy,optionsWithDefaults.modifiers,updateStateModifier]),popperInstanceRef=react.useRef();return useIsomorphicLayoutEffect((function(){popperInstanceRef.current&&popperInstanceRef.current.setOptions(popperOptions)}),[popperOptions]),useIsomorphicLayoutEffect((function(){if(null!=referenceElement&&null!=popperElement){var popperInstance=(options.createPopper||popper_createPopper)(referenceElement,popperElement,popperOptions);return popperInstanceRef.current=popperInstance,function(){popperInstance.destroy(),popperInstanceRef.current=null}}}),[referenceElement,popperElement,options.createPopper]),{state:popperInstanceRef.current?popperInstanceRef.current.state:null,styles:state.styles,attributes:state.attributes,update:popperInstanceRef.current?popperInstanceRef.current.update:null,forceUpdate:popperInstanceRef.current?popperInstanceRef.current.forceUpdate:null}}(referenceElement||referenceNode,popperElement,options),state=_usePopper.state,styles=_usePopper.styles,forceUpdate=_usePopper.forceUpdate,update=_usePopper.update,childrenProps=react.useMemo((function(){return{ref:setPopperElement,style:styles.popper,placement:state?state.placement:placement,hasPopperEscaped:state&&state.modifiersData.hide?state.modifiersData.hide.hasPopperEscaped:null,isReferenceHidden:state&&state.modifiersData.hide?state.modifiersData.hide.isReferenceHidden:null,arrowProps:{style:styles.arrow,ref:setArrowElement},forceUpdate:forceUpdate||NOOP,update:update||NOOP_PROMISE}}),[setPopperElement,setArrowElement,placement,state,styles,update,forceUpdate]);return unwrapArray(children)(childrenProps)}var warning=__webpack_require__(1459),warning_default=__webpack_require__.n(warning);function Reference(_ref){var children=_ref.children,innerRef=_ref.innerRef,setReferenceNode=react.useContext(ManagerReferenceNodeSetterContext),refHandler=react.useCallback((function(node){setRef(innerRef,node),safeInvoke(setReferenceNode,node)}),[innerRef,setReferenceNode]);return react.useEffect((function(){return function(){return setRef(innerRef,null)}})),react.useEffect((function(){warning_default()(Boolean(setReferenceNode),"`Reference` should not be used outside of a `Manager` component.")}),[setReferenceNode]),unwrapArray(children)({ref:refHandler})}var TooltipContext=react_default.a.createContext({}),callAll=function callAll(){for(var _len=arguments.length,fns=new Array(_len),_key=0;_key<_len;_key++)fns[_key]=arguments[_key];return function(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++)args[_key2]=arguments[_key2];return fns.forEach((function(fn){return fn&&fn.apply(void 0,args)}))}},canUseDOM=function canUseDOM(){return!("undefined"==typeof window||!window.document||!window.document.createElement)},react_popper_tooltip_setRef=function setRef(ref,node){if("function"==typeof ref)return ref(node);null!=ref&&(ref.current=node)},react_popper_tooltip_Tooltip=function(_Component){function Tooltip(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return(_this=_Component.call.apply(_Component,[this].concat(args))||this).observer=void 0,_this.tooltipRef=void 0,_this.handleOutsideClick=function(event){if(_this.tooltipRef&&!_this.tooltipRef.contains(event.target)){var parentOutsideClickHandler=_this.context.parentOutsideClickHandler,_this$props=_this.props,hideTooltip=_this$props.hideTooltip;(0,_this$props.clearScheduled)(),hideTooltip(),parentOutsideClickHandler&&parentOutsideClickHandler(event)}},_this.handleOutsideRightClick=function(event){if(_this.tooltipRef&&!_this.tooltipRef.contains(event.target)){var parentOutsideRightClickHandler=_this.context.parentOutsideRightClickHandler,_this$props2=_this.props,hideTooltip=_this$props2.hideTooltip;(0,_this$props2.clearScheduled)(),hideTooltip(),parentOutsideRightClickHandler&&parentOutsideRightClickHandler(event)}},_this.addOutsideClickHandler=function(){document.body.addEventListener("touchend",_this.handleOutsideClick),document.body.addEventListener("click",_this.handleOutsideClick)},_this.removeOutsideClickHandler=function(){document.body.removeEventListener("touchend",_this.handleOutsideClick),document.body.removeEventListener("click",_this.handleOutsideClick)},_this.addOutsideRightClickHandler=function(){return document.body.addEventListener("contextmenu",_this.handleOutsideRightClick)},_this.removeOutsideRightClickHandler=function(){return document.body.removeEventListener("contextmenu",_this.handleOutsideRightClick)},_this.getTooltipRef=function(node){_this.tooltipRef=node,react_popper_tooltip_setRef(_this.props.innerRef,node)},_this.getArrowProps=function(props){return void 0===props&&(props={}),Object(esm_extends.a)({},props,{style:Object(esm_extends.a)({},props.style,_this.props.arrowProps.style)})},_this.getTooltipProps=function(props){return void 0===props&&(props={}),Object(esm_extends.a)({},props,_this.isTriggeredBy("hover")&&{onMouseEnter:callAll(_this.props.clearScheduled,props.onMouseEnter),onMouseLeave:callAll(_this.props.hideTooltip,props.onMouseLeave)},{style:Object(esm_extends.a)({},props.style,_this.props.style)})},_this.contextValue={isParentNoneTriggered:"none"===_this.props.trigger,addParentOutsideClickHandler:_this.addOutsideClickHandler,addParentOutsideRightClickHandler:_this.addOutsideRightClickHandler,parentOutsideClickHandler:_this.handleOutsideClick,parentOutsideRightClickHandler:_this.handleOutsideRightClick,removeParentOutsideClickHandler:_this.removeOutsideClickHandler,removeParentOutsideRightClickHandler:_this.removeOutsideRightClickHandler},_this}Object(inheritsLoose.a)(Tooltip,_Component);var _proto=Tooltip.prototype;return _proto.componentDidMount=function componentDidMount(){var _this2=this;if((this.observer=new MutationObserver((function(){_this2.props.update()}))).observe(this.tooltipRef,this.props.mutationObserverOptions),this.isTriggeredBy("hover")||this.isTriggeredBy("click")||this.isTriggeredBy("right-click")){var _this$context=this.context,removeParentOutsideClickHandler=_this$context.removeParentOutsideClickHandler,removeParentOutsideRightClickHandler=_this$context.removeParentOutsideRightClickHandler;this.addOutsideClickHandler(),this.addOutsideRightClickHandler(),removeParentOutsideClickHandler&&removeParentOutsideClickHandler(),removeParentOutsideRightClickHandler&&removeParentOutsideRightClickHandler()}},_proto.componentDidUpdate=function componentDidUpdate(){this.props.closeOnReferenceHidden&&this.props.isReferenceHidden&&this.props.hideTooltip()},_proto.componentWillUnmount=function componentWillUnmount(){if(this.observer&&this.observer.disconnect(),this.isTriggeredBy("hover")||this.isTriggeredBy("click")||this.isTriggeredBy("right-click")){var _this$context2=this.context,isParentNoneTriggered=_this$context2.isParentNoneTriggered,addParentOutsideClickHandler=_this$context2.addParentOutsideClickHandler,addParentOutsideRightClickHandler=_this$context2.addParentOutsideRightClickHandler;this.removeOutsideClickHandler(),this.removeOutsideRightClickHandler(),this.handleOutsideClick=void 0,this.handleOutsideRightClick=void 0,!isParentNoneTriggered&&addParentOutsideClickHandler&&addParentOutsideClickHandler(),!isParentNoneTriggered&&addParentOutsideRightClickHandler&&addParentOutsideRightClickHandler()}},_proto.render=function render(){var _this$props3=this.props,arrowProps=_this$props3.arrowProps,placement=_this$props3.placement,tooltip=_this$props3.tooltip;return react_default.a.createElement(TooltipContext.Provider,{value:this.contextValue},tooltip({arrowRef:arrowProps.ref,getArrowProps:this.getArrowProps,getTooltipProps:this.getTooltipProps,placement:placement,tooltipRef:this.getTooltipRef}))},_proto.isTriggeredBy=function isTriggeredBy(event){var trigger=this.props.trigger;return trigger===event||Array.isArray(trigger)&&trigger.includes(event)},Tooltip}(react.Component);react_popper_tooltip_Tooltip.contextType=TooltipContext;var react_popper_tooltip_TooltipTrigger=function(_Component){function TooltipTrigger(){for(var _this,_len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return(_this=_Component.call.apply(_Component,[this].concat(args))||this).state={tooltipShown:_this.props.defaultTooltipShown},_this.hideTimeout=void 0,_this.showTimeout=void 0,_this.popperOffset=void 0,_this.setTooltipState=function(state){var cb=function cb(){return _this.props.onVisibilityChange(state.tooltipShown)};_this.isControlled()?cb():_this.setState(state,cb)},_this.clearScheduled=function(){clearTimeout(_this.hideTimeout),clearTimeout(_this.showTimeout)},_this.showTooltip=function(_ref){var pageX=_ref.pageX,pageY=_ref.pageY;_this.clearScheduled();var state={tooltipShown:!0};_this.props.followCursor&&(state=Object(esm_extends.a)({},state,{pageX:pageX,pageY:pageY})),_this.showTimeout=window.setTimeout((function(){return _this.setTooltipState(state)}),_this.props.delayShow)},_this.hideTooltip=function(){_this.clearScheduled(),_this.hideTimeout=window.setTimeout((function(){return _this.setTooltipState({tooltipShown:!1})}),_this.props.delayHide)},_this.toggleTooltip=function(_ref2){var pageX=_ref2.pageX,pageY=_ref2.pageY,action=_this.getState()?"hideTooltip":"showTooltip";_this[action]({pageX:pageX,pageY:pageY})},_this.clickToggle=function(event){event.preventDefault();var pageX=event.pageX,pageY=event.pageY,action=_this.props.followCursor?"showTooltip":"toggleTooltip";_this[action]({pageX:pageX,pageY:pageY})},_this.contextMenuToggle=function(event){event.preventDefault();var pageX=event.pageX,pageY=event.pageY,action=_this.props.followCursor?"showTooltip":"toggleTooltip";_this[action]({pageX:pageX,pageY:pageY})},_this.getTriggerProps=function(props){return void 0===props&&(props={}),Object(esm_extends.a)({},props,_this.isTriggeredBy("click")&&{onClick:callAll(_this.clickToggle,props.onClick),onTouchEnd:callAll(_this.clickToggle,props.onTouchEnd)},_this.isTriggeredBy("right-click")&&{onContextMenu:callAll(_this.contextMenuToggle,props.onContextMenu)},_this.isTriggeredBy("hover")&&Object(esm_extends.a)({onMouseEnter:callAll(_this.showTooltip,props.onMouseEnter),onMouseLeave:callAll(_this.hideTooltip,props.onMouseLeave)},_this.props.followCursor&&{onMouseMove:callAll(_this.showTooltip,props.onMouseMove)}),_this.isTriggeredBy("focus")&&{onFocus:callAll(_this.showTooltip,props.onFocus),onBlur:callAll(_this.hideTooltip,props.onBlur)})},_this}Object(inheritsLoose.a)(TooltipTrigger,_Component);var _proto=TooltipTrigger.prototype;return _proto.componentWillUnmount=function componentWillUnmount(){this.clearScheduled()},_proto.render=function render(){var _this2=this,_this$props=this.props,children=_this$props.children,tooltip=_this$props.tooltip,placement=_this$props.placement,trigger=_this$props.trigger,getTriggerRef=_this$props.getTriggerRef,modifiers=_this$props.modifiers,closeOnReferenceHidden=_this$props.closeOnReferenceHidden,usePortal=_this$props.usePortal,portalContainer=_this$props.portalContainer,followCursor=_this$props.followCursor,getTooltipRef=_this$props.getTooltipRef,mutationObserverOptions=_this$props.mutationObserverOptions,restProps=Object(objectWithoutPropertiesLoose.a)(_this$props,["children","tooltip","placement","trigger","getTriggerRef","modifiers","closeOnReferenceHidden","usePortal","portalContainer","followCursor","getTooltipRef","mutationObserverOptions"]),popper=react_default.a.createElement(Popper,Object(esm_extends.a)({innerRef:getTooltipRef,placement:placement,modifiers:[{name:"followCursor",enabled:followCursor,phase:"main",fn:function fn(data){_this2.popperOffset=data.state.rects.popper}}].concat(modifiers)},restProps),(function(_ref3){var ref=_ref3.ref,style=_ref3.style,placement=_ref3.placement,arrowProps=_ref3.arrowProps,isReferenceHidden=_ref3.isReferenceHidden,update=_ref3.update;if(followCursor&&_this2.popperOffset){var _this2$state=_this2.state,pageX=_this2$state.pageX,pageY=_this2$state.pageY,_this2$popperOffset=_this2.popperOffset,width=_this2$popperOffset.width,height=_this2$popperOffset.height,x=pageX+width>window.pageXOffset+document.body.offsetWidth?pageX-width:pageX,y=pageY+height>window.pageYOffset+document.body.offsetHeight?pageY-height:pageY;style.transform="translate3d("+x+"px, "+y+"px, 0"}return react_default.a.createElement(react_popper_tooltip_Tooltip,Object(esm_extends.a)({arrowProps:arrowProps,closeOnReferenceHidden:closeOnReferenceHidden,isReferenceHidden:isReferenceHidden,placement:placement,update:update,style:style,tooltip:tooltip,trigger:trigger,mutationObserverOptions:mutationObserverOptions},{clearScheduled:_this2.clearScheduled,hideTooltip:_this2.hideTooltip,innerRef:ref}))}));return react_default.a.createElement(Manager,null,react_default.a.createElement(Reference,{innerRef:getTriggerRef},(function(_ref4){var ref=_ref4.ref;return children({getTriggerProps:_this2.getTriggerProps,triggerRef:ref})})),this.getState()&&(usePortal?Object(react_dom.createPortal)(popper,portalContainer):popper))},_proto.isControlled=function isControlled(){return void 0!==this.props.tooltipShown},_proto.getState=function getState(){return this.isControlled()?this.props.tooltipShown:this.state.tooltipShown},_proto.isTriggeredBy=function isTriggeredBy(event){var trigger=this.props.trigger;return trigger===event||Array.isArray(trigger)&&trigger.includes(event)},TooltipTrigger}(react.Component);react_popper_tooltip_TooltipTrigger.defaultProps={closeOnReferenceHidden:!0,defaultTooltipShown:!1,delayHide:0,delayShow:0,followCursor:!1,onVisibilityChange:function noop(){},placement:"right",portalContainer:canUseDOM()?document.body:null,trigger:"hover",usePortal:canUseDOM(),mutationObserverOptions:{childList:!0,subtree:!0},modifiers:[]};var react_popper_tooltip=react_popper_tooltip_TooltipTrigger,memoizerific=(__webpack_require__(107),__webpack_require__(30),__webpack_require__(240),__webpack_require__(18),__webpack_require__(35)),memoizerific_default=__webpack_require__.n(memoizerific),utils=__webpack_require__(131);function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i=0||(target[key]=source[key]);return target}(source,excluded);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}var _templateObject,_templateObject2,match=memoizerific_default()(1e3)((function(requests,actual,value){var fallback=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;return actual.split("-")[0]===requests?value:fallback})),Arrow=esm.styled.div({position:"absolute",borderStyle:"solid"},(function(_ref){var placement=_ref.placement,x=0,y=0;switch(!0){case placement.startsWith("left")||placement.startsWith("right"):y=8;break;case placement.startsWith("top")||placement.startsWith("bottom"):x=8}return{transform:"translate3d(".concat(x,"px, ").concat(y,"px, 0px)")}}),(function(_ref2){var theme=_ref2.theme,color=_ref2.color,placement=_ref2.placement;return{bottom:"".concat(match("top",placement,-8,"auto"),"px"),top:"".concat(match("bottom",placement,-8,"auto"),"px"),right:"".concat(match("left",placement,-8,"auto"),"px"),left:"".concat(match("right",placement,-8,"auto"),"px"),borderBottomWidth:"".concat(match("top",placement,"0",8),"px"),borderTopWidth:"".concat(match("bottom",placement,"0",8),"px"),borderRightWidth:"".concat(match("left",placement,"0",8),"px"),borderLeftWidth:"".concat(match("right",placement,"0",8),"px"),borderTopColor:match("top",placement,theme.color[color]||color||"light"===theme.base?Object(utils.c)(theme.background.app):Object(utils.a)(theme.background.app),"transparent"),borderBottomColor:match("bottom",placement,theme.color[color]||color||"light"===theme.base?Object(utils.c)(theme.background.app):Object(utils.a)(theme.background.app),"transparent"),borderLeftColor:match("left",placement,theme.color[color]||color||"light"===theme.base?Object(utils.c)(theme.background.app):Object(utils.a)(theme.background.app),"transparent"),borderRightColor:match("right",placement,theme.color[color]||color||"light"===theme.base?Object(utils.c)(theme.background.app):Object(utils.a)(theme.background.app),"transparent")}})),Wrapper=esm.styled.div((function(_ref3){return{display:_ref3.hidden?"none":"inline-block",zIndex:2147483647}}),(function(_ref4){var theme=_ref4.theme,color=_ref4.color;return _ref4.hasChrome?{background:theme.color[color]||color||"light"===theme.base?Object(utils.c)(theme.background.app):Object(utils.a)(theme.background.app),filter:"\n drop-shadow(0px 5px 5px rgba(0,0,0,0.05))\n drop-shadow(0 1px 3px rgba(0,0,0,0.1))\n ",borderRadius:2*theme.appBorderRadius,fontSize:theme.typography.size.s1}:{}})),Tooltip_Tooltip=function Tooltip(_ref5){var placement=_ref5.placement,hasChrome=_ref5.hasChrome,children=_ref5.children,arrowProps=_ref5.arrowProps,tooltipRef=_ref5.tooltipRef,arrowRef=_ref5.arrowRef,color=_ref5.color,props=_objectWithoutProperties(_ref5,["placement","hasChrome","children","arrowProps","tooltipRef","arrowRef","color"]);return react_default.a.createElement(Wrapper,_extends({hasChrome:hasChrome,placement:placement,ref:tooltipRef},props,{color:color}),hasChrome&&react_default.a.createElement(Arrow,_extends({placement:placement,ref:arrowRef},arrowProps,{color:color})),children)};function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i=0||(target[key]=source[key]);return target}(source,excluded);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}function _taggedTemplateLiteral(strings,raw){return raw||(raw=strings.slice(0)),Object.freeze(Object.defineProperties(strings,{raw:{value:Object.freeze(raw)}}))}Tooltip_Tooltip.displayName="Tooltip",Tooltip_Tooltip.defaultProps={color:void 0,arrowRef:void 0,tooltipRef:void 0,hasChrome:!0,placement:"top",arrowProps:{}};var WithTooltip_document=window_default.a.document,TargetContainer=esm.styled.div(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n display: inline-block;\n cursor: ",";\n"])),(function(props){return"hover"===props.mode?"default":"pointer"})),TargetSvgContainer=esm.styled.g(_templateObject2||(_templateObject2=_taggedTemplateLiteral(["\n cursor: ",";\n"])),(function(props){return"hover"===props.mode?"default":"pointer"})),WithTooltip_WithTooltipPure=function WithTooltipPure(_ref){var svg=_ref.svg,trigger=_ref.trigger,placement=(_ref.closeOnClick,_ref.placement),modifiers=_ref.modifiers,hasChrome=_ref.hasChrome,_tooltip=_ref.tooltip,children=_ref.children,tooltipShown=_ref.tooltipShown,onVisibilityChange=_ref.onVisibilityChange,props=WithTooltip_objectWithoutProperties(_ref,["svg","trigger","closeOnClick","placement","modifiers","hasChrome","tooltip","children","tooltipShown","onVisibilityChange"]),Container=svg?TargetSvgContainer:TargetContainer;return react_default.a.createElement(react_popper_tooltip,{placement:placement,trigger:trigger,modifiers:modifiers,tooltipShown:tooltipShown,onVisibilityChange:onVisibilityChange,tooltip:function tooltip(_ref2){var getTooltipProps=_ref2.getTooltipProps,getArrowProps=_ref2.getArrowProps,tooltipRef=_ref2.tooltipRef,arrowRef=_ref2.arrowRef,tooltipPlacement=_ref2.placement;return react_default.a.createElement(Tooltip_Tooltip,WithTooltip_extends({hasChrome:hasChrome,placement:tooltipPlacement,tooltipRef:tooltipRef,arrowRef:arrowRef,arrowProps:getArrowProps()},getTooltipProps()),"function"==typeof _tooltip?_tooltip({onHide:function onHide(){return onVisibilityChange(!1)}}):_tooltip)}},(function(_ref3){var getTriggerProps=_ref3.getTriggerProps,triggerRef=_ref3.triggerRef;return react_default.a.createElement(Container,WithTooltip_extends({ref:triggerRef},getTriggerProps(),props),children)}))};WithTooltip_WithTooltipPure.displayName="WithTooltipPure",WithTooltip_WithTooltipPure.defaultProps={svg:!1,trigger:"hover",closeOnClick:!1,placement:"top",modifiers:[{name:"preventOverflow",options:{padding:8}},{name:"offset",options:{offset:[8,8]}},{name:"arrow",options:{padding:8}}],hasChrome:!0,tooltipShown:!1};var WithTooltip_WithToolTipState=function WithToolTipState(_ref4){var startOpen=_ref4.startOpen,onChange=_ref4.onVisibilityChange,rest=WithTooltip_objectWithoutProperties(_ref4,["startOpen","onVisibilityChange"]),_useState2=_slicedToArray(Object(react.useState)(startOpen||!1),2),tooltipShown=_useState2[0],setTooltipShown=_useState2[1],onVisibilityChange=Object(react.useCallback)((function(visibility){onChange&&!1===onChange(visibility)||setTooltipShown(visibility)}),[onChange]);return Object(react.useEffect)((function(){var hide=function hide(){return onVisibilityChange(!1)};WithTooltip_document.addEventListener("keydown",hide,!1);var iframes=Array.from(WithTooltip_document.getElementsByTagName("iframe")),unbinders=[];return iframes.forEach((function(iframe){var bind=function bind(){try{iframe.contentWindow.document&&(iframe.contentWindow.document.addEventListener("click",hide),unbinders.push((function(){try{iframe.contentWindow.document.removeEventListener("click",hide)}catch(e){}})))}catch(e){}};bind(),iframe.addEventListener("load",bind),unbinders.push((function(){iframe.removeEventListener("load",bind)}))})),function(){WithTooltip_document.removeEventListener("keydown",hide),unbinders.forEach((function(unbind){unbind()}))}})),react_default.a.createElement(WithTooltip_WithTooltipPure,WithTooltip_extends({},rest,{tooltipShown:tooltipShown,onVisibilityChange:onVisibilityChange}))};WithTooltip_WithToolTipState.displayName="WithToolTipState"}}]);
\ No newline at end of file
diff --git a/5.e814905a908e2aed0cf2.manager.bundle.js b/5.e814905a908e2aed0cf2.manager.bundle.js
new file mode 100644
index 0000000000..f2eaecb413
--- /dev/null
+++ b/5.e814905a908e2aed0cf2.manager.bundle.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{1404:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"ColorControl",(function(){return Color_ColorControl}));__webpack_require__(15),__webpack_require__(5),__webpack_require__(13),__webpack_require__(6),__webpack_require__(14),__webpack_require__(9),__webpack_require__(10),__webpack_require__(11),__webpack_require__(20),__webpack_require__(18),__webpack_require__(8),__webpack_require__(90),__webpack_require__(68),__webpack_require__(30),__webpack_require__(23),__webpack_require__(172),__webpack_require__(133),__webpack_require__(240),__webpack_require__(107),__webpack_require__(17),__webpack_require__(37),__webpack_require__(7);var react=__webpack_require__(0),react_default=__webpack_require__.n(react);function index_module_l(){return(index_module_l=Object.assign||function(e){for(var r=1;r=0||(n[t]=e[t]);return n}var index_module_c="undefined"!=typeof window?react.useLayoutEffect:react.useEffect;function index_module_i(e){var r=Object(react.useRef)(e);return Object(react.useEffect)((function(){r.current=e})),Object(react.useCallback)((function(e){return r.current&&r.current(e)}),[])}var index_module_s,index_module_f=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=1),e>t?t:e0:e.buttons>0)&&m.current?C(index_module_d(m.current,e)):_(!1)}),[C]),H=Object(react.useCallback)((function(e){var r,t=e.nativeEvent,o=m.current;index_module_h(t),r=t,g.current&&!index_module_v(r)||(g.current||(g.current=index_module_v(r)),0)||!o||(o.focus(),C(index_module_d(o,t)),_(!0))}),[C]),M=Object(react.useCallback)((function(e){var r=e.which||e.keyCode;r<37||r>40||(e.preventDefault(),x({left:39===r?.05:37===r?-.05:0,top:40===r?.05:38===r?-.05:0}))}),[x]),N=Object(react.useCallback)((function(){return _(!1)}),[]),w=Object(react.useCallback)((function(e){var r=e?window.addEventListener:window.removeEventListener;r(g.current?"touchmove":"mousemove",E),r(g.current?"touchend":"mouseup",N)}),[E,N]);return index_module_c((function(){return w(b),function(){b&&w(!1)}}),[b,w]),react_default.a.createElement("div",index_module_l({},f,{className:"react-colorful__interactive",ref:m,onTouchStart:H,onMouseDown:H,onKeyDown:M,tabIndex:0,role:"slider"}))})),index_module_g=function(e){return e.filter(Boolean).join(" ")},index_module_p=function(r){var t=r.color,o=r.left,n=r.top,a=void 0===n?.5:n,l=index_module_g(["react-colorful__pointer",r.className]);return react_default.a.createElement("div",{className:l,style:{top:100*a+"%",left:100*o+"%"}},react_default.a.createElement("div",{className:"react-colorful__pointer-fill",style:{backgroundColor:t}}))},index_module_b=function(e,r,t){return void 0===r&&(r=0),void 0===t&&(t=Math.pow(10,r)),Math.round(t*e)/t},index_module_={grad:.9,turn:360,rad:360/(2*Math.PI)},index_module_C=function(e){return"#"===e[0]&&(e=e.substr(1)),e.length<6?{r:parseInt(e[0]+e[0],16),g:parseInt(e[1]+e[1],16),b:parseInt(e[2]+e[2],16),a:1}:{r:parseInt(e.substr(0,2),16),g:parseInt(e.substr(2,2),16),b:parseInt(e.substr(4,2),16),a:1}},index_module_x=function(e,r){return void 0===r&&(r="deg"),Number(e)*(index_module_[r]||1)},index_module_E=function(e){var r=/hsla?\(?\s*(-?\d*\.?\d+)(deg|rad|grad|turn)?[,\s]+(-?\d*\.?\d+)%?[,\s]+(-?\d*\.?\d+)%?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return r?index_module_M({h:index_module_x(r[1],r[2]),s:Number(r[3]),l:Number(r[4]),a:void 0===r[5]?1:Number(r[5])/(r[6]?100:1)}):{h:0,s:0,v:0,a:1}},index_module_M=function(e){var r=e.s,t=e.l;return{h:e.h,s:(r*=(t<50?t:100-t)/100)>0?2*r/(t+r)*100:0,v:t+r,a:e.a}},index_module_N=function(e){var r=e.s,t=e.v,o=e.a,n=(200-r)*t/100;return{h:index_module_b(e.h),s:index_module_b(n>0&&n<200?r*t/100/(n<=100?n:200-n)*100:0),l:index_module_b(n/2),a:index_module_b(o,2)}},index_module_w=function(e){var r=index_module_N(e);return"hsl("+r.h+", "+r.s+"%, "+r.l+"%)"},y=function(e){var r=index_module_N(e);return"hsla("+r.h+", "+r.s+"%, "+r.l+"%, "+r.a+")"},q=function(e){var r=e.h,t=e.s,o=e.v,n=e.a;r=r/360*6,t/=100,o/=100;var a=Math.floor(r),l=o*(1-t),u=o*(1-(r-a)*t),c=o*(1-(1-r+a)*t),i=a%6;return{r:index_module_b(255*[o,u,l,l,c,o][i]),g:index_module_b(255*[c,o,o,u,l,l][i]),b:index_module_b(255*[l,l,c,o,o,u][i]),a:index_module_b(n,2)}},I=function(e){var r=/rgba?\(?\s*(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?[,\s]+(-?\d*\.?\d+)(%)?,?\s*[/\s]*(-?\d*\.?\d+)?(%)?\s*\)?/i.exec(e);return r?B({r:Number(r[1])/(r[2]?100/255:1),g:Number(r[3])/(r[4]?100/255:1),b:Number(r[5])/(r[6]?100/255:1),a:void 0===r[7]?1:Number(r[7])/(r[8]?100:1)}):{h:0,s:0,v:0,a:1}},z=function(e){var r=e.toString(16);return r.length<2?"0"+r:r},B=function(e){var r=e.r,t=e.g,o=e.b,n=e.a,a=Math.max(r,t,o),l=a-Math.min(r,t,o),u=l?a===r?(t-o)/l:a===t?2+(o-r)/l:4+(r-t)/l:0;return{h:index_module_b(60*(u<0?u+6:u)),s:index_module_b(a?l/a*100:0),v:index_module_b(a/255*100),a:n}},A=react_default.a.memo((function(r){var t=r.hue,o=r.onChange,n=index_module_g(["react-colorful__hue",r.className]);return react_default.a.createElement("div",{className:n},react_default.a.createElement(index_module_m,{onMove:function(e){o({h:360*e.left})},onKey:function(e){o({h:index_module_f(t+360*e.left,0,360)})},"aria-label":"Hue","aria-valuetext":index_module_b(t)},react_default.a.createElement(index_module_p,{className:"react-colorful__hue-pointer",left:t/360,color:index_module_w({h:t,s:100,v:100,a:1})})))})),L=react_default.a.memo((function(r){var t=r.hsva,o=r.onChange,n={backgroundColor:index_module_w({h:t.h,s:100,v:100,a:1})};return react_default.a.createElement("div",{className:"react-colorful__saturation",style:n},react_default.a.createElement(index_module_m,{onMove:function(e){o({s:100*e.left,v:100-100*e.top})},onKey:function(e){o({s:index_module_f(t.s+100*e.left,0,100),v:index_module_f(t.v-100*e.top,0,100)})},"aria-label":"Color","aria-valuetext":"Saturation "+index_module_b(t.s)+"%, Brightness "+index_module_b(t.v)+"%"},react_default.a.createElement(index_module_p,{className:"react-colorful__saturation-pointer",top:1-t.v/100,left:t.s/100,color:index_module_w(t)})))})),D=function(e,r){if(e===r)return!0;for(var t in e)if(e[t]!==r[t])return!1;return!0},F=function(e,r){return e.replace(/\s/g,"")===r.replace(/\s/g,"")};function S(e,r,l){var u=index_module_i(l),c=Object(react.useState)((function(){return e.toHsva(r)})),s=c[0],f=c[1],v=Object(react.useRef)({color:r,hsva:s});Object(react.useEffect)((function(){if(!e.equal(r,v.current.color)){var t=e.toHsva(r);v.current={hsva:t,color:r},f(t)}}),[r,e]),Object(react.useEffect)((function(){var r;D(s,v.current.hsva)||e.equal(r=e.fromHsva(s),v.current.color)||(v.current={hsva:s,color:r},u(r))}),[s,e,u]);var d=Object(react.useCallback)((function(e){f((function(r){return Object.assign({},r,e)}))}),[]);return[s,d]}var P,_ColorPicker,_fallbackColor,Y=function(){index_module_c((function(){if("undefined"!=typeof document&&!P){(P=document.createElement("style")).innerHTML='.react-colorful{position:relative;display:flex;flex-direction:column;width:200px;height:200px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.react-colorful__saturation{position:relative;flex-grow:1;border-color:transparent;border-bottom:12px solid #000;border-radius:8px 8px 0 0;background-image:linear-gradient(0deg,#000,transparent),linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.react-colorful__alpha-gradient,.react-colorful__pointer-fill{content:"";position:absolute;left:0;top:0;right:0;bottom:0;pointer-events:none;border-radius:inherit}.react-colorful__alpha-gradient,.react-colorful__saturation{box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}.react-colorful__alpha,.react-colorful__hue{position:relative;height:24px}.react-colorful__hue{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.react-colorful__last-control{border-radius:0 0 8px 8px}.react-colorful__interactive{position:absolute;left:0;top:0;right:0;bottom:0;border-radius:inherit;outline:none;touch-action:none}.react-colorful__pointer{position:absolute;z-index:1;box-sizing:border-box;width:28px;height:28px;transform:translate(-50%,-50%);background-color:#fff;border:2px solid #fff;border-radius:50%;box-shadow:0 2px 4px rgba(0,0,0,.2)}.react-colorful__interactive:focus .react-colorful__pointer{transform:translate(-50%,-50%) scale(1.1)}.react-colorful__alpha,.react-colorful__alpha-pointer{background-color:#fff;background-image:url(\'data:image/svg+xml;charset=utf-8, \')}.react-colorful__saturation-pointer{z-index:3}.react-colorful__hue-pointer{z-index:2}';var e=index_module_s||__webpack_require__.nc;e&&P.setAttribute("nonce",e),document.head.appendChild(P)}}),[])},$=function(r){var t=r.className,o=r.colorModel,n=r.color,a=void 0===n?o.defaultColor:n,c=r.onChange,i=index_module_u(r,["className","colorModel","color","onChange"]);Y();var s=S(o,a,c),f=s[0],v=s[1],d=index_module_g(["react-colorful",t]);return react_default.a.createElement("div",index_module_l({},i,{className:d}),react_default.a.createElement(L,{hsva:f,onChange:v}),react_default.a.createElement(A,{hue:f.h,onChange:v,className:"react-colorful__last-control"}))},R={defaultColor:"000",toHsva:function(e){return B(index_module_C(e))},fromHsva:function(e){return t=(r=q(e)).g,o=r.b,"#"+z(r.r)+z(t)+z(o);var r,t,o},equal:function(e,r){return e.toLowerCase()===r.toLowerCase()||D(index_module_C(e),index_module_C(r))}},J=function(r){var t=r.className,o=r.hsva,n=r.onChange,a={backgroundImage:"linear-gradient(90deg, "+y(Object.assign({},o,{a:0}))+", "+y(Object.assign({},o,{a:1}))+")"},l=index_module_g(["react-colorful__alpha",t]);return react_default.a.createElement("div",{className:l},react_default.a.createElement("div",{className:"react-colorful__alpha-gradient",style:a}),react_default.a.createElement(index_module_m,{onMove:function(e){n({a:e.left})},onKey:function(e){n({a:index_module_f(o.a+e.left)})},"aria-label":"Alpha","aria-valuetext":index_module_b(100*o.a)+"%"},react_default.a.createElement(index_module_p,{className:"react-colorful__alpha-pointer",left:o.a,color:y(o)})))},Q=function(r){var t=r.className,o=r.colorModel,n=r.color,a=void 0===n?o.defaultColor:n,c=r.onChange,i=index_module_u(r,["className","colorModel","color","onChange"]);Y();var s=S(o,a,c),f=s[0],v=s[1],d=index_module_g(["react-colorful",t]);return react_default.a.createElement("div",index_module_l({},i,{className:d}),react_default.a.createElement(L,{hsva:f,onChange:v}),react_default.a.createElement(A,{hue:f.h,onChange:v}),react_default.a.createElement(J,{hsva:f,onChange:v,className:"react-colorful__last-control"}))},W={defaultColor:"hsla(0, 0%, 0%, 1)",toHsva:index_module_E,fromHsva:y,equal:F},he={defaultColor:"rgba(0, 0, 0, 1)",toHsva:I,fromHsva:function(e){var r=q(e);return"rgba("+r.r+", "+r.g+", "+r.b+", "+r.a+")"},equal:F},color_convert=__webpack_require__(1460),color_convert_default=__webpack_require__.n(color_convert),throttle=__webpack_require__(1467),throttle_default=__webpack_require__.n(throttle),esm=__webpack_require__(2),TooltipNote=__webpack_require__(483),lazy_WithTooltip=__webpack_require__(230),esm_form=__webpack_require__(60),icon=__webpack_require__(43),helpers=__webpack_require__(39);function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i=0||(target[key]=source[key]);return target}(source,excluded);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}var Wrapper=esm.styled.div({position:"relative",maxWidth:250}),PickerTooltip=Object(esm.styled)(lazy_WithTooltip.a)({position:"absolute",zIndex:1,top:4,left:4}),TooltipContent=esm.styled.div({width:200,margin:5,".react-colorful__saturation":{borderRadius:"4px 4px 0 0"},".react-colorful__hue":{boxShadow:"inset 0 0 0 1px rgb(0 0 0 / 5%)"},".react-colorful__last-control":{borderRadius:"0 0 4px 4px"}}),Note=Object(esm.styled)(TooltipNote.a)((function(_ref){return{fontFamily:_ref.theme.typography.fonts.base}})),Swatches=esm.styled.div({display:"grid",gridTemplateColumns:"repeat(9, 16px)",gap:6,padding:3,marginTop:5,width:200}),SwatchColor=esm.styled.div((function(_ref2){var theme=_ref2.theme;return{width:16,height:16,boxShadow:_ref2.active?"".concat(theme.appBorderColor," 0 0 0 1px inset, ").concat(theme.color.mediumdark,"50 0 0 0 4px"):"".concat(theme.appBorderColor," 0 0 0 1px inset"),borderRadius:theme.appBorderRadius}})),Color_Swatch=function Swatch(_ref3){var value=_ref3.value,active=_ref3.active,onClick=_ref3.onClick,style=_ref3.style,props=_objectWithoutProperties(_ref3,["value","active","onClick","style"]),backgroundImage="linear-gradient(".concat(value,", ").concat(value,"), ").concat('url(\'data:image/svg+xml;charset=utf-8, \')',", linear-gradient(#fff, #fff)");return react_default.a.createElement(SwatchColor,_extends({},props,{active:active,onClick:onClick,style:Object.assign({},style,{backgroundImage:backgroundImage})}))};Color_Swatch.displayName="Swatch";var ColorSpace,Input=Object(esm.styled)(esm_form.a.Input)((function(_ref4){return{width:"100%",paddingLeft:30,paddingRight:30,boxSizing:"border-box",fontFamily:_ref4.theme.typography.fonts.base}})),ToggleIcon=Object(esm.styled)(icon.a)((function(_ref5){return{position:"absolute",zIndex:1,top:6,right:7,width:20,height:20,padding:4,boxSizing:"border-box",cursor:"pointer",color:_ref5.theme.input.color}}));!function(ColorSpace){ColorSpace.RGB="rgb",ColorSpace.HSL="hsl",ColorSpace.HEX="hex"}(ColorSpace||(ColorSpace={}));var COLOR_SPACES=Object.values(ColorSpace),COLOR_REGEXP=/\(([0-9]+),\s*([0-9]+)%?,\s*([0-9]+)%?,?\s*([0-9.]+)?\)/,RGB_REGEXP=/^\s*rgba?\(([0-9]+),\s*([0-9]+),\s*([0-9]+),?\s*([0-9.]+)?\)\s*$/i,HSL_REGEXP=/^\s*hsla?\(([0-9]+),\s*([0-9]+)%,\s*([0-9]+)%,?\s*([0-9.]+)?\)\s*$/i,HEX_REGEXP=/^\s*#?([0-9a-f]{3}|[0-9a-f]{6})\s*$/i,SHORTHEX_REGEXP=/^\s*#?([0-9a-f]{3})\s*$/i,ColorPicker=(_defineProperty(_ColorPicker={},ColorSpace.HEX,(function(r){return react_default.a.createElement($,index_module_l({},r,{colorModel:R}))})),_defineProperty(_ColorPicker,ColorSpace.RGB,(function(r){return react_default.a.createElement(Q,index_module_l({},r,{colorModel:he}))})),_defineProperty(_ColorPicker,ColorSpace.HSL,(function(r){return react_default.a.createElement(Q,index_module_l({},r,{colorModel:W}))})),_ColorPicker),fallbackColor=(_defineProperty(_fallbackColor={},ColorSpace.HEX,"transparent"),_defineProperty(_fallbackColor,ColorSpace.RGB,"rgba(0, 0, 0, 0)"),_defineProperty(_fallbackColor,ColorSpace.HSL,"hsla(0, 0%, 0%, 0)"),_fallbackColor),stringToArgs=function stringToArgs(value){var match=null==value?void 0:value.match(COLOR_REGEXP);if(!match)return[0,0,0,1];var _match=_slicedToArray(match,5),x=_match[1],y=_match[2],z=_match[3],_match$=_match[4];return[x,y,z,void 0===_match$?1:_match$].map(Number)},Color_parseValue=function parseValue(value){var _ref12;if(value){var valid=!0;if(RGB_REGEXP.test(value)){var _ref8,_stringToArgs2=_slicedToArray(stringToArgs(value),4),r=_stringToArgs2[0],g=_stringToArgs2[1],b=_stringToArgs2[2],a=_stringToArgs2[3],_ref7=_slicedToArray(color_convert_default.a.rgb.hsl([r,g,b])||[0,0,0],3),h=_ref7[0],s=_ref7[1],l=_ref7[2];return _defineProperty(_ref8={valid:valid,value:value,keyword:color_convert_default.a.rgb.keyword([r,g,b]),colorSpace:ColorSpace.RGB},ColorSpace.RGB,value),_defineProperty(_ref8,ColorSpace.HSL,"hsla(".concat(h,", ").concat(s,"%, ").concat(l,"%, ").concat(a,")")),_defineProperty(_ref8,ColorSpace.HEX,"#".concat(color_convert_default.a.rgb.hex([r,g,b]).toLowerCase())),_ref8}if(HSL_REGEXP.test(value)){var _ref11,_stringToArgs4=_slicedToArray(stringToArgs(value),4),_h=_stringToArgs4[0],_s2=_stringToArgs4[1],_l=_stringToArgs4[2],_a=_stringToArgs4[3],_ref10=_slicedToArray(color_convert_default.a.hsl.rgb([_h,_s2,_l])||[0,0,0],3),_r=_ref10[0],_g=_ref10[1],_b=_ref10[2];return _defineProperty(_ref11={valid:valid,value:value,keyword:color_convert_default.a.hsl.keyword([_h,_s2,_l]),colorSpace:ColorSpace.HSL},ColorSpace.RGB,"rgba(".concat(_r,", ").concat(_g,", ").concat(_b,", ").concat(_a,")")),_defineProperty(_ref11,ColorSpace.HSL,value),_defineProperty(_ref11,ColorSpace.HEX,"#".concat(color_convert_default.a.hsl.hex([_h,_s2,_l]).toLowerCase())),_ref11}var plain=value.replace("#",""),rgb=color_convert_default.a.keyword.rgb(plain)||color_convert_default.a.hex.rgb(plain),hsl=color_convert_default.a.rgb.hsl(rgb),mapped=value;if(/[^#a-f0-9]/i.test(value)?mapped=plain:HEX_REGEXP.test(value)&&(mapped="#".concat(plain)),mapped.startsWith("#"))valid=HEX_REGEXP.test(mapped);else try{color_convert_default.a.keyword.hex(mapped)}catch(e){valid=!1}return _defineProperty(_ref12={valid:valid,value:mapped,keyword:color_convert_default.a.rgb.keyword(rgb),colorSpace:ColorSpace.HEX},ColorSpace.RGB,"rgba(".concat(rgb[0],", ").concat(rgb[1],", ").concat(rgb[2],", 1)")),_defineProperty(_ref12,ColorSpace.HSL,"hsla(".concat(hsl[0],", ").concat(hsl[1],"%, ").concat(hsl[2],"%, 1)")),_defineProperty(_ref12,ColorSpace.HEX,mapped),_ref12}},Color_useColorInput=function useColorInput(initialValue,onChange){var _useState2=_slicedToArray(Object(react.useState)(initialValue||""),2),value=_useState2[0],setValue=_useState2[1],_useState4=_slicedToArray(Object(react.useState)((function(){return Color_parseValue(value)})),2),color=_useState4[0],setColor=_useState4[1],_useState6=_slicedToArray(Object(react.useState)((null==color?void 0:color.colorSpace)||ColorSpace.HEX),2),colorSpace=_useState6[0],setColorSpace=_useState6[1];Object(react.useEffect)((function(){void 0===initialValue&&(setValue(""),setColor(void 0),setColorSpace(ColorSpace.HEX))}),[initialValue]);var realValue=Object(react.useMemo)((function(){return function getRealValue(value,color,colorSpace){if(!value||null==color||!color.valid)return fallbackColor[colorSpace];if(colorSpace!==ColorSpace.HEX)return(null==color?void 0:color[colorSpace])||fallbackColor[colorSpace];if(!color.hex.startsWith("#"))try{return"#".concat(color_convert_default.a.keyword.hex(color.hex))}catch(e){return fallbackColor.hex}var short=color.hex.match(SHORTHEX_REGEXP);if(!short)return HEX_REGEXP.test(color.hex)?color.hex:fallbackColor.hex;var _short$1$split2=_slicedToArray(short[1].split(""),3),r=_short$1$split2[0],g=_short$1$split2[1],b=_short$1$split2[2];return"#".concat(r).concat(r).concat(g).concat(g).concat(b).concat(b)}(value,color,colorSpace).toLowerCase()}),[value,color,colorSpace]),updateValue=Object(react.useCallback)((function(update){var parsed=Color_parseValue(update);setValue((null==parsed?void 0:parsed.value)||update||""),parsed&&(setColor(parsed),setColorSpace(parsed.colorSpace),onChange(parsed.value))}),[onChange]),cycleColorSpace=Object(react.useCallback)((function(){var next=COLOR_SPACES.indexOf(colorSpace)+1;next>=COLOR_SPACES.length&&(next=0),setColorSpace(COLOR_SPACES[next]);var update=(null==color?void 0:color[COLOR_SPACES[next]])||"";setValue(update),onChange(update)}),[color,colorSpace,onChange]);return{value:value,realValue:realValue,updateValue:updateValue,color:color,colorSpace:colorSpace,cycleColorSpace:cycleColorSpace}},id=function id(value){return value.replace(/\s*/,"").toLowerCase()},Color_ColorControl=function ColorControl(_ref13){var name=_ref13.name,initialValue=_ref13.value,onChange=_ref13.onChange,onFocus=_ref13.onFocus,onBlur=_ref13.onBlur,presetColors=_ref13.presetColors,startOpen=_ref13.startOpen,_useColorInput=Color_useColorInput(initialValue,throttle_default()(onChange,200)),value=_useColorInput.value,realValue=_useColorInput.realValue,updateValue=_useColorInput.updateValue,color=_useColorInput.color,colorSpace=_useColorInput.colorSpace,cycleColorSpace=_useColorInput.cycleColorSpace,_usePresets=function usePresets(presetColors,currentColor,colorSpace){var _useState8=_slicedToArray(Object(react.useState)(null!=currentColor&¤tColor.valid?[currentColor]:[]),2),selectedColors=_useState8[0],setSelectedColors=_useState8[1];Object(react.useEffect)((function(){void 0===currentColor&&setSelectedColors([])}),[currentColor]);var presets=Object(react.useMemo)((function(){return(presetColors||[]).map((function(preset){return"string"==typeof preset?Color_parseValue(preset):preset.title?Object.assign({},Color_parseValue(preset.color),{keyword:preset.title}):Color_parseValue(preset.color)})).concat(selectedColors).filter(Boolean).slice(-27)}),[presetColors,selectedColors]),addPreset=Object(react.useCallback)((function(color){null!=color&&color.valid&&(presets.some((function(preset){return id(preset[colorSpace])===id(color[colorSpace])}))||setSelectedColors((function(arr){return arr.concat(color)})))}),[colorSpace,presets]);return{presets:presets,addPreset:addPreset}}(presetColors,color,colorSpace),presets=_usePresets.presets,addPreset=_usePresets.addPreset,Picker=ColorPicker[colorSpace];return react_default.a.createElement(Wrapper,null,react_default.a.createElement(PickerTooltip,{trigger:"click",startOpen:startOpen,closeOnClick:!0,onVisibilityChange:function onVisibilityChange(){return addPreset(color)},tooltip:react_default.a.createElement(TooltipContent,null,react_default.a.createElement(Picker,{color:"transparent"===realValue?"#000000":realValue,onChange:updateValue,onFocus:onFocus,onBlur:onBlur}),presets.length>0&&react_default.a.createElement(Swatches,null,presets.map((function(preset,index){return react_default.a.createElement(lazy_WithTooltip.a,{key:"".concat(preset.value,"-").concat(index),hasChrome:!1,tooltip:react_default.a.createElement(Note,{note:preset.keyword||preset.value})},react_default.a.createElement(Color_Swatch,{value:preset[colorSpace],active:color&&id(preset[colorSpace])===id(color[colorSpace]),onClick:function onClick(){return updateValue(preset.value)}}))}))))},react_default.a.createElement(Color_Swatch,{value:realValue,style:{margin:4}})),react_default.a.createElement(Input,{id:Object(helpers.a)(name),value:value,onChange:function onChange(e){return updateValue(e.target.value)},onFocus:function onFocus(e){return e.target.select()},placeholder:"Choose color..."}),value?react_default.a.createElement(ToggleIcon,{icon:"markup",onClick:cycleColorSpace}):null)};Color_ColorControl.displayName="ColorControl";__webpack_exports__.default=Color_ColorControl},1419:function(module,exports,__webpack_require__){var $=__webpack_require__(26),DESCRIPTORS=__webpack_require__(63);$({target:"Object",stat:!0,forced:!DESCRIPTORS,sham:!DESCRIPTORS},{defineProperty:__webpack_require__(75).f})},1420:function(module,exports,__webpack_require__){function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(arr)))return;var _arr=[],_n=!0,_d=!1,_e=void 0;try{for(var _s,_i=arr[Symbol.iterator]();!(_n=(_s=_i.next()).done)&&(_arr.push(_s.value),!i||_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{_n||null==_i.return||_i.return()}finally{if(_d)throw _e}}return _arr}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i1&&(h-=1)),[360*h,100*s,100*v]},convert.rgb.hwb=function(rgb){var r=rgb[0],g=rgb[1],b=rgb[2];return[convert.rgb.hsl(rgb)[0],100*(1/255*Math.min(r,Math.min(g,b))),100*(b=1-1/255*Math.max(r,Math.max(g,b)))]},convert.rgb.cmyk=function(rgb){var r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255,k=Math.min(1-r,1-g,1-b);return[100*((1-r-k)/(1-k)||0),100*((1-g-k)/(1-k)||0),100*((1-b-k)/(1-k)||0),100*k]},convert.rgb.keyword=function(rgb){var reversed=reverseKeywords[rgb];if(reversed)return reversed;for(var currentClosestKeyword,x,y,currentClosestDistance=1/0,_i3=0,_Object$keys3=Object.keys(cssKeywords);_i3<_Object$keys3.length;_i3++){var keyword=_Object$keys3[_i3],value=cssKeywords[keyword],distance=(x=rgb,y=value,Math.pow(x[0]-y[0],2)+Math.pow(x[1]-y[1],2)+Math.pow(x[2]-y[2],2));distance.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)+.3576*(g=g>.04045?Math.pow((g+.055)/1.055,2.4):g/12.92)+.1805*(b=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92)),100*(.2126*r+.7152*g+.0722*b),100*(.0193*r+.1192*g+.9505*b)]},convert.rgb.lab=function(rgb){var xyz=convert.rgb.xyz(rgb),x=xyz[0],y=xyz[1],z=xyz[2];return y/=100,z/=108.883,x=(x/=95.047)>.008856?Math.pow(x,1/3):7.787*x+16/116,[116*(y=y>.008856?Math.pow(y,1/3):7.787*y+16/116)-16,500*(x-y),200*(y-(z=z>.008856?Math.pow(z,1/3):7.787*z+16/116))]},convert.hsl.rgb=function(hsl){var t2,t3,val,h=hsl[0]/360,s=hsl[1]/100,l=hsl[2]/100;if(0===s)return[val=255*l,val,val];for(var t1=2*l-(t2=l<.5?l*(1+s):l+s-l*s),rgb=[0,0,0],i=0;i<3;i++)(t3=h+1/3*-(i-1))<0&&t3++,t3>1&&t3--,val=6*t3<1?t1+6*(t2-t1)*t3:2*t3<1?t2:3*t3<2?t1+(t2-t1)*(2/3-t3)*6:t1,rgb[i]=255*val;return rgb},convert.hsl.hsv=function(hsl){var h=hsl[0],s=hsl[1]/100,l=hsl[2]/100,smin=s,lmin=Math.max(l,.01);return s*=(l*=2)<=1?l:2-l,smin*=lmin<=1?lmin:2-lmin,[h,100*(0===l?2*smin/(lmin+smin):2*s/(l+s)),100*((l+s)/2)]},convert.hsv.rgb=function(hsv){var h=hsv[0]/60,s=hsv[1]/100,v=hsv[2]/100,hi=Math.floor(h)%6,f=h-Math.floor(h),p=255*v*(1-s),q=255*v*(1-s*f),t=255*v*(1-s*(1-f));switch(v*=255,hi){case 0:return[v,t,p];case 1:return[q,v,p];case 2:return[p,v,t];case 3:return[p,q,v];case 4:return[t,p,v];case 5:return[v,p,q]}},convert.hsv.hsl=function(hsv){var sl,l,h=hsv[0],s=hsv[1]/100,v=hsv[2]/100,vmin=Math.max(v,.01);l=(2-s)*v;var lmin=(2-s)*vmin;return sl=s*vmin,[h,100*(sl=(sl/=lmin<=1?lmin:2-lmin)||0),100*(l/=2)]},convert.hwb.rgb=function(hwb){var f,h=hwb[0]/360,wh=hwb[1]/100,bl=hwb[2]/100,ratio=wh+bl;ratio>1&&(wh/=ratio,bl/=ratio);var i=Math.floor(6*h),v=1-bl;f=6*h-i,0!=(1&i)&&(f=1-f);var r,g,b,n=wh+f*(v-wh);switch(i){default:case 6:case 0:r=v,g=n,b=wh;break;case 1:r=n,g=v,b=wh;break;case 2:r=wh,g=v,b=n;break;case 3:r=wh,g=n,b=v;break;case 4:r=n,g=wh,b=v;break;case 5:r=v,g=wh,b=n}return[255*r,255*g,255*b]},convert.cmyk.rgb=function(cmyk){var c=cmyk[0]/100,m=cmyk[1]/100,y=cmyk[2]/100,k=cmyk[3]/100;return[255*(1-Math.min(1,c*(1-k)+k)),255*(1-Math.min(1,m*(1-k)+k)),255*(1-Math.min(1,y*(1-k)+k))]},convert.xyz.rgb=function(xyz){var r,g,b,x=xyz[0]/100,y=xyz[1]/100,z=xyz[2]/100;return g=-.9689*x+1.8758*y+.0415*z,b=.0557*x+-.204*y+1.057*z,r=(r=3.2406*x+-1.5372*y+-.4986*z)>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,g=g>.0031308?1.055*Math.pow(g,1/2.4)-.055:12.92*g,b=b>.0031308?1.055*Math.pow(b,1/2.4)-.055:12.92*b,[255*(r=Math.min(Math.max(0,r),1)),255*(g=Math.min(Math.max(0,g),1)),255*(b=Math.min(Math.max(0,b),1))]},convert.xyz.lab=function(xyz){var x=xyz[0],y=xyz[1],z=xyz[2];return y/=100,z/=108.883,x=(x/=95.047)>.008856?Math.pow(x,1/3):7.787*x+16/116,[116*(y=y>.008856?Math.pow(y,1/3):7.787*y+16/116)-16,500*(x-y),200*(y-(z=z>.008856?Math.pow(z,1/3):7.787*z+16/116))]},convert.lab.xyz=function(lab){var x,y,z,l=lab[0];x=lab[1]/500+(y=(l+16)/116),z=y-lab[2]/200;var y2=Math.pow(y,3),x2=Math.pow(x,3),z2=Math.pow(z,3);return y=y2>.008856?y2:(y-16/116)/7.787,x=x2>.008856?x2:(x-16/116)/7.787,z=z2>.008856?z2:(z-16/116)/7.787,[x*=95.047,y*=100,z*=108.883]},convert.lab.lch=function(lab){var h,l=lab[0],a=lab[1],b=lab[2];return(h=360*Math.atan2(b,a)/2/Math.PI)<0&&(h+=360),[l,Math.sqrt(a*a+b*b),h]},convert.lch.lab=function(lch){var l=lch[0],c=lch[1],hr=lch[2]/360*2*Math.PI;return[l,c*Math.cos(hr),c*Math.sin(hr)]},convert.rgb.ansi16=function(args){var saturation=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,_args=_slicedToArray(args,3),r=_args[0],g=_args[1],b=_args[2],value=null===saturation?convert.rgb.hsv(args)[2]:saturation;if(0===(value=Math.round(value/50)))return 30;var ansi=30+(Math.round(b/255)<<2|Math.round(g/255)<<1|Math.round(r/255));return 2===value&&(ansi+=60),ansi},convert.hsv.ansi16=function(args){return convert.rgb.ansi16(convert.hsv.rgb(args),args[2])},convert.rgb.ansi256=function(args){var r=args[0],g=args[1],b=args[2];return r===g&&g===b?r<8?16:r>248?231:Math.round((r-8)/247*24)+232:16+36*Math.round(r/255*5)+6*Math.round(g/255*5)+Math.round(b/255*5)},convert.ansi16.rgb=function(args){var color=args%10;if(0===color||7===color)return args>50&&(color+=3.5),[color=color/10.5*255,color,color];var mult=.5*(1+~~(args>50));return[(1&color)*mult*255,(color>>1&1)*mult*255,(color>>2&1)*mult*255]},convert.ansi256.rgb=function(args){if(args>=232){var c=10*(args-232)+8;return[c,c,c]}var rem;return args-=16,[Math.floor(args/36)/5*255,Math.floor((rem=args%36)/6)/5*255,rem%6/5*255]},convert.rgb.hex=function(args){var string=(((255&Math.round(args[0]))<<16)+((255&Math.round(args[1]))<<8)+(255&Math.round(args[2]))).toString(16).toUpperCase();return"000000".substring(string.length)+string},convert.hex.rgb=function(args){var match=args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!match)return[0,0,0];var colorString=match[0];3===match[0].length&&(colorString=colorString.split("").map((function(char){return char+char})).join(""));var integer=parseInt(colorString,16);return[integer>>16&255,integer>>8&255,255&integer]},convert.rgb.hcg=function(rgb){var hue,r=rgb[0]/255,g=rgb[1]/255,b=rgb[2]/255,max=Math.max(Math.max(r,g),b),min=Math.min(Math.min(r,g),b),chroma=max-min;return hue=chroma<=0?0:max===r?(g-b)/chroma%6:max===g?2+(b-r)/chroma:4+(r-g)/chroma,hue/=6,[360*(hue%=1),100*chroma,100*(chroma<1?min/(1-chroma):0)]},convert.hsl.hcg=function(hsl){var s=hsl[1]/100,l=hsl[2]/100,c=l<.5?2*s*l:2*s*(1-l),f=0;return c<1&&(f=(l-.5*c)/(1-c)),[hsl[0],100*c,100*f]},convert.hsv.hcg=function(hsv){var s=hsv[1]/100,v=hsv[2]/100,c=s*v,f=0;return c<1&&(f=(v-c)/(1-c)),[hsv[0],100*c,100*f]},convert.hcg.rgb=function(hcg){var h=hcg[0]/360,c=hcg[1]/100,g=hcg[2]/100;if(0===c)return[255*g,255*g,255*g];var mg,pure=[0,0,0],hi=h%1*6,v=hi%1,w=1-v;switch(Math.floor(hi)){case 0:pure[0]=1,pure[1]=v,pure[2]=0;break;case 1:pure[0]=w,pure[1]=1,pure[2]=0;break;case 2:pure[0]=0,pure[1]=1,pure[2]=v;break;case 3:pure[0]=0,pure[1]=w,pure[2]=1;break;case 4:pure[0]=v,pure[1]=0,pure[2]=1;break;default:pure[0]=1,pure[1]=0,pure[2]=w}return mg=(1-c)*g,[255*(c*pure[0]+mg),255*(c*pure[1]+mg),255*(c*pure[2]+mg)]},convert.hcg.hsv=function(hcg){var c=hcg[1]/100,v=c+hcg[2]/100*(1-c),f=0;return v>0&&(f=c/v),[hcg[0],100*f,100*v]},convert.hcg.hsl=function(hcg){var c=hcg[1]/100,l=hcg[2]/100*(1-c)+.5*c,s=0;return l>0&&l<.5?s=c/(2*l):l>=.5&&l<1&&(s=c/(2*(1-l))),[hcg[0],100*s,100*l]},convert.hcg.hwb=function(hcg){var c=hcg[1]/100,v=c+hcg[2]/100*(1-c);return[hcg[0],100*(v-c),100*(1-v)]},convert.hwb.hcg=function(hwb){var w=hwb[1]/100,v=1-hwb[2]/100,c=v-w,g=0;return c<1&&(g=(v-c)/(1-c)),[hwb[0],100*c,100*g]},convert.apple.rgb=function(apple){return[apple[0]/65535*255,apple[1]/65535*255,apple[2]/65535*255]},convert.rgb.apple=function(rgb){return[rgb[0]/255*65535,rgb[1]/255*65535,rgb[2]/255*65535]},convert.gray.rgb=function(args){return[args[0]/100*255,args[0]/100*255,args[0]/100*255]},convert.gray.hsl=function(args){return[0,0,args[0]]},convert.gray.hsv=convert.gray.hsl,convert.gray.hwb=function(gray){return[0,100,gray[0]]},convert.gray.cmyk=function(gray){return[0,0,0,gray[0]]},convert.gray.lab=function(gray){return[gray[0],0,0]},convert.gray.hex=function(gray){var val=255&Math.round(gray[0]/100*255),string=((val<<16)+(val<<8)+val).toString(16).toUpperCase();return"000000".substring(string.length)+string},convert.rgb.gray=function(rgb){return[(rgb[0]+rgb[1]+rgb[2])/3/255*100]}},1460:function(module,exports,__webpack_require__){__webpack_require__(15),__webpack_require__(750),__webpack_require__(52),__webpack_require__(1419);var conversions=__webpack_require__(1420),route=__webpack_require__(1466),convert={};Object.keys(conversions).forEach((function(fromModel){convert[fromModel]={},Object.defineProperty(convert[fromModel],"channels",{value:conversions[fromModel].channels}),Object.defineProperty(convert[fromModel],"labels",{value:conversions[fromModel].labels});var routes=route(fromModel);Object.keys(routes).forEach((function(toModel){var fn=routes[toModel];convert[fromModel][toModel]=function wrapRounded(fn){var wrappedFn=function wrappedFn(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++)args[_key2]=arguments[_key2];var arg0=args[0];if(null==arg0)return arg0;arg0.length>1&&(args=arg0);var result=fn(args);if("object"==typeof result)for(var len=result.length,i=0;i1&&(args=arg0),fn(args))};return"conversion"in fn&&(wrappedFn.conversion=fn.conversion),wrappedFn}(fn)}))})),module.exports=convert},1461:function(module,exports,__webpack_require__){var redefine=__webpack_require__(89),DatePrototype=Date.prototype,nativeDateToString=DatePrototype.toString,getTime=DatePrototype.getTime;new Date(NaN)+""!="Invalid Date"&&redefine(DatePrototype,"toString",(function toString(){var value=getTime.call(this);return value==value?nativeDateToString.call(this):"Invalid Date"}))},1462:function(module,exports,__webpack_require__){var $=__webpack_require__(26),parseIntImplementation=__webpack_require__(1463);$({global:!0,forced:parseInt!=parseIntImplementation},{parseInt:parseIntImplementation})},1463:function(module,exports,__webpack_require__){var global=__webpack_require__(33),trim=__webpack_require__(481).trim,whitespaces=__webpack_require__(482),$parseInt=global.parseInt,hex=/^[+-]?0[Xx]/,FORCED=8!==$parseInt(whitespaces+"08")||22!==$parseInt(whitespaces+"0x16");module.exports=FORCED?function parseInt(string,radix){var S=trim(String(string));return $parseInt(S,radix>>>0||(hex.test(S)?16:10))}:$parseInt},1464:function(module,exports,__webpack_require__){__webpack_require__(26)({target:"Array",stat:!0},{isArray:__webpack_require__(243)})},1465:function(module,exports,__webpack_require__){"use strict";module.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},1466:function(module,exports,__webpack_require__){__webpack_require__(15);var conversions=__webpack_require__(1420);function deriveBFS(fromModel){var graph=function buildGraph(){for(var graph={},models=Object.keys(conversions),len=models.length,i=0;i=wait||timeSinceLastCall<0||maxing&&time-lastInvokeTime>=maxWait}function timerExpired(){var time=now();if(shouldInvoke(time))return trailingEdge(time);timerId=setTimeout(timerExpired,function remainingWait(time){var timeWaiting=wait-(time-lastCallTime);return maxing?nativeMin(timeWaiting,maxWait-(time-lastInvokeTime)):timeWaiting}(time))}function trailingEdge(time){return timerId=void 0,trailing&&lastArgs?invokeFunc(time):(lastArgs=lastThis=void 0,result)}function debounced(){var time=now(),isInvoking=shouldInvoke(time);if(lastArgs=arguments,lastThis=this,lastCallTime=time,isInvoking){if(void 0===timerId)return leadingEdge(lastCallTime);if(maxing)return clearTimeout(timerId),timerId=setTimeout(timerExpired,wait),invokeFunc(lastCallTime)}return void 0===timerId&&(timerId=setTimeout(timerExpired,wait)),result}return wait=toNumber(wait)||0,isObject(options)&&(leading=!!options.leading,maxWait=(maxing="maxWait"in options)?nativeMax(toNumber(options.maxWait)||0,wait):maxWait,trailing="trailing"in options?!!options.trailing:trailing),debounced.cancel=function cancel(){void 0!==timerId&&clearTimeout(timerId),lastInvokeTime=0,lastArgs=lastCallTime=lastThis=timerId=void 0},debounced.flush=function flush(){return void 0===timerId?result:trailingEdge(now())},debounced}},1469:function(module,exports,__webpack_require__){var root=__webpack_require__(109);module.exports=function(){return root.Date.now()}},1470:function(module,exports,__webpack_require__){var baseTrim=__webpack_require__(1471),isObject=__webpack_require__(151),isSymbol=__webpack_require__(332),reIsBadHex=/^[-+]0x[0-9a-f]+$/i,reIsBinary=/^0b[01]+$/i,reIsOctal=/^0o[0-7]+$/i,freeParseInt=parseInt;module.exports=function toNumber(value){if("number"==typeof value)return value;if(isSymbol(value))return NaN;if(isObject(value)){var other="function"==typeof value.valueOf?value.valueOf():value;value=isObject(other)?other+"":other}if("string"!=typeof value)return 0===value?value:+value;value=baseTrim(value);var isBinary=reIsBinary.test(value);return isBinary||reIsOctal.test(value)?freeParseInt(value.slice(2),isBinary?2:8):reIsBadHex.test(value)?NaN:+value}},1471:function(module,exports,__webpack_require__){var trimmedEndIndex=__webpack_require__(1472),reTrimStart=/^\s+/;module.exports=function baseTrim(string){return string?string.slice(0,trimmedEndIndex(string)+1).replace(reTrimStart,""):string}},1472:function(module,exports){var reWhitespace=/\s/;module.exports=function trimmedEndIndex(string){for(var index=string.length;index--&&reWhitespace.test(string.charAt(index)););return index}}}]);
\ No newline at end of file
diff --git a/6.30c5db6987ecb6b94ca6.manager.bundle.js b/6.30c5db6987ecb6b94ca6.manager.bundle.js
new file mode 100644
index 0000000000..fd5376d4ff
--- /dev/null
+++ b/6.30c5db6987ecb6b94ca6.manager.bundle.js
@@ -0,0 +1,2 @@
+/*! For license information please see 6.30c5db6987ecb6b94ca6.manager.bundle.js.LICENSE.txt */
+(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{1402:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"OverlayScrollbarsComponent",(function(){return OverlayScrollbarsComponent}));__webpack_require__(1423),__webpack_require__(30),__webpack_require__(171),__webpack_require__(133),__webpack_require__(97),__webpack_require__(37),__webpack_require__(107),__webpack_require__(68),__webpack_require__(18),__webpack_require__(15),__webpack_require__(5),__webpack_require__(8);var react__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__(0),react__WEBPACK_IMPORTED_MODULE_12___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_12__),overlayscrollbars__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__(1424),overlayscrollbars__WEBPACK_IMPORTED_MODULE_13___default=__webpack_require__.n(overlayscrollbars__WEBPACK_IMPORTED_MODULE_13__);function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i=0||(target[key]=source[key]);return target}(source,excluded);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}var OverlayScrollbarsComponent=function OverlayScrollbarsComponent(_ref){var _ref$options=_ref.options,options=void 0===_ref$options?{}:_ref$options,extensions=_ref.extensions,className=_ref.className,children=_ref.children,rest=_objectWithoutProperties(_ref,["options","extensions","className","children"]),osTargetRef=react__WEBPACK_IMPORTED_MODULE_12___default.a.useRef(),osInstance=react__WEBPACK_IMPORTED_MODULE_12___default.a.useRef();return react__WEBPACK_IMPORTED_MODULE_12___default.a.useEffect((function(){return osInstance.current=overlayscrollbars__WEBPACK_IMPORTED_MODULE_13___default()(osTargetRef.current,options,extensions),mergeHostClassNames(osInstance.current,className),function(){overlayscrollbars__WEBPACK_IMPORTED_MODULE_13___default.a.valid(osInstance.current)&&(osInstance.current.destroy(),osInstance.current=null)}}),[]),react__WEBPACK_IMPORTED_MODULE_12___default.a.useEffect((function(){overlayscrollbars__WEBPACK_IMPORTED_MODULE_13___default.a.valid(osInstance.current)&&osInstance.current.options(options)}),[options]),react__WEBPACK_IMPORTED_MODULE_12___default.a.useEffect((function(){overlayscrollbars__WEBPACK_IMPORTED_MODULE_13___default.a.valid(osInstance.current)&&mergeHostClassNames(osInstance.current,className)}),[className]),react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",_extends({className:"os-host"},rest,{ref:osTargetRef}),react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-resize-observer-host"}),react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-padding"},react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-viewport"},react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-content"},children))),react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-scrollbar os-scrollbar-horizontal "},react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-scrollbar-track"},react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-scrollbar-handle"}))),react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-scrollbar os-scrollbar-vertical"},react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-scrollbar-track"},react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-scrollbar-handle"}))),react__WEBPACK_IMPORTED_MODULE_12___default.a.createElement("div",{className:"os-scrollbar-corner"}))};function mergeHostClassNames(osInstance,className){if(overlayscrollbars__WEBPACK_IMPORTED_MODULE_13___default.a.valid(osInstance)){var host=osInstance.getElements().host,regex=new RegExp("(^os-host([-_].+|)$)|".concat(osInstance.options().className.replace(/\s/g,"$|"),"$"),"g"),osClassNames=host.className.split(" ").filter((function(name){return name.match(regex)})).join(" ");host.className="".concat(osClassNames," ").concat(className||"")}}OverlayScrollbarsComponent.displayName="OverlayScrollbarsComponent",__webpack_exports__.default=OverlayScrollbarsComponent},1423:function(module,exports,__webpack_require__){var DESCRIPTORS=__webpack_require__(63),global=__webpack_require__(33),isForced=__webpack_require__(242),inheritIfRequired=__webpack_require__(479),defineProperty=__webpack_require__(75).f,getOwnPropertyNames=__webpack_require__(241).f,isRegExp=__webpack_require__(478),getFlags=__webpack_require__(477),stickyHelpers=__webpack_require__(751),redefine=__webpack_require__(89),fails=__webpack_require__(31),setInternalState=__webpack_require__(108).set,setSpecies=__webpack_require__(480),MATCH=__webpack_require__(38)("match"),NativeRegExp=global.RegExp,RegExpPrototype=NativeRegExp.prototype,re1=/a/g,re2=/a/g,CORRECT_NEW=new NativeRegExp(re1)!==re1,UNSUPPORTED_Y=stickyHelpers.UNSUPPORTED_Y;if(DESCRIPTORS&&isForced("RegExp",!CORRECT_NEW||UNSUPPORTED_Y||fails((function(){return re2[MATCH]=!1,NativeRegExp(re1)!=re1||NativeRegExp(re2)==re2||"/a/i"!=NativeRegExp(re1,"i")})))){for(var RegExpWrapper=function RegExp(pattern,flags){var sticky,thisIsRegExp=this instanceof RegExpWrapper,patternIsRegExp=isRegExp(pattern),flagsAreUndefined=void 0===flags;if(!thisIsRegExp&&patternIsRegExp&&pattern.constructor===RegExpWrapper&&flagsAreUndefined)return pattern;CORRECT_NEW?patternIsRegExp&&!flagsAreUndefined&&(pattern=pattern.source):pattern instanceof RegExpWrapper&&(flagsAreUndefined&&(flags=getFlags.call(pattern)),pattern=pattern.source),UNSUPPORTED_Y&&(sticky=!!flags&&flags.indexOf("y")>-1)&&(flags=flags.replace(/y/g,""));var result=inheritIfRequired(CORRECT_NEW?new NativeRegExp(pattern,flags):NativeRegExp(pattern,flags),thisIsRegExp?this:RegExpPrototype,RegExpWrapper);return UNSUPPORTED_Y&&sticky&&setInternalState(result,{sticky:sticky}),result},proxy=function(key){key in RegExpWrapper||defineProperty(RegExpWrapper,key,{configurable:!0,get:function(){return NativeRegExp[key]},set:function(it){NativeRegExp[key]=it}})},keys=getOwnPropertyNames(NativeRegExp),index=0;keys.length>index;)proxy(keys[index++]);RegExpPrototype.constructor=RegExpWrapper,RegExpWrapper.prototype=RegExpPrototype,redefine(global,"RegExp",RegExpWrapper)}setSpecies("RegExp")},1424:function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_RESULT__,global;global="undefined"!=typeof window?window:this,void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return function(window,document,undefined){"use strict";var _targets,_instancePropertyString,_easingsMath,PLUGINNAME="OverlayScrollbars",TYPES={o:"object",f:"function",a:"array",s:"string",b:"boolean",n:"number",u:"undefined",z:"null"},LEXICON={c:"class",s:"style",i:"id",l:"length",p:"prototype",ti:"tabindex",oH:"offsetHeight",cH:"clientHeight",sH:"scrollHeight",oW:"offsetWidth",cW:"clientWidth",sW:"scrollWidth",hOP:"hasOwnProperty",bCR:"getBoundingClientRect"},VENDORS=function(){var jsCache={},cssCache={},cssPrefixes=["-webkit-","-moz-","-o-","-ms-"],jsPrefixes=["WebKit","Moz","O","MS"];function firstLetterToUpper(str){return str.charAt(0).toUpperCase()+str.slice(1)}return{_cssPrefixes:cssPrefixes,_jsPrefixes:jsPrefixes,_cssProperty:function(name){var result=cssCache[name];if(cssCache[LEXICON.hOP](name))return result;for(var resultPossibilities,v,currVendorWithoutDashes,uppercasedName=firstLetterToUpper(name),elmStyle=document.createElement("div")[LEXICON.s],i=0;i0&&length-1 in obj)}function stripAndCollapse(value){return(value.match(_rnothtmlwhite)||[]).join(_strSpace)}function matches(elem,selector){for(var nodeList=(elem.parentNode||document).querySelectorAll(selector)||[],i=nodeList[LEXICON.l];i--;)if(nodeList[i]==elem)return!0;return!1}function insertAdjacentElement(el,strategy,child){if(COMPATIBILITY.isA(child))for(var i=0;i0?(nextAnim=animObj.q[0],animate(animObj.el,nextAnim.props,nextAnim.duration,nextAnim.easing,nextAnim.complete,!0)):(index=inArray(animObj,_animations))>-1&&_animations.splice(index,1)}function setAnimationValue(el,prop,value){prop===_strScrollLeft||prop===_strScrollTop?el[prop]=value:setCSSVal(el,prop,value)}function animate(el,props,options,easing,complete,guaranteedNext){var key,animObj,progress,step,specialEasing,duration,hasOptions=isPlainObject(options),from={},to={},i=0;for(hasOptions?(easing=options.easing,options.start,progress=options.progress,step=options.step,specialEasing=options.specialEasing,complete=options.complete,duration=options.duration):duration=options,specialEasing=specialEasing||{},duration=duration||400,easing=easing||"swing",guaranteedNext=guaranteedNext||!1;i<_animations[LEXICON.l];i++)if(_animations[i].el===el){animObj=_animations[i];break}for(key in animObj||(animObj={el:el,q:[]},_animations.push(animObj)),props)from[key]=key===_strScrollLeft||key===_strScrollTop?el[key]:FakejQuery(el).css(key);for(key in from)from[key]!==props[key]&&props[key]!==undefined&&(to[key]=props[key]);if(isEmptyObject(to))guaranteedNext&&startNextAnimationInQ(animObj);else{var timeNow,end,percent,fromVal,toVal,easedVal,timeStart,frame,elapsed,qPos=guaranteedNext?0:inArray(qObj,animObj.q),qObj={props:to,duration:hasOptions?options:duration,easing:easing,complete:complete};if(-1===qPos&&(qPos=animObj.q[LEXICON.l],animObj.q.push(qObj)),0===qPos)if(duration>0)timeStart=COMPATIBILITY.now(),frame=function(){for(key in timeNow=COMPATIBILITY.now(),elapsed=timeNow-timeStart,end=qObj.stop||elapsed>=duration,percent=1-(MATH.max(0,timeStart+duration-timeNow)/duration||0),to)fromVal=parseFloat(from[key]),toVal=parseFloat(to[key]),easedVal=(toVal-fromVal)*EASING[specialEasing[key]||easing](percent,percent*duration,0,1,duration)+fromVal,setAnimationValue(el,key,easedVal),isFunction(step)&&step(easedVal,{elem:el,prop:key,start:fromVal,now:easedVal,end:toVal,pos:percent,options:{easing:easing,speacialEasing:specialEasing,duration:duration,complete:complete,step:step},startTime:timeStart});isFunction(progress)&&progress({},percent,MATH.max(0,duration-elapsed)),end?(startNextAnimationInQ(animObj),isFunction(complete)&&complete()):qObj.frame=COMPATIBILITY.rAF()(frame)},qObj.frame=COMPATIBILITY.rAF()(frame);else{for(key in to)setAnimationValue(el,key,to[key]);startNextAnimationInQ(animObj)}}}function stop(el,clearQ,jumpToEnd){for(var animObj,qObj,key,i=0;i<_animations[LEXICON.l];i++)if((animObj=_animations[i]).el===el){if(animObj.q[LEXICON.l]>0){if((qObj=animObj.q[0]).stop=!0,COMPATIBILITY.cAF()(qObj.frame),animObj.q.splice(0,1),jumpToEnd)for(key in qObj.props)setAnimationValue(el,key,qObj.props[key]);clearQ?animObj.q=[]:startNextAnimationInQ(animObj,!1)}break}}function elementIsVisible(el){return!!(el[LEXICON.oW]||el[LEXICON.oH]||el.getClientRects()[LEXICON.l])}function FakejQuery(selector){if(0===arguments[LEXICON.l])return this;var elms,el,base=new FakejQuery,elements=selector,i=0;if(_type(selector)==TYPES.s)for(elements=[],"<"===selector.charAt(0)?((el=document.createElement("div")).innerHTML=selector,elms=el.children):elms=document.querySelectorAll(selector);i0;)deepest=deepest.childNodes[0];for(i=0;nodes[LEXICON.l]-i;deepest.firstChild===nodes[0]&&i++)deepest.appendChild(nodes[i]);var nextSibling=previousSibling?previousSibling.nextSibling:parent.firstChild;return parent.insertBefore(wrapper,nextSibling),this},wrapInner:function(wrapperHTML){return this.each((function(){var el=FakejQuery(this),contents=el.contents();contents[LEXICON.l]?contents.wrapAll(wrapperHTML):el.append(wrapperHTML)}))},wrap:function(wrapperHTML){return this.each((function(){FakejQuery(this).wrapAll(wrapperHTML)}))},css:function(styles,val){var el,key,cptStyle,getCptStyle=window.getComputedStyle;return _type(styles)==TYPES.s?val===undefined?(el=this[0],cptStyle=getCptStyle?getCptStyle(el,null):el.currentStyle[styles],getCptStyle?null!=cptStyle?cptStyle.getPropertyValue(styles):el[LEXICON.s][styles]:cptStyle):this.each((function(){setCSSVal(this,styles,val)})):this.each((function(){for(key in styles)setCSSVal(this,key,styles[key])}))},hasClass:function(className){for(var elem,classList,i=0,classNamePrepared=_strSpace+className+_strSpace;elem=this[i++];){if((classList=elem.classList)&&classList.contains(className))return!0;if(1===elem.nodeType&&(_strSpace+stripAndCollapse(elem.className+_strEmpty)+_strSpace).indexOf(classNamePrepared)>-1)return!0}return!1},addClass:function(className){var classes,elem,cur,curValue,clazz,finalValue,supportClassList,elmClassList,i=0,v=0;if(className)for(classes=className.match(_rnothtmlwhite)||[];elem=this[i++];)if(elmClassList=elem.classList,supportClassList===undefined&&(supportClassList=elmClassList!==undefined),supportClassList)for(;clazz=classes[v++];)elmClassList.add(clazz);else if(curValue=elem.className+_strEmpty,cur=1===elem.nodeType&&_strSpace+stripAndCollapse(curValue)+_strSpace){for(;clazz=classes[v++];)cur.indexOf(_strSpace+clazz+_strSpace)<0&&(cur+=clazz+_strSpace);curValue!==(finalValue=stripAndCollapse(cur))&&(elem.className=finalValue)}return this},removeClass:function(className){var classes,elem,cur,curValue,clazz,finalValue,supportClassList,elmClassList,i=0,v=0;if(className)for(classes=className.match(_rnothtmlwhite)||[];elem=this[i++];)if(elmClassList=elem.classList,supportClassList===undefined&&(supportClassList=elmClassList!==undefined),supportClassList)for(;clazz=classes[v++];)elmClassList.remove(clazz);else if(curValue=elem.className+_strEmpty,cur=1===elem.nodeType&&_strSpace+stripAndCollapse(curValue)+_strSpace){for(;clazz=classes[v++];)for(;cur.indexOf(_strSpace+clazz+_strSpace)>-1;)cur=cur.replace(_strSpace+clazz+_strSpace,_strSpace);curValue!==(finalValue=stripAndCollapse(cur))&&(elem.className=finalValue)}return this},hide:function(){return this.each((function(){this[LEXICON.s].display="none"}))},show:function(){return this.each((function(){this[LEXICON.s].display="block"}))},attr:function(attrName,value){for(var el,i=0;el=this[i++];){if(value===undefined)return el.getAttribute(attrName);el.setAttribute(attrName,value)}return this},removeAttr:function(attrName){return this.each((function(){this.removeAttribute(attrName)}))},offset:function(){var rect=this[0][LEXICON.bCR](),scrollLeft=window.pageXOffset||document.documentElement[_strScrollLeft],scrollTop=window.pageYOffset||document.documentElement[_strScrollTop];return{top:rect.top+scrollTop,left:rect.left+scrollLeft}},position:function(){var el=this[0];return{top:el.offsetTop,left:el.offsetLeft}},scrollLeft:function(value){for(var el,i=0;el=this[i++];){if(value===undefined)return el[_strScrollLeft];el[_strScrollLeft]=value}return this},scrollTop:function(value){for(var el,i=0;el=this[i++];){if(value===undefined)return el[_strScrollTop];el[_strScrollTop]=value}return this},val:function(value){var el=this[0];return value?(el.value=value,this):el.value},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(index){return FakejQuery(this[index>=0?index:this[LEXICON.l]+index])},find:function(selector){var i,children=[];return this.each((function(){var ch=this.querySelectorAll(selector);for(i=0;i-1){if(!(argLen>1))return _targets[index][_instancePropertyString];delete target[_instancePropertyString],_targets.splice(index,1)}}}),PLUGIN=function(){var _plugin,_pluginsGlobals,_pluginsAutoUpdateLoop,type,possibleTemplateTypes,restrictedStringsSplit,restrictedStringsPossibilitiesSplit,classNameAllowedValues,numberAllowedValues,booleanNullAllowedValues,booleanTrueTemplate,booleanFalseTemplate,callbackTemplate,overflowBehaviorAllowedValues,optionsDefaultsAndTemplate,convert,_pluginsExtensions=[],_pluginsOptions=(type=COMPATIBILITY.type,possibleTemplateTypes=[TYPES.b,TYPES.n,TYPES.s,TYPES.a,TYPES.o,TYPES.f,TYPES.z],restrictedStringsSplit=" ",restrictedStringsPossibilitiesSplit=":",classNameAllowedValues=[TYPES.z,TYPES.s],numberAllowedValues=TYPES.n,booleanNullAllowedValues=[TYPES.z,TYPES.b],booleanTrueTemplate=[!0,TYPES.b],booleanFalseTemplate=[!1,TYPES.b],callbackTemplate=[null,[TYPES.z,TYPES.f]],overflowBehaviorAllowedValues="v-h:visible-hidden v-s:visible-scroll s:scroll h:hidden",optionsDefaultsAndTemplate={className:["os-theme-dark",classNameAllowedValues],resize:["none","n:none b:both h:horizontal v:vertical"],sizeAutoCapable:booleanTrueTemplate,clipAlways:booleanTrueTemplate,normalizeRTL:booleanTrueTemplate,paddingAbsolute:booleanFalseTemplate,autoUpdate:[null,booleanNullAllowedValues],autoUpdateInterval:[33,numberAllowedValues],updateOnLoad:[["img"],[TYPES.s,TYPES.a,TYPES.z]],nativeScrollbarsOverlaid:{showNativeScrollbars:booleanFalseTemplate,initialize:booleanTrueTemplate},overflowBehavior:{x:["scroll",overflowBehaviorAllowedValues],y:["scroll",overflowBehaviorAllowedValues]},scrollbars:{visibility:["auto","v:visible h:hidden a:auto"],autoHide:["never","n:never s:scroll l:leave m:move"],autoHideDelay:[800,numberAllowedValues],dragScrolling:booleanTrueTemplate,clickScrolling:booleanFalseTemplate,touchSupport:booleanTrueTemplate,snapHandle:booleanFalseTemplate},textarea:{dynWidth:booleanFalseTemplate,dynHeight:booleanFalseTemplate,inheritedAttrs:[["style","class"],[TYPES.s,TYPES.a,TYPES.z]]},callbacks:{onInitialized:callbackTemplate,onInitializationWithdrawn:callbackTemplate,onDestroyed:callbackTemplate,onScrollStart:callbackTemplate,onScroll:callbackTemplate,onScrollStop:callbackTemplate,onOverflowChanged:callbackTemplate,onOverflowAmountChanged:callbackTemplate,onDirectionChanged:callbackTemplate,onContentSizeChanged:callbackTemplate,onHostSizeChanged:callbackTemplate,onUpdated:callbackTemplate}},{_defaults:(convert=function(template){var recursive=function(obj){var key,val,valType;for(key in obj)obj[LEXICON.hOP](key)&&(val=obj[key],(valType=type(val))==TYPES.a?obj[key]=val[template?1:0]:valType==TYPES.o&&(obj[key]=recursive(val)));return obj};return recursive(FRAMEWORK.extend(!0,{},optionsDefaultsAndTemplate))})(),_template:convert(!0),_validate:function(obj,template,writeErrors,diffObj){var validatedOptions={},validatedOptionsPrepared={},objectCopy=FRAMEWORK.extend(!0,{},obj),inArray=FRAMEWORK.inArray,isEmptyObj=FRAMEWORK.isEmptyObject,checkObjectProps=function(data,template,diffData,validatedOptions,validatedOptionsPrepared,prevPropName){for(var prop in template)if(template[LEXICON.hOP](prop)&&data[LEXICON.hOP](prop)){var restrictedStringValuesSplit,restrictedStringValuesPossibilitiesSplit,isRestrictedValue,mainPossibility,currType,i,v,j,isValid=!1,isDiff=!1,templateValue=template[prop],templateValueType=type(templateValue),templateIsComplex=templateValueType==TYPES.o,templateTypes=COMPATIBILITY.isA(templateValue)?templateValue:[templateValue],dataDiffValue=diffData[prop],dataValue=data[prop],dataValueType=type(dataValue),propPrefix=prevPropName?prevPropName+".":"",error='The option "'+propPrefix+prop+"\" wasn't set, because",errorPossibleTypes=[],errorRestrictedStrings=[];if(dataDiffValue=dataDiffValue===undefined?{}:dataDiffValue,templateIsComplex&&dataValueType==TYPES.o)validatedOptions[prop]={},validatedOptionsPrepared[prop]={},checkObjectProps(dataValue,templateValue,dataDiffValue,validatedOptions[prop],validatedOptionsPrepared[prop],propPrefix+prop),FRAMEWORK.each([data,validatedOptions,validatedOptionsPrepared],(function(index,value){isEmptyObj(value[prop])&&delete value[prop]}));else if(!templateIsComplex){for(i=0;i0?"\r\nValid strings are: [ "+errorRestrictedStrings.join(", ").split(restrictedStringsPossibilitiesSplit).join(", ")+" ].":"")),delete data[prop]}}};return checkObjectProps(objectCopy,template,diffObj||{},validatedOptions,validatedOptionsPrepared),!isEmptyObj(objectCopy)&&writeErrors&&console.warn("The following options are discarded due to invalidity:\r\n"+window.JSON.stringify(objectCopy,null,2)),{_default:validatedOptions,_prepared:validatedOptionsPrepared}}});function initOverlayScrollbarsStatics(){_pluginsGlobals||(_pluginsGlobals=new OverlayScrollbarsGlobals(_pluginsOptions._defaults)),_pluginsAutoUpdateLoop||(_pluginsAutoUpdateLoop=new OverlayScrollbarsAutoUpdateLoop(_pluginsGlobals))}function OverlayScrollbarsGlobals(defaultOptions){var _base=this,strOverflow="overflow",strHidden="hidden",strScroll="scroll",bodyElement=FRAMEWORK("body"),scrollbarDummyElement=FRAMEWORK(''),scrollbarDummyElement0=scrollbarDummyElement[0],dummyContainerChild=FRAMEWORK(scrollbarDummyElement.children("div").eq(0));bodyElement.append(scrollbarDummyElement),scrollbarDummyElement.hide().show();var nativeScrollbarSize=calcNativeScrollbarSize(scrollbarDummyElement0),nativeScrollbarIsOverlaid={x:0===nativeScrollbarSize.x,y:0===nativeScrollbarSize.y},msie=function(){var result,ua=window.navigator.userAgent,strIndexOf="indexOf",strSubString="substring",msie=ua[strIndexOf]("MSIE "),trident=ua[strIndexOf]("Trident/"),edge=ua[strIndexOf]("Edge/"),rv=ua[strIndexOf]("rv:"),parseIntFunc=parseInt;return msie>0?result=parseIntFunc(ua[strSubString](msie+5,ua[strIndexOf](".",msie)),10):trident>0?result=parseIntFunc(ua[strSubString](rv+3,ua[strIndexOf](".",rv)),10):edge>0&&(result=parseIntFunc(ua[strSubString](edge+5,ua[strIndexOf](".",edge)),10)),result}();function calcNativeScrollbarSize(measureElement){return{x:measureElement[LEXICON.oH]-measureElement[LEXICON.cH],y:measureElement[LEXICON.oW]-measureElement[LEXICON.cW]}}FRAMEWORK.extend(_base,{defaultOptions:defaultOptions,msie:msie,autoUpdateLoop:!1,autoUpdateRecommended:!COMPATIBILITY.mO(),nativeScrollbarSize:nativeScrollbarSize,nativeScrollbarIsOverlaid:nativeScrollbarIsOverlaid,nativeScrollbarStyling:function(){var result=!1;scrollbarDummyElement.addClass("os-viewport-native-scrollbars-invisible");try{result="none"===scrollbarDummyElement.css("scrollbar-width")&&(msie>9||!msie)||"none"===window.getComputedStyle(scrollbarDummyElement0,"::-webkit-scrollbar").getPropertyValue("display")}catch(ex){}return result}(),overlayScrollbarDummySize:{x:30,y:30},cssCalc:VENDORS._cssPropertyValue("width","calc","(1px)")||null,restrictedMeasuring:function(){scrollbarDummyElement.css(strOverflow,strHidden);var scrollSize={w:scrollbarDummyElement0[LEXICON.sW],h:scrollbarDummyElement0[LEXICON.sH]};scrollbarDummyElement.css(strOverflow,"visible");var scrollSize2={w:scrollbarDummyElement0[LEXICON.sW],h:scrollbarDummyElement0[LEXICON.sH]};return scrollSize.w-scrollSize2.w!=0||scrollSize.h-scrollSize2.h!=0}(),rtlScrollBehavior:function(){scrollbarDummyElement.css({"overflow-y":strHidden,"overflow-x":strScroll,direction:"rtl"}).scrollLeft(0);var dummyContainerOffset=scrollbarDummyElement.offset(),dummyContainerChildOffset=dummyContainerChild.offset();scrollbarDummyElement.scrollLeft(-999);var dummyContainerChildOffsetAfterScroll=dummyContainerChild.offset();return{i:dummyContainerOffset.left===dummyContainerChildOffset.left,n:dummyContainerChildOffset.left!==dummyContainerChildOffsetAfterScroll.left}}(),supportTransform:!!VENDORS._cssProperty("transform"),supportTransition:!!VENDORS._cssProperty("transition"),supportPassiveEvents:function(){var supportsPassive=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){supportsPassive=!0}}))}catch(e){}return supportsPassive}(),supportResizeObserver:!!COMPATIBILITY.rO(),supportMutationObserver:!!COMPATIBILITY.mO()}),scrollbarDummyElement.removeAttr(LEXICON.s).remove(),function(){if(!nativeScrollbarIsOverlaid.x||!nativeScrollbarIsOverlaid.y){var abs=MATH.abs,windowWidth=COMPATIBILITY.wW(),windowHeight=COMPATIBILITY.wH(),windowDpr=getWindowDPR(),onResize=function(){if(INSTANCES().length>0){var newW=COMPATIBILITY.wW(),newH=COMPATIBILITY.wH(),deltaW=newW-windowWidth,deltaH=newH-windowHeight;if(0===deltaW&&0===deltaH)return;var newScrollbarSize,deltaWRatio=MATH.round(newW/(windowWidth/100)),deltaHRatio=MATH.round(newH/(windowHeight/100)),absDeltaW=abs(deltaW),absDeltaH=abs(deltaH),absDeltaWRatio=abs(deltaWRatio),absDeltaHRatio=abs(deltaHRatio),newDPR=getWindowDPR(),deltaIsBigger=absDeltaW>2&&absDeltaH>2,difference=!differenceIsBiggerThanOne(absDeltaWRatio,absDeltaHRatio),isZoom=deltaIsBigger&&difference&&newDPR!==windowDpr&&windowDpr>0,oldScrollbarSize=_base.nativeScrollbarSize;isZoom&&(bodyElement.append(scrollbarDummyElement),newScrollbarSize=_base.nativeScrollbarSize=calcNativeScrollbarSize(scrollbarDummyElement[0]),scrollbarDummyElement.remove(),oldScrollbarSize.x===newScrollbarSize.x&&oldScrollbarSize.y===newScrollbarSize.y||FRAMEWORK.each(INSTANCES(),(function(){INSTANCES(this)&&INSTANCES(this).update("zoom")}))),windowWidth=newW,windowHeight=newH,windowDpr=newDPR}};FRAMEWORK(window).on("resize",onResize)}function differenceIsBiggerThanOne(valOne,valTwo){var absValOne=abs(valOne),absValTwo=abs(valTwo);return!(absValOne===absValTwo||absValOne+1===absValTwo||absValOne-1===absValTwo)}function getWindowDPR(){var dDPI=window.screen.deviceXDPI||0,sDPI=window.screen.logicalXDPI||1;return window.devicePixelRatio||dDPI/sDPI}}()}function OverlayScrollbarsAutoUpdateLoop(globals){var _loopID,_base=this,_inArray=FRAMEWORK.inArray,_getNow=COMPATIBILITY.now,_strAutoUpdate="autoUpdate",_strAutoUpdateInterval=_strAutoUpdate+"Interval",_strLength=LEXICON.l,_loopingInstances=[],_loopingInstancesIntervalCache=[],_loopIsActive=!1,_loopIntervalDefault=33,_loopInterval=_loopIntervalDefault,_loopTimeOld=_getNow(),loop=function(){if(_loopingInstances[_strLength]>0&&_loopIsActive){_loopID=COMPATIBILITY.rAF()((function(){loop()}));var lowestInterval,instance,instanceOptions,instanceAutoUpdateAllowed,instanceAutoUpdateInterval,now,timeNew=_getNow(),timeDelta=timeNew-_loopTimeOld;if(timeDelta>_loopInterval){_loopTimeOld=timeNew-timeDelta%_loopInterval,lowestInterval=_loopIntervalDefault;for(var i=0;i<_loopingInstances[_strLength];i++)(instance=_loopingInstances[i])!==undefined&&(instanceAutoUpdateAllowed=(instanceOptions=instance.options())[_strAutoUpdate],instanceAutoUpdateInterval=MATH.max(1,instanceOptions[_strAutoUpdateInterval]),now=_getNow(),(!0===instanceAutoUpdateAllowed||null===instanceAutoUpdateAllowed)&&now-_loopingInstancesIntervalCache[i]>instanceAutoUpdateInterval&&(instance.update("auto"),_loopingInstancesIntervalCache[i]=new Date(now+=instanceAutoUpdateInterval)),lowestInterval=MATH.max(1,MATH.min(lowestInterval,instanceAutoUpdateInterval)));_loopInterval=lowestInterval}}else _loopInterval=_loopIntervalDefault};_base.add=function(instance){-1===_inArray(instance,_loopingInstances)&&(_loopingInstances.push(instance),_loopingInstancesIntervalCache.push(_getNow()),_loopingInstances[_strLength]>0&&!_loopIsActive&&(_loopIsActive=!0,globals.autoUpdateLoop=_loopIsActive,loop()))},_base.remove=function(instance){var index=_inArray(instance,_loopingInstances);index>-1&&(_loopingInstancesIntervalCache.splice(index,1),_loopingInstances.splice(index,1),0===_loopingInstances[_strLength]&&_loopIsActive&&(_loopIsActive=!1,globals.autoUpdateLoop=_loopIsActive,_loopID!==undefined&&(COMPATIBILITY.cAF()(_loopID),_loopID=-1)))}}function OverlayScrollbarsInstance(pluginTargetElement,options,extensions,globals,autoUpdateLoop){var type=COMPATIBILITY.type,inArray=FRAMEWORK.inArray,each=FRAMEWORK.each,_base=new _plugin,_frameworkProto=FRAMEWORK[LEXICON.p];if(isHTMLElement(pluginTargetElement)){if(INSTANCES(pluginTargetElement)){var inst=INSTANCES(pluginTargetElement);return inst.options(options),inst}var _nativeScrollbarIsOverlaid,_overlayScrollbarDummySize,_rtlScrollBehavior,_autoUpdateRecommended,_msieVersion,_nativeScrollbarStyling,_cssCalc,_nativeScrollbarSize,_supportTransition,_supportTransform,_supportPassiveEvents,_supportResizeObserver,_supportMutationObserver,_initialized,_destroyed,_isTextarea,_isBody,_documentMixed,_domExists,_isBorderBox,_sizeAutoObserverAdded,_paddingX,_paddingY,_borderX,_borderY,_marginX,_marginY,_isRTL,_sleeping,_defaultOptions,_currentOptions,_currentPreparedOptions,_lastUpdateTime,_swallowedUpdateTimeout,_windowElement,_documentElement,_htmlElement,_bodyElement,_targetElement,_hostElement,_sizeAutoObserverElement,_sizeObserverElement,_paddingElement,_viewportElement,_contentElement,_contentArrangeElement,_contentGlueElement,_textareaCoverElement,_scrollbarCornerElement,_scrollbarHorizontalElement,_scrollbarHorizontalTrackElement,_scrollbarHorizontalHandleElement,_scrollbarVerticalElement,_scrollbarVerticalTrackElement,_scrollbarVerticalHandleElement,_windowElementNative,_documentElementNative,_targetElementNative,_hostElementNative,_sizeAutoObserverElementNative,_sizeObserverElementNative,_paddingElementNative,_viewportElementNative,_contentElementNative,_hostSizeCache,_contentScrollSizeCache,_arrangeContentSizeCache,_hasOverflowCache,_hideOverflowCache,_widthAutoCache,_heightAutoCache,_cssBoxSizingCache,_cssPaddingCache,_cssBorderCache,_cssMarginCache,_cssDirectionCache,_cssDirectionDetectedCache,_paddingAbsoluteCache,_clipAlwaysCache,_contentGlueSizeCache,_overflowBehaviorCache,_overflowAmountCache,_ignoreOverlayScrollbarHidingCache,_autoUpdateCache,_sizeAutoCapableCache,_contentElementScrollSizeChangeDetectedCache,_hostElementSizeChangeDetectedCache,_scrollbarsVisibilityCache,_scrollbarsAutoHideCache,_scrollbarsClickScrollingCache,_scrollbarsDragScrollingCache,_resizeCache,_normalizeRTLCache,_classNameCache,_oldClassName,_textareaAutoWrappingCache,_textareaInfoCache,_textareaSizeCache,_textareaDynHeightCache,_textareaDynWidthCache,_bodyMinSizeCache,_mutationObserverHost,_mutationObserverContent,_mutationObserverHostCallback,_mutationObserverContentCallback,_mutationObserversConnected,_textareaHasFocus,_scrollbarsAutoHideTimeoutId,_scrollbarsAutoHideMoveTimeoutId,_scrollbarsAutoHideDelay,_scrollbarsAutoHideNever,_scrollbarsAutoHideScroll,_scrollbarsAutoHideMove,_scrollbarsAutoHideLeave,_scrollbarsHandleHovered,_scrollbarsHandlesDefineScrollPos,_resizeNone,_resizeBoth,_resizeHorizontal,_resizeVertical,_contentBorderSize={},_scrollHorizontalInfo={},_scrollVerticalInfo={},_viewportSize={},_nativeScrollbarMinSize={},_strMinusHidden="-hidden",_strMarginMinus="margin-",_strPaddingMinus="padding-",_strBorderMinus="border-",_strTop="top",_strRight="right",_strBottom="bottom",_strLeft="left",_strMinMinus="min-",_strMaxMinus="max-",_strWidth="width",_strHeight="height",_strFloat="float",_strEmpty="",_strAuto="auto",_strSync="sync",_strScroll="scroll",_strHundredPercent="100%",_strX="x",_strY="y",_strDot=".",_strSpace=" ",_strScrollbar="scrollbar",_strMinusHorizontal="-horizontal",_strMinusVertical="-vertical",_strScrollLeft=_strScroll+"Left",_strScrollTop=_strScroll+"Top",_strMouseTouchDownEvent="mousedown touchstart",_strMouseTouchUpEvent="mouseup touchend touchcancel",_strMouseTouchMoveEvent="mousemove touchmove",_strMouseEnter="mouseenter",_strMouseLeave="mouseleave",_strKeyDownEvent="keydown",_strKeyUpEvent="keyup",_strSelectStartEvent="selectstart",_strTransitionEndEvent="transitionend webkitTransitionEnd oTransitionEnd",_strResizeObserverProperty="__overlayScrollbarsRO__",_cassNamesPrefix="os-",_classNameHTMLElement=_cassNamesPrefix+"html",_classNameHostElement=_cassNamesPrefix+"host",_classNameHostElementForeign=_classNameHostElement+"-foreign",_classNameHostTextareaElement=_classNameHostElement+"-textarea",_classNameHostScrollbarHorizontalHidden=_classNameHostElement+"-"+_strScrollbar+_strMinusHorizontal+_strMinusHidden,_classNameHostScrollbarVerticalHidden=_classNameHostElement+"-"+_strScrollbar+_strMinusVertical+_strMinusHidden,_classNameHostTransition=_classNameHostElement+"-transition",_classNameHostRTL=_classNameHostElement+"-rtl",_classNameHostResizeDisabled=_classNameHostElement+"-resize-disabled",_classNameHostScrolling=_classNameHostElement+"-scrolling",_classNameHostOverflow=_classNameHostElement+"-overflow",_classNameHostOverflowX=(_classNameHostOverflow=_classNameHostElement+"-overflow")+"-x",_classNameHostOverflowY=_classNameHostOverflow+"-y",_classNameTextareaElement=_cassNamesPrefix+"textarea",_classNameTextareaCoverElement=_classNameTextareaElement+"-cover",_classNamePaddingElement=_cassNamesPrefix+"padding",_classNameViewportElement=_cassNamesPrefix+"viewport",_classNameViewportNativeScrollbarsInvisible=_classNameViewportElement+"-native-scrollbars-invisible",_classNameViewportNativeScrollbarsOverlaid=_classNameViewportElement+"-native-scrollbars-overlaid",_classNameContentElement=_cassNamesPrefix+"content",_classNameContentArrangeElement=_cassNamesPrefix+"content-arrange",_classNameContentGlueElement=_cassNamesPrefix+"content-glue",_classNameSizeAutoObserverElement=_cassNamesPrefix+"size-auto-observer",_classNameResizeObserverElement=_cassNamesPrefix+"resize-observer",_classNameResizeObserverItemElement=_cassNamesPrefix+"resize-observer-item",_classNameResizeObserverItemFinalElement=_classNameResizeObserverItemElement+"-final",_classNameTextInherit=_cassNamesPrefix+"text-inherit",_classNameScrollbar=_cassNamesPrefix+_strScrollbar,_classNameScrollbarTrack=_classNameScrollbar+"-track",_classNameScrollbarTrackOff=_classNameScrollbarTrack+"-off",_classNameScrollbarHandle=_classNameScrollbar+"-handle",_classNameScrollbarHandleOff=_classNameScrollbarHandle+"-off",_classNameScrollbarUnusable=_classNameScrollbar+"-unusable",_classNameScrollbarAutoHidden=_classNameScrollbar+"-"+_strAuto+_strMinusHidden,_classNameScrollbarCorner=_classNameScrollbar+"-corner",_classNameScrollbarCornerResize=_classNameScrollbarCorner+"-resize",_classNameScrollbarCornerResizeB=_classNameScrollbarCornerResize+"-both",_classNameScrollbarCornerResizeH=_classNameScrollbarCornerResize+_strMinusHorizontal,_classNameScrollbarCornerResizeV=_classNameScrollbarCornerResize+_strMinusVertical,_classNameScrollbarHorizontal=_classNameScrollbar+_strMinusHorizontal,_classNameScrollbarVertical=_classNameScrollbar+_strMinusVertical,_classNameDragging=_cassNamesPrefix+"dragging",_classNameThemeNone=_cassNamesPrefix+"theme-none",_classNamesDynamicDestroy=[_classNameViewportNativeScrollbarsInvisible,_classNameViewportNativeScrollbarsOverlaid,_classNameScrollbarTrackOff,_classNameScrollbarHandleOff,_classNameScrollbarUnusable,_classNameScrollbarAutoHidden,_classNameScrollbarCornerResize,_classNameScrollbarCornerResizeB,_classNameScrollbarCornerResizeH,_classNameScrollbarCornerResizeV,_classNameDragging].join(_strSpace),_callbacksInitQeueue=[],_viewportAttrsFromTarget=[LEXICON.ti],_extensions={},_extensionsPrivateMethods="added removed on contract",_swallowedUpdateHints={},_swallowUpdateLag=42,_updateOnLoadEventName="load",_updateOnLoadElms=[],_updateAutoCache={},_mutationObserverAttrsTextarea=["wrap","cols","rows"],_mutationObserverAttrsHost=[LEXICON.i,LEXICON.c,LEXICON.s,"open"].concat(_viewportAttrsFromTarget),_destroyEvents=[];return _base.sleep=function(){_sleeping=!0},_base.update=function(force){var attrsChanged,contentSizeC,doUpdateAuto,mutHost,mutContent;if(!_destroyed)return type(force)==TYPES.s?force===_strAuto?(attrsChanged=meaningfulAttrsChanged(),contentSizeC=updateAutoContentSizeChanged(),(doUpdateAuto=attrsChanged||contentSizeC)&&update({_contentSizeChanged:contentSizeC,_changedOptions:_initialized?undefined:_currentPreparedOptions})):force===_strSync?_mutationObserversConnected?(mutHost=_mutationObserverHostCallback(_mutationObserverHost.takeRecords()),mutContent=_mutationObserverContentCallback(_mutationObserverContent.takeRecords())):mutHost=_base.update(_strAuto):"zoom"===force&&update({_hostSizeChanged:!0,_contentSizeChanged:!0}):(force=_sleeping||force,_sleeping=!1,_base.update(_strSync)&&!force||update({_force:force})),updateElementsOnLoad(),doUpdateAuto||mutHost||mutContent},_base.options=function(newOptions,value){var changedOps,option={};if(FRAMEWORK.isEmptyObject(newOptions)||!FRAMEWORK.isPlainObject(newOptions)){if(type(newOptions)!=TYPES.s)return _currentOptions;if(!(arguments.length>1))return getObjectPropVal(_currentOptions,newOptions);setObjectPropVal(option,newOptions,value),changedOps=setOptions(option)}else changedOps=setOptions(newOptions);FRAMEWORK.isEmptyObject(changedOps)||update({_changedOptions:changedOps})},_base.destroy=function(){if(!_destroyed){for(var extName in autoUpdateLoop.remove(_base),disconnectMutationObservers(),setupResizeObserver(_sizeObserverElement),setupResizeObserver(_sizeAutoObserverElement),_extensions)_base.removeExt(extName);for(;_destroyEvents[LEXICON.l]>0;)_destroyEvents.pop()();setupHostMouseTouchEvents(!0),_contentGlueElement&&remove(_contentGlueElement),_contentArrangeElement&&remove(_contentArrangeElement),_sizeAutoObserverAdded&&remove(_sizeAutoObserverElement),setupScrollbarsDOM(!0),setupScrollbarCornerDOM(!0),setupStructureDOM(!0);for(var i=0;i<_updateOnLoadElms[LEXICON.l];i++)FRAMEWORK(_updateOnLoadElms[i]).off(_updateOnLoadEventName,updateOnLoadCallback);_updateOnLoadElms=undefined,_destroyed=!0,_sleeping=!0,INSTANCES(pluginTargetElement,0),dispatchCallback("onDestroyed")}},_base.scroll=function(coordinates,duration,easing,complete){if(0===arguments.length||coordinates===undefined){var infoX=_scrollHorizontalInfo,infoY=_scrollVerticalInfo,normalizeInvert=_normalizeRTLCache&&_isRTL&&_rtlScrollBehavior.i,normalizeNegate=_normalizeRTLCache&&_isRTL&&_rtlScrollBehavior.n,scrollX=infoX._currentScroll,scrollXRatio=infoX._currentScrollRatio,maxScrollX=infoX._maxScroll;return scrollXRatio=normalizeInvert?1-scrollXRatio:scrollXRatio,scrollX=normalizeInvert?maxScrollX-scrollX:scrollX,maxScrollX*=normalizeNegate?-1:1,{position:{x:scrollX*=normalizeNegate?-1:1,y:infoY._currentScroll},ratio:{x:scrollXRatio,y:infoY._currentScrollRatio},max:{x:maxScrollX,y:infoY._maxScroll},handleOffset:{x:infoX._handleOffset,y:infoY._handleOffset},handleLength:{x:infoX._handleLength,y:infoY._handleLength},handleLengthRatio:{x:infoX._handleLengthRatio,y:infoY._handleLengthRatio},trackLength:{x:infoX._trackLength,y:infoY._trackLength},snappedHandleOffset:{x:infoX._snappedHandleOffset,y:infoY._snappedHandleOffset},isRTL:_isRTL,isRTLNormalized:_normalizeRTLCache}}_base.update(_strSync);var i,doScrollLeft,doScrollTop,animationOptions,settingsAxis,settingsScroll,settingsBlock,settingsMargin,finalElement,normalizeRTL=_normalizeRTLCache,coordinatesXAxisProps=[_strX,_strLeft,"l"],coordinatesYAxisProps=[_strY,_strTop,"t"],coordinatesOperators=["+=","-=","*=","/="],durationIsObject=type(duration)==TYPES.o,completeCallback=durationIsObject?duration.complete:complete,finalScroll={},specialEasing={},strEnd="end",strBegin="begin",strCenter="center",strNearest="nearest",strAlways="always",strNever="never",strIfNeeded="ifneeded",strLength=LEXICON.l,elementObjSettingsAxisValues=[_strX,_strY,"xy","yx"],elementObjSettingsBlockValues=[strBegin,strEnd,strCenter,strNearest],elementObjSettingsScrollValues=[strAlways,strNever,strIfNeeded],coordinatesIsElementObj=coordinates[LEXICON.hOP]("el"),possibleElement=coordinatesIsElementObj?coordinates.el:coordinates,possibleElementIsJQuery=!!(possibleElement instanceof FRAMEWORK||JQUERY)&&possibleElement instanceof JQUERY,possibleElementIsHTMLElement=!possibleElementIsJQuery&&isHTMLElement(possibleElement),updateScrollbarInfos=function(){doScrollLeft&&refreshScrollbarHandleOffset(!0),doScrollTop&&refreshScrollbarHandleOffset(!1)},proxyCompleteCallback=type(completeCallback)!=TYPES.f?undefined:function(){updateScrollbarInfos(),completeCallback()};function checkSettingsStringValue(currValue,allowedValues){for(i=0;i2&&(possibleOperator=rawScroll.substr(0,2),inArray(possibleOperator,coordinatesOperators)>-1&&(operator=possibleOperator)),rawScroll=(rawScroll=operator?rawScroll.substr(2):rawScroll)[strReplace](/min/g,0)[strReplace](//g,(normalizeShortcuts?"-":_strEmpty)+_strHundredPercent)[strReplace](/px/g,_strEmpty)[strReplace](/%/g,mult+maxScroll*(isRTLisX&&_rtlScrollBehavior.n?-1:1)/100)[strReplace](/vw/g,mult+_viewportSize.w)[strReplace](/vh/g,mult+_viewportSize.h),amount=parseToZeroOrNumber(isNaN(rawScroll)?parseToZeroOrNumber(evalFunc(rawScroll),!0).toFixed():rawScroll)):amount=rawScroll,amount!==undefined&&!isNaN(amount)&&type(amount)==TYPES.n){var normalizeIsRTLisX=normalizeRTL&&isRTLisX,operatorCurrScroll=currScroll*(normalizeIsRTLisX&&_rtlScrollBehavior.n?-1:1),invert=normalizeIsRTLisX&&_rtlScrollBehavior.i,negate=normalizeIsRTLisX&&_rtlScrollBehavior.n;switch(operatorCurrScroll=invert?maxScroll-operatorCurrScroll:operatorCurrScroll,operator){case"+=":finalValue=operatorCurrScroll+amount;break;case"-=":finalValue=operatorCurrScroll-amount;break;case"*=":finalValue=operatorCurrScroll*amount;break;case"/=":finalValue=operatorCurrScroll/amount;break;default:finalValue=amount}finalValue=invert?maxScroll-finalValue:finalValue,finalValue*=negate?-1:1,finalValue=isRTLisX&&_rtlScrollBehavior.n?MATH.min(0,MATH.max(maxScroll,finalValue)):MATH.max(0,MATH.min(maxScroll,finalValue))}return finalValue===currScroll?undefined:finalValue}function getPerAxisValue(value,valueInternalType,defaultValue,allowedValues){var valueArrLength,valueArrItem,resultDefault=[defaultValue,defaultValue],valueType=type(value);if(valueType==valueInternalType)value=[value,value];else if(valueType==TYPES.a){if((valueArrLength=value[strLength])>2||valueArrLength<1)value=resultDefault;else for(1===valueArrLength&&(value[1]=defaultValue),i=0;i0){margin=marginType==TYPES.n||marginType==TYPES.b?generateMargin([margin,margin,margin,margin]):marginType==TYPES.a?2===(marginLength=margin[strLength])?generateMargin([margin[0],margin[1],margin[0],margin[1]]):marginLength>=4?generateMargin(margin):marginDefault:marginType==TYPES.o?generateMargin([margin[_strTop],margin[_strRight],margin[_strBottom],margin[_strLeft]]):marginDefault,settingsAxis=checkSettingsStringValue(axis,elementObjSettingsAxisValues)?axis:"xy",settingsScroll=getPerAxisValue(scroll,TYPES.s,strAlways,elementObjSettingsScrollValues),settingsBlock=getPerAxisValue(block,TYPES.s,strBegin,elementObjSettingsBlockValues),settingsMargin=margin;var viewportScroll={l:_scrollHorizontalInfo._currentScroll,t:_scrollVerticalInfo._currentScroll},viewportOffset=_paddingElement.offset(),elementOffset=finalElement.offset(),doNotScroll={x:settingsScroll.x==strNever||settingsAxis==_strY,y:settingsScroll.y==strNever||settingsAxis==_strX};elementOffset[_strTop]-=settingsMargin[0],elementOffset[_strLeft]-=settingsMargin[3];var elementScrollCoordinates={x:MATH.round(elementOffset[_strLeft]-viewportOffset[_strLeft]+viewportScroll.l),y:MATH.round(elementOffset[_strTop]-viewportOffset[_strTop]+viewportScroll.t)};if(_isRTL&&(_rtlScrollBehavior.n||_rtlScrollBehavior.i||(elementScrollCoordinates.x=MATH.round(viewportOffset[_strLeft]-elementOffset[_strLeft]+viewportScroll.l)),_rtlScrollBehavior.n&&normalizeRTL&&(elementScrollCoordinates.x*=-1),_rtlScrollBehavior.i&&normalizeRTL&&(elementScrollCoordinates.x=MATH.round(viewportOffset[_strLeft]-elementOffset[_strLeft]+(_scrollHorizontalInfo._maxScroll-viewportScroll.l)))),settingsBlock.x!=strBegin||settingsBlock.y!=strBegin||settingsScroll.x==strIfNeeded||settingsScroll.y==strIfNeeded||_isRTL){var measuringElm=finalElement[0],rawElementSize=_supportTransform?measuringElm[LEXICON.bCR]():{width:measuringElm[LEXICON.oW],height:measuringElm[LEXICON.oH]},elementSize={w:rawElementSize[_strWidth]+settingsMargin[3]+settingsMargin[1],h:rawElementSize[_strHeight]+settingsMargin[0]+settingsMargin[2]},finalizeBlock=function(isX){var vars=getScrollbarVars(isX),wh=vars._w_h,lt=vars._left_top,xy=vars._x_y,blockIsEnd=settingsBlock[xy]==(isX&&_isRTL?strBegin:strEnd),blockIsCenter=settingsBlock[xy]==strCenter,blockIsNearest=settingsBlock[xy]==strNearest,scrollNever=settingsScroll[xy]==strNever,scrollIfNeeded=settingsScroll[xy]==strIfNeeded,vpSize=_viewportSize[wh],vpOffset=viewportOffset[lt],elSize=elementSize[wh],elOffset=elementOffset[lt],divide=blockIsCenter?2:1,elementCenterOffset=elOffset+elSize/2,viewportCenterOffset=vpOffset+vpSize/2,isInView=elSize<=vpSize&&elOffset>=vpOffset&&elOffset+elSize<=vpOffset+vpSize;scrollNever?doNotScroll[xy]=!0:doNotScroll[xy]||((blockIsNearest||scrollIfNeeded)&&(doNotScroll[xy]=!!scrollIfNeeded&&isInView,blockIsEnd=elSizeviewportCenterOffset:elementCenterOffset0||durationIsObject)?durationIsObject?(duration.complete=proxyCompleteCallback,_viewportElement.animate(finalScroll,duration)):(animationOptions={duration:duration,complete:proxyCompleteCallback},COMPATIBILITY.isA(easing)||FRAMEWORK.isPlainObject(easing)?(specialEasing[_strScrollLeft]=easing[0]||easing.x,specialEasing[_strScrollTop]=easing[1]||easing.y,animationOptions.specialEasing=specialEasing):animationOptions.easing=easing,_viewportElement.animate(finalScroll,animationOptions)):(doScrollLeft&&_viewportElement[_strScrollLeft](finalScroll[_strScrollLeft]),doScrollTop&&_viewportElement[_strScrollTop](finalScroll[_strScrollTop]),updateScrollbarInfos())},_base.scrollStop=function(param1,param2,param3){return _viewportElement.stop(param1,param2,param3),_base},_base.getElements=function(elementName){var obj={target:_targetElementNative,host:_hostElementNative,padding:_paddingElementNative,viewport:_viewportElementNative,content:_contentElementNative,scrollbarHorizontal:{scrollbar:_scrollbarHorizontalElement[0],track:_scrollbarHorizontalTrackElement[0],handle:_scrollbarHorizontalHandleElement[0]},scrollbarVertical:{scrollbar:_scrollbarVerticalElement[0],track:_scrollbarVerticalTrackElement[0],handle:_scrollbarVerticalHandleElement[0]},scrollbarCorner:_scrollbarCornerElement[0]};return type(elementName)==TYPES.s?getObjectPropVal(obj,elementName):obj},_base.getState=function(stateProperty){function prepare(obj){if(!FRAMEWORK.isPlainObject(obj))return obj;var extended=extendDeep({},obj),changePropertyName=function(from,to){extended[LEXICON.hOP](from)&&(extended[to]=extended[from],delete extended[from])};return changePropertyName("w",_strWidth),changePropertyName("h",_strHeight),delete extended.c,extended}var obj={destroyed:!!prepare(_destroyed),sleeping:!!prepare(_sleeping),autoUpdate:prepare(!_mutationObserversConnected),widthAuto:prepare(_widthAutoCache),heightAuto:prepare(_heightAutoCache),padding:prepare(_cssPaddingCache),overflowAmount:prepare(_overflowAmountCache),hideOverflow:prepare(_hideOverflowCache),hasOverflow:prepare(_hasOverflowCache),contentScrollSize:prepare(_contentScrollSizeCache),viewportSize:prepare(_viewportSize),hostSize:prepare(_hostSizeCache),documentMixed:prepare(_documentMixed)};return type(stateProperty)==TYPES.s?getObjectPropVal(obj,stateProperty):obj},_base.ext=function(extName){var result,privateMethods=_extensionsPrivateMethods.split(" "),i=0;if(type(extName)==TYPES.s){if(_extensions[LEXICON.hOP](extName))for(result=extendDeep({},_extensions[extName]);i9||!_autoUpdateRecommended){targetElement.prepend(generateDiv(_classNameResizeObserverElement,generateDiv({c:_classNameResizeObserverItemElement,dir:"ltr"},generateDiv(_classNameResizeObserverItemElement,generateDiv(_classNameResizeObserverItemFinalElement))+generateDiv(_classNameResizeObserverItemElement,generateDiv({c:_classNameResizeObserverItemFinalElement,style:"width: 200%; height: 200%"})))));var isDirty,rAFId,currWidth,currHeight,observerElement=targetElement[0][strChildNodes][0][strChildNodes][0],shrinkElement=FRAMEWORK(observerElement[strChildNodes][1]),expandElement=FRAMEWORK(observerElement[strChildNodes][0]),expandElementChild=FRAMEWORK(expandElement[0][strChildNodes][0]),widthCache=observerElement[LEXICON.oW],heightCache=observerElement[LEXICON.oH],factor=2,nativeScrollbarSize=globals.nativeScrollbarSize,reset=function(){expandElement[_strScrollLeft](constScroll)[_strScrollTop](constScroll),shrinkElement[_strScrollLeft](constScroll)[_strScrollTop](constScroll)},onResized=function(){rAFId=0,isDirty&&(widthCache=currWidth,heightCache=currHeight,callback())},onScroll=function(event){return currWidth=observerElement[LEXICON.oW],currHeight=observerElement[LEXICON.oH],isDirty=currWidth!=widthCache||currHeight!=heightCache,event&&isDirty&&!rAFId?(COMPATIBILITY.cAF()(rAFId),rAFId=COMPATIBILITY.rAF()(onResized)):event||onResized(),reset(),event&&(COMPATIBILITY.prvD(event),COMPATIBILITY.stpP(event)),!1},expandChildCSS={},observerElementCSS={};setTopRightBottomLeft(observerElementCSS,_strEmpty,[-(nativeScrollbarSize.y+1)*factor,nativeScrollbarSize.x*-factor,nativeScrollbarSize.y*-factor,-(nativeScrollbarSize.x+1)*factor]),FRAMEWORK(observerElement).css(observerElementCSS),expandElement.on(_strScroll,onScroll),shrinkElement.on(_strScroll,onScroll),targetElement.on(strAnimationStartEvent,(function(){onScroll(!1)})),expandChildCSS[_strWidth]=constScroll,expandChildCSS[_strHeight]=constScroll,expandElementChild.css(expandChildCSS),reset()}else{var attachEvent=_documentElementNative.attachEvent,isIE=_msieVersion!==undefined;if(attachEvent)targetElement.prepend(generateDiv(_classNameResizeObserverElement)),findFirst(targetElement,_strDot+_classNameResizeObserverElement)[0].attachEvent("onresize",callback);else{var obj=_documentElementNative.createElement(TYPES.o);obj.setAttribute(LEXICON.ti,"-1"),obj.setAttribute(LEXICON.c,_classNameResizeObserverElement),obj.onload=function(){var wnd=this.contentDocument.defaultView;wnd.addEventListener("resize",callback),wnd.document.documentElement.style.display="none"},obj.type="text/html",isIE&&targetElement.prepend(obj),obj.data="about:blank",isIE||targetElement.prepend(obj),targetElement.on(strAnimationStartEvent,callback)}}if(targetElement[0]===_sizeObserverElementNative){var directionChanged=function(){var dir=_hostElement.css("direction"),css={},scrollLeftValue=0,result=!1;return dir!==_cssDirectionDetectedCache&&("ltr"===dir?(css[_strLeft]=0,css[_strRight]=_strAuto,scrollLeftValue=constScroll):(css[_strLeft]=_strAuto,css[_strRight]=0,scrollLeftValue=_rtlScrollBehavior.n?-constScroll:_rtlScrollBehavior.i?0:constScroll),_sizeObserverElement.children().eq(0).css(css),_sizeObserverElement[_strScrollLeft](scrollLeftValue)[_strScrollTop](constScroll),_cssDirectionDetectedCache=dir,result=!0),result};directionChanged(),addDestroyEventListener(targetElement,_strScroll,(function(event){return directionChanged()&&update(),COMPATIBILITY.prvD(event),COMPATIBILITY.stpP(event),!1}))}}else if(_supportResizeObserver){var element,resizeObserverObj=(element=targetElement.contents()[0])[_strResizeObserverProperty];resizeObserverObj&&(resizeObserverObj.disconnect(),delete element[_strResizeObserverProperty])}else remove(targetElement.children(_strDot+_classNameResizeObserverElement).eq(0))}}function createMutationObservers(){if(_supportMutationObserver){var mutationTarget,mutationAttrName,mutationIsClass,oldMutationVal,newClassVal,hostClassNameRegex,contentTimeout,now,sizeAuto,action,mutationObserverContentLag=11,mutationObserver=COMPATIBILITY.mO(),contentLastUpdate=COMPATIBILITY.now();_mutationObserverContentCallback=function(mutations){var doUpdate=!1;return _initialized&&!_sleeping&&(each(mutations,(function(){return!(doUpdate=isUnknownMutation(this))})),doUpdate&&(now=COMPATIBILITY.now(),sizeAuto=_heightAutoCache||_widthAutoCache,action=function(){_destroyed||(contentLastUpdate=now,_isTextarea&&textareaUpdate(),sizeAuto?update():_base.update(_strAuto))},clearTimeout(contentTimeout),mutationObserverContentLag<=0||now-contentLastUpdate>mutationObserverContentLag||!sizeAuto?action():contentTimeout=setTimeout(action,mutationObserverContentLag))),doUpdate},_mutationObserverHost=new mutationObserver(_mutationObserverHostCallback=function(mutations){var mutation,doUpdate=!1,doUpdateForce=!1,mutatedAttrs=[];return _initialized&&!_sleeping&&(each(mutations,(function(){mutationTarget=(mutation=this).target,mutationAttrName=mutation.attributeName,mutationIsClass=mutationAttrName===LEXICON.c,oldMutationVal=mutation.oldValue,newClassVal=mutationTarget.className,_domExists&&mutationIsClass&&!doUpdateForce&&oldMutationVal.indexOf(_classNameHostElementForeign)>-1&&newClassVal.indexOf(_classNameHostElementForeign)<0&&(hostClassNameRegex=createHostClassNameRegExp(!0),_hostElementNative.className=newClassVal.split(_strSpace).concat(oldMutationVal.split(_strSpace).filter((function(name){return name.match(hostClassNameRegex)}))).join(_strSpace),doUpdate=doUpdateForce=!0),doUpdate||(doUpdate=mutationIsClass?hostClassNamesChanged(oldMutationVal,newClassVal):mutationAttrName!==LEXICON.s||oldMutationVal!==mutationTarget[LEXICON.s].cssText),mutatedAttrs.push(mutationAttrName)})),updateViewportAttrsFromTarget(mutatedAttrs),doUpdate&&_base.update(doUpdateForce||_strAuto)),doUpdate}),_mutationObserverContent=new mutationObserver(_mutationObserverContentCallback)}}function connectMutationObservers(){_supportMutationObserver&&!_mutationObserversConnected&&(_mutationObserverHost.observe(_hostElementNative,{attributes:!0,attributeOldValue:!0,attributeFilter:_mutationObserverAttrsHost}),_mutationObserverContent.observe(_isTextarea?_targetElementNative:_contentElementNative,{attributes:!0,attributeOldValue:!0,subtree:!_isTextarea,childList:!_isTextarea,characterData:!_isTextarea,attributeFilter:_isTextarea?_mutationObserverAttrsTextarea:_mutationObserverAttrsHost}),_mutationObserversConnected=!0)}function disconnectMutationObservers(){_supportMutationObserver&&_mutationObserversConnected&&(_mutationObserverHost.disconnect(),_mutationObserverContent.disconnect(),_mutationObserversConnected=!1)}function hostOnResized(){if(!_sleeping){var changed,hostSize={w:_sizeObserverElementNative[LEXICON.sW],h:_sizeObserverElementNative[LEXICON.sH]};changed=checkCache(hostSize,_hostElementSizeChangeDetectedCache),_hostElementSizeChangeDetectedCache=hostSize,changed&&update({_hostSizeChanged:!0})}}function hostOnMouseEnter(){_scrollbarsAutoHideLeave&&refreshScrollbarsAutoHide(!0)}function hostOnMouseLeave(){_scrollbarsAutoHideLeave&&!_bodyElement.hasClass(_classNameDragging)&&refreshScrollbarsAutoHide(!1)}function hostOnMouseMove(){_scrollbarsAutoHideMove&&(refreshScrollbarsAutoHide(!0),clearTimeout(_scrollbarsAutoHideMoveTimeoutId),_scrollbarsAutoHideMoveTimeoutId=setTimeout((function(){_scrollbarsAutoHideMove&&!_destroyed&&refreshScrollbarsAutoHide(!1)}),100))}function documentOnSelectStart(event){return COMPATIBILITY.prvD(event),!1}function updateOnLoadCallback(event){var elm=FRAMEWORK(event.target);eachUpdateOnLoad((function(i,updateOnLoadSelector){elm.is(updateOnLoadSelector)&&update({_contentSizeChanged:!0})}))}function setupHostMouseTouchEvents(destroy){destroy||setupHostMouseTouchEvents(!0),setupResponsiveEventListener(_hostElement,_strMouseTouchMoveEvent.split(_strSpace)[0],hostOnMouseMove,!_scrollbarsAutoHideMove||destroy,!0),setupResponsiveEventListener(_hostElement,[_strMouseEnter,_strMouseLeave],[hostOnMouseEnter,hostOnMouseLeave],!_scrollbarsAutoHideLeave||destroy,!0),_initialized||destroy||_hostElement.one("mouseover",hostOnMouseEnter)}function bodyMinSizeChanged(){var bodyMinSize={};return _isBody&&_contentArrangeElement&&(bodyMinSize.w=parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus+_strWidth)),bodyMinSize.h=parseToZeroOrNumber(_contentArrangeElement.css(_strMinMinus+_strHeight)),bodyMinSize.c=checkCache(bodyMinSize,_bodyMinSizeCache),bodyMinSize.f=!0),_bodyMinSizeCache=bodyMinSize,!!bodyMinSize.c}function hostClassNamesChanged(oldClassNames,newClassNames){var i,regex,currClasses=typeof newClassNames==TYPES.s?newClassNames.split(_strSpace):[],diff=getArrayDifferences(typeof oldClassNames==TYPES.s?oldClassNames.split(_strSpace):[],currClasses),idx=inArray(_classNameThemeNone,diff);if(idx>-1&&diff.splice(idx,1),diff[LEXICON.l]>0)for(regex=createHostClassNameRegExp(!0,!0),i=0;i0}}function isSizeAffectingCSSProperty(propertyName){if(!_initialized)return!0;var flexGrow="flex-grow",flexShrink="flex-shrink",flexBasis="flex-basis",affectingPropsX=[_strWidth,_strMinMinus+_strWidth,_strMaxMinus+_strWidth,_strMarginMinus+_strLeft,_strMarginMinus+_strRight,_strLeft,_strRight,"font-weight","word-spacing",flexGrow,flexShrink,flexBasis],affectingPropsXContentBox=[_strPaddingMinus+_strLeft,_strPaddingMinus+_strRight,_strBorderMinus+_strLeft+_strWidth,_strBorderMinus+_strRight+_strWidth],affectingPropsY=[_strHeight,_strMinMinus+_strHeight,_strMaxMinus+_strHeight,_strMarginMinus+_strTop,_strMarginMinus+_strBottom,_strTop,_strBottom,"line-height",flexGrow,flexShrink,flexBasis],affectingPropsYContentBox=[_strPaddingMinus+_strTop,_strPaddingMinus+_strBottom,_strBorderMinus+_strTop+_strWidth,_strBorderMinus+_strBottom+_strWidth],_strS="s",_strVS="v-s",checkX=_overflowBehaviorCache.x===_strS||_overflowBehaviorCache.x===_strVS,sizeIsAffected=!1,checkPropertyName=function(arr,name){for(var i=0;i-1){var targetAttr=_targetElement.attr(attr);type(targetAttr)==TYPES.s?_viewportElement.attr(attr,targetAttr):_viewportElement.removeAttr(attr)}}))}function textareaUpdate(){if(!_sleeping){var origWidth,width,origHeight,height,wrapAttrOff=!_textareaAutoWrappingCache,minWidth=_viewportSize.w,minHeight=_viewportSize.h,css={},doMeasure=_widthAutoCache||wrapAttrOff;return css[_strMinMinus+_strWidth]=_strEmpty,css[_strMinMinus+_strHeight]=_strEmpty,css[_strWidth]=_strAuto,_targetElement.css(css),origWidth=_targetElementNative[LEXICON.oW],width=doMeasure?MATH.max(origWidth,_targetElementNative[LEXICON.sW]-1):1,css[_strWidth]=_widthAutoCache?_strAuto:_strHundredPercent,css[_strMinMinus+_strWidth]=_strHundredPercent,css[_strHeight]=_strAuto,_targetElement.css(css),origHeight=_targetElementNative[LEXICON.oH],height=MATH.max(origHeight,_targetElementNative[LEXICON.sH]-1),css[_strWidth]=width,css[_strHeight]=height,_textareaCoverElement.css(css),css[_strMinMinus+_strWidth]=minWidth,css[_strMinMinus+_strHeight]=minHeight,_targetElement.css(css),{_originalWidth:origWidth,_originalHeight:origHeight,_dynamicWidth:width,_dynamicHeight:height}}}function update(updateHints){clearTimeout(_swallowedUpdateTimeout),updateHints=updateHints||{},_swallowedUpdateHints._hostSizeChanged|=updateHints._hostSizeChanged,_swallowedUpdateHints._contentSizeChanged|=updateHints._contentSizeChanged,_swallowedUpdateHints._force|=updateHints._force;var displayIsHidden,now=COMPATIBILITY.now(),hostSizeChanged=!!_swallowedUpdateHints._hostSizeChanged,contentSizeChanged=!!_swallowedUpdateHints._contentSizeChanged,force=!!_swallowedUpdateHints._force,changedOptions=updateHints._changedOptions,swallow=_swallowUpdateLag>0&&_initialized&&!_destroyed&&!force&&!changedOptions&&now-_lastUpdateTime<_swallowUpdateLag&&!_heightAutoCache&&!_widthAutoCache;if(swallow&&(_swallowedUpdateTimeout=setTimeout(update,_swallowUpdateLag)),!(_destroyed||swallow||_sleeping&&!changedOptions||_initialized&&!force&&(displayIsHidden=_hostElement.is(":hidden"))||"inline"===_hostElement.css("display"))){_lastUpdateTime=now,_swallowedUpdateHints={},!_nativeScrollbarStyling||_nativeScrollbarIsOverlaid.x&&_nativeScrollbarIsOverlaid.y?_nativeScrollbarSize=extendDeep({},globals.nativeScrollbarSize):(_nativeScrollbarSize.x=0,_nativeScrollbarSize.y=0),_nativeScrollbarMinSize={x:3*(_nativeScrollbarSize.x+(_nativeScrollbarIsOverlaid.x?0:3)),y:3*(_nativeScrollbarSize.y+(_nativeScrollbarIsOverlaid.y?0:3))},changedOptions=changedOptions||{};var checkCacheAutoForce=function(){return checkCache.apply(this,[].slice.call(arguments).concat([force]))},currScroll={x:_viewportElement[_strScrollLeft](),y:_viewportElement[_strScrollTop]()},currentPreparedOptionsScrollbars=_currentPreparedOptions.scrollbars,currentPreparedOptionsTextarea=_currentPreparedOptions.textarea,scrollbarsVisibility=currentPreparedOptionsScrollbars.visibility,scrollbarsVisibilityChanged=checkCacheAutoForce(scrollbarsVisibility,_scrollbarsVisibilityCache),scrollbarsAutoHide=currentPreparedOptionsScrollbars.autoHide,scrollbarsAutoHideChanged=checkCacheAutoForce(scrollbarsAutoHide,_scrollbarsAutoHideCache),scrollbarsClickScrolling=currentPreparedOptionsScrollbars.clickScrolling,scrollbarsClickScrollingChanged=checkCacheAutoForce(scrollbarsClickScrolling,_scrollbarsClickScrollingCache),scrollbarsDragScrolling=currentPreparedOptionsScrollbars.dragScrolling,scrollbarsDragScrollingChanged=checkCacheAutoForce(scrollbarsDragScrolling,_scrollbarsDragScrollingCache),className=_currentPreparedOptions.className,classNameChanged=checkCacheAutoForce(className,_classNameCache),resize=_currentPreparedOptions.resize,resizeChanged=checkCacheAutoForce(resize,_resizeCache)&&!_isBody,paddingAbsolute=_currentPreparedOptions.paddingAbsolute,paddingAbsoluteChanged=checkCacheAutoForce(paddingAbsolute,_paddingAbsoluteCache),clipAlways=_currentPreparedOptions.clipAlways,clipAlwaysChanged=checkCacheAutoForce(clipAlways,_clipAlwaysCache),sizeAutoCapable=_currentPreparedOptions.sizeAutoCapable&&!_isBody,sizeAutoCapableChanged=checkCacheAutoForce(sizeAutoCapable,_sizeAutoCapableCache),ignoreOverlayScrollbarHiding=_currentPreparedOptions.nativeScrollbarsOverlaid.showNativeScrollbars,ignoreOverlayScrollbarHidingChanged=checkCacheAutoForce(ignoreOverlayScrollbarHiding,_ignoreOverlayScrollbarHidingCache),autoUpdate=_currentPreparedOptions.autoUpdate,autoUpdateChanged=checkCacheAutoForce(autoUpdate,_autoUpdateCache),overflowBehavior=_currentPreparedOptions.overflowBehavior,overflowBehaviorChanged=checkCacheAutoForce(overflowBehavior,_overflowBehaviorCache,force),textareaDynWidth=currentPreparedOptionsTextarea.dynWidth,textareaDynWidthChanged=checkCacheAutoForce(_textareaDynWidthCache,textareaDynWidth),textareaDynHeight=currentPreparedOptionsTextarea.dynHeight,textareaDynHeightChanged=checkCacheAutoForce(_textareaDynHeightCache,textareaDynHeight);if(_scrollbarsAutoHideNever="n"===scrollbarsAutoHide,_scrollbarsAutoHideScroll="s"===scrollbarsAutoHide,_scrollbarsAutoHideMove="m"===scrollbarsAutoHide,_scrollbarsAutoHideLeave="l"===scrollbarsAutoHide,_scrollbarsAutoHideDelay=currentPreparedOptionsScrollbars.autoHideDelay,_oldClassName=_classNameCache,_resizeNone="n"===resize,_resizeBoth="b"===resize,_resizeHorizontal="h"===resize,_resizeVertical="v"===resize,_normalizeRTLCache=_currentPreparedOptions.normalizeRTL,ignoreOverlayScrollbarHiding=ignoreOverlayScrollbarHiding&&_nativeScrollbarIsOverlaid.x&&_nativeScrollbarIsOverlaid.y,_scrollbarsVisibilityCache=scrollbarsVisibility,_scrollbarsAutoHideCache=scrollbarsAutoHide,_scrollbarsClickScrollingCache=scrollbarsClickScrolling,_scrollbarsDragScrollingCache=scrollbarsDragScrolling,_classNameCache=className,_resizeCache=resize,_paddingAbsoluteCache=paddingAbsolute,_clipAlwaysCache=clipAlways,_sizeAutoCapableCache=sizeAutoCapable,_ignoreOverlayScrollbarHidingCache=ignoreOverlayScrollbarHiding,_autoUpdateCache=autoUpdate,_overflowBehaviorCache=extendDeep({},overflowBehavior),_textareaDynWidthCache=textareaDynWidth,_textareaDynHeightCache=textareaDynHeight,_hasOverflowCache=_hasOverflowCache||{x:!1,y:!1},classNameChanged&&(removeClass(_hostElement,_oldClassName+_strSpace+_classNameThemeNone),addClass(_hostElement,className!==undefined&&null!==className&&className.length>0?className:_classNameThemeNone)),autoUpdateChanged&&(!0===autoUpdate||null===autoUpdate&&_autoUpdateRecommended?(disconnectMutationObservers(),autoUpdateLoop.add(_base)):(autoUpdateLoop.remove(_base),connectMutationObservers())),sizeAutoCapableChanged)if(sizeAutoCapable)if(_contentGlueElement?_contentGlueElement.show():(_contentGlueElement=FRAMEWORK(generateDiv(_classNameContentGlueElement)),_paddingElement.before(_contentGlueElement)),_sizeAutoObserverAdded)_sizeAutoObserverElement.show();else{_sizeAutoObserverElement=FRAMEWORK(generateDiv(_classNameSizeAutoObserverElement)),_sizeAutoObserverElementNative=_sizeAutoObserverElement[0],_contentGlueElement.before(_sizeAutoObserverElement);var oldSize={w:-1,h:-1};setupResizeObserver(_sizeAutoObserverElement,(function(){var newSize={w:_sizeAutoObserverElementNative[LEXICON.oW],h:_sizeAutoObserverElementNative[LEXICON.oH]};checkCache(newSize,oldSize)&&(_initialized&&_heightAutoCache&&newSize.h>0||_widthAutoCache&&newSize.w>0||_initialized&&!_heightAutoCache&&0===newSize.h||!_widthAutoCache&&0===newSize.w)&&update(),oldSize=newSize})),_sizeAutoObserverAdded=!0,null!==_cssCalc&&_sizeAutoObserverElement.css(_strHeight,_cssCalc+"(100% + 1px)")}else _sizeAutoObserverAdded&&_sizeAutoObserverElement.hide(),_contentGlueElement&&_contentGlueElement.hide();force&&(_sizeObserverElement.find("*").trigger(_strScroll),_sizeAutoObserverAdded&&_sizeAutoObserverElement.find("*").trigger(_strScroll)),displayIsHidden=displayIsHidden===undefined?_hostElement.is(":hidden"):displayIsHidden;var sizeAutoObserverElementBCRect,textareaAutoWrapping=!!_isTextarea&&"off"!==_targetElement.attr("wrap"),textareaAutoWrappingChanged=checkCacheAutoForce(textareaAutoWrapping,_textareaAutoWrappingCache),cssDirection=_hostElement.css("direction"),cssDirectionChanged=checkCacheAutoForce(cssDirection,_cssDirectionCache),boxSizing=_hostElement.css("box-sizing"),boxSizingChanged=checkCacheAutoForce(boxSizing,_cssBoxSizingCache),padding=getTopRightBottomLeftHost(_strPaddingMinus);try{sizeAutoObserverElementBCRect=_sizeAutoObserverAdded?_sizeAutoObserverElementNative[LEXICON.bCR]():null}catch(ex){return}_isBorderBox="border-box"===boxSizing;var isRTLLeft=(_isRTL="rtl"===cssDirection)?_strLeft:_strRight,isRTLRight=_isRTL?_strRight:_strLeft,widthAutoResizeDetection=!1,widthAutoObserverDetection=!(!_sizeAutoObserverAdded||"none"===_hostElement.css(_strFloat))&&0===MATH.round(sizeAutoObserverElementBCRect.right-sizeAutoObserverElementBCRect.left)&&(!!paddingAbsolute||_hostElementNative[LEXICON.cW]-_paddingX>0);if(sizeAutoCapable&&!widthAutoObserverDetection){var tmpCurrHostWidth=_hostElementNative[LEXICON.oW],tmpCurrContentGlueWidth=_contentGlueElement.css(_strWidth);_contentGlueElement.css(_strWidth,_strAuto);var tmpNewHostWidth=_hostElementNative[LEXICON.oW];_contentGlueElement.css(_strWidth,tmpCurrContentGlueWidth),(widthAutoResizeDetection=tmpCurrHostWidth!==tmpNewHostWidth)||(_contentGlueElement.css(_strWidth,tmpCurrHostWidth+1),tmpNewHostWidth=_hostElementNative[LEXICON.oW],_contentGlueElement.css(_strWidth,tmpCurrContentGlueWidth),widthAutoResizeDetection=tmpCurrHostWidth!==tmpNewHostWidth)}var widthAuto=(widthAutoObserverDetection||widthAutoResizeDetection)&&sizeAutoCapable&&!displayIsHidden,widthAutoChanged=checkCacheAutoForce(widthAuto,_widthAutoCache),wasWidthAuto=!widthAuto&&_widthAutoCache,heightAuto=!(!_sizeAutoObserverAdded||!sizeAutoCapable||displayIsHidden)&&0===MATH.round(sizeAutoObserverElementBCRect.bottom-sizeAutoObserverElementBCRect.top),heightAutoChanged=checkCacheAutoForce(heightAuto,_heightAutoCache),wasHeightAuto=!heightAuto&&_heightAutoCache,border=getTopRightBottomLeftHost(_strBorderMinus,"-"+_strWidth,!(widthAuto&&_isBorderBox||!_isBorderBox),!(heightAuto&&_isBorderBox||!_isBorderBox)),margin=getTopRightBottomLeftHost(_strMarginMinus),contentElementCSS={},contentGlueElementCSS={},getHostSize=function(){return{w:_hostElementNative[LEXICON.cW],h:_hostElementNative[LEXICON.cH]}},getViewportSize=function(){return{w:_paddingElementNative[LEXICON.oW]+MATH.max(0,_contentElementNative[LEXICON.cW]-_contentElementNative[LEXICON.sW]),h:_paddingElementNative[LEXICON.oH]+MATH.max(0,_contentElementNative[LEXICON.cH]-_contentElementNative[LEXICON.sH])}},paddingAbsoluteX=_paddingX=padding.l+padding.r,paddingAbsoluteY=_paddingY=padding.t+padding.b;if(paddingAbsoluteX*=paddingAbsolute?1:0,paddingAbsoluteY*=paddingAbsolute?1:0,padding.c=checkCacheAutoForce(padding,_cssPaddingCache),_borderX=border.l+border.r,_borderY=border.t+border.b,border.c=checkCacheAutoForce(border,_cssBorderCache),_marginX=margin.l+margin.r,_marginY=margin.t+margin.b,margin.c=checkCacheAutoForce(margin,_cssMarginCache),_textareaAutoWrappingCache=textareaAutoWrapping,_cssDirectionCache=cssDirection,_cssBoxSizingCache=boxSizing,_widthAutoCache=widthAuto,_heightAutoCache=heightAuto,_cssPaddingCache=padding,_cssBorderCache=border,_cssMarginCache=margin,cssDirectionChanged&&_sizeAutoObserverAdded&&_sizeAutoObserverElement.css(_strFloat,isRTLRight),padding.c||cssDirectionChanged||paddingAbsoluteChanged||widthAutoChanged||heightAutoChanged||boxSizingChanged||sizeAutoCapableChanged){var paddingElementCSS={},textareaCSS={},paddingValues=[padding.t,padding.r,padding.b,padding.l];setTopRightBottomLeft(contentGlueElementCSS,_strMarginMinus,[-padding.t,-padding.r,-padding.b,-padding.l]),paddingAbsolute?(setTopRightBottomLeft(paddingElementCSS,_strEmpty,paddingValues),setTopRightBottomLeft(_isTextarea?textareaCSS:contentElementCSS,_strPaddingMinus)):(setTopRightBottomLeft(paddingElementCSS,_strEmpty),setTopRightBottomLeft(_isTextarea?textareaCSS:contentElementCSS,_strPaddingMinus,paddingValues)),_paddingElement.css(paddingElementCSS),_targetElement.css(textareaCSS)}_viewportSize=getViewportSize();var textareaSize=!!_isTextarea&&textareaUpdate(),textareaSizeChanged=_isTextarea&&checkCacheAutoForce(textareaSize,_textareaSizeCache),textareaDynOrigSize=_isTextarea&&textareaSize?{w:textareaDynWidth?textareaSize._dynamicWidth:textareaSize._originalWidth,h:textareaDynHeight?textareaSize._dynamicHeight:textareaSize._originalHeight}:{};if(_textareaSizeCache=textareaSize,heightAuto&&(heightAutoChanged||paddingAbsoluteChanged||boxSizingChanged||padding.c||border.c)?contentElementCSS[_strHeight]=_strAuto:(heightAutoChanged||paddingAbsoluteChanged)&&(contentElementCSS[_strHeight]=_strHundredPercent),widthAuto&&(widthAutoChanged||paddingAbsoluteChanged||boxSizingChanged||padding.c||border.c||cssDirectionChanged)?(contentElementCSS[_strWidth]=_strAuto,contentGlueElementCSS[_strMaxMinus+_strWidth]=_strHundredPercent):(widthAutoChanged||paddingAbsoluteChanged)&&(contentElementCSS[_strWidth]=_strHundredPercent,contentElementCSS[_strFloat]=_strEmpty,contentGlueElementCSS[_strMaxMinus+_strWidth]=_strEmpty),widthAuto?(contentGlueElementCSS[_strWidth]=_strAuto,contentElementCSS[_strWidth]=VENDORS._cssPropertyValue(_strWidth,"max-content intrinsic")||_strAuto,contentElementCSS[_strFloat]=isRTLRight):contentGlueElementCSS[_strWidth]=_strEmpty,contentGlueElementCSS[_strHeight]=heightAuto?textareaDynOrigSize.h||_contentElementNative[LEXICON.cH]:_strEmpty,sizeAutoCapable&&_contentGlueElement.css(contentGlueElementCSS),_contentElement.css(contentElementCSS),contentElementCSS={},contentGlueElementCSS={},hostSizeChanged||contentSizeChanged||textareaSizeChanged||cssDirectionChanged||boxSizingChanged||paddingAbsoluteChanged||widthAutoChanged||widthAuto||heightAutoChanged||heightAuto||ignoreOverlayScrollbarHidingChanged||overflowBehaviorChanged||clipAlwaysChanged||resizeChanged||scrollbarsVisibilityChanged||scrollbarsAutoHideChanged||scrollbarsDragScrollingChanged||scrollbarsClickScrollingChanged||textareaDynWidthChanged||textareaDynHeightChanged||textareaAutoWrappingChanged){var strOverflow="overflow",strOverflowX=strOverflow+"-x",strOverflowY=strOverflow+"-y",strHidden="hidden",strVisible="visible";if(!_nativeScrollbarStyling){var viewportElementResetCSS={},resetXTmp=_hasOverflowCache.y&&_hideOverflowCache.ys&&!ignoreOverlayScrollbarHiding?_nativeScrollbarIsOverlaid.y?_viewportElement.css(isRTLLeft):-_nativeScrollbarSize.y:0,resetBottomTmp=_hasOverflowCache.x&&_hideOverflowCache.xs&&!ignoreOverlayScrollbarHiding?_nativeScrollbarIsOverlaid.x?_viewportElement.css(_strBottom):-_nativeScrollbarSize.x:0;setTopRightBottomLeft(viewportElementResetCSS,_strEmpty),_viewportElement.css(viewportElementResetCSS)}var contentMeasureElement=getContentMeasureElement(),contentSize={w:textareaDynOrigSize.w||contentMeasureElement[LEXICON.cW],h:textareaDynOrigSize.h||contentMeasureElement[LEXICON.cH]},scrollSize={w:contentMeasureElement[LEXICON.sW],h:contentMeasureElement[LEXICON.sH]};_nativeScrollbarStyling||(viewportElementResetCSS[_strBottom]=wasHeightAuto?_strEmpty:resetBottomTmp,viewportElementResetCSS[isRTLLeft]=wasWidthAuto?_strEmpty:resetXTmp,_viewportElement.css(viewportElementResetCSS)),_viewportSize=getViewportSize();var hostSize=getHostSize(),hostAbsoluteRectSize={w:hostSize.w-_marginX-_borderX-(_isBorderBox?0:_paddingX),h:hostSize.h-_marginY-_borderY-(_isBorderBox?0:_paddingY)},contentGlueSize={w:MATH.max((widthAuto?contentSize.w:scrollSize.w)+paddingAbsoluteX,hostAbsoluteRectSize.w),h:MATH.max((heightAuto?contentSize.h:scrollSize.h)+paddingAbsoluteY,hostAbsoluteRectSize.h)};if(contentGlueSize.c=checkCacheAutoForce(contentGlueSize,_contentGlueSizeCache),_contentGlueSizeCache=contentGlueSize,sizeAutoCapable){(contentGlueSize.c||heightAuto||widthAuto)&&(contentGlueElementCSS[_strWidth]=contentGlueSize.w,contentGlueElementCSS[_strHeight]=contentGlueSize.h,_isTextarea||(contentSize={w:contentMeasureElement[LEXICON.cW],h:contentMeasureElement[LEXICON.cH]}));var textareaCoverCSS={},setContentGlueElementCSSfunction=function(horizontal){var scrollbarVars=getScrollbarVars(horizontal),wh=scrollbarVars._w_h,strWH=scrollbarVars._width_height,autoSize=horizontal?widthAuto:heightAuto,borderSize=horizontal?_borderX:_borderY,paddingSize=horizontal?_paddingX:_paddingY,marginSize=horizontal?_marginX:_marginY,viewportSize=_viewportSize[wh]-borderSize-marginSize-(_isBorderBox?0:paddingSize);(!autoSize||!autoSize&&border.c)&&(contentGlueElementCSS[strWH]=hostAbsoluteRectSize[wh]-1),!(autoSize&&contentSize[wh]0&&(contentGlueElementCSS[strWH]=MATH.max(1,contentGlueElementCSS[strWH]))};setContentGlueElementCSSfunction(!0),setContentGlueElementCSSfunction(!1),_isTextarea&&_textareaCoverElement.css(textareaCoverCSS),_contentGlueElement.css(contentGlueElementCSS)}widthAuto&&(contentElementCSS[_strWidth]=_strHundredPercent),!widthAuto||_isBorderBox||_mutationObserversConnected||(contentElementCSS[_strFloat]="none"),_contentElement.css(contentElementCSS),contentElementCSS={};var contentScrollSize={w:contentMeasureElement[LEXICON.sW],h:contentMeasureElement[LEXICON.sH]};contentScrollSize.c=contentSizeChanged=checkCacheAutoForce(contentScrollSize,_contentScrollSizeCache),_contentScrollSizeCache=contentScrollSize,_viewportSize=getViewportSize(),hostSizeChanged=checkCacheAutoForce(hostSize=getHostSize(),_hostSizeCache),_hostSizeCache=hostSize;var hideOverflowForceTextarea=_isTextarea&&(0===_viewportSize.w||0===_viewportSize.h),previousOverflowAmount=_overflowAmountCache,overflowBehaviorIsVS={},overflowBehaviorIsVH={},overflowBehaviorIsS={},overflowAmount={},hasOverflow={},hideOverflow={},canScroll={},viewportRect=_paddingElementNative[LEXICON.bCR](),setOverflowVariables=function(horizontal){var scrollbarVars=getScrollbarVars(horizontal),xyI=getScrollbarVars(!horizontal)._x_y,xy=scrollbarVars._x_y,wh=scrollbarVars._w_h,widthHeight=scrollbarVars._width_height,scrollMax=_strScroll+scrollbarVars._Left_Top+"Max",fractionalOverflowAmount=viewportRect[widthHeight]?MATH.abs(viewportRect[widthHeight]-_viewportSize[wh]):0,checkFractionalOverflowAmount=previousOverflowAmount&&previousOverflowAmount[xy]>0&&0===_viewportElementNative[scrollMax];overflowBehaviorIsVS[xy]="v-s"===overflowBehavior[xy],overflowBehaviorIsVH[xy]="v-h"===overflowBehavior[xy],overflowBehaviorIsS[xy]="s"===overflowBehavior[xy],overflowAmount[xy]=MATH.max(0,MATH.round(100*(contentScrollSize[wh]-_viewportSize[wh]))/100),overflowAmount[xy]*=hideOverflowForceTextarea||checkFractionalOverflowAmount&&fractionalOverflowAmount>0&&fractionalOverflowAmount<1?0:1,hasOverflow[xy]=overflowAmount[xy]>0,hideOverflow[xy]=overflowBehaviorIsVS[xy]||overflowBehaviorIsVH[xy]?hasOverflow[xyI]&&!overflowBehaviorIsVS[xyI]&&!overflowBehaviorIsVH[xyI]:hasOverflow[xy],hideOverflow[xy+"s"]=!!hideOverflow[xy]&&(overflowBehaviorIsS[xy]||overflowBehaviorIsVS[xy]),canScroll[xy]=hasOverflow[xy]&&hideOverflow[xy+"s"]};if(setOverflowVariables(!0),setOverflowVariables(!1),overflowAmount.c=checkCacheAutoForce(overflowAmount,_overflowAmountCache),_overflowAmountCache=overflowAmount,hasOverflow.c=checkCacheAutoForce(hasOverflow,_hasOverflowCache),_hasOverflowCache=hasOverflow,hideOverflow.c=checkCacheAutoForce(hideOverflow,_hideOverflowCache),_hideOverflowCache=hideOverflow,_nativeScrollbarIsOverlaid.x||_nativeScrollbarIsOverlaid.y){var setContentElementCSS,borderDesign="px solid transparent",contentArrangeElementCSS={},arrangeContent={},arrangeChanged=force;(hasOverflow.x||hasOverflow.y)&&(arrangeContent.w=_nativeScrollbarIsOverlaid.y&&hasOverflow.y?contentScrollSize.w+_overlayScrollbarDummySize.y:_strEmpty,arrangeContent.h=_nativeScrollbarIsOverlaid.x&&hasOverflow.x?contentScrollSize.h+_overlayScrollbarDummySize.x:_strEmpty,arrangeChanged=checkCacheAutoForce(arrangeContent,_arrangeContentSizeCache),_arrangeContentSizeCache=arrangeContent),(hasOverflow.c||hideOverflow.c||contentScrollSize.c||cssDirectionChanged||widthAutoChanged||heightAutoChanged||widthAuto||heightAuto||ignoreOverlayScrollbarHidingChanged)&&(contentElementCSS[_strMarginMinus+isRTLRight]=contentElementCSS[_strBorderMinus+isRTLRight]=_strEmpty,setContentElementCSS=function(horizontal){var scrollbarVars=getScrollbarVars(horizontal),scrollbarVarsInverted=getScrollbarVars(!horizontal),xy=scrollbarVars._x_y,strDirection=horizontal?_strBottom:isRTLLeft,invertedAutoSize=horizontal?heightAuto:widthAuto;_nativeScrollbarIsOverlaid[xy]&&hasOverflow[xy]&&hideOverflow[xy+"s"]?(contentElementCSS[_strMarginMinus+strDirection]=invertedAutoSize?ignoreOverlayScrollbarHiding?_strEmpty:_overlayScrollbarDummySize[xy]:_strEmpty,contentElementCSS[_strBorderMinus+strDirection]=horizontal&&invertedAutoSize||ignoreOverlayScrollbarHiding?_strEmpty:_overlayScrollbarDummySize[xy]+borderDesign):(arrangeContent[scrollbarVarsInverted._w_h]=contentElementCSS[_strMarginMinus+strDirection]=contentElementCSS[_strBorderMinus+strDirection]=_strEmpty,arrangeChanged=!0)},_nativeScrollbarStyling?addRemoveClass(_viewportElement,_classNameViewportNativeScrollbarsInvisible,!ignoreOverlayScrollbarHiding):(setContentElementCSS(!0),setContentElementCSS(!1))),ignoreOverlayScrollbarHiding&&(arrangeContent.w=arrangeContent.h=_strEmpty,arrangeChanged=!0),arrangeChanged&&!_nativeScrollbarStyling&&(contentArrangeElementCSS[_strWidth]=hideOverflow.y?arrangeContent.w:_strEmpty,contentArrangeElementCSS[_strHeight]=hideOverflow.x?arrangeContent.h:_strEmpty,_contentArrangeElement||(_contentArrangeElement=FRAMEWORK(generateDiv(_classNameContentArrangeElement)),_viewportElement.prepend(_contentArrangeElement)),_contentArrangeElement.css(contentArrangeElementCSS)),_contentElement.css(contentElementCSS)}var setViewportCSS,viewportElementCSS={};if(paddingElementCSS={},(hostSizeChanged||hasOverflow.c||hideOverflow.c||contentScrollSize.c||overflowBehaviorChanged||boxSizingChanged||ignoreOverlayScrollbarHidingChanged||cssDirectionChanged||clipAlwaysChanged||heightAutoChanged)&&(viewportElementCSS[isRTLRight]=_strEmpty,(setViewportCSS=function(horizontal){var scrollbarVars=getScrollbarVars(horizontal),scrollbarVarsInverted=getScrollbarVars(!horizontal),xy=scrollbarVars._x_y,XY=scrollbarVars._X_Y,strDirection=horizontal?_strBottom:isRTLLeft,reset=function(){viewportElementCSS[strDirection]=_strEmpty,_contentBorderSize[scrollbarVarsInverted._w_h]=0};hasOverflow[xy]&&hideOverflow[xy+"s"]?(viewportElementCSS[strOverflow+XY]=_strScroll,ignoreOverlayScrollbarHiding||_nativeScrollbarStyling?reset():(viewportElementCSS[strDirection]=-(_nativeScrollbarIsOverlaid[xy]?_overlayScrollbarDummySize[xy]:_nativeScrollbarSize[xy]),_contentBorderSize[scrollbarVarsInverted._w_h]=_nativeScrollbarIsOverlaid[xy]?_overlayScrollbarDummySize[scrollbarVarsInverted._x_y]:0)):(viewportElementCSS[strOverflow+XY]=_strEmpty,reset())})(!0),setViewportCSS(!1),!_nativeScrollbarStyling&&(_viewportSize.h<_nativeScrollbarMinSize.x||_viewportSize.w<_nativeScrollbarMinSize.y)&&(hasOverflow.x&&hideOverflow.x&&!_nativeScrollbarIsOverlaid.x||hasOverflow.y&&hideOverflow.y&&!_nativeScrollbarIsOverlaid.y)?(viewportElementCSS[_strPaddingMinus+_strTop]=_nativeScrollbarMinSize.x,viewportElementCSS[_strMarginMinus+_strTop]=-_nativeScrollbarMinSize.x,viewportElementCSS[_strPaddingMinus+isRTLRight]=_nativeScrollbarMinSize.y,viewportElementCSS[_strMarginMinus+isRTLRight]=-_nativeScrollbarMinSize.y):viewportElementCSS[_strPaddingMinus+_strTop]=viewportElementCSS[_strMarginMinus+_strTop]=viewportElementCSS[_strPaddingMinus+isRTLRight]=viewportElementCSS[_strMarginMinus+isRTLRight]=_strEmpty,viewportElementCSS[_strPaddingMinus+isRTLLeft]=viewportElementCSS[_strMarginMinus+isRTLLeft]=_strEmpty,hasOverflow.x&&hideOverflow.x||hasOverflow.y&&hideOverflow.y||hideOverflowForceTextarea?_isTextarea&&hideOverflowForceTextarea&&(paddingElementCSS[strOverflowX]=paddingElementCSS[strOverflowY]=strHidden):(!clipAlways||overflowBehaviorIsVH.x||overflowBehaviorIsVS.x||overflowBehaviorIsVH.y||overflowBehaviorIsVS.y)&&(_isTextarea&&(paddingElementCSS[strOverflowX]=paddingElementCSS[strOverflowY]=_strEmpty),viewportElementCSS[strOverflowX]=viewportElementCSS[strOverflowY]=strVisible),_paddingElement.css(paddingElementCSS),_viewportElement.css(viewportElementCSS),viewportElementCSS={},(hasOverflow.c||boxSizingChanged||widthAutoChanged||heightAutoChanged)&&(!_nativeScrollbarIsOverlaid.x||!_nativeScrollbarIsOverlaid.y))){var elementStyle=_contentElementNative[LEXICON.s];elementStyle.webkitTransform="scale(1)",elementStyle.display="run-in",_contentElementNative[LEXICON.oH],elementStyle.display=_strEmpty,elementStyle.webkitTransform=_strEmpty}if(contentElementCSS={},cssDirectionChanged||widthAutoChanged||heightAutoChanged)if(_isRTL&&widthAuto){var floatTmp=_contentElement.css(_strFloat),posLeftWithoutFloat=MATH.round(_contentElement.css(_strFloat,_strEmpty).css(_strLeft,_strEmpty).position().left);_contentElement.css(_strFloat,floatTmp),posLeftWithoutFloat!==MATH.round(_contentElement.position().left)&&(contentElementCSS[_strLeft]=posLeftWithoutFloat)}else contentElementCSS[_strLeft]=_strEmpty;if(_contentElement.css(contentElementCSS),_isTextarea&&contentSizeChanged){var textareaInfo=getTextareaInfo();if(textareaInfo){var textareaRowsChanged=_textareaInfoCache===undefined||textareaInfo._rows!==_textareaInfoCache._rows,cursorRow=textareaInfo._cursorRow,cursorCol=textareaInfo._cursorColumn,widestRow=textareaInfo._widestRow,lastRow=textareaInfo._rows,lastCol=textareaInfo._columns,cursorIsLastPosition=textareaInfo._cursorPosition>=textareaInfo._cursorMax&&_textareaHasFocus,textareaScrollAmount={x:textareaAutoWrapping||cursorCol!==lastCol||cursorRow!==widestRow?-1:_overflowAmountCache.x,y:(textareaAutoWrapping?cursorIsLastPosition||textareaRowsChanged&&previousOverflowAmount&&currScroll.y===previousOverflowAmount.y:(cursorIsLastPosition||textareaRowsChanged)&&cursorRow===lastRow)?_overflowAmountCache.y:-1};currScroll.x=textareaScrollAmount.x>-1?_isRTL&&_normalizeRTLCache&&_rtlScrollBehavior.i?0:textareaScrollAmount.x:currScroll.x,currScroll.y=textareaScrollAmount.y>-1?textareaScrollAmount.y:currScroll.y}_textareaInfoCache=textareaInfo}_isRTL&&_rtlScrollBehavior.i&&_nativeScrollbarIsOverlaid.y&&hasOverflow.x&&_normalizeRTLCache&&(currScroll.x+=_contentBorderSize.w||0),widthAuto&&_hostElement[_strScrollLeft](0),heightAuto&&_hostElement[_strScrollTop](0),_viewportElement[_strScrollLeft](currScroll.x)[_strScrollTop](currScroll.y);var scrollbarsVisibilityVisible="v"===scrollbarsVisibility,scrollbarsVisibilityHidden="h"===scrollbarsVisibility,scrollbarsVisibilityAuto="a"===scrollbarsVisibility,refreshScrollbarsVisibility=function(showX,showY){showY=showY===undefined?showX:showY,refreshScrollbarAppearance(!0,showX,canScroll.x),refreshScrollbarAppearance(!1,showY,canScroll.y)};addRemoveClass(_hostElement,_classNameHostOverflow,hideOverflow.x||hideOverflow.y),addRemoveClass(_hostElement,_classNameHostOverflowX,hideOverflow.x),addRemoveClass(_hostElement,_classNameHostOverflowY,hideOverflow.y),cssDirectionChanged&&!_isBody&&addRemoveClass(_hostElement,_classNameHostRTL,_isRTL),_isBody&&addClass(_hostElement,_classNameHostResizeDisabled),resizeChanged&&(addRemoveClass(_hostElement,_classNameHostResizeDisabled,_resizeNone),addRemoveClass(_scrollbarCornerElement,_classNameScrollbarCornerResize,!_resizeNone),addRemoveClass(_scrollbarCornerElement,_classNameScrollbarCornerResizeB,_resizeBoth),addRemoveClass(_scrollbarCornerElement,_classNameScrollbarCornerResizeH,_resizeHorizontal),addRemoveClass(_scrollbarCornerElement,_classNameScrollbarCornerResizeV,_resizeVertical)),(scrollbarsVisibilityChanged||overflowBehaviorChanged||hideOverflow.c||hasOverflow.c||ignoreOverlayScrollbarHidingChanged)&&(ignoreOverlayScrollbarHiding?ignoreOverlayScrollbarHidingChanged&&(removeClass(_hostElement,_classNameHostScrolling),ignoreOverlayScrollbarHiding&&refreshScrollbarsVisibility(!1)):scrollbarsVisibilityAuto?refreshScrollbarsVisibility(canScroll.x,canScroll.y):scrollbarsVisibilityVisible?refreshScrollbarsVisibility(!0):scrollbarsVisibilityHidden&&refreshScrollbarsVisibility(!1)),(scrollbarsAutoHideChanged||ignoreOverlayScrollbarHidingChanged)&&(setupHostMouseTouchEvents(!_scrollbarsAutoHideLeave&&!_scrollbarsAutoHideMove),refreshScrollbarsAutoHide(_scrollbarsAutoHideNever,!_scrollbarsAutoHideNever)),(hostSizeChanged||overflowAmount.c||heightAutoChanged||widthAutoChanged||resizeChanged||boxSizingChanged||paddingAbsoluteChanged||ignoreOverlayScrollbarHidingChanged||cssDirectionChanged)&&(refreshScrollbarHandleLength(!0),refreshScrollbarHandleOffset(!0),refreshScrollbarHandleLength(!1),refreshScrollbarHandleOffset(!1)),scrollbarsClickScrollingChanged&&refreshScrollbarsInteractive(!0,scrollbarsClickScrolling),scrollbarsDragScrollingChanged&&refreshScrollbarsInteractive(!1,scrollbarsDragScrolling),dispatchCallback("onDirectionChanged",{isRTL:_isRTL,dir:cssDirection},cssDirectionChanged),dispatchCallback("onHostSizeChanged",{width:_hostSizeCache.w,height:_hostSizeCache.h},hostSizeChanged),dispatchCallback("onContentSizeChanged",{width:_contentScrollSizeCache.w,height:_contentScrollSizeCache.h},contentSizeChanged),dispatchCallback("onOverflowChanged",{x:hasOverflow.x,y:hasOverflow.y,xScrollable:hideOverflow.xs,yScrollable:hideOverflow.ys,clipped:hideOverflow.x||hideOverflow.y},hasOverflow.c||hideOverflow.c),dispatchCallback("onOverflowAmountChanged",{x:overflowAmount.x,y:overflowAmount.y},overflowAmount.c)}_isBody&&_bodyMinSizeCache&&(_hasOverflowCache.c||_bodyMinSizeCache.c)&&(_bodyMinSizeCache.f||bodyMinSizeChanged(),_nativeScrollbarIsOverlaid.y&&_hasOverflowCache.x&&_contentElement.css(_strMinMinus+_strWidth,_bodyMinSizeCache.w+_overlayScrollbarDummySize.y),_nativeScrollbarIsOverlaid.x&&_hasOverflowCache.y&&_contentElement.css(_strMinMinus+_strHeight,_bodyMinSizeCache.h+_overlayScrollbarDummySize.x),_bodyMinSizeCache.c=!1),_initialized&&changedOptions.updateOnLoad&&updateElementsOnLoad(),dispatchCallback("onUpdated",{forced:force})}}function updateElementsOnLoad(){_isTextarea||eachUpdateOnLoad((function(i,updateOnLoadSelector){_contentElement.find(updateOnLoadSelector).each((function(i,el){COMPATIBILITY.inA(el,_updateOnLoadElms)<0&&(_updateOnLoadElms.push(el),FRAMEWORK(el).off(_updateOnLoadEventName,updateOnLoadCallback).on(_updateOnLoadEventName,updateOnLoadCallback))}))}))}function setOptions(newOptions){var validatedOpts=_pluginsOptions._validate(newOptions,_pluginsOptions._template,!0,_currentOptions);return _currentOptions=extendDeep({},_currentOptions,validatedOpts._default),_currentPreparedOptions=extendDeep({},_currentPreparedOptions,validatedOpts._prepared),validatedOpts._prepared}function setupStructureDOM(destroy){var strParent="parent",classNameResizeObserverHost="os-resize-observer-host",classNameTextareaElementFull=_classNameTextareaElement+_strSpace+_classNameTextInherit,textareaClass=_isTextarea?_strSpace+_classNameTextInherit:_strEmpty,adoptAttrs=_currentPreparedOptions.textarea.inheritedAttrs,adoptAttrsMap={},applyAdoptedAttrs=function(){var applyAdoptedAttrsElm=destroy?_targetElement:_hostElement;each(adoptAttrsMap,(function(key,value){type(value)==TYPES.s&&(key==LEXICON.c?applyAdoptedAttrsElm.addClass(value):applyAdoptedAttrsElm.attr(key,value))}))},hostElementClassNames=[_classNameHostElement,_classNameHostElementForeign,_classNameHostTextareaElement,_classNameHostResizeDisabled,_classNameHostRTL,_classNameHostScrollbarHorizontalHidden,_classNameHostScrollbarVerticalHidden,_classNameHostTransition,_classNameHostScrolling,_classNameHostOverflow,_classNameHostOverflowX,_classNameHostOverflowY,_classNameThemeNone,_classNameTextareaElement,_classNameTextInherit,_classNameCache].join(_strSpace),hostElementCSS={};_hostElement=_hostElement||(_isTextarea?_domExists?_targetElement[strParent]()[strParent]()[strParent]()[strParent]():FRAMEWORK(generateDiv(_classNameHostTextareaElement)):_targetElement),_contentElement=_contentElement||selectOrGenerateDivByClass(_classNameContentElement+textareaClass),_viewportElement=_viewportElement||selectOrGenerateDivByClass(_classNameViewportElement+textareaClass),_paddingElement=_paddingElement||selectOrGenerateDivByClass(_classNamePaddingElement+textareaClass),_sizeObserverElement=_sizeObserverElement||selectOrGenerateDivByClass(classNameResizeObserverHost),_textareaCoverElement=_textareaCoverElement||(_isTextarea?selectOrGenerateDivByClass(_classNameTextareaCoverElement):undefined),_domExists&&addClass(_hostElement,_classNameHostElementForeign),destroy&&removeClass(_hostElement,hostElementClassNames),adoptAttrs=type(adoptAttrs)==TYPES.s?adoptAttrs.split(_strSpace):adoptAttrs,COMPATIBILITY.isA(adoptAttrs)&&_isTextarea&&each(adoptAttrs,(function(i,v){type(v)==TYPES.s&&(adoptAttrsMap[v]=destroy?_hostElement.attr(v):_targetElement.attr(v))})),destroy?(_domExists&&_initialized?(_sizeObserverElement.children().remove(),each([_paddingElement,_viewportElement,_contentElement,_textareaCoverElement],(function(i,elm){elm&&removeClass(elm.removeAttr(LEXICON.s),_classNamesDynamicDestroy)})),addClass(_hostElement,_isTextarea?_classNameHostTextareaElement:_classNameHostElement)):(remove(_sizeObserverElement),_contentElement.contents().unwrap().unwrap().unwrap(),_isTextarea&&(_targetElement.unwrap(),remove(_hostElement),remove(_textareaCoverElement),applyAdoptedAttrs())),_isTextarea&&_targetElement.removeAttr(LEXICON.s),_isBody&&removeClass(_htmlElement,_classNameHTMLElement)):(_isTextarea&&(_currentPreparedOptions.sizeAutoCapable||(hostElementCSS[_strWidth]=_targetElement.css(_strWidth),hostElementCSS[_strHeight]=_targetElement.css(_strHeight)),_domExists||_targetElement.addClass(_classNameTextInherit).wrap(_hostElement),_hostElement=_targetElement[strParent]().css(hostElementCSS)),_domExists||(addClass(_targetElement,_isTextarea?classNameTextareaElementFull:_classNameHostElement),_hostElement.wrapInner(_contentElement).wrapInner(_viewportElement).wrapInner(_paddingElement).prepend(_sizeObserverElement),_contentElement=findFirst(_hostElement,_strDot+_classNameContentElement),_viewportElement=findFirst(_hostElement,_strDot+_classNameViewportElement),_paddingElement=findFirst(_hostElement,_strDot+_classNamePaddingElement),_isTextarea&&(_contentElement.prepend(_textareaCoverElement),applyAdoptedAttrs())),_nativeScrollbarStyling&&addClass(_viewportElement,_classNameViewportNativeScrollbarsInvisible),_nativeScrollbarIsOverlaid.x&&_nativeScrollbarIsOverlaid.y&&addClass(_viewportElement,_classNameViewportNativeScrollbarsOverlaid),_isBody&&addClass(_htmlElement,_classNameHTMLElement),_sizeObserverElementNative=_sizeObserverElement[0],_hostElementNative=_hostElement[0],_paddingElementNative=_paddingElement[0],_viewportElementNative=_viewportElement[0],_contentElementNative=_contentElement[0],updateViewportAttrsFromTarget())}function setupStructureEvents(){var textareaUpdateIntervalID,scrollStopTimeoutId,textareaKeyDownRestrictedKeyCodes=[112,113,114,115,116,117,118,119,120,121,123,33,34,37,38,39,40,16,17,18,19,20,144],textareaKeyDownKeyCodesList=[],scrollStopDelay=175,strFocus="focus";function updateTextarea(doClearInterval){textareaUpdate(),_base.update(_strAuto),doClearInterval&&_autoUpdateRecommended&&clearInterval(textareaUpdateIntervalID)}function textareaOnScroll(event){return _targetElement[_strScrollLeft](_rtlScrollBehavior.i&&_normalizeRTLCache?9999999:0),_targetElement[_strScrollTop](0),COMPATIBILITY.prvD(event),COMPATIBILITY.stpP(event),!1}function textareaOnDrop(event){setTimeout((function(){_destroyed||updateTextarea()}),50)}function textareaOnFocus(){_textareaHasFocus=!0,addClass(_hostElement,strFocus)}function textareaOnFocusout(){_textareaHasFocus=!1,textareaKeyDownKeyCodesList=[],removeClass(_hostElement,strFocus),updateTextarea(!0)}function textareaOnKeyDown(event){var keyCode=event.keyCode;inArray(keyCode,textareaKeyDownRestrictedKeyCodes)<0&&(textareaKeyDownKeyCodesList[LEXICON.l]||(updateTextarea(),textareaUpdateIntervalID=setInterval(updateTextarea,1e3/60)),inArray(keyCode,textareaKeyDownKeyCodesList)<0&&textareaKeyDownKeyCodesList.push(keyCode))}function textareaOnKeyUp(event){var keyCode=event.keyCode,index=inArray(keyCode,textareaKeyDownKeyCodesList);inArray(keyCode,textareaKeyDownRestrictedKeyCodes)<0&&(index>-1&&textareaKeyDownKeyCodesList.splice(index,1),textareaKeyDownKeyCodesList[LEXICON.l]||updateTextarea(!0))}function contentOnTransitionEnd(event){!0!==_autoUpdateCache&&isSizeAffectingCSSProperty((event=event.originalEvent||event).propertyName)&&_base.update(_strAuto)}function viewportOnScroll(event){_sleeping||(scrollStopTimeoutId!==undefined?clearTimeout(scrollStopTimeoutId):((_scrollbarsAutoHideScroll||_scrollbarsAutoHideMove)&&refreshScrollbarsAutoHide(!0),nativeOverlayScrollbarsAreActive()||addClass(_hostElement,_classNameHostScrolling),dispatchCallback("onScrollStart",event)),_scrollbarsHandlesDefineScrollPos||(refreshScrollbarHandleOffset(!0),refreshScrollbarHandleOffset(!1)),dispatchCallback("onScroll",event),scrollStopTimeoutId=setTimeout((function(){_destroyed||(clearTimeout(scrollStopTimeoutId),scrollStopTimeoutId=undefined,(_scrollbarsAutoHideScroll||_scrollbarsAutoHideMove)&&refreshScrollbarsAutoHide(!1),nativeOverlayScrollbarsAreActive()||removeClass(_hostElement,_classNameHostScrolling),dispatchCallback("onScrollStop",event))}),scrollStopDelay))}_isTextarea?(_msieVersion>9||!_autoUpdateRecommended?addDestroyEventListener(_targetElement,"input",updateTextarea):addDestroyEventListener(_targetElement,[_strKeyDownEvent,_strKeyUpEvent],[textareaOnKeyDown,textareaOnKeyUp]),addDestroyEventListener(_targetElement,[_strScroll,"drop",strFocus,strFocus+"out"],[textareaOnScroll,textareaOnDrop,textareaOnFocus,textareaOnFocusout])):addDestroyEventListener(_contentElement,_strTransitionEndEvent,contentOnTransitionEnd),addDestroyEventListener(_viewportElement,_strScroll,viewportOnScroll,!0)}function setupScrollbarsDOM(destroy){var horizontalElements,verticalElements,selectOrGenerateScrollbarDOM=function(isHorizontal){var scrollbar=selectOrGenerateDivByClass(_classNameScrollbar+_strSpace+(isHorizontal?_classNameScrollbarHorizontal:_classNameScrollbarVertical),!0),track=selectOrGenerateDivByClass(_classNameScrollbarTrack,scrollbar),handle=selectOrGenerateDivByClass(_classNameScrollbarHandle,scrollbar);return _domExists||destroy||(scrollbar.append(track),track.append(handle)),{_scrollbar:scrollbar,_track:track,_handle:handle}};function resetScrollbarDOM(isHorizontal){var scrollbarVars=getScrollbarVars(isHorizontal),scrollbar=scrollbarVars._scrollbar,track=scrollbarVars._track,handle=scrollbarVars._handle;_domExists&&_initialized?each([scrollbar,track,handle],(function(i,elm){removeClass(elm.removeAttr(LEXICON.s),_classNamesDynamicDestroy)})):remove(scrollbar||selectOrGenerateScrollbarDOM(isHorizontal)._scrollbar)}destroy?(resetScrollbarDOM(!0),resetScrollbarDOM()):(horizontalElements=selectOrGenerateScrollbarDOM(!0),verticalElements=selectOrGenerateScrollbarDOM(),_scrollbarHorizontalElement=horizontalElements._scrollbar,_scrollbarHorizontalTrackElement=horizontalElements._track,_scrollbarHorizontalHandleElement=horizontalElements._handle,_scrollbarVerticalElement=verticalElements._scrollbar,_scrollbarVerticalTrackElement=verticalElements._track,_scrollbarVerticalHandleElement=verticalElements._handle,_domExists||(_paddingElement.after(_scrollbarVerticalElement),_paddingElement.after(_scrollbarHorizontalElement)))}function setupScrollbarEvents(isHorizontal){var trackTimeout,mouseDownScroll,mouseDownOffset,mouseDownInvertedScale,scrollbarVars=getScrollbarVars(isHorizontal),scrollbarVarsInfo=scrollbarVars._info,insideIFrame=_windowElementNative.top!==_windowElementNative,xy=scrollbarVars._x_y,XY=scrollbarVars._X_Y,scroll=_strScroll+scrollbarVars._Left_Top,strActive="active",strSnapHandle="snapHandle",strClickEvent="click",scrollDurationFactor=1,increaseDecreaseScrollAmountKeyCodes=[16,17];function getPointerPosition(event){return _msieVersion&&insideIFrame?event["screen"+XY]:COMPATIBILITY.page(event)[xy]}function getPreparedScrollbarsOption(name){return _currentPreparedOptions.scrollbars[name]}function increaseTrackScrollAmount(){scrollDurationFactor=.5}function decreaseTrackScrollAmount(){scrollDurationFactor=1}function stopClickEventPropagation(event){COMPATIBILITY.stpP(event)}function documentKeyDown(event){inArray(event.keyCode,increaseDecreaseScrollAmountKeyCodes)>-1&&increaseTrackScrollAmount()}function documentKeyUp(event){inArray(event.keyCode,increaseDecreaseScrollAmountKeyCodes)>-1&&decreaseTrackScrollAmount()}function onMouseTouchDownContinue(event){var isTouchEvent=(event.originalEvent||event).touches!==undefined;return!(_sleeping||_destroyed||nativeOverlayScrollbarsAreActive()||!_scrollbarsDragScrollingCache||isTouchEvent&&!getPreparedScrollbarsOption("touchSupport"))&&(1===COMPATIBILITY.mBtn(event)||isTouchEvent)}function documentDragMove(event){if(onMouseTouchDownContinue(event)){var trackLength=scrollbarVarsInfo._trackLength,handleLength=scrollbarVarsInfo._handleLength,scrollDelta=scrollbarVarsInfo._maxScroll*((getPointerPosition(event)-mouseDownOffset)*mouseDownInvertedScale/(trackLength-handleLength));scrollDelta=isFinite(scrollDelta)?scrollDelta:0,_isRTL&&isHorizontal&&!_rtlScrollBehavior.i&&(scrollDelta*=-1),_viewportElement[scroll](MATH.round(mouseDownScroll+scrollDelta)),_scrollbarsHandlesDefineScrollPos&&refreshScrollbarHandleOffset(isHorizontal,mouseDownScroll+scrollDelta),_supportPassiveEvents||COMPATIBILITY.prvD(event)}else documentMouseTouchUp(event)}function documentMouseTouchUp(event){if(event=event||event.originalEvent,setupResponsiveEventListener(_documentElement,[_strMouseTouchMoveEvent,_strMouseTouchUpEvent,_strKeyDownEvent,_strKeyUpEvent,_strSelectStartEvent],[documentDragMove,documentMouseTouchUp,documentKeyDown,documentKeyUp,documentOnSelectStart],!0),COMPATIBILITY.rAF()((function(){setupResponsiveEventListener(_documentElement,strClickEvent,stopClickEventPropagation,!0,{_capture:!0})})),_scrollbarsHandlesDefineScrollPos&&refreshScrollbarHandleOffset(isHorizontal,!0),_scrollbarsHandlesDefineScrollPos=!1,removeClass(_bodyElement,_classNameDragging),removeClass(scrollbarVars._handle,strActive),removeClass(scrollbarVars._track,strActive),removeClass(scrollbarVars._scrollbar,strActive),mouseDownScroll=undefined,mouseDownOffset=undefined,mouseDownInvertedScale=1,decreaseTrackScrollAmount(),trackTimeout!==undefined&&(_base.scrollStop(),clearTimeout(trackTimeout),trackTimeout=undefined),event){var rect=_hostElementNative[LEXICON.bCR]();event.clientX>=rect.left&&event.clientX<=rect.right&&event.clientY>=rect.top&&event.clientY<=rect.bottom||hostOnMouseLeave(),(_scrollbarsAutoHideScroll||_scrollbarsAutoHideMove)&&refreshScrollbarsAutoHide(!1)}}function onHandleMouseTouchDown(event){onMouseTouchDownContinue(event)&&onHandleMouseTouchDownAction(event)}function onHandleMouseTouchDownAction(event){mouseDownScroll=_viewportElement[scroll](),mouseDownScroll=isNaN(mouseDownScroll)?0:mouseDownScroll,(_isRTL&&isHorizontal&&!_rtlScrollBehavior.n||!_isRTL)&&(mouseDownScroll=mouseDownScroll<0?0:mouseDownScroll),mouseDownInvertedScale=getHostElementInvertedScale()[xy],mouseDownOffset=getPointerPosition(event),_scrollbarsHandlesDefineScrollPos=!getPreparedScrollbarsOption(strSnapHandle),addClass(_bodyElement,_classNameDragging),addClass(scrollbarVars._handle,strActive),addClass(scrollbarVars._scrollbar,strActive),setupResponsiveEventListener(_documentElement,[_strMouseTouchMoveEvent,_strMouseTouchUpEvent,_strSelectStartEvent],[documentDragMove,documentMouseTouchUp,documentOnSelectStart]),COMPATIBILITY.rAF()((function(){setupResponsiveEventListener(_documentElement,strClickEvent,stopClickEventPropagation,!1,{_capture:!0})})),!_msieVersion&&_documentMixed||COMPATIBILITY.prvD(event),COMPATIBILITY.stpP(event)}function onTrackMouseTouchDown(event){if(onMouseTouchDownContinue(event)){var decreaseScroll,handleToViewportRatio=scrollbarVars._info._handleLength/Math.round(MATH.min(1,_viewportSize[scrollbarVars._w_h]/_contentScrollSizeCache[scrollbarVars._w_h])*scrollbarVars._info._trackLength),scrollDistance=MATH.round(_viewportSize[scrollbarVars._w_h]*handleToViewportRatio),scrollBaseDuration=270*handleToViewportRatio,scrollFirstIterationDelay=400*handleToViewportRatio,trackOffset=scrollbarVars._track.offset()[scrollbarVars._left_top],ctrlKey=event.ctrlKey,instantScroll=event.shiftKey,instantScrollTransition=instantScroll&&ctrlKey,isFirstIteration=!0,easing="linear",scrollActionFinsished=function(transition){_scrollbarsHandlesDefineScrollPos&&refreshScrollbarHandleOffset(isHorizontal,transition)},scrollActionInstantFinished=function(){scrollActionFinsished(),onHandleMouseTouchDownAction(event)},scrollAction=function(){if(!_destroyed){var mouseOffset=(mouseDownOffset-trackOffset)*mouseDownInvertedScale,handleOffset=scrollbarVarsInfo._handleOffset,trackLength=scrollbarVarsInfo._trackLength,handleLength=scrollbarVarsInfo._handleLength,scrollRange=scrollbarVarsInfo._maxScroll,currScroll=scrollbarVarsInfo._currentScroll,scrollDuration=scrollBaseDuration*scrollDurationFactor,timeoutDelay=isFirstIteration?MATH.max(scrollFirstIterationDelay,scrollDuration):scrollDuration,instantScrollPosition=scrollRange*((mouseOffset-handleLength/2)/(trackLength-handleLength)),rtlIsNormal=_isRTL&&isHorizontal&&(!_rtlScrollBehavior.i&&!_rtlScrollBehavior.n||_normalizeRTLCache),decreaseScrollCondition=rtlIsNormal?handleOffsetmouseOffset,scrollObj={},animationObj={easing:easing,step:function(now){_scrollbarsHandlesDefineScrollPos&&(_viewportElement[scroll](now),refreshScrollbarHandleOffset(isHorizontal,now))}};instantScrollPosition=isFinite(instantScrollPosition)?instantScrollPosition:0,instantScrollPosition=_isRTL&&isHorizontal&&!_rtlScrollBehavior.i?scrollRange-instantScrollPosition:instantScrollPosition,instantScroll?(_viewportElement[scroll](instantScrollPosition),instantScrollTransition?(instantScrollPosition=_viewportElement[scroll](),_viewportElement[scroll](currScroll),instantScrollPosition=rtlIsNormal&&_rtlScrollBehavior.i?scrollRange-instantScrollPosition:instantScrollPosition,instantScrollPosition=rtlIsNormal&&_rtlScrollBehavior.n?-instantScrollPosition:instantScrollPosition,scrollObj[xy]=instantScrollPosition,_base.scroll(scrollObj,extendDeep(animationObj,{duration:130,complete:scrollActionInstantFinished}))):scrollActionInstantFinished()):(decreaseScroll=isFirstIteration?decreaseScrollCondition:decreaseScroll,(rtlIsNormal?decreaseScroll?handleOffset+handleLength>=mouseOffset:handleOffset<=mouseOffset:decreaseScroll?handleOffset<=mouseOffset:handleOffset+handleLength>=mouseOffset)?(clearTimeout(trackTimeout),_base.scrollStop(),trackTimeout=undefined,scrollActionFinsished(!0)):(trackTimeout=setTimeout(scrollAction,timeoutDelay),scrollObj[xy]=(decreaseScroll?"-=":"+=")+scrollDistance,_base.scroll(scrollObj,extendDeep(animationObj,{duration:scrollDuration}))),isFirstIteration=!1)}};ctrlKey&&increaseTrackScrollAmount(),mouseDownInvertedScale=getHostElementInvertedScale()[xy],mouseDownOffset=COMPATIBILITY.page(event)[xy],_scrollbarsHandlesDefineScrollPos=!getPreparedScrollbarsOption(strSnapHandle),addClass(_bodyElement,_classNameDragging),addClass(scrollbarVars._track,strActive),addClass(scrollbarVars._scrollbar,strActive),setupResponsiveEventListener(_documentElement,[_strMouseTouchUpEvent,_strKeyDownEvent,_strKeyUpEvent,_strSelectStartEvent],[documentMouseTouchUp,documentKeyDown,documentKeyUp,documentOnSelectStart]),scrollAction(),COMPATIBILITY.prvD(event),COMPATIBILITY.stpP(event)}}function onTrackMouseTouchEnter(event){_scrollbarsHandleHovered=!0,(_scrollbarsAutoHideScroll||_scrollbarsAutoHideMove)&&refreshScrollbarsAutoHide(!0)}function onTrackMouseTouchLeave(event){_scrollbarsHandleHovered=!1,(_scrollbarsAutoHideScroll||_scrollbarsAutoHideMove)&&refreshScrollbarsAutoHide(!1)}function onScrollbarMouseTouchDown(event){COMPATIBILITY.stpP(event)}addDestroyEventListener(scrollbarVars._handle,_strMouseTouchDownEvent,onHandleMouseTouchDown),addDestroyEventListener(scrollbarVars._track,[_strMouseTouchDownEvent,_strMouseEnter,_strMouseLeave],[onTrackMouseTouchDown,onTrackMouseTouchEnter,onTrackMouseTouchLeave]),addDestroyEventListener(scrollbarVars._scrollbar,_strMouseTouchDownEvent,onScrollbarMouseTouchDown),_supportTransition&&addDestroyEventListener(scrollbarVars._scrollbar,_strTransitionEndEvent,(function(event){event.target===scrollbarVars._scrollbar[0]&&(refreshScrollbarHandleLength(isHorizontal),refreshScrollbarHandleOffset(isHorizontal))}))}function refreshScrollbarAppearance(isHorizontal,shallBeVisible,canScroll){var scrollbarElement=isHorizontal?_scrollbarHorizontalElement:_scrollbarVerticalElement;addRemoveClass(_hostElement,isHorizontal?_classNameHostScrollbarHorizontalHidden:_classNameHostScrollbarVerticalHidden,!shallBeVisible),addRemoveClass(scrollbarElement,_classNameScrollbarUnusable,!canScroll)}function refreshScrollbarsAutoHide(shallBeVisible,delayfree){if(clearTimeout(_scrollbarsAutoHideTimeoutId),shallBeVisible)removeClass(_scrollbarHorizontalElement,_classNameScrollbarAutoHidden),removeClass(_scrollbarVerticalElement,_classNameScrollbarAutoHidden);else{var anyActive,strActive="active",hide=function(){_scrollbarsHandleHovered||_destroyed||(!(anyActive=_scrollbarHorizontalHandleElement.hasClass(strActive)||_scrollbarVerticalHandleElement.hasClass(strActive))&&(_scrollbarsAutoHideScroll||_scrollbarsAutoHideMove||_scrollbarsAutoHideLeave)&&addClass(_scrollbarHorizontalElement,_classNameScrollbarAutoHidden),!anyActive&&(_scrollbarsAutoHideScroll||_scrollbarsAutoHideMove||_scrollbarsAutoHideLeave)&&addClass(_scrollbarVerticalElement,_classNameScrollbarAutoHidden))};_scrollbarsAutoHideDelay>0&&!0!==delayfree?_scrollbarsAutoHideTimeoutId=setTimeout(hide,_scrollbarsAutoHideDelay):hide()}}function refreshScrollbarHandleLength(isHorizontal){var handleCSS={},scrollbarVars=getScrollbarVars(isHorizontal),scrollbarVarsInfo=scrollbarVars._info,digit=1e6,handleRatio=MATH.min(1,_viewportSize[scrollbarVars._w_h]/_contentScrollSizeCache[scrollbarVars._w_h]);handleCSS[scrollbarVars._width_height]=MATH.floor(100*handleRatio*digit)/digit+"%",nativeOverlayScrollbarsAreActive()||scrollbarVars._handle.css(handleCSS),scrollbarVarsInfo._handleLength=scrollbarVars._handle[0]["offset"+scrollbarVars._Width_Height],scrollbarVarsInfo._handleLengthRatio=handleRatio}function refreshScrollbarHandleOffset(isHorizontal,scrollOrTransition){var transformOffset,translateValue,transition=type(scrollOrTransition)==TYPES.b,transitionDuration=250,isRTLisHorizontal=_isRTL&&isHorizontal,scrollbarVars=getScrollbarVars(isHorizontal),scrollbarVarsInfo=scrollbarVars._info,strTranslateBrace="translate(",strTransform=VENDORS._cssProperty("transform"),strTransition=VENDORS._cssProperty("transition"),nativeScroll=isHorizontal?_viewportElement[_strScrollLeft]():_viewportElement[_strScrollTop](),currentScroll=scrollOrTransition===undefined||transition?nativeScroll:scrollOrTransition,handleLength=scrollbarVarsInfo._handleLength,trackLength=scrollbarVars._track[0]["offset"+scrollbarVars._Width_Height],handleTrackDiff=trackLength-handleLength,handleCSS={},maxScroll=(_viewportElementNative[_strScroll+scrollbarVars._Width_Height]-_viewportElementNative["client"+scrollbarVars._Width_Height])*(_rtlScrollBehavior.n&&isRTLisHorizontal?-1:1),getScrollRatio=function(base){return isNaN(base/maxScroll)?0:MATH.max(0,MATH.min(1,base/maxScroll))},getHandleOffset=function(scrollRatio){var offset=handleTrackDiff*scrollRatio;return offset=isNaN(offset)?0:offset,offset=isRTLisHorizontal&&!_rtlScrollBehavior.i?trackLength-handleLength-offset:offset,offset=MATH.max(0,offset)},scrollRatio=getScrollRatio(nativeScroll),handleOffset=getHandleOffset(getScrollRatio(currentScroll)),snappedHandleOffset=getHandleOffset(scrollRatio);scrollbarVarsInfo._maxScroll=maxScroll,scrollbarVarsInfo._currentScroll=nativeScroll,scrollbarVarsInfo._currentScrollRatio=scrollRatio,_supportTransform?(transformOffset=isRTLisHorizontal?-(trackLength-handleLength-handleOffset):handleOffset,translateValue=isHorizontal?strTranslateBrace+transformOffset+"px, 0)":strTranslateBrace+"0, "+transformOffset+"px)",handleCSS[strTransform]=translateValue,_supportTransition&&(handleCSS[strTransition]=transition&&MATH.abs(handleOffset-scrollbarVarsInfo._handleOffset)>1?getCSSTransitionString(scrollbarVars._handle)+", "+(strTransform+_strSpace+transitionDuration)+"ms":_strEmpty)):handleCSS[scrollbarVars._left_top]=handleOffset,nativeOverlayScrollbarsAreActive()||(scrollbarVars._handle.css(handleCSS),_supportTransform&&_supportTransition&&transition&&scrollbarVars._handle.one(_strTransitionEndEvent,(function(){_destroyed||scrollbarVars._handle.css(strTransition,_strEmpty)}))),scrollbarVarsInfo._handleOffset=handleOffset,scrollbarVarsInfo._snappedHandleOffset=snappedHandleOffset,scrollbarVarsInfo._trackLength=trackLength}function refreshScrollbarsInteractive(isTrack,value){var action=value?"removeClass":"addClass",element2=isTrack?_scrollbarVerticalTrackElement:_scrollbarVerticalHandleElement,className=isTrack?_classNameScrollbarTrackOff:_classNameScrollbarHandleOff;(isTrack?_scrollbarHorizontalTrackElement:_scrollbarHorizontalHandleElement)[action](className),element2[action](className)}function getScrollbarVars(isHorizontal){return{_width_height:isHorizontal?_strWidth:_strHeight,_Width_Height:isHorizontal?"Width":"Height",_left_top:isHorizontal?_strLeft:_strTop,_Left_Top:isHorizontal?"Left":"Top",_x_y:isHorizontal?_strX:_strY,_X_Y:isHorizontal?"X":"Y",_w_h:isHorizontal?"w":"h",_l_t:isHorizontal?"l":"t",_track:isHorizontal?_scrollbarHorizontalTrackElement:_scrollbarVerticalTrackElement,_handle:isHorizontal?_scrollbarHorizontalHandleElement:_scrollbarVerticalHandleElement,_scrollbar:isHorizontal?_scrollbarHorizontalElement:_scrollbarVerticalElement,_info:isHorizontal?_scrollHorizontalInfo:_scrollVerticalInfo}}function setupScrollbarCornerDOM(destroy){_scrollbarCornerElement=_scrollbarCornerElement||selectOrGenerateDivByClass(_classNameScrollbarCorner,!0),destroy?_domExists&&_initialized?removeClass(_scrollbarCornerElement.removeAttr(LEXICON.s),_classNamesDynamicDestroy):remove(_scrollbarCornerElement):_domExists||_hostElement.append(_scrollbarCornerElement)}function setupScrollbarCornerEvents(){var reconnectMutationObserver,insideIFrame=_windowElementNative.top!==_windowElementNative,mouseDownPosition={},mouseDownSize={},mouseDownInvertedScale={};function documentDragMove(event){if(onMouseTouchDownContinue(event)){var pageOffset=getCoordinates(event),hostElementCSS={};(_resizeHorizontal||_resizeBoth)&&(hostElementCSS[_strWidth]=mouseDownSize.w+(pageOffset.x-mouseDownPosition.x)*mouseDownInvertedScale.x),(_resizeVertical||_resizeBoth)&&(hostElementCSS[_strHeight]=mouseDownSize.h+(pageOffset.y-mouseDownPosition.y)*mouseDownInvertedScale.y),_hostElement.css(hostElementCSS),COMPATIBILITY.stpP(event)}else documentMouseTouchUp(event)}function documentMouseTouchUp(event){var eventIsTrusted=event!==undefined;setupResponsiveEventListener(_documentElement,[_strSelectStartEvent,_strMouseTouchMoveEvent,_strMouseTouchUpEvent],[documentOnSelectStart,documentDragMove,documentMouseTouchUp],!0),removeClass(_bodyElement,_classNameDragging),_scrollbarCornerElement.releaseCapture&&_scrollbarCornerElement.releaseCapture(),eventIsTrusted&&(reconnectMutationObserver&&connectMutationObservers(),_base.update(_strAuto)),reconnectMutationObserver=!1}function onMouseTouchDownContinue(event){var isTouchEvent=(event.originalEvent||event).touches!==undefined;return!_sleeping&&!_destroyed&&(1===COMPATIBILITY.mBtn(event)||isTouchEvent)}function getCoordinates(event){return _msieVersion&&insideIFrame?{x:event.screenX,y:event.screenY}:COMPATIBILITY.page(event)}addDestroyEventListener(_scrollbarCornerElement,_strMouseTouchDownEvent,(function(event){onMouseTouchDownContinue(event)&&!_resizeNone&&(_mutationObserversConnected&&(reconnectMutationObserver=!0,disconnectMutationObservers()),mouseDownPosition=getCoordinates(event),mouseDownSize.w=_hostElementNative[LEXICON.oW]-(_isBorderBox?0:_paddingX),mouseDownSize.h=_hostElementNative[LEXICON.oH]-(_isBorderBox?0:_paddingY),mouseDownInvertedScale=getHostElementInvertedScale(),setupResponsiveEventListener(_documentElement,[_strSelectStartEvent,_strMouseTouchMoveEvent,_strMouseTouchUpEvent],[documentOnSelectStart,documentDragMove,documentMouseTouchUp]),addClass(_bodyElement,_classNameDragging),_scrollbarCornerElement.setCapture&&_scrollbarCornerElement.setCapture(),COMPATIBILITY.prvD(event),COMPATIBILITY.stpP(event))}))}function dispatchCallback(name,args,dependent){if(!1!==dependent)if(_initialized){var ext,callback=_currentPreparedOptions.callbacks[name],extensionOnName=name;"on"===extensionOnName.substr(0,2)&&(extensionOnName=extensionOnName.substr(2,1).toLowerCase()+extensionOnName.substr(3)),type(callback)==TYPES.f&&callback.call(_base,args),each(_extensions,(function(){type((ext=this).on)==TYPES.f&&ext.on(extensionOnName,args)}))}else _destroyed||_callbacksInitQeueue.push({n:name,a:args})}function setTopRightBottomLeft(targetCSSObject,prefix,values){values=values||[_strEmpty,_strEmpty,_strEmpty,_strEmpty],targetCSSObject[(prefix=prefix||_strEmpty)+_strTop]=values[0],targetCSSObject[prefix+_strRight]=values[1],targetCSSObject[prefix+_strBottom]=values[2],targetCSSObject[prefix+_strLeft]=values[3]}function getTopRightBottomLeftHost(prefix,suffix,zeroX,zeroY){return suffix=suffix||_strEmpty,prefix=prefix||_strEmpty,{t:zeroY?0:parseToZeroOrNumber(_hostElement.css(prefix+_strTop+suffix)),r:zeroX?0:parseToZeroOrNumber(_hostElement.css(prefix+_strRight+suffix)),b:zeroY?0:parseToZeroOrNumber(_hostElement.css(prefix+_strBottom+suffix)),l:zeroX?0:parseToZeroOrNumber(_hostElement.css(prefix+_strLeft+suffix))}}function getCSSTransitionString(element){var transitionStr=VENDORS._cssProperty("transition"),assembledValue=element.css(transitionStr);if(assembledValue)return assembledValue;for(var strResult,valueArray,j,regExpString="\\s*(([^,(]+(\\(.+?\\))?)+)[\\s,]*",regExpMain=new RegExp(regExpString),regExpValidate=new RegExp("^("+regExpString+")+$"),properties="property duration timing-function delay".split(" "),result=[],i=0,splitCssStyleByComma=function(str){if(strResult=[],!str.match(regExpValidate))return str;for(;str.match(regExpMain);)strResult.push(RegExp.$1),str=str.replace(regExpMain,_strEmpty);return strResult};itextareaLastCol&&(widestRow=i+1,textareaLastCol=rowCols);return{_cursorRow:cursorRow,_cursorColumn:cursorCol,_rows:textareaLastRow,_columns:textareaLastCol,_widestRow:widestRow,_cursorPosition:textareaCursorPosition,_cursorMax:textareaLength}}}function nativeOverlayScrollbarsAreActive(){return _ignoreOverlayScrollbarHidingCache&&_nativeScrollbarIsOverlaid.x&&_nativeScrollbarIsOverlaid.y}function getContentMeasureElement(){return _isTextarea?_textareaCoverElement[0]:_contentElementNative}function generateDiv(classesOrAttrs,content){return""+(content||_strEmpty)+"
"}function selectOrGenerateDivByClass(className,selectParentOrOnlyChildren){var onlyChildren=type(selectParentOrOnlyChildren)==TYPES.b,selectParent=onlyChildren?_hostElement:selectParentOrOnlyChildren||_hostElement;return _domExists&&!selectParent[LEXICON.l]?null:_domExists?selectParent[onlyChildren?"children":"find"](_strDot+className.replace(/\s/g,_strDot)).eq(0):FRAMEWORK(generateDiv(className))}function getObjectPropVal(obj,path){for(var val,splits=path.split(_strDot),i=0;i0&&(optsIsPlainObj?FRAMEWORK.each(pluginTargetElements,(function(i,v){(inst=v)!==undefined&&arr.push(OverlayScrollbarsInstance(inst,options,extensions,_pluginsGlobals,_pluginsAutoUpdateLoop))})):FRAMEWORK.each(pluginTargetElements,(function(i,v){inst=INSTANCES(v),("!"===options&&_plugin.valid(inst)||COMPATIBILITY.type(options)==TYPES.f&&options(v,inst)||options===undefined)&&arr.push(inst)})),result=1===arr[LEXICON.l]?arr[0]:arr),result):optsIsPlainObj||!options?result:arr}).globals=function(){initOverlayScrollbarsStatics();var globals=FRAMEWORK.extend(!0,{},_pluginsGlobals);return delete globals.msie,globals},_plugin.defaultOptions=function(newDefaultOptions){initOverlayScrollbarsStatics();var currDefaultOptions=_pluginsGlobals.defaultOptions;if(newDefaultOptions===undefined)return FRAMEWORK.extend(!0,{},currDefaultOptions);_pluginsGlobals.defaultOptions=FRAMEWORK.extend(!0,{},currDefaultOptions,_pluginsOptions._validate(newDefaultOptions,_pluginsOptions._template,!0,currDefaultOptions)._default)},_plugin.valid=function(osInstance){return osInstance instanceof _plugin&&!osInstance.getState().destroyed},_plugin.extension=function(extensionName,extension,defaultOptions){var extNameTypeString=COMPATIBILITY.type(extensionName)==TYPES.s,argLen=arguments[LEXICON.l],i=0;if(argLen<1||!extNameTypeString)return FRAMEWORK.extend(!0,{length:_pluginsExtensions[LEXICON.l]},_pluginsExtensions);if(extNameTypeString)if(COMPATIBILITY.type(extension)==TYPES.f)_pluginsExtensions.push({name:extensionName,extensionFactory:extension,defaultOptions:defaultOptions});else for(;i<_pluginsExtensions[LEXICON.l];i++)if(_pluginsExtensions[i].name===extensionName){if(!(argLen>1))return FRAMEWORK.extend(!0,{},_pluginsExtensions[i]);_pluginsExtensions.splice(i,1)}},_plugin}();return JQUERY&&JQUERY.fn&&(JQUERY.fn.overlayScrollbars=function(options,extensions){var _elements=this;return JQUERY.isPlainObject(options)?(JQUERY.each(_elements,(function(){PLUGIN(this,options,extensions)})),_elements):PLUGIN(_elements,options)}),PLUGIN}(global,global.document,void 0)}.call(exports,__webpack_require__,exports,module))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}}]);
\ No newline at end of file
diff --git a/6.30c5db6987ecb6b94ca6.manager.bundle.js.LICENSE.txt b/6.30c5db6987ecb6b94ca6.manager.bundle.js.LICENSE.txt
new file mode 100644
index 0000000000..cfda1d61da
--- /dev/null
+++ b/6.30c5db6987ecb6b94ca6.manager.bundle.js.LICENSE.txt
@@ -0,0 +1,12 @@
+/*!
+ * OverlayScrollbars
+ * https://github.com/KingSora/OverlayScrollbars
+ *
+ * Version: 1.13.0
+ *
+ * Copyright KingSora | Rene Haas.
+ * https://github.com/KingSora
+ *
+ * Released under the MIT license.
+ * Date: 02.08.2020
+ */
diff --git a/7.9f0cffc6a6a42864b953.manager.bundle.js b/7.9f0cffc6a6a42864b953.manager.bundle.js
new file mode 100644
index 0000000000..5df8e04c93
--- /dev/null
+++ b/7.9f0cffc6a6a42864b953.manager.bundle.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{1401:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,"getScrollAreaStyles",(function(){return getScrollAreaStyles}));__webpack_require__(17),__webpack_require__(64);var _templateObject,react__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(0),react__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__),_storybook_theming__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(16);var hsResizeObserverDummyAnimation=Object(_storybook_theming__WEBPACK_IMPORTED_MODULE_3__.h)(_templateObject||(_templateObject=function _taggedTemplateLiteral(strings,raw){return raw||(raw=strings.slice(0)),Object.freeze(Object.defineProperties(strings,{raw:{value:Object.freeze(raw)}}))}(["0%{z-index:0}to{z-index:-1}"]))),getScrollAreaStyles=function getScrollAreaStyles(theme){return{"html.os-html, html.os-html>.os-host":{display:"block",overflow:"hidden",boxSizing:"border-box",height:"100%!important",width:"100%!important",minWidth:"100%!important",minHeight:"100%!important",margin:"0!important",position:"absolute!important"},"html.os-html>.os-host>.os-padding":{position:"absolute"},"body.os-dragging, body.os-dragging *":{cursor:"default"},".os-host, .os-host-textarea":{position:"relative",overflow:"visible!important",flexDirection:"column",flexWrap:"nowrap",justifyContent:"flex-start",alignContent:"flex-start",alignItems:"flex-start"},".os-host-flexbox":{overflow:"hidden!important",display:"flex"},".os-host-flexbox>.os-size-auto-observer":{height:"inherit!important"},".os-host-flexbox>.os-content-glue":{flexGrow:1,flexShrink:0},".os-host-flexbox>.os-size-auto-observer, .os-host-flexbox>.os-content-glue":{minHeight:0,minWidth:0,flexGrow:0,flexShrink:1,flexBasis:"auto"},"#os-dummy-scrollbar-size":{position:"fixed",opacity:0,visibility:"hidden",overflow:"scroll",height:500,width:500},"#os-dummy-scrollbar-size>div":{width:"200%",height:"200%",margin:10},"#os-dummy-scrollbar-size, .os-viewport":{},".os-viewport-native-scrollbars-invisible#os-dummy-scrollbar-size, .os-viewport-native-scrollbars-invisible.os-viewport":{scrollbarWidth:"none!important"},".os-viewport-native-scrollbars-invisible#os-dummy-scrollbar-size::-webkit-scrollbar, .os-viewport-native-scrollbars-invisible.os-viewport::-webkit-scrollbar, .os-viewport-native-scrollbars-invisible#os-dummy-scrollbar-size::-webkit-scrollbar-corner, .os-viewport-native-scrollbars-invisible.os-viewport::-webkit-scrollbar-corner":{display:"none!important",width:"0!important",height:"0!important",visibility:"hidden!important",background:"0 0!important"},".os-content-glue":{boxSizing:"inherit",maxHeight:"100%",maxWidth:"100%",width:"100%",pointerEvents:"none"},".os-padding":{boxSizing:"inherit",direction:"inherit",position:"absolute",overflow:"visible",padding:0,margin:0,left:0,top:0,bottom:0,right:0,width:"auto!important",height:"auto!important",zIndex:1},".os-host-overflow>.os-padding":{overflow:"hidden"},".os-viewport":{direction:"inherit!important",boxSizing:"inherit!important",resize:"none!important",outline:"0!important",position:"absolute",overflow:"hidden",top:0,left:0,bottom:0,right:0,padding:0,margin:0},".os-content-arrange":{position:"absolute",zIndex:-1,minHeight:1,minWidth:1,pointerEvents:"none"},".os-content":{direction:"inherit",boxSizing:"border-box!important",position:"relative",display:"block",height:"100%",width:"100%",visibility:"visible"},".os-content:before, .os-content:after":{content:"''",display:"table",width:0,height:0,lineHeight:0,fontSize:0},".os-content>.os-textarea":{boxSizing:"border-box!important",direction:"inherit!important",background:"0 0!important",outline:"0 transparent!important",overflow:"hidden!important",position:"absolute!important",display:"block!important",top:"0!important",left:"0!important",margin:"0!important",borderRadius:"0!important",float:"none!important",filter:"none!important",border:"0!important",resize:"none!important",transform:"none!important",maxWidth:"none!important",maxHeight:"none!important",boxShadow:"none!important",perspective:"none!important",opacity:"1!important",zIndex:"1!important",clip:"auto!important",verticalAlign:"baseline!important",padding:0},".os-host-rtl>.os-padding>.os-viewport>.os-content>.os-textarea":{right:"0!important"},".os-content>.os-textarea-cover":{zIndex:-1,pointerEvents:"none"},".os-content>.os-textarea[wrap=off]":{whiteSpace:"pre!important",margin:"0!important"},".os-text-inherit":{fontFamily:"inherit",fontSize:"inherit",fontWeight:"inherit",fontStyle:"inherit",fontVariant:"inherit",textTransform:"inherit",textDecoration:"inherit",textIndent:"inherit",textAlign:"inherit",textShadow:"inherit",textOverflow:"inherit",letterSpacing:"inherit",wordSpacing:"inherit",lineHeight:"inherit",unicodeBidi:"inherit",direction:"inherit",color:"inherit",cursor:"text"},".os-resize-observer, .os-resize-observer-host":{boxSizing:"inherit",display:"block",opacity:0,position:"absolute",top:0,left:0,height:"100%",width:"100%",overflow:"hidden",pointerEvents:"none",zIndex:-1},".os-resize-observer-host":{padding:"inherit",border:"inherit",borderColor:"transparent",borderStyle:"solid",boxSizing:"border-box"},".os-resize-observer-host:after":{content:"''"},".os-resize-observer-host>.os-resize-observer, .os-resize-observer-host:after":{height:"200%",width:"200%",padding:"inherit",border:"inherit",margin:0,display:"block",boxSizing:"content-box"},".os-resize-observer.observed, object.os-resize-observer":{boxSizing:"border-box!important"},".os-size-auto-observer":{boxSizing:"inherit!important",height:"100%",width:"inherit",maxWidth:1,position:"relative",float:"left",maxHeight:1,overflow:"hidden",zIndex:-1,padding:0,margin:0,pointerEvents:"none",flexGrow:"inherit",flexShrink:0,flexBasis:0},".os-size-auto-observer>.os-resize-observer":{width:"1000%",height:"1000%",minHeight:1,minWidth:1},".os-resize-observer-item":{position:"absolute",top:0,right:0,bottom:0,left:0,overflow:"hidden",zIndex:-1,opacity:0,direction:"ltr!important",flex:"none!important"},".os-resize-observer-item-final":{position:"absolute",left:0,top:0,transition:"none!important",flex:"none!important"},".os-resize-observer":{animationDuration:".001s",animationName:"".concat(hsResizeObserverDummyAnimation)},".os-host-transition>.os-scrollbar, .os-host-transition>.os-scrollbar-corner":{transition:"opacity .3s,visibility .3s,top .3s,right .3s,bottom .3s,left .3s"},"html.os-html>.os-host>.os-scrollbar":{position:"absolute",zIndex:999999},".os-scrollbar, .os-scrollbar-corner":{position:"absolute",opacity:1,zIndex:1},".os-scrollbar-corner":{bottom:0,right:0,height:10,width:10,backgroundColor:"transparent"},".os-scrollbar":{pointerEvents:"none",padding:2,boxSizing:"border-box",background:0},".os-scrollbar-track":{pointerEvents:"auto",position:"relative",height:"100%",width:"100%",padding:"0!important",border:"0!important"},".os-scrollbar-handle":{pointerEvents:"auto",position:"absolute",width:"100%",height:"100%"},".os-scrollbar-handle-off, .os-scrollbar-track-off":{pointerEvents:"none"},".os-scrollbar.os-scrollbar-unusable, .os-scrollbar.os-scrollbar-unusable *":{pointerEvents:"none!important"},".os-scrollbar.os-scrollbar-unusable .os-scrollbar-handle":{opacity:"0!important"},".os-scrollbar-horizontal":{bottom:0,left:0,right:10,height:10},".os-scrollbar-vertical":{top:0,right:0,bottom:10,width:10},".os-host-rtl>.os-scrollbar-horizontal":{right:0},".os-host-rtl>.os-scrollbar-vertical":{right:"auto",left:0},".os-host-rtl>.os-scrollbar-corner":{right:"auto",left:0},".os-scrollbar-auto-hidden, .os-padding+.os-scrollbar-corner, .os-host-resize-disabled.os-host-scrollbar-horizontal-hidden>.os-scrollbar-corner, .os-host-scrollbar-horizontal-hidden>.os-scrollbar-horizontal, .os-host-resize-disabled.os-host-scrollbar-vertical-hidden>.os-scrollbar-corner, .os-host-scrollbar-vertical-hidden>.os-scrollbar-vertical, .os-scrollbar-horizontal.os-scrollbar-auto-hidden+.os-scrollbar-vertical+.os-scrollbar-corner, .os-scrollbar-horizontal+.os-scrollbar-vertical.os-scrollbar-auto-hidden+.os-scrollbar-corner, .os-scrollbar-horizontal.os-scrollbar-auto-hidden+.os-scrollbar-vertical.os-scrollbar-auto-hidden+.os-scrollbar-corner":{opacity:0,visibility:"hidden",pointerEvents:"none"},".os-scrollbar-corner-resize-both":{cursor:"nwse-resize"},".os-host-rtl>.os-scrollbar-corner-resize-both":{cursor:"nesw-resize"},".os-scrollbar-corner-resize-horizontal":{cursor:"ew-resize"},".os-scrollbar-corner-resize-vertical":{cursor:"ns-resize"},".os-dragging .os-scrollbar-corner.os-scrollbar-corner-resize":{cursor:"default"},".os-host-resize-disabled.os-host-scrollbar-horizontal-hidden>.os-scrollbar-vertical":{top:0,bottom:0},".os-host-resize-disabled.os-host-scrollbar-vertical-hidden>.os-scrollbar-horizontal, .os-host-rtl.os-host-resize-disabled.os-host-scrollbar-vertical-hidden>.os-scrollbar-horizontal":{right:0,left:0},".os-scrollbar:hover, .os-scrollbar-corner.os-scrollbar-corner-resize":{opacity:"1!important",visibility:"visible!important"},".os-scrollbar-corner.os-scrollbar-corner-resize":{backgroundImage:"linear-gradient(135deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.4) 50%, rgba(0,0,0,0.4) 100%)",backgroundRepeat:"no-repeat",backgroundPosition:"100% 100%",pointerEvents:"auto!important"},".os-host-rtl>.os-scrollbar-corner.os-scrollbar-corner-resize":{transform:"scale(-1,1)"},".os-host-overflow":{overflow:"hidden!important"},".os-theme-dark.os-host-rtl>.os-scrollbar-horizontal":{left:10,right:0},".os-scrollbar.os-scrollbar-unusable":{background:0},".os-scrollbar>.os-scrollbar-track":{background:0},".os-scrollbar-horizontal>.os-scrollbar-track>.os-scrollbar-handle":{minWidth:30},".os-scrollbar-vertical>.os-scrollbar-track>.os-scrollbar-handle":{minHeight:30},".os-theme-dark.os-host-transition>.os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle":{transition:"background-color .3s"},".os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle, .os-scrollbar>.os-scrollbar-track":{borderRadius:10},".os-scrollbar>.os-scrollbar-track>.os-scrollbar-handle":{background:theme.color.mediumdark,opacity:.5},".os-scrollbar:hover>.os-scrollbar-track>.os-scrollbar-handle":{opacity:.6},".os-scrollbar-horizontal .os-scrollbar-handle:before, .os-scrollbar-vertical .os-scrollbar-handle:before":{content:"''",position:"absolute",left:0,right:0,top:0,bottom:0,display:"block"},".os-theme-dark.os-host-scrollbar-horizontal-hidden>.os-scrollbar-horizontal .os-scrollbar-handle:before, .os-theme-dark.os-host-scrollbar-vertical-hidden>.os-scrollbar-vertical .os-scrollbar-handle:before":{display:"none"},".os-scrollbar-horizontal .os-scrollbar-handle:before":{top:-6,bottom:-2},".os-scrollbar-vertical .os-scrollbar-handle:before":{left:-6,right:-2},".os-host-rtl.os-scrollbar-vertical .os-scrollbar-handle:before":{right:-6,left:-2}}},GlobalScrollAreaStyles=function GlobalScrollAreaStyles(){return react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement(_storybook_theming__WEBPACK_IMPORTED_MODULE_3__.c,{styles:getScrollAreaStyles})};GlobalScrollAreaStyles.displayName="GlobalScrollAreaStyles",__webpack_exports__.default=GlobalScrollAreaStyles}}]);
\ No newline at end of file
diff --git a/8.c28571cb335b3cf2edfb.manager.bundle.js b/8.c28571cb335b3cf2edfb.manager.bundle.js
new file mode 100644
index 0000000000..cd571e1d56
--- /dev/null
+++ b/8.c28571cb335b3cf2edfb.manager.bundle.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{1477:function(module,exports){module.exports=function(e,n){return n=n||{},new Promise((function(t,r){var s=new XMLHttpRequest,o=[],u=[],i={},a=function(){return{ok:2==(s.status/100|0),statusText:s.statusText,status:s.status,url:s.responseURL,text:function(){return Promise.resolve(s.responseText)},json:function(){return Promise.resolve(s.responseText).then(JSON.parse)},blob:function(){return Promise.resolve(new Blob([s.response]))},clone:a,headers:{keys:function(){return o},entries:function(){return u},get:function(e){return i[e.toLowerCase()]},has:function(e){return e.toLowerCase()in i}}}};for(var l in s.open(n.method||"get",e,!0),s.onload=function(){s.getAllResponseHeaders().replace(/^(.*?):[^\S\n]*([\s\S]*?)$/gm,(function(e,n,t){o.push(n=n.toLowerCase()),u.push([n,t]),i[n]=i[n]?i[n]+","+t:t})),t(a())},s.onerror=r,s.withCredentials="include"==n.credentials,n.headers)s.setRequestHeader(l,n.headers[l]);s.send(n.body||null)}))}}}]);
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 2b3362796e..0000000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,2210 +0,0 @@
-# [17.6.0](https://github.com/streamich/react-use/compare/v17.5.1...v17.6.0) (2024-12-09)
-
-
-### Features
-
-* add onChange callback to useWindowSize ([ea656f7](https://github.com/streamich/react-use/commit/ea656f7e751b8366360ce2aa8238057bbbc1251a))
-* add onChange callback to useWindowSize ([3eb531a](https://github.com/streamich/react-use/commit/3eb531ac9e9e04641df29aafbd2677869cdcb085))
-
-## [17.5.1](https://github.com/streamich/react-use/compare/v17.5.0...v17.5.1) (2024-07-20)
-
-
-### Bug Fixes
-
-* 🐛 bump nano-css dependency ([adfb337](https://github.com/streamich/react-use/commit/adfb337d5b11427798afc5a21c6ebdaa76212182))
-
-# [17.5.0](https://github.com/streamich/react-use/compare/v17.4.4...v17.5.0) (2024-01-22)
-
-
-### Features
-
-* add `isFirst` and `isLast` methods to `useStateList` hook ([ac64414](https://github.com/streamich/react-use/commit/ac64414bea4c8afadfb382da9fea44ee89b41e2d))
-* **pencil:** add isFirst and isLast return value to 'useStateList' ([75218e4](https://github.com/streamich/react-use/commit/75218e45dfdcdc6ea193e278cb97ceee98c00f1b))
-* **pencil:** fix with yarn lint:fix ([6a9dde5](https://github.com/streamich/react-use/commit/6a9dde596ae25c0dd2fa97b0cf354143fbc5b5ff))
-
-## [17.4.4](https://github.com/streamich/react-use/compare/v17.4.3...v17.4.4) (2024-01-21)
-
-
-### Bug Fixes
-
-* typo in example ([0534648](https://github.com/streamich/react-use/commit/05346481a15a321b13838eead0bda3024b0d163f))
-
-## [17.4.3](https://github.com/streamich/react-use/compare/v17.4.2...v17.4.3) (2024-01-13)
-
-
-### Bug Fixes
-
-* update useMedia hook to use recommended approach of MDN ([e7379f0](https://github.com/streamich/react-use/commit/e7379f088787cbf9274c1fc21d36061f04855e4c))
-
-## [17.4.2](https://github.com/streamich/react-use/compare/v17.4.1...v17.4.2) (2023-12-01)
-
-
-### Bug Fixes
-
-* correct peer dependencies ([d770587](https://github.com/streamich/react-use/commit/d77058729654397b68b251e8211bf0edc0b4ed50))
-
-## [17.4.1](https://github.com/streamich/react-use/compare/v17.4.0...v17.4.1) (2023-11-28)
-
-
-### Bug Fixes
-
-* 🐛 bump nano-css version ([812952b](https://github.com/streamich/react-use/commit/812952bb9ff004a844ec4285ad6c65d39597b11c))
-
-# [17.4.0](https://github.com/streamich/react-use/compare/v17.3.3...v17.4.0) (2022-05-20)
-
-
-### Features
-
-* add usePinchZoom sensor hook ([3e042cb](https://github.com/streamich/react-use/commit/3e042cb2f3022349a53199b5cc5c380e3ebd9975))
-
-## [17.3.3](https://github.com/streamich/react-use/compare/v17.3.2...v17.3.3) (2022-05-20)
-
-
-### Bug Fixes
-
-* bump React peer dependency version ([532e865](https://github.com/streamich/react-use/commit/532e8653a50d39dd439d9664d4813a1d7a5b4f3c))
-* resolve [#2319](https://github.com/streamich/react-use/issues/2319) ([4884b2c](https://github.com/streamich/react-use/commit/4884b2c74085e0841af7c36cca34e16d698d1b4c))
-* resolve @types/react@18 break change, React.FC ([20b7817](https://github.com/streamich/react-use/commit/20b78178d0033cc2e0c2a904e413b20ee864c816))
-
-## [17.3.2](https://github.com/streamich/react-use/compare/v17.3.1...v17.3.2) (2021-12-30)
-
-
-### Bug Fixes
-
-* useMedia SSR hydration bug with defaultState ([#2216](https://github.com/streamich/react-use/issues/2216)) ([5c01189](https://github.com/streamich/react-use/commit/5c0118941280bb265ca7813afb987f89c8c97a17))
-
-## [17.3.1](https://github.com/streamich/react-use/compare/v17.3.0...v17.3.1) (2021-08-31)
-
-
-### Performance Improvements
-
-* ⚡️ change title only if it changed ([51ef8d9](https://github.com/streamich/react-use/commit/51ef8d99bad31186ec5420d8b729748507c8a1bf))
-
-# [17.3.0](https://github.com/streamich/react-use/compare/v17.2.4...v17.3.0) (2021-08-31)
-
-
-### Bug Fixes
-
-* do not re-render unncessarily in useAsyncFn hook ([fa3ba25](https://github.com/streamich/react-use/commit/fa3ba2520ede6866b599f6df55fdfa6395058cd2))
-
-
-### Features
-
-* useAudio add playing state ([3203610](https://github.com/streamich/react-use/commit/3203610efdcb8e1fe3c6a17ea19e41bacbeb851b))
-
-## [17.2.4](https://github.com/streamich/react-use/compare/v17.2.3...v17.2.4) (2021-04-23)
-
-
-### Bug Fixes
-
-* lint issues. ([66b0f23](https://github.com/streamich/react-use/commit/66b0f235477c5f93807df75a53a84b3c5cd053e5))
-* **useLocalStorage:** reinitialize on key change ([fdd1b23](https://github.com/streamich/react-use/commit/fdd1b23fd7ba6ae30139eeef02c552a8c7d6d333))
-* add generic typing to createHTMLMediaHook. no typecheck problem with ref anymore. ([1f547ef](https://github.com/streamich/react-use/commit/1f547efb12d6cbe7687e86925ad80bd85fac3dfd))
-* add generic typing to createHTMLMediaHook. no typecheck problem with ref anymore. ([ac4dd78](https://github.com/streamich/react-use/commit/ac4dd786f42a2c59bdaaf9ddebe2e830982d7fcc))
-
-## [17.2.3](https://github.com/streamich/react-use/compare/v17.2.2...v17.2.3) (2021-04-06)
-
-
-### Bug Fixes
-
-* lint issues. ([5a5a575](https://github.com/streamich/react-use/commit/5a5a5755bc1f10add9c7a100ea6577ab6d427c0c))
-
-## [17.2.2](https://github.com/streamich/react-use/compare/v17.2.1...v17.2.2) (2021-04-06)
-
-
-### Bug Fixes
-
-* **useStateWithHistory:** support callback style setState ([fca687d](https://github.com/streamich/react-use/commit/fca687d32c37148dab3072f053109f6c4d3c36ba))
-
-## [17.2.1](https://github.com/streamich/react-use/compare/v17.2.0...v17.2.1) (2021-03-11)
-
-
-### Bug Fixes
-
-* lint issues. ([3e8af15](https://github.com/streamich/react-use/commit/3e8af15086135c873d18079a0b92b21da668a2ff))
-* useMeasure type definitions for SVG ([e200f7f](https://github.com/streamich/react-use/commit/e200f7fcbb371a1d794be8d350f9559f940e5760))
-* useUnmountPromise stops on immediate update ([9ff5c09](https://github.com/streamich/react-use/commit/9ff5c09e671c4f07f25f30a60617fca7660e7607))
-
-# [17.2.0](https://github.com/streamich/react-use/compare/v17.1.1...v17.2.0) (2021-03-10)
-
-
-### Bug Fixes
-
-* delete isClient ([72f4cb9](https://github.com/streamich/react-use/commit/72f4cb9b405b3729975bca3acb06658ca467d15b))
-* lint issues. ([dc5bbe0](https://github.com/streamich/react-use/commit/dc5bbe0e94d131dda90942ba90c14b200df3f34e))
-* **useOrientation:** handle orientation being 0 ([793b053](https://github.com/streamich/react-use/commit/793b0539f0305e2512e7022c45a5c33b842d24d5))
-* **useOrientation:** update tests to increase coverage ([f9c743f](https://github.com/streamich/react-use/commit/f9c743fa8375ef726d33f85285d4a5af608f9a42))
-* use window inside useEffect ([2f33aa8](https://github.com/streamich/react-use/commit/2f33aa8182c92bf56d49ec3184e6b20f0c0c1e1e))
-
-
-### Features
-
-* **useOrientation:** add tests ([f45cb70](https://github.com/streamich/react-use/commit/f45cb707b52363f1cb1b32a0ebf2fdbdae79b322))
-
-## [17.1.1](https://github.com/streamich/react-use/compare/v17.1.0...v17.1.1) (2021-02-10)
-
-
-### Bug Fixes
-
-* useMountedState should not change state on componentDidUpdate lifecycle ([701b306](https://github.com/streamich/react-use/commit/701b306ed97382cbec73c834f6d3dd7baa58e339))
-
-# [17.1.0](https://github.com/streamich/react-use/compare/v17.0.2...v17.1.0) (2021-02-01)
-
-
-### Features
-
-* **prettier:** make prettier a part of eslint. ([b6993a6](https://github.com/streamich/react-use/commit/b6993a6f95a1b493945c03aecc44dafd10870816))
-
-## [17.0.2](https://github.com/streamich/react-use/compare/v17.0.1...v17.0.2) (2021-02-01)
-
-
-### Bug Fixes
-
-* proper definition for `useMeasure` ([1461527](https://github.com/streamich/react-use/commit/1461527ffc55b2a1e3c9dc6a0efc2572b66e5381))
-
-## [17.0.1](https://github.com/streamich/react-use/compare/v17.0.0...v17.0.1) (2021-01-31)
-
-
-### Bug Fixes
-
-* proper definition for isBrowser and isNavigator states. ([a087deb](https://github.com/streamich/react-use/commit/a087deb48e57b1f0a23a2d0a28d0c2d10a640cd6)), closes [#1777](https://github.com/streamich/react-use/issues/1777)
-
-# [17.0.0](https://github.com/streamich/react-use/compare/v16.1.0...v17.0.0) (2021-01-31)
-
-
-### Features
-
-* refactor the useNetwork hook. ([23037f2](https://github.com/streamich/react-use/commit/23037f207d07604dd2cd7e2cc4ba9475221be780))
-
-
-### BREAKING CHANGES
-
-* `useNetwork` hook renamed to `useNetworkState`.
-
-# [16.1.0](https://github.com/streamich/react-use/compare/v16.0.0...v16.1.0) (2021-01-31)
-
-
-### Features
-
-* improve `on` and `off` util functions typing. ([723c588](https://github.com/streamich/react-use/commit/723c588fef6aba9f10ea9f5ea7bc444532519f9a))
-
-# [16.0.0](https://github.com/streamich/react-use/compare/v15.3.8...v16.0.0) (2021-01-30)
-
-
-### chore
-
-* refactoring and rearrangement. ([a27f09f](https://github.com/streamich/react-use/commit/a27f09fd367f8b172866b5fcbaf66f9a5a3481bb))
-
-
-### BREAKING CHANGES
-
-* all `create*` factories been moved to `factory` subdirectory and in case direct import should be imported like `react-use/esm/factory/createBreakpoint`
-* `comps` directory renamed to `component`
-
-## [15.3.8](https://github.com/streamich/react-use/compare/v15.3.7...v15.3.8) (2021-01-08)
-
-
-### Bug Fixes
-
-* improve useStateValidator and useMultiStateValidator typings. ([acff81d](https://github.com/streamich/react-use/commit/acff81d99abdbbefcc2985297ee01c3cda9ef4c9))
-
-## [15.3.7](https://github.com/streamich/react-use/compare/v15.3.6...v15.3.7) (2021-01-08)
-
-
-### Bug Fixes
-
-* [#1646](https://github.com/streamich/react-use/issues/1646) ([ebc7094](https://github.com/streamich/react-use/commit/ebc7094bbc156be57b3de855c6984c1d056cf0e6))
-
-## [15.3.6](https://github.com/streamich/react-use/compare/v15.3.5...v15.3.6) (2021-01-07)
-
-
-### Bug Fixes
-
-* Fix issues in tests ([7668ce5](https://github.com/streamich/react-use/commit/7668ce5c5f0f186437907f1c352d3a62e3ae8ba7))
-
-## [15.3.4](https://github.com/streamich/react-use/compare/v15.3.3...v15.3.4) (2020-09-04)
-
-
-### Bug Fixes
-
-* useLongPress hook linting fixes. ([479dd99](https://github.com/streamich/react-use/commit/479dd9977bfcc43ccadc58eb93690adee462a16e))
-
-## [15.3.3](https://github.com/streamich/react-use/compare/v15.3.2...v15.3.3) (2020-07-24)
-
-
-### Bug Fixes
-
-* replace createFactory usages with createElement ([ad29bea](https://github.com/streamich/react-use/commit/ad29bea7b03f46aa697e6623bdf7a17347ace651))
-
-## [15.3.2](https://github.com/streamich/react-use/compare/v15.3.1...v15.3.2) (2020-06-29)
-
-
-### Bug Fixes
-
-* **useFullscreen:** fix typings so [#1205](https://github.com/streamich/react-use/issues/1205) can be merged. ([e6e55a3](https://github.com/streamich/react-use/commit/e6e55a3f94993b621566ac66488fd973e992704f))
-
-## [15.3.1](https://github.com/streamich/react-use/compare/v15.3.0...v15.3.1) (2020-06-29)
-
-
-### Bug Fixes
-
-* **usePrevious:** revert the reworked variant as a fix of [#1315](https://github.com/streamich/react-use/issues/1315) ([a4279eb](https://github.com/streamich/react-use/commit/a4279eb660f6b433ed88e0d90c2bb0b3158d3b00))
-
-# [15.3.0](https://github.com/streamich/react-use/compare/v15.2.5...v15.3.0) (2020-06-19)
-
-
-### Features
-
-* **usePrevious:** reworked the hook, now it is more memory-efficient. ([8c6f467](https://github.com/streamich/react-use/commit/8c6f4675beac9c71e96126dd6f06f455c4e4bf01))
-
-## [15.2.5](https://github.com/streamich/react-use/compare/v15.2.4...v15.2.5) (2020-06-15)
-
-
-### Bug Fixes
-
-* bump react-universal-interface ([1540c1a](https://github.com/streamich/react-use/commit/1540c1ab8f338dfa2f53de16506fbf47803d45ba))
-
-## [15.2.4](https://github.com/streamich/react-use/compare/v15.2.3...v15.2.4) (2020-06-13)
-
-
-### Bug Fixes
-
-* doesn't unlock the body on unmount ([1ead4ef](https://github.com/streamich/react-use/commit/1ead4efab6c67131e480570b578b0ce803204953))
-
-## [15.2.3](https://github.com/streamich/react-use/compare/v15.2.2...v15.2.3) (2020-06-13)
-
-
-### Bug Fixes
-
-* 🐛 improve how text is dropped in useDrop hook ([b2f46d1](https://github.com/streamich/react-use/commit/b2f46d10f25c5e658bb7f790950a1fd9a4e5e288))
-
-## [15.2.2](https://github.com/streamich/react-use/compare/v15.2.1...v15.2.2) (2020-06-08)
-
-
-### Bug Fixes
-
-* repair useKeyboardJs hook ([8410bb0](https://github.com/streamich/react-use/commit/8410bb042fec8f1996e8bcecb85fadfbb414b3f9))
-
-## [15.2.1](https://github.com/streamich/react-use/compare/v15.2.0...v15.2.1) (2020-06-08)
-
-
-### Bug Fixes
-
-* 🐛 bump fast-deep-equal, and consume it through ES import ([f3c715c](https://github.com/streamich/react-use/commit/f3c715c12412224be815e0d1bc3e2285f275df26))
-
-# [15.2.0](https://github.com/streamich/react-use/compare/v15.1.1...v15.2.0) (2020-06-07)
-
-
-### Features
-
-* add useMouseWheel hook ([d714b12](https://github.com/streamich/react-use/commit/d714b12e8b2d071c65fe4dc7643be10f69dc5dba))
-
-## [15.1.1](https://github.com/streamich/react-use/compare/v15.1.0...v15.1.1) (2020-05-30)
-
-
-### Bug Fixes
-
-* 🐛 use useIsomorphicLayoutEffect everywhere ([dad26e5](https://github.com/streamich/react-use/commit/dad26e507d3409300f945bc57930f88c5a11953d))
-
-# [15.1.0](https://github.com/streamich/react-use/compare/v15.0.3...v15.1.0) (2020-05-18)
-
-
-### Bug Fixes
-
-* display alert timeout in story ([2bb65ef](https://github.com/streamich/react-use/commit/2bb65ef3d85e82b6bd134a714e51e27876037734))
-* mutate ref in render directly ([5488f5e](https://github.com/streamich/react-use/commit/5488f5eb3e8504dcae03584b5797a48659e16623))
-
-
-### Features
-
-* add useLatest hook ([d6fe267](https://github.com/streamich/react-use/commit/d6fe2676153f19302ce170b03ceadc3bab5a945a))
-
-## [15.0.3](https://github.com/streamich/react-use/compare/v15.0.2...v15.0.3) (2020-05-18)
-
-
-### Bug Fixes
-
-* 🐛 correct useMeasure typings ([bedbad7](https://github.com/streamich/react-use/commit/bedbad723171ed1946bc80f72609432983d4c1ba))
-
-## [15.0.2](https://github.com/streamich/react-use/compare/v15.0.1...v15.0.2) (2020-05-17)
-
-
-### Bug Fixes
-
-* 🐛 dont memoize useScratch event handlers ([ffc7579](https://github.com/streamich/react-use/commit/ffc75790e329cb26000a174074c07d80283b5443))
-
-## [15.0.1](https://github.com/streamich/react-use/compare/v15.0.0...v15.0.1) (2020-05-16)
-
-
-### Bug Fixes
-
-* **deps:** update dependency tslib to v2 ([6aebf3c](https://github.com/streamich/react-use/commit/6aebf3c25e14d12d8f34e62ecbaecfd3125cf2d9))
-
-# [15.0.0](https://github.com/streamich/react-use/compare/v14.3.0...v15.0.0) (2020-05-16)
-
-
-* v15 release ([0f82ba6](https://github.com/streamich/react-use/commit/0f82ba650ed3e8b05b5458a243e7eb246fd954d2))
-
-
-### Bug Fixes
-
-* 🐛 better serialization handling in useLocalStorage hook ([68fb835](https://github.com/streamich/react-use/commit/68fb835ea64cf5587c99645a09c6de93ab1b71df))
-* 🐛 correctly test if env is browser in useMeasure ([9ae494f](https://github.com/streamich/react-use/commit/9ae494fc1874619aad2f3856df790cbc1a2a8239))
-* 🐛 make useMeasure work on server ([2daf769](https://github.com/streamich/react-use/commit/2daf76990d0e1040f8c0f31e16e7c1eebd94c9bf))
-* 🐛 remove set dependencies in useSet hook ([90ba9d0](https://github.com/streamich/react-use/commit/90ba9d000ff35039028cb66753114a6b0b452491))
-* 🐛 revert useMeasure defaults to zeros ([dc92b64](https://github.com/streamich/react-use/commit/dc92b646d0cd0f12868fde370c83e94ca3c7e297))
-* remove console log 🤓 ([f17c8a0](https://github.com/streamich/react-use/commit/f17c8a0f8e63bfddb8f13a094edbea1e3ee9680b))
-* **useLocalStorage:** using undefined for empty value instead of null ([1620e01](https://github.com/streamich/react-use/commit/1620e019fff94fb4a7a711fd3121ec02c7e99301))
-* use latest set object in useSet "has" method ([41f9452](https://github.com/streamich/react-use/commit/41f9452722d6fb7d2628480d7ce657e4f08e441a))
-
-
-### Features
-
-* 🎸 add useScratch() sensor hook ([58db2f9](https://github.com/streamich/react-use/commit/58db2f989d5d4f75ac5e8ef54c25a9df8bb173a5))
-* 🎸 catch up with v14 ([be69035](https://github.com/streamich/react-use/commit/be69035caf13f551e7717d3de0ea339c8943a9de))
-* 🎸 improve implementation of useMeasure() hook ([a164843](https://github.com/streamich/react-use/commit/a1648439021a45c781c2074489d7c6aaaa867406))
-* 🎸 improve implementation of useMeasure() hook ([4d88240](https://github.com/streamich/react-use/commit/4d8824064a0afbeba5a15597b007f8463fdbe027))
-* 🎸 mock useMeasure() hook on server and w/o ResizeObserver ([866f3d7](https://github.com/streamich/react-use/commit/866f3d740b08d4772dfbad9c48b3b0b8bac69a28))
-* 🎸 mock useMeasure() hook on server and w/o ResizeObserver ([2bbc73a](https://github.com/streamich/react-use/commit/2bbc73a5f08e9a21bb3054527fc8ff9fd51cfd47))
-* 🎸 remove resize-observer-polyfill from useMeasure ([2a13fba](https://github.com/streamich/react-use/commit/2a13fbae45af3a26c984de03130139181c0c3839))
-* 🎸 remove resize-observer-polyfill from useMeasure ([bf11131](https://github.com/streamich/react-use/commit/bf11131052c4a4ab2b9306486f0b171ac15057b0))
-* Dependencies inference for useCustomCompareEffect ([477c164](https://github.com/streamich/react-use/commit/477c1644a7225513c53294337be3c5b50126712f))
-* improve useAsyncFn and useAsync typings ([85967e2](https://github.com/streamich/react-use/commit/85967e294ce268bd1edc57968f2c3f85a3ee6cb7))
-* keep previous state in useAsyncFn ([54ac91b](https://github.com/streamich/react-use/commit/54ac91b28dca0f5c276b092d563b9c821cbab081))
-* use useReducer in useUpdate hook, instead of useState + useCallback ([6575b14](https://github.com/streamich/react-use/commit/6575b14985ede9b8f45fdad068ee9238d6f7ab80))
-* **useLocalStorage:** add remove feature. ([#229](https://github.com/streamich/react-use/issues/229)) ([587de16](https://github.com/streamich/react-use/commit/587de16ef5c85497d01e63247a578116d0605ff9))
-
-
-### BREAKING CHANGES
-
-* implementation of useMeasure and useLocalStorage changed
-* resize-observer-polyfill package is not used with useMeasure() hook
-anymore.
-* useMeasure() now defaults all values to -1, if they were not set and
-internal implementation heavily refactored.
-* useAsyncFn now keeps hold of old result/error when called multiple times
-* resize-observer-polyfill package is not used with useMeasure() hook
-anymore.
-* useMeasure() now defaults all values to -1, if they were not set and
-internal implementation heavily refactored.
-
-# [14.3.0](https://github.com/streamich/react-use/compare/v14.2.0...v14.3.0) (2020-05-16)
-
-
-### Features
-
-* 🎸 add useScratch hook ([2a2a298](https://github.com/streamich/react-use/commit/2a2a298b73f7beb9a2a61c309e649be3d2527473))
-
-# [14.2.0](https://github.com/streamich/react-use/compare/v14.1.1...v14.2.0) (2020-04-24)
-
-
-### Features
-
-* 🎸 onScrubStop provide value where scrub stopped ([138b43c](https://github.com/streamich/react-use/commit/138b43cd1ac9ea7c76a1a42fca48ebdcb94e1006))
-
-## [14.1.1](https://github.com/streamich/react-use/compare/v14.1.0...v14.1.1) (2020-04-11)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @types/js-cookie to v2.2.6 ([f9f4fae](https://github.com/streamich/react-use/commit/f9f4fae6a9a136fdd6763dd2b2214c1746fb0595))
-
-# [14.1.0](https://github.com/streamich/react-use/compare/v14.0.0...v14.1.0) (2020-04-08)
-
-
-### Features
-
-* add useHash hook ([44a6cde](https://github.com/streamich/react-use/commit/44a6cde00e1c74831d7c38b8ae4946f6f2171cf5))
-
-# [14.0.0](https://github.com/streamich/react-use/compare/v13.27.1...v14.0.0) (2020-04-04)
-
-
-### Features
-
-* **useRafLoop:** implement [#1090](https://github.com/streamich/react-use/issues/1090) ([1ef1272](https://github.com/streamich/react-use/commit/1ef1272d6dbe8fbcc2d08223cd80ef32ce28a9c9))
-* **useRafLoop:** reworked the hook, now it do not re-render parent component. ([baa2f75](https://github.com/streamich/react-use/commit/baa2f7511e18fc9fec29376afa27af73de633d8f))
-
-
-### BREAKING CHANGES
-
-* **useRafLoop:** changed return array, now it returns only functions in next order: [stop, start, isActive].
-
-Parent component is not re-rendered on loop start/stop.
-
-## [13.27.1](https://github.com/streamich/react-use/compare/v13.27.0...v13.27.1) (2020-03-25)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @xobotyi/scrollbar-width to v1.9.5 ([9751390](https://github.com/streamich/react-use/commit/97513900de7b60d8da62db35125e2f81458a4f25))
-
-# [13.27.0](https://github.com/streamich/react-use/compare/v13.26.5...v13.27.0) (2020-03-03)
-
-
-### Features
-
-* **useSet:** add toggle a method ([#968](https://github.com/streamich/react-use/issues/968)) ([477614f](https://github.com/streamich/react-use/commit/477614f9ef84d3cfa75f9c8a97dbc73d30dd411d))
-
-## [13.26.5](https://github.com/streamich/react-use/compare/v13.26.4...v13.26.5) (2020-03-02)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @xobotyi/scrollbar-width to v1.9.4 ([29d017b](https://github.com/streamich/react-use/commit/29d017b2417f53455ee182aa1ad9574a3ee098d6))
-
-## [13.26.4](https://github.com/streamich/react-use/compare/v13.26.3...v13.26.4) (2020-02-29)
-
-
-### Bug Fixes
-
-* useHoverDirty eslint fix ([0ed6521](https://github.com/streamich/react-use/commit/0ed6521179fe193007f504b3b221a6c5295f9fa0))
-
-## [13.26.3](https://github.com/streamich/react-use/compare/v13.26.2...v13.26.3) (2020-02-26)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @types/js-cookie to v2.2.5 ([1f3217a](https://github.com/streamich/react-use/commit/1f3217a07f0b11ed4d6264687188f587501c133b))
-
-## [13.26.2](https://github.com/streamich/react-use/compare/v13.26.1...v13.26.2) (2020-02-24)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @xobotyi/scrollbar-width to v1.9.3 ([6e2287d](https://github.com/streamich/react-use/commit/6e2287d7e84ef1e455da7209ee32cf86643b00a5))
-
-## [13.26.1](https://github.com/streamich/react-use/compare/v13.26.0...v13.26.1) (2020-02-16)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @xobotyi/scrollbar-width to v1.9.0 ([601d787](https://github.com/streamich/react-use/commit/601d7871a0325677a24a7a93fc9ce2b11132370f))
-
-# [13.26.0](https://github.com/streamich/react-use/compare/v13.25.1...v13.26.0) (2020-02-15)
-
-
-### Bug Fixes
-
-* add initialState to deps ([b394f3d](https://github.com/streamich/react-use/commit/b394f3d72356d331dbce48acd3686bbb64d331b5))
-
-
-### Features
-
-* add useMethods state hook ([7554b9a](https://github.com/streamich/react-use/commit/7554b9a61eb9b4744b9feb113775ff538b16beaf))
-
-## [13.25.1](https://github.com/streamich/react-use/compare/v13.25.0...v13.25.1) (2020-02-15)
-
-
-### Bug Fixes
-
-* 🐛 support default event in useClickAway() ([24281cd](https://github.com/streamich/react-use/commit/24281cdf042da5f83068c6108c67a36fe0cfc74d))
-* generic type on event arg in onClickAway callback on useClickAway ([4ffe454](https://github.com/streamich/react-use/commit/4ffe4542aec840bd6150223489d2c38821954336))
-
-# [13.25.0](https://github.com/streamich/react-use/compare/v13.24.1...v13.25.0) (2020-02-15)
-
-
-### Features
-
-* **useBeforeUnload:** allow passing a dirty function ([#842](https://github.com/streamich/react-use/issues/842)) ([c4a14a4](https://github.com/streamich/react-use/commit/c4a14a4fb370c7628e4cc5861e31cc64a66b64b0))
-
-## [13.24.1](https://github.com/streamich/react-use/compare/v13.24.0...v13.24.1) (2020-02-15)
-
-
-### Performance Improvements
-
-* use fast-deep-equal for deep comparisons ([b9a8aad](https://github.com/streamich/react-use/commit/b9a8aad053a40028f119192ddecedb5c7ec05247))
-
-# [13.24.0](https://github.com/streamich/react-use/compare/v13.23.0...v13.24.0) (2020-02-04)
-
-
-### Features
-
-* add createReducerContext and createStateContext factories ([84b8310](https://github.com/streamich/react-use/commit/84b83101c2253f8935b2804a48ade081e41982a8))
-
-# [13.23.0](https://github.com/streamich/react-use/compare/v13.22.5...v13.23.0) (2020-02-04)
-
-
-### Features
-
-* add createGlobalState hook generator ([fda7199](https://github.com/streamich/react-use/commit/fda7199b7da23f321e68d0784deb1f0f3d273e3c))
-
-## [13.22.5](https://github.com/streamich/react-use/compare/v13.22.4...v13.22.5) (2020-02-04)
-
-
-### Bug Fixes
-
-* 🐛 don't throw in useMediaDevices on missing browser API ([0f119fe](https://github.com/streamich/react-use/commit/0f119fe23e837e0d8c2a8c882b1aaf3b62cbc7d2))
-* handle undefined mediaDevices ([6f68437](https://github.com/streamich/react-use/commit/6f68437359704dace7d518f1f013bc3516400c67))
-
-## [13.22.4](https://github.com/streamich/react-use/compare/v13.22.3...v13.22.4) (2020-01-30)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @xobotyi/scrollbar-width to v1.8.2 ([#930](https://github.com/streamich/react-use/issues/930)) ([727b950](https://github.com/streamich/react-use/commit/727b95096ec6654ba4da22f6825e6d8982258033))
-
-## [13.22.3](https://github.com/streamich/react-use/compare/v13.22.2...v13.22.3) (2020-01-28)
-
-
-### Bug Fixes
-
-* **useIntersection:** disconnect an old IntersectionObserver instance when the ref changes ([ac2f54a](https://github.com/streamich/react-use/commit/ac2f54a8f683296feecfeeb6354738b9ebbc36d0))
-* **useIntersection:** reset an intersectionObserverEntry when the ref changes ([3f8687e](https://github.com/streamich/react-use/commit/3f8687e1f51cc48efbf6be3f0677f5bd06ecba08))
-* **useIntersection:** return null if IntersectionObserver is not supported ([4f6d388](https://github.com/streamich/react-use/commit/4f6d3887be5cf62ce42357a7bf27f4ae8b080eba))
-
-## [13.22.2](https://github.com/streamich/react-use/compare/v13.22.1...v13.22.2) (2020-01-27)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @xobotyi/scrollbar-width to v1.7.0 ([db74101](https://github.com/streamich/react-use/commit/db741019324c3d20a17bbc20a014cedd21e66b1a))
-
-## [13.22.1](https://github.com/streamich/react-use/compare/v13.22.0...v13.22.1) (2020-01-27)
-
-
-### Bug Fixes
-
-* **deps:** update dependency @xobotyi/scrollbar-width to v1.6.0 ([431ba5d](https://github.com/streamich/react-use/commit/431ba5d0816cb7701b03460c5efa5199ad27cbc4))
-
-# [13.22.0](https://github.com/streamich/react-use/compare/v13.21.0...v13.22.0) (2020-01-24)
-
-
-### Bug Fixes
-
-* Fail testing and update doc ([57b9041](https://github.com/streamich/react-use/commit/57b904118e2cd1f1b4e367c9a14e2a981db2f06a))
-
-
-### Features
-
-* add useLongPress hook ([45681b8](https://github.com/streamich/react-use/commit/45681b88e3fd3d9337a38da07248c46ec6d5956e))
-
-# [13.21.0](https://github.com/streamich/react-use/compare/v13.20.0...v13.21.0) (2020-01-20)
-
-
-### Features
-
-* Typings for `useDefault` ([fa0f53b](https://github.com/streamich/react-use/commit/fa0f53bf86a712f4b7e503cdf4718a8ff5448e05))
-
-# [13.20.0](https://github.com/streamich/react-use/compare/v13.19.0...v13.20.0) (2020-01-17)
-
-
-### Features
-
-* `useMap`: allow resetting with provided value other then initial ([7645f72](https://github.com/streamich/react-use/commit/7645f7249dbf52db140dfc8b7866cb4a171e439c))
-
-# [13.19.0](https://github.com/streamich/react-use/compare/v13.18.0...v13.19.0) (2020-01-16)
-
-
-### Features
-
-* add useError hook ([65f3644](https://github.com/streamich/react-use/commit/65f364420524bacebe8f8149b8197fb62bff1a08))
-
-# [13.18.0](https://github.com/streamich/react-use/compare/v13.17.0...v13.18.0) (2020-01-16)
-
-
-### Bug Fixes
-
-* check for null ([d619c39](https://github.com/streamich/react-use/commit/d619c39a21e9f0b4b4bfc6a209311bf0bd495f9b))
-
-
-### Features
-
-* add serializer/deserializer option to useLocalStorage ([5316510](https://github.com/streamich/react-use/commit/5316510babf7606a2f4b78de2b0eb85c930890cf))
-
-# [13.17.0](https://github.com/streamich/react-use/compare/v13.16.1...v13.17.0) (2020-01-15)
-
-
-### Features
-
-* add support for body lock on iOS ([d778408](https://github.com/streamich/react-use/commit/d7784084fe84aca72efe85260101b00ef1df7580))
-
-## [13.16.1](https://github.com/streamich/react-use/compare/v13.16.0...v13.16.1) (2020-01-14)
-
-
-### Bug Fixes
-
-* update the types dep for js-cookie ([5c55d59](https://github.com/streamich/react-use/commit/5c55d59a7d1d799cba7af87e15ab4a4b27a8fc67))
-
-# [13.16.0](https://github.com/streamich/react-use/compare/v13.15.0...v13.16.0) (2020-01-14)
-
-
-### Features
-
-* add option to useTitle to restore title on un-mount ([b8b3e47](https://github.com/streamich/react-use/commit/b8b3e479cea6071d4310bac29f138bd8917eee0b))
-
-# [13.15.0](https://github.com/streamich/react-use/compare/v13.14.3...v13.15.0) (2020-01-13)
-
-
-### Features
-
-* add useCookie hook ([4e5c90f](https://github.com/streamich/react-use/commit/4e5c90f021f56ae2008dc25daad69c43063f608f))
-
-## [13.14.3](https://github.com/streamich/react-use/compare/v13.14.2...v13.14.3) (2020-01-08)
-
-
-### Bug Fixes
-
-* useUpdateEffect cleanup test returns false positive ([9b31c42](https://github.com/streamich/react-use/commit/9b31c42ccb42fe13fc24f7434b00a1bcbee8cd8a))
-* useUpdateEffect test returning false positive ([#865](https://github.com/streamich/react-use/issues/865)) ([1946006](https://github.com/streamich/react-use/commit/1946006c4224bc61eabb797f4cdd7d20fff7ab25))
-
-## [13.14.2](https://github.com/streamich/react-use/compare/v13.14.1...v13.14.2) (2020-01-08)
-
-
-### Bug Fixes
-
-* bump fast-shallow-equal ([19b2b39](https://github.com/streamich/react-use/commit/19b2b39eeae3898bd8d8e3478eb7459372bb09d5))
-
-## [13.14.1](https://github.com/streamich/react-use/compare/v13.14.0...v13.14.1) (2020-01-07)
-
-
-### Bug Fixes
-
-* useUpdateEffect returns optional cleanup function ([0ce421c](https://github.com/streamich/react-use/commit/0ce421ced78fd6eb06a5676fefb856e18bfcacc1))
-* useUpdateEffect returns optional cleanup function ([#864](https://github.com/streamich/react-use/issues/864)) ([7960127](https://github.com/streamich/react-use/commit/7960127a98c0d3c33000088fbd97804d41084f7d))
-
-# [13.14.0](https://github.com/streamich/react-use/compare/v13.13.0...v13.14.0) (2020-01-03)
-
-
-### Features
-
-* 🎸 add [vertical] flag to useSlider() hook ([777865c](https://github.com/streamich/react-use/commit/777865c3ac6772fbda2bc0a6f58cde3eff7dec43))
-
-# [13.13.0](https://github.com/streamich/react-use/compare/v13.12.2...v13.13.0) (2019-12-27)
-
-
-### Features
-
-* add useShallowCompareEffect and useCustomCompareEffect hooks ([ba8803e](https://github.com/streamich/react-use/commit/ba8803eab26d2d48028a4b7120a7354c6d318aea))
-
-## [13.12.2](https://github.com/streamich/react-use/compare/v13.12.1...v13.12.2) (2019-12-10)
-
-
-### Bug Fixes
-
-* **useSet:** "has" method in useSet updated to reference latest set object ([4f1d8c2](https://github.com/streamich/react-use/commit/4f1d8c2cbd773f2a26e2eee4fbad88883ea4b405))
-
-## [13.12.1](https://github.com/streamich/react-use/compare/v13.12.0...v13.12.1) (2019-12-09)
-
-
-### Bug Fixes
-
-* **useMap:** methods with side effects should be stable across renders. ([020b4db](https://github.com/streamich/react-use/commit/020b4dbc6c47ab25243ab8af257dd045e6c1bf6d))
-
-# [13.12.0](https://github.com/streamich/react-use/compare/v13.11.0...v13.12.0) (2019-12-09)
-
-
-### Features
-
-* useScrollbarWidth hook; ([#825](https://github.com/streamich/react-use/issues/825)) ([125c7e9](https://github.com/streamich/react-use/commit/125c7e96a188405aea36e94ed1bb3d984232b2f6))
-
-# [13.11.0](https://github.com/streamich/react-use/compare/v13.10.2...v13.11.0) (2019-12-08)
-
-
-### Features
-
-* 🎸 add useUnmountPromise hook ([01421bc](https://github.com/streamich/react-use/commit/01421bc634b941044e95c611f37eb87339486241))
-
-## [13.10.2](https://github.com/streamich/react-use/compare/v13.10.1...v13.10.2) (2019-12-05)
-
-
-### Bug Fixes
-
-* useUpdate hitting maxInt, failing to trigger rerender ([93e7291](https://github.com/streamich/react-use/commit/93e72910abf2dafe5bdff625a21f633afd6e52c5))
-
-## [13.10.1](https://github.com/streamich/react-use/compare/v13.10.0...v13.10.1) (2019-12-03)
-
-
-### Bug Fixes
-
-* "get" method in useMap updated to reference latest map object ([044d267](https://github.com/streamich/react-use/commit/044d2677aa474d19da776444b78bd3d2594c6ae5))
-
-# [13.10.0](https://github.com/streamich/react-use/compare/v13.9.0...v13.10.0) (2019-11-28)
-
-
-### Features
-
-* useStateHistory ([#709](https://github.com/streamich/react-use/issues/709)) ([0a66359](https://github.com/streamich/react-use/commit/0a6635914319e9ef7a2902189a3c2dea90a2bf7f))
-
-# [13.9.0](https://github.com/streamich/react-use/compare/v13.8.2...v13.9.0) (2019-11-23)
-
-
-### Features
-
-* add useFirstMountState & useRendersCount hooks ([#769](https://github.com/streamich/react-use/issues/769)) ([30abe2b](https://github.com/streamich/react-use/commit/30abe2b22e3cb7a3e4c6dedd2466d74ce660911d))
-
-## [13.8.2](https://github.com/streamich/react-use/compare/v13.8.1...v13.8.2) (2019-11-22)
-
-
-### Bug Fixes
-
-* **#792:** make useUnmount invoke the current callback version instead of very first ([75284c6](https://github.com/streamich/react-use/commit/75284c62c8e4a68dfeb41a8d98a1e636e9ef531a)), closes [#792](https://github.com/streamich/react-use/issues/792)
-
-## [13.8.1](https://github.com/streamich/react-use/compare/v13.8.0...v13.8.1) (2019-11-21)
-
-
-### Bug Fixes
-
-* useAsyncFn does not discard old promises and might produce races ([022fa0b](https://github.com/streamich/react-use/commit/022fa0b7b77d582a10c6ca61a3dcd901770011c8))
-
-# [13.8.0](https://github.com/streamich/react-use/compare/v13.7.0...v13.8.0) (2019-11-14)
-
-
-### Features
-
-* **useStateValidator:** Refactor method and improve typings; ([436c210](https://github.com/streamich/react-use/commit/436c210f7b577c6958e47df3a244907b07a4db9f))
-
-# [13.7.0](https://github.com/streamich/react-use/compare/v13.6.3...v13.7.0) (2019-11-14)
-
-
-### Features
-
-* Add useSet hook ([095b4de](https://github.com/streamich/react-use/commit/095b4de2321b8bf3431e3f66139629b0495f1ac9))
-
-## [13.6.3](https://github.com/streamich/react-use/compare/v13.6.2...v13.6.3) (2019-11-12)
-
-
-### Bug Fixes
-
-* remove any types in useThrottleFn ([bb5baea](https://github.com/streamich/react-use/commit/bb5baea30cf59721098ca9e3185105bf1b82218b))
-
-## [13.6.2](https://github.com/streamich/react-use/compare/v13.6.1...v13.6.2) (2019-11-11)
-
-
-### Bug Fixes
-
-* restrict useThrottleFn types ([61a83d1](https://github.com/streamich/react-use/commit/61a83d124d35d5606b6c0700faf1361fd3170ca4))
-
-## [13.6.1](https://github.com/streamich/react-use/compare/v13.6.0...v13.6.1) (2019-11-10)
-
-
-### Bug Fixes
-
-* 🐛 check window.Event constructor exists in useLocation ([ad09431](https://github.com/streamich/react-use/commit/ad094311454c48873ba7143654a29b8a0c54459d))
-
-# [13.6.0](https://github.com/streamich/react-use/compare/v13.5.0...v13.6.0) (2019-11-10)
-
-
-### Features
-
-* **useCounter:** `reset` to the newest initialValue ([#667](https://github.com/streamich/react-use/issues/667)) ([e653383](https://github.com/streamich/react-use/commit/e65338372adfccd4800496b377f63bcdf6646788))
-
-# [13.5.0](https://github.com/streamich/react-use/compare/v13.4.0...v13.5.0) (2019-11-08)
-
-
-### Bug Fixes
-
-* **resolveHookState:** by accident removed needed type. ([59aa41c](https://github.com/streamich/react-use/commit/59aa41cff435f5adf7f38d361649761b8dd69794))
-
-
-### Features
-
-* **useList:** reimplemented useList hook; ([1840b57](https://github.com/streamich/react-use/commit/1840b577e2a3d321b8dbb44d5ae443e84d4d9e20))
-
-# [13.4.0](https://github.com/streamich/react-use/compare/v13.3.0...v13.4.0) (2019-11-08)
-
-
-### Features
-
-* **useStateList:** implemented `currentIndex`, `setState`, `setStateAt` methods as requested in [#634](https://github.com/streamich/react-use/issues/634); ([43cb6aa](https://github.com/streamich/react-use/commit/43cb6aa612ae869e24f67acf6f0a1712a65f128b))
-
-# [13.3.0](https://github.com/streamich/react-use/compare/v13.2.2...v13.3.0) (2019-11-06)
-
-
-### Features
-
-* useDebounce add cancel ([693aec8](https://github.com/streamich/react-use/commit/693aec8307c378697c88c635a401832f24d3531a))
-* useDebounce add cancel ([26cab31](https://github.com/streamich/react-use/commit/26cab31f10a995ec45d6c1e2a2f724d9994d801f))
-
-## [13.2.2](https://github.com/streamich/react-use/compare/v13.2.1...v13.2.2) (2019-11-06)
-
-
-### Bug Fixes
-
-* **#749:** now should work with SSR ([c12976c](https://github.com/streamich/react-use/commit/c12976cad26577a4be3ac65133268f41bbdc82da)), closes [#749](https://github.com/streamich/react-use/issues/749)
-
-## [13.2.1](https://github.com/streamich/react-use/compare/v13.2.0...v13.2.1) (2019-11-04)
-
-
-### Bug Fixes
-
-* **yarn.lock:** re-create the yarn.lock file with nailed versions in devDeps ([f094a3a](https://github.com/streamich/react-use/commit/f094a3ae833f406137b9d5355843a6615af20164))
-
-# [13.2.0](https://github.com/streamich/react-use/compare/v13.1.0...v13.2.0) (2019-11-04)
-
-
-### Features
-
-* re-create yarn.lock ([d48e03e](https://github.com/streamich/react-use/commit/d48e03e9ee38555ff29ca46fb6e75c13e9c23aba))
-* re-create yarn.lock ([ccdffe0](https://github.com/streamich/react-use/commit/ccdffe027fba15bdca1f35dc375a0c32739aee6f))
-* **usePreviousDistinct:** add tests for undefined value behaviour; ([cb373f9](https://github.com/streamich/react-use/commit/cb373f951fb3f34b9e54793687de14000a2dc08e))
-* **usePreviousDistinct:** improve types; ([30f53e8](https://github.com/streamich/react-use/commit/30f53e8c5d7e8b27bf3f273ebfcacabf30146ba3))
-* **usePreviousDistinct:** now predicate not called on initial render; ([fbe9b13](https://github.com/streamich/react-use/commit/fbe9b1303c0433d5608ca5b507d9c76711b5cb68))
-* **useStateList:** rework useStateList to make it work properly. ([242c274](https://github.com/streamich/react-use/commit/242c274dd49779fa80f8b9e451c699205279339e))
-* **useTitle:** reworked hook to make it synchronous without useUpdate; ([a133267](https://github.com/streamich/react-use/commit/a13326779ffd6885ac531240b984a77bcad3bee6))
-* **useWindowSize:** A bit changed lyfecycle and added types; ([03bdecf](https://github.com/streamich/react-use/commit/03bdecf7ac6aa0ad863a1efd71c056aa41df62b7))
-
-# [13.1.0](https://github.com/streamich/react-use/compare/v13.0.1...v13.1.0) (2019-11-01)
-
-
-### Features
-
-* pull request template for features ([1dc21f3](https://github.com/streamich/react-use/commit/1dc21f3))
-
-## [13.0.1](https://github.com/streamich/react-use/compare/v13.0.0...v13.0.1) (2019-11-01)
-
-
-### Bug Fixes
-
-* **useLockBodyScroll:** infer overflow type directly from declaration. ([26baf47](https://github.com/streamich/react-use/commit/26baf47))
-
-# [13.0.0](https://github.com/streamich/react-use/compare/v12.13.0...v13.0.0) (2019-11-01)
-
-
-* Merge pull request #711 from streamich/remove-react-wait ([8d40f18](https://github.com/streamich/react-use/commit/8d40f18)), closes [#711](https://github.com/streamich/react-use/issues/711)
-
-
-### Features
-
-* remove useRefMounted hook ([ad74d3d](https://github.com/streamich/react-use/commit/ad74d3d))
-* **useRefMounted:** remove obsolete hook; ([dc364c8](https://github.com/streamich/react-use/commit/dc364c8))
-* **useWait:** removed from package due to it is simple reexport of other package; ([d7c38bd](https://github.com/streamich/react-use/commit/d7c38bd))
-
-
-### BREAKING CHANGES
-
-* useWait hook has been removed from react-use
-* deprecated useRefMounted hook is now removed, use useMountedState hook instead
-
-# [12.13.0](https://github.com/streamich/react-use/compare/v12.12.0...v12.13.0) (2019-10-31)
-
-
-### Features
-
-* **useCounter:** reworked with use of new resolveHookState function plus improved memory usage; ([befcf84](https://github.com/streamich/react-use/commit/befcf84))
-* **useGetSet:** reworked with use of new resolveHookState function plus improved memory usage; ([9b5d0f2](https://github.com/streamich/react-use/commit/9b5d0f2))
-* react-like state resolver to use it in stateful hooks; ([9fd02eb](https://github.com/streamich/react-use/commit/9fd02eb))
-
-# [12.12.0](https://github.com/streamich/react-use/compare/v12.11.0...v12.12.0) (2019-10-31)
-
-
-### Features
-
-* add typings for createReducer ([f1cf036](https://github.com/streamich/react-use/commit/f1cf036))
-
-# [12.11.0](https://github.com/streamich/react-use/compare/v12.10.0...v12.11.0) (2019-10-31)
-
-
-### Features
-
-* **useWait:** add deprecation messages to readme and export; ([d338245](https://github.com/streamich/react-use/commit/d338245))
-
-# [12.10.0](https://github.com/streamich/react-use/compare/v12.9.1...v12.10.0) (2019-10-30)
-
-
-### Features
-
-* **useUpdate:** improve memory usage - now single function instance to increment all counters; ([0f02fd0](https://github.com/streamich/react-use/commit/0f02fd0))
-
-## [12.9.1](https://github.com/streamich/react-use/compare/v12.9.0...v12.9.1) (2019-10-28)
-
-
-### Bug Fixes
-
-* useSize avoid crash in Safari 11 ([da0e66b](https://github.com/streamich/react-use/commit/da0e66b))
-
-# [12.9.0](https://github.com/streamich/react-use/compare/v12.8.0...v12.9.0) (2019-10-26)
-
-
-### Features
-
-* add createBreakpoint ([79ba4ef](https://github.com/streamich/react-use/commit/79ba4ef))
-
-# [12.8.0](https://github.com/streamich/react-use/compare/v12.7.2...v12.8.0) (2019-10-25)
-
-
-### Features
-
-* add ensuredForwardRef and useEnsuredForwardedRef ([1bfe063](https://github.com/streamich/react-use/commit/1bfe063))
-
-## [12.7.2](https://github.com/streamich/react-use/compare/v12.7.1...v12.7.2) (2019-10-23)
-
-
-### Bug Fixes
-
-* 🐛 bump set-harmonic-interval package version ([f7c709a](https://github.com/streamich/react-use/commit/f7c709a))
-
-## [12.7.1](https://github.com/streamich/react-use/compare/v12.7.0...v12.7.1) (2019-10-17)
-
-
-### Bug Fixes
-
-* example in the docs; ([7f54cad](https://github.com/streamich/react-use/commit/7f54cad))
-* rename story's mediator and add `g` flag to it's regex; ([652b318](https://github.com/streamich/react-use/commit/652b318))
-
-# [12.7.0](https://github.com/streamich/react-use/compare/v12.6.0...v12.7.0) (2019-10-17)
-
-
-### Bug Fixes
-
-* error throw tests; ([056875b](https://github.com/streamich/react-use/commit/056875b))
-* useMultiStateValidator readme description; ([8c7f7f5](https://github.com/streamich/react-use/commit/8c7f7f5))
-
-
-### Features
-
-* useMultiStateValidator ([ae26988](https://github.com/streamich/react-use/commit/ae26988))
-
-# [12.6.0](https://github.com/streamich/react-use/compare/v12.5.0...v12.6.0) (2019-10-16)
-
-
-### Features
-
-* useRafState ([#684](https://github.com/streamich/react-use/issues/684)) ([00816a4](https://github.com/streamich/react-use/commit/00816a4))
-
-# [12.5.0](https://github.com/streamich/react-use/compare/v12.4.0...v12.5.0) (2019-10-13)
-
-
-### Features
-
-* useList allow pushing multiple items ([#621](https://github.com/streamich/react-use/issues/621)) ([a624364](https://github.com/streamich/react-use/commit/a624364))
-
-# [12.4.0](https://github.com/streamich/react-use/compare/v12.3.2...v12.4.0) (2019-10-12)
-
-
-### Features
-
-* useIntersection ([#652](https://github.com/streamich/react-use/issues/652)) ([d5f359f](https://github.com/streamich/react-use/commit/d5f359f))
-
-## [12.3.2](https://github.com/streamich/react-use/compare/v12.3.1...v12.3.2) (2019-10-12)
-
-
-### Bug Fixes
-
-* improve use of refs in dependency lists ([#655](https://github.com/streamich/react-use/issues/655)) ([ed8e26d](https://github.com/streamich/react-use/commit/ed8e26d))
-
-## [12.3.1](https://github.com/streamich/react-use/compare/v12.3.0...v12.3.1) (2019-10-10)
-
-
-### Bug Fixes
-
-* move [@types](https://github.com/types)/react-wait to dependencies, closes [#661](https://github.com/streamich/react-use/issues/661) ([#662](https://github.com/streamich/react-use/issues/662)) ([6bdd74e](https://github.com/streamich/react-use/commit/6bdd74e))
-
-# [12.3.0](https://github.com/streamich/react-use/compare/v12.2.3...v12.3.0) (2019-10-07)
-
-
-### Features
-
-* reset util callback for useList ([#654](https://github.com/streamich/react-use/issues/654)) ([9ea3548](https://github.com/streamich/react-use/commit/9ea3548))
-
-## [12.2.3](https://github.com/streamich/react-use/compare/v12.2.2...v12.2.3) (2019-10-05)
-
-
-### Bug Fixes
-
-* move react-wait types to dev dependencies, closes [#644](https://github.com/streamich/react-use/issues/644) ([49372ac](https://github.com/streamich/react-use/commit/49372ac))
-
-## [12.2.2](https://github.com/streamich/react-use/compare/v12.2.1...v12.2.2) (2019-09-26)
-
-
-### Bug Fixes
-
-* useDebounce remove deps from function arguments ([#623](https://github.com/streamich/react-use/issues/623)) ([23d6a5a](https://github.com/streamich/react-use/commit/23d6a5a))
-
-## [12.2.1](https://github.com/streamich/react-use/compare/v12.2.0...v12.2.1) (2019-09-23)
-
-
-### Bug Fixes
-
-* remove attempt from deps of retry in useAsyncRetry ([#614](https://github.com/streamich/react-use/issues/614)) ([adce59e](https://github.com/streamich/react-use/commit/adce59e))
-
-# [12.2.0](https://github.com/streamich/react-use/compare/v12.1.0...v12.2.0) (2019-09-02)
-
-
-### Features
-
-* improve useWindowSize performance rAF ([60a4937](https://github.com/streamich/react-use/commit/60a4937))
-
-# [12.1.0](https://github.com/streamich/react-use/compare/v12.0.0...v12.1.0) (2019-09-01)
-
-
-### Features
-
-* 🎸 add useSearchParam() hook ([b22f32f](https://github.com/streamich/react-use/commit/b22f32f))
-* 🎸 support server-side rendering in useSearchParam() hook ([64ac924](https://github.com/streamich/react-use/commit/64ac924))
-
-# [12.0.0](https://github.com/streamich/react-use/compare/v11.3.2...v12.0.0) (2019-09-01)
-
-
-### Features
-
-* store "paused" instead of "isPlaying" in media state ([ff900d5](https://github.com/streamich/react-use/commit/ff900d5))
-
-
-### BREAKING CHANGES
-
-* now media players return "paused" instead of "isPlaying" in their state.
-
-## [11.3.2](https://github.com/streamich/react-use/compare/v11.3.1...v11.3.2) (2019-08-25)
-
-
-### Bug Fixes
-
-* useThrottle & useThrottleFn proper timeout type; ([e2cdb94](https://github.com/streamich/react-use/commit/e2cdb94))
-
-## [11.3.1](https://github.com/streamich/react-use/compare/v11.3.0...v11.3.1) (2019-08-25)
-
-
-### Bug Fixes
-
-* update createReducer to fix initial state ([fd083f2](https://github.com/streamich/react-use/commit/fd083f2))
-
-# [11.3.0](https://github.com/streamich/react-use/compare/v11.2.0...v11.3.0) (2019-08-25)
-
-
-### Features
-
-* add usePreviousDistinct ([#551](https://github.com/streamich/react-use/issues/551)) ([6c3e569](https://github.com/streamich/react-use/commit/6c3e569))
-
-# [11.2.0](https://github.com/streamich/react-use/compare/v11.1.1...v11.2.0) (2019-08-25)
-
-
-### Features
-
-* add useCircularIterate ([8d84340](https://github.com/streamich/react-use/commit/8d84340))
-
-## [11.1.1](https://github.com/streamich/react-use/compare/v11.1.0...v11.1.1) (2019-08-25)
-
-
-### Bug Fixes
-
-* [#550](https://github.com/streamich/react-use/issues/550) ([2617d74](https://github.com/streamich/react-use/commit/2617d74))
-
-# [11.1.0](https://github.com/streamich/react-use/compare/v11.0.2...v11.1.0) (2019-08-25)
-
-
-### Features
-
-* 🎸 add useHarmonicIntervalFn() hook ([d9f21e3](https://github.com/streamich/react-use/commit/d9f21e3))
-
-## [11.0.2](https://github.com/streamich/react-use/compare/v11.0.1...v11.0.2) (2019-08-23)
-
-
-### Bug Fixes
-
-* **useSetState:** memoize setState callback ([0275329](https://github.com/streamich/react-use/commit/0275329))
-* **useSetState:** memoize setState callback ([16f023f](https://github.com/streamich/react-use/commit/16f023f))
-
-## [11.0.1](https://github.com/streamich/react-use/compare/v11.0.0...v11.0.1) (2019-08-23)
-
-
-### Bug Fixes
-
-* correct useSpring() hook behaviour ([d7a622d](https://github.com/streamich/react-use/commit/d7a622d))
-
-# [11.0.0](https://github.com/streamich/react-use/compare/v10.8.0...v11.0.0) (2019-08-22)
-
-
-### Features
-
-* add cancel and reset methods to useTimeout ([283045a](https://github.com/streamich/react-use/commit/283045a))
-* add useTimeoutFn ([284e6fd](https://github.com/streamich/react-use/commit/284e6fd))
-
-
-### BREAKING CHANGES
-
-* useTimeout now returns a tuple
-
-# [10.8.0](https://github.com/streamich/react-use/compare/v10.7.1...v10.8.0) (2019-08-20)
-
-
-### Bug Fixes
-
-* Reworked useBattery hook ([1069060](https://github.com/streamich/react-use/commit/1069060))
-* succeed useRafLoop tests ([09167df](https://github.com/streamich/react-use/commit/09167df))
-
-
-### Features
-
-* 🎸 support useBattery hook on server side ([5d31cf0](https://github.com/streamich/react-use/commit/5d31cf0))
-* 🎸 use only one useState and one useEffect call ([2d0fabf](https://github.com/streamich/react-use/commit/2d0fabf))
-
-## [10.7.1](https://github.com/streamich/react-use/compare/v10.7.0...v10.7.1) (2019-08-20)
-
-
-### Bug Fixes
-
-* async test warnings ([#543](https://github.com/streamich/react-use/issues/543)) ([7af237e](https://github.com/streamich/react-use/commit/7af237e))
-
-# [10.7.0](https://github.com/streamich/react-use/compare/v10.6.4...v10.7.0) (2019-08-19)
-
-
-### Features
-
-* 🎸 add useUpsert ([6875e13](https://github.com/streamich/react-use/commit/6875e13))
-* 🎸 export useUpsert from index ([3eda2b2](https://github.com/streamich/react-use/commit/3eda2b2))
-* add useUpsert ([a7c2899](https://github.com/streamich/react-use/commit/a7c2899))
-
-## [10.6.4](https://github.com/streamich/react-use/compare/v10.6.3...v10.6.4) (2019-08-19)
-
-
-### Bug Fixes
-
-* return from useUpdateEffect ([2f70dc2](https://github.com/streamich/react-use/commit/2f70dc2))
-* useUpdateEffect add return ([8b24df4](https://github.com/streamich/react-use/commit/8b24df4))
-
-## [10.6.3](https://github.com/streamich/react-use/compare/v10.6.2...v10.6.3) (2019-08-19)
-
-
-### Bug Fixes
-
-* allow import default for ESM ([bd3a062](https://github.com/streamich/react-use/commit/bd3a062))
-* rollup build error: Cannot call a namespace ('writeText') ([b3e672b](https://github.com/streamich/react-use/commit/b3e672b))
-
-## [10.6.2](https://github.com/streamich/react-use/compare/v10.6.1...v10.6.2) (2019-08-18)
-
-
-### Bug Fixes
-
-* 🐛 fix master ([d1df7a5](https://github.com/streamich/react-use/commit/d1df7a5))
-
-## [10.6.1](https://github.com/streamich/react-use/compare/v10.6.0...v10.6.1) (2019-08-17)
-
-
-### Bug Fixes
-
-* useUpdateEffect run on the wrong time ([1d5cd10](https://github.com/streamich/react-use/commit/1d5cd10))
-
-# [10.6.0](https://github.com/streamich/react-use/compare/v10.5.0...v10.6.0) (2019-08-17)
-
-
-### Features
-
-* add min/max to useNumber ([586faab](https://github.com/streamich/react-use/commit/586faab))
-
-# [10.5.0](https://github.com/streamich/react-use/compare/v10.4.0...v10.5.0) (2019-08-03)
-
-
-### Features
-
-* add useRafLoop hook ([be7d7c3](https://github.com/streamich/react-use/commit/be7d7c3))
-
-# [10.4.0](https://github.com/streamich/react-use/compare/v10.3.1...v10.4.0) (2019-08-02)
-
-
-### Features
-
-* add useMountedState hook ([9081b99](https://github.com/streamich/react-use/commit/9081b99))
-
-## [10.3.1](https://github.com/streamich/react-use/compare/v10.3.0...v10.3.1) (2019-08-02)
-
-
-### Bug Fixes
-
-* **storybook:** fix useKeyboardJs import path ([b7481f6](https://github.com/streamich/react-use/commit/b7481f6))
-* **useKeyboardJs:** fix argument type error ([8c820ce](https://github.com/streamich/react-use/commit/8c820ce))
-* allow string list in useKeyboardJs hook ([aecbd0b](https://github.com/streamich/react-use/commit/aecbd0b))
-
-# [10.3.0](https://github.com/streamich/react-use/compare/v10.2.0...v10.3.0) (2019-07-26)
-
-
-### Features
-
-* add useDefault hook ([ade0557](https://github.com/streamich/react-use/commit/ade0557))
-
-# [10.2.0](https://github.com/streamich/react-use/compare/v10.1.2...v10.2.0) (2019-07-25)
-
-
-### Features
-
-* useWindowScroll - for cross-browser compatibility ([5987cc8](https://github.com/streamich/react-use/commit/5987cc8))
-* useWindowScroll - for cross-browser compatibility ([#480](https://github.com/streamich/react-use/issues/480)) ([e37dd8d](https://github.com/streamich/react-use/commit/e37dd8d))
-
-## [10.1.2](https://github.com/streamich/react-use/compare/v10.1.1...v10.1.2) (2019-07-21)
-
-
-### Bug Fixes
-
-* remove OpenCollective postinstall hook ([26dcebc](https://github.com/streamich/react-use/commit/26dcebc))
-
-## [10.1.1](https://github.com/streamich/react-use/compare/v10.1.0...v10.1.1) (2019-07-21)
-
-
-### Bug Fixes
-
-* useMouse & useMouseHovered type definitions for SVG ([9e97451](https://github.com/streamich/react-use/commit/9e97451))
-* useMouse & useMouseHovered type definitions for SVG ([#479](https://github.com/streamich/react-use/issues/479)) ([e2e4a60](https://github.com/streamich/react-use/commit/e2e4a60))
-
-# [10.1.0](https://github.com/streamich/react-use/compare/v10.0.0...v10.1.0) (2019-07-17)
-
-
-### Features
-
-* add latest `react-wait` types ([6ebe3bb](https://github.com/streamich/react-use/commit/6ebe3bb))
-
-# [10.0.0](https://github.com/streamich/react-use/compare/v9.12.0...v10.0.0) (2019-07-17)
-
-
-### Features
-
-* remove big libs from peerDependencies ([1dbdc5d](https://github.com/streamich/react-use/commit/1dbdc5d))
-
-
-### BREAKING CHANGES
-
-* `useSpring` and `useKeyboardJs` hooks need to be imported directly now and libs they depend on are not in peerDependencies anymore.
-
-# [9.12.0](https://github.com/streamich/react-use/compare/v9.11.2...v9.12.0) (2019-07-16)
-
-
-### Bug Fixes
-
-* 🐛 fix useDebounce import ([40b33da](https://github.com/streamich/react-use/commit/40b33da))
-
-
-### Features
-
-* add useInterval hook ([6645ed9](https://github.com/streamich/react-use/commit/6645ed9))
-
-## [9.11.2](https://github.com/streamich/react-use/compare/v9.11.1...v9.11.2) (2019-07-16)
-
-
-### Bug Fixes
-
-* support useMedia usage server-side ([50a5160](https://github.com/streamich/react-use/commit/50a5160))
-
-## [9.11.1](https://github.com/streamich/react-use/compare/v9.11.0...v9.11.1) (2019-07-16)
-
-
-### Bug Fixes
-
-* createReducer stable dispatch function identity ([9780545](https://github.com/streamich/react-use/commit/9780545))
-
-# [9.11.0](https://github.com/streamich/react-use/compare/v9.10.0...v9.11.0) (2019-07-11)
-
-
-### Features
-
-* useMedia - initialize state with call to media query ([#454](https://github.com/streamich/react-use/issues/454)) ([ab81897](https://github.com/streamich/react-use/commit/ab81897))
-
-# [9.10.0](https://github.com/streamich/react-use/compare/v9.9.0...v9.10.0) (2019-07-10)
-
-
-### Features
-
-* expose useIsomorphicLayoutEffect + docs ([#451](https://github.com/streamich/react-use/issues/451)) ([8dcbbf1](https://github.com/streamich/react-use/commit/8dcbbf1))
-
-# [9.9.0](https://github.com/streamich/react-use/compare/v9.8.3...v9.9.0) (2019-07-10)
-
-
-### Features
-
-* add usePermission ([4da40b9](https://github.com/streamich/react-use/commit/4da40b9))
-* usePermission ([588a0c5](https://github.com/streamich/react-use/commit/588a0c5))
-
-## [9.8.3](https://github.com/streamich/react-use/compare/v9.8.2...v9.8.3) (2019-07-10)
-
-
-### Bug Fixes
-
-* useLocalStorage types for functional updates ([e2b8278](https://github.com/streamich/react-use/commit/e2b8278))
-
-## [9.8.2](https://github.com/streamich/react-use/compare/v9.8.1...v9.8.2) (2019-07-08)
-
-
-### Bug Fixes
-
-* **useSize:** prevents accessing iframe's property when it's not defined ([c9b5cdc](https://github.com/streamich/react-use/commit/c9b5cdc)), closes [#442](https://github.com/streamich/react-use/issues/442)
-* **useSize:** prevents accessing iframe's property when it's not… ([#443](https://github.com/streamich/react-use/issues/443)) ([8f04e8f](https://github.com/streamich/react-use/commit/8f04e8f))
-* iframe can be null ([a9e3bab](https://github.com/streamich/react-use/commit/a9e3bab))
-
-## [9.8.1](https://github.com/streamich/react-use/compare/v9.8.0...v9.8.1) (2019-06-30)
-
-
-### Bug Fixes
-
-* lint fixes via lint:fix ([7ce8e4f](https://github.com/streamich/react-use/commit/7ce8e4f))
-* useMap uses prevMap state which is safer ([3554f79](https://github.com/streamich/react-use/commit/3554f79))
-* **useMap:** remove now also uses prevMap state to not overwrite or lose state ([0a59869](https://github.com/streamich/react-use/commit/0a59869))
-
-# [9.8.0](https://github.com/streamich/react-use/compare/v9.7.2...v9.8.0) (2019-06-30)
-
-
-### Bug Fixes
-
-* 🐛 fix test and add pre-push hook ([1353b6c](https://github.com/streamich/react-use/commit/1353b6c))
-
-
-### Features
-
-* add voice option in use speech ([6dc2dd5](https://github.com/streamich/react-use/commit/6dc2dd5))
-* add voice option in useSpeech ([#422](https://github.com/streamich/react-use/issues/422)) ([c32d02b](https://github.com/streamich/react-use/commit/c32d02b))
-
-## [9.7.2](https://github.com/streamich/react-use/compare/v9.7.1...v9.7.2) (2019-06-27)
-
-
-### Bug Fixes
-
-* save to localStorage only when state changes ([ba6d375](https://github.com/streamich/react-use/commit/ba6d375))
-* use correct list variable in useList ([#412](https://github.com/streamich/react-use/issues/412)) ([b937296](https://github.com/streamich/react-use/commit/b937296))
-
-## [9.7.1](https://github.com/streamich/react-use/compare/v9.7.0...v9.7.1) (2019-06-23)
-
-
-### Bug Fixes
-
-* 🐛 use synchronouse effect to subscribe to observables ([376eea3](https://github.com/streamich/react-use/commit/376eea3))
-
-# [9.7.0](https://github.com/streamich/react-use/compare/v9.6.0...v9.7.0) (2019-06-19)
-
-
-### Features
-
-* improve useClickAway() hook ([#394](https://github.com/streamich/react-use/issues/394)) ([c60df19](https://github.com/streamich/react-use/commit/c60df19))
-
-# [9.6.0](https://github.com/streamich/react-use/compare/v9.5.0...v9.6.0) (2019-06-18)
-
-
-### Bug Fixes
-
-* add additional ref check on clean up ([d18d2d8](https://github.com/streamich/react-use/commit/d18d2d8))
-* always return something from effect ([3355426](https://github.com/streamich/react-use/commit/3355426))
-
-
-### Features
-
-* 🎸 add useScrolling hook ([bd9928e](https://github.com/streamich/react-use/commit/bd9928e))
-* 🎸 add useScrolling hook to index ([b3ba702](https://github.com/streamich/react-use/commit/b3ba702))
-* add useScrolling docs ([25a93f6](https://github.com/streamich/react-use/commit/25a93f6))
-* add useScrolling story ([760edf1](https://github.com/streamich/react-use/commit/760edf1))
-
-# [9.5.0](https://github.com/streamich/react-use/compare/v9.4.1...v9.5.0) (2019-06-16)
-
-
-### Bug Fixes
-
-* add missing `rate` property ([fb795a6](https://github.com/streamich/react-use/commit/fb795a6))
-
-
-### Features
-
-* add rate option in useSpeech ([f52f1f7](https://github.com/streamich/react-use/commit/f52f1f7))
-* add rate option in useSpeech ([#399](https://github.com/streamich/react-use/issues/399)) ([0e4ebc6](https://github.com/streamich/react-use/commit/0e4ebc6))
-
-## [9.4.1](https://github.com/streamich/react-use/compare/v9.4.0...v9.4.1) (2019-06-12)
-
-
-### Bug Fixes
-
-* fix Storybook docs Markdown import ([962a312](https://github.com/streamich/react-use/commit/962a312))
-
-# [9.4.0](https://github.com/streamich/react-use/compare/v9.3.0...v9.4.0) (2019-06-04)
-
-
-### Bug Fixes
-
-* fix TypeScript error ([72e3036](https://github.com/streamich/react-use/commit/72e3036))
-* **docs:** syntax error, improve examples ([8bbe9d8](https://github.com/streamich/react-use/commit/8bbe9d8))
-
-
-### Features
-
-* improve createReducer function ([6ba2d93](https://github.com/streamich/react-use/commit/6ba2d93)), closes [#164](https://github.com/streamich/react-use/issues/164)
-
-# [9.3.0](https://github.com/streamich/react-use/compare/v9.2.0...v9.3.0) (2019-05-31)
-
-
-### Features
-
-* improve useAsync and useAsyncFn ([3ab1d5d](https://github.com/streamich/react-use/commit/3ab1d5d))
-
-# [9.2.0](https://github.com/streamich/react-use/compare/v9.1.2...v9.2.0) (2019-05-31)
-
-
-### Features
-
-* 🎸 improve useObservable() type annotations ([d0c3713](https://github.com/streamich/react-use/commit/d0c3713))
-* improve useSetState() typings ([fad4440](https://github.com/streamich/react-use/commit/fad4440))
-
-## [9.1.2](https://github.com/streamich/react-use/compare/v9.1.1...v9.1.2) (2019-05-24)
-
-
-### Bug Fixes
-
-* **useAudio:** src change should reset isPlaying state ([65bffca](https://github.com/streamich/react-use/commit/65bffca))
-
-## [9.1.1](https://github.com/streamich/react-use/compare/v9.1.0...v9.1.1) (2019-05-24)
-
-
-### Bug Fixes
-
-* **useMap:** more stringent type ([7bbbe47](https://github.com/streamich/react-use/commit/7bbbe47))
-
-# [9.1.0](https://github.com/streamich/react-use/compare/v9.0.0...v9.1.0) (2019-05-24)
-
-
-### Features
-
-* pass arguments to useAsyncFn function ([6789d10](https://github.com/streamich/react-use/commit/6789d10))
-
-# [9.0.0](https://github.com/streamich/react-use/compare/v8.4.0...v9.0.0) (2019-05-09)
-
-
-### Features
-
-* improve useToggle interface ([81b1cac](https://github.com/streamich/react-use/commit/81b1cac))
-
-
-### BREAKING CHANGES
-
-* useToggle interface changed
-
-# [8.4.0](https://github.com/streamich/react-use/compare/v8.3.1...v8.4.0) (2019-05-07)
-
-
-### Features
-
-* add usePrevious hook ([4861a39](https://github.com/streamich/react-use/commit/4861a39))
-
-## [8.3.1](https://github.com/streamich/react-use/compare/v8.3.0...v8.3.1) (2019-04-29)
-
-
-### Bug Fixes
-
-* **useRefMounted:** only run and cleanup once ([6a651be](https://github.com/streamich/react-use/commit/6a651be))
-
-# [8.3.0](https://github.com/streamich/react-use/compare/v8.2.0...v8.3.0) (2019-04-29)
-
-
-### Features
-
-* add type define for createMemo ([6638c1a](https://github.com/streamich/react-use/commit/6638c1a))
-
-# [8.2.0](https://github.com/streamich/react-use/compare/v8.1.4...v8.2.0) (2019-04-23)
-
-
-### Bug Fixes
-
-* make options useGeolocation optional ([01959a1](https://github.com/streamich/react-use/commit/01959a1))
-
-
-### Features
-
-* support options for useGeolocation ([7d4c59e](https://github.com/streamich/react-use/commit/7d4c59e))
-
-## [8.1.4](https://github.com/streamich/react-use/compare/v8.1.3...v8.1.4) (2019-04-23)
-
-
-### Bug Fixes
-
-* 🐛 support click away on iOS, allow user to chose events ([f14e1d7](https://github.com/streamich/react-use/commit/f14e1d7))
-
-## [8.1.3](https://github.com/streamich/react-use/compare/v8.1.2...v8.1.3) (2019-04-18)
-
-
-### Bug Fixes
-
-* 🐛 don't fire typing event on modifier keys pressed ([ce76edf](https://github.com/streamich/react-use/commit/ce76edf))
-
-## [8.1.2](https://github.com/streamich/react-use/compare/v8.1.1...v8.1.2) (2019-04-12)
-
-
-### Bug Fixes
-
-* **useIdle:** include 'ms' prop in uesEffect dependencies ([7a670a2](https://github.com/streamich/react-use/commit/7a670a2))
-
-## [8.1.1](https://github.com/streamich/react-use/compare/v8.1.0...v8.1.1) (2019-04-09)
-
-
-### Bug Fixes
-
-* 🐛 make useLocation work on server, improve hook ([6f6030a](https://github.com/streamich/react-use/commit/6f6030a))
-
-# [8.1.0](https://github.com/streamich/react-use/compare/v8.0.0...v8.1.0) (2019-04-08)
-
-
-### Features
-
-* add useAsyncCallback hook ([c6ecb36](https://github.com/streamich/react-use/commit/c6ecb36))
-
-# [8.0.0](https://github.com/streamich/react-use/compare/v7.6.0...v8.0.0) (2019-04-08)
-
-
-### Features
-
-* change useCopyToClipboard implementation ([c391038](https://github.com/streamich/react-use/commit/c391038))
-
-
-### BREAKING CHANGES
-
-* useCopyToClipboard interface changed
-
-# [7.6.0](https://github.com/streamich/react-use/compare/v7.5.0...v7.6.0) (2019-04-07)
-
-
-### Bug Fixes
-
-* 🐛 handle case when activeElement is empty ([3d83705](https://github.com/streamich/react-use/commit/3d83705))
-
-
-### Features
-
-* 🎸 add useStartTypings hook ([5fda2e0](https://github.com/streamich/react-use/commit/5fda2e0))
-
-# [7.5.0](https://github.com/streamich/react-use/compare/v7.4.0...v7.5.0) (2019-04-07)
-
-
-### Features
-
-* 🎸 add onCopy and onError events and use NPM copy library ([2553225](https://github.com/streamich/react-use/commit/2553225))
-* 🎸 improve useCopyToClipboard() hook ([f185044](https://github.com/streamich/react-use/commit/f185044))
-* 🎸 make useCopyToClipboard hook interface more idiomatic ([0a6d773](https://github.com/streamich/react-use/commit/0a6d773))
-* add useCopyToClipboard() hook ([4d8e276](https://github.com/streamich/react-use/commit/4d8e276))
-
-# [7.4.0](https://github.com/streamich/react-use/compare/v7.3.1...v7.4.0) (2019-04-07)
-
-
-### Features
-
-* add useDeepCompareEffect hook ([77e015b](https://github.com/streamich/react-use/commit/77e015b))
-
-## [7.3.1](https://github.com/streamich/react-use/compare/v7.3.0...v7.3.1) (2019-03-31)
-
-
-### Bug Fixes
-
-* 🐛 call key{up/donw} callbacks in useKeyPressEvent correct ([60064a6](https://github.com/streamich/react-use/commit/60064a6))
-
-# [7.3.0](https://github.com/streamich/react-use/compare/v7.2.0...v7.3.0) (2019-03-31)
-
-
-### Features
-
-* add useEffectOnce hook ([06c12d4](https://github.com/streamich/react-use/commit/06c12d4))
-
-# [7.2.0](https://github.com/streamich/react-use/compare/v7.1.1...v7.2.0) (2019-03-31)
-
-
-### Features
-
-* default dependency array for useAsync and useAsyncRetry ([cb140a0](https://github.com/streamich/react-use/commit/cb140a0))
-
-## [7.1.1](https://github.com/streamich/react-use/compare/v7.1.0...v7.1.1) (2019-03-30)
-
-
-### Bug Fixes
-
-* consistent refs in useFullscreen hook ([dc85499](https://github.com/streamich/react-use/commit/dc85499))
-
-# [7.1.0](https://github.com/streamich/react-use/compare/v7.0.2...v7.1.0) (2019-03-29)
-
-
-### Bug Fixes
-
-* useClickAway TypeScript typings ([4b20083](https://github.com/streamich/react-use/commit/4b20083))
-
-
-### Features
-
-* pass click event in useClickAway to user ([01e38bc](https://github.com/streamich/react-use/commit/01e38bc))
-
-## [7.0.2](https://github.com/streamich/react-use/compare/v7.0.1...v7.0.2) (2019-03-29)
-
-
-### Bug Fixes
-
-* 🐛 add rebound and keyboards deps back to peerDependencies ([4fc46aa](https://github.com/streamich/react-use/commit/4fc46aa))
-
-## [7.0.1](https://github.com/streamich/react-use/compare/v7.0.0...v7.0.1) (2019-03-29)
-
-
-### Bug Fixes
-
-* add optional attributes in AsyncState ([b0c9770](https://github.com/streamich/react-use/commit/b0c9770))
-
-# [7.0.0](https://github.com/streamich/react-use/compare/v6.2.2...v7.0.0) (2019-03-28)
-
-
-### Bug Fixes
-
-* 🐛 fix TypeScript build errors ([5c95f28](https://github.com/streamich/react-use/commit/5c95f28))
-* 🐛 make sure all paths in usePageLeave return ([6655092](https://github.com/streamich/react-use/commit/6655092))
-* 🐛 track "over" state better in useDrop hook ([acc355c](https://github.com/streamich/react-use/commit/acc355c))
-
-
-### Features
-
-* 🎸 add clear() to useList, use fn for state updates ([b20cf7c](https://github.com/streamich/react-use/commit/b20cf7c))
-* 🎸 add createRenderProp function for creating render-props ([f4fd748](https://github.com/streamich/react-use/commit/f4fd748))
-* 🎸 add useDrop hook ([6e415cf](https://github.com/streamich/react-use/commit/6e415cf))
-* 🎸 add useDropArea hook ([676d0de](https://github.com/streamich/react-use/commit/676d0de))
-* 🎸 add useEvent hook ([2a13cfb](https://github.com/streamich/react-use/commit/2a13cfb))
-* 🎸 add useKey hook ([299fd86](https://github.com/streamich/react-use/commit/299fd86))
-* 🎸 add useKeyboardJs hook ([3516aa6](https://github.com/streamich/react-use/commit/3516aa6))
-* 🎸 add usePageLeave hook ([33ac91b](https://github.com/streamich/react-use/commit/33ac91b))
-* 🎸 add useThrottleFn hook that throttles function ([0ccdf95](https://github.com/streamich/react-use/commit/0ccdf95))
-* 🎸 improve useFullscreen hook ([7c38165](https://github.com/streamich/react-use/commit/7c38165))
-* 🎸 keep keyboard events in useKeyPress hook ([00fecab](https://github.com/streamich/react-use/commit/00fecab))
-* 🎸 refactor useKeyPressEvent hook ([c0658f6](https://github.com/streamich/react-use/commit/c0658f6))
-* 🎸 return events from useKeyboardJs hook ([aa277b8](https://github.com/streamich/react-use/commit/aa277b8))
-* 🎸 simplify and improve useThrottle hook ([452e8d9](https://github.com/streamich/react-use/commit/452e8d9))
-* 🎸 useKeyPress hook now uses useKey, KeyboardJS removed ([727743b](https://github.com/streamich/react-use/commit/727743b))
-
-
-### BREAKING CHANGES
-
-* 🧨 useKeyPressEvent hook modified for dependency injection and providing
-event objects to user
-* 🧨 KeyboardJS now available anymore in useKeyPress hook, instead it will be
-a separate useKeyPressKJ hook.
-* 🧨 useThrottle is now a completely different hook
-
-## [6.2.2](https://github.com/streamich/react-use/compare/v6.2.1...v6.2.2) (2019-03-28)
-
-
-### Bug Fixes
-
-* fix deps arg and union type in useAsync and useAsyncRetry ([929e726](https://github.com/streamich/react-use/commit/929e726))
-
-## [6.2.1](https://github.com/streamich/react-use/compare/v6.2.0...v6.2.1) (2019-03-27)
-
-
-### Bug Fixes
-
-* set 'module' field properly ([35d4fc2](https://github.com/streamich/react-use/commit/35d4fc2))
-
-# [6.2.0](https://github.com/streamich/react-use/compare/v6.1.0...v6.2.0) (2019-03-27)
-
-
-### Bug Fixes
-
-* add esm to 'files' in package.json ([fc1ba07](https://github.com/streamich/react-use/commit/fc1ba07))
-* clean esm folder as well ([0a10a6e](https://github.com/streamich/react-use/commit/0a10a6e))
-
-
-### Features
-
-* emit code in ES Module mode ([464642e](https://github.com/streamich/react-use/commit/464642e))
-
-# [6.1.0](https://github.com/streamich/react-use/compare/v6.0.0...v6.1.0) (2019-03-26)
-
-
-### Features
-
-* add useThrottle hook ([756bc99](https://github.com/streamich/react-use/commit/756bc99))
-
-# [6.0.0](https://github.com/streamich/react-use/compare/v5.16.1...v6.0.0) (2019-03-26)
-
-
-### Bug Fixes
-
-* 🐛 bump nano-css ([f1f36dc](https://github.com/streamich/react-use/commit/f1f36dc)), closes [#90](https://github.com/streamich/react-use/issues/90)
-* 🐛 don't throw only in development ([f5faba5](https://github.com/streamich/react-use/commit/f5faba5))
-
-
-### chore
-
-* 🤖 don't install only large dependencies ([6170067](https://github.com/streamich/react-use/commit/6170067))
-
-
-### Features
-
-* 🎸 add {bound} option to useMouse ([9bb02a1](https://github.com/streamich/react-use/commit/9bb02a1))
-* 🎸 implement useClickAway, remove useOutsideClick ([a03143a](https://github.com/streamich/react-use/commit/a03143a))
-* 🎸 keep global state of all useLockBodyScroll hooks ([5dd10e9](https://github.com/streamich/react-use/commit/5dd10e9))
-* 🎸 move extra mouse functionality into useMouseHovered ([8b0580e](https://github.com/streamich/react-use/commit/8b0580e))
-* more precise size for useMouse ([b887075](https://github.com/streamich/react-use/commit/b887075))
-
-
-### BREAKING CHANGES
-
-* 🧨 error is logged instead of thrown in development environment
-* 🧨 useOutsideClick is now useClickAway
-* 🧨 useCallbag hook is removed, some hooks KeyboardJS and Rebound installed
-separately
-
-## [5.16.1](https://github.com/streamich/react-use/compare/v5.16.0...v5.16.1) (2019-03-26)
-
-
-### Bug Fixes
-
-* types for useGeolocation ([b72c098](https://github.com/streamich/react-use/commit/b72c098))
-
-# [5.16.0](https://github.com/streamich/react-use/compare/v5.15.0...v5.16.0) (2019-03-25)
-
-
-### Features
-
-* more precise size for useMouse ([1761031](https://github.com/streamich/react-use/commit/1761031))
-
-# [5.15.0](https://github.com/streamich/react-use/compare/v5.14.0...v5.15.0) (2019-03-25)
-
-
-### Features
-
-* add useMouse hook ([17dfa8e](https://github.com/streamich/react-use/commit/17dfa8e))
-
-# [5.14.0](https://github.com/streamich/react-use/compare/v5.13.0...v5.14.0) (2019-03-24)
-
-
-### Features
-
-* 🎸 keep global state of all useLockBodyScroll hooks ([9bb7047](https://github.com/streamich/react-use/commit/9bb7047))
-* add useLockBodyScroll hook ([d990db4](https://github.com/streamich/react-use/commit/d990db4))
-
-# [5.13.0](https://github.com/streamich/react-use/compare/v5.12.1...v5.13.0) (2019-03-23)
-
-
-### Features
-
-* add useScroll hook ([a92e9b2](https://github.com/streamich/react-use/commit/a92e9b2))
-
-## [5.12.1](https://github.com/streamich/react-use/compare/v5.12.0...v5.12.1) (2019-03-23)
-
-
-### Bug Fixes
-
-* 🐛 cancel animation frame on un-mount in useWindowScroll() ([bc021ce](https://github.com/streamich/react-use/commit/bc021ce))
-
-# [5.12.0](https://github.com/streamich/react-use/compare/v5.11.0...v5.12.0) (2019-03-23)
-
-
-### Features
-
-* add useWindowScroll hook ([076d0de](https://github.com/streamich/react-use/commit/076d0de))
-
-# [5.11.0](https://github.com/streamich/react-use/compare/v5.10.0...v5.11.0) (2019-03-22)
-
-
-### Features
-
-* 🎸 refresh useCss hook ([0116cc9](https://github.com/streamich/react-use/commit/0116cc9))
-
-# [5.10.0](https://github.com/streamich/react-use/compare/v5.9.0...v5.10.0) (2019-03-21)
-
-
-### Features
-
-* add useUpdateEffect hook ([c2afd23](https://github.com/streamich/react-use/commit/c2afd23))
-
-# [5.9.0](https://github.com/streamich/react-use/compare/v5.8.1...v5.9.0) (2019-03-21)
-
-
-### Features
-
-* add useAsyncRetry hook ([576cf42](https://github.com/streamich/react-use/commit/576cf42))
-
-
-### Performance Improvements
-
-* remove asyn/await wrapper ([8e3de1c](https://github.com/streamich/react-use/commit/8e3de1c))
-
-## [5.8.1](https://github.com/streamich/react-use/compare/v5.8.0...v5.8.1) (2019-03-20)
-
-
-### Bug Fixes
-
-* 🐛 use useLayoutEffect() in useCss() to inject CSS quick ([7328f26](https://github.com/streamich/react-use/commit/7328f26))
-
-# [5.8.0](https://github.com/streamich/react-use/compare/v5.7.1...v5.8.0) (2019-03-19)
-
-
-### Features
-
-* release useKeyPressEvent() ([96798e2](https://github.com/streamich/react-use/commit/96798e2))
-
-## [5.7.1](https://github.com/streamich/react-use/compare/v5.7.0...v5.7.1) (2019-03-15)
-
-
-### Bug Fixes
-
-* 🐛 allow every promise in usePromise() hook have own type ([d60fef7](https://github.com/streamich/react-use/commit/d60fef7))
-
-# [5.7.0](https://github.com/streamich/react-use/compare/v5.6.0...v5.7.0) (2019-03-15)
-
-
-### Bug Fixes
-
-* 🐛 fix TypeScript typings for usePromise() ([ba0acb6](https://github.com/streamich/react-use/commit/ba0acb6))
-
-
-### Features
-
-* 🎸 add usePromise() hook ([aad368b](https://github.com/streamich/react-use/commit/aad368b))
-
-# [5.6.0](https://github.com/streamich/react-use/compare/v5.5.6...v5.6.0) (2019-03-13)
-
-
-### Features
-
-* transpile down to ES5 ([61382e3](https://github.com/streamich/react-use/commit/61382e3))
-
-## [5.5.6](https://github.com/streamich/react-use/compare/v5.5.5...v5.5.6) (2019-03-11)
-
-
-### Bug Fixes
-
-* correct createMemo.md ([4e2d639](https://github.com/streamich/react-use/commit/4e2d639))
-* correct createMemo.story ([9c8e093](https://github.com/streamich/react-use/commit/9c8e093))
-
-## [5.5.5](https://github.com/streamich/react-use/compare/v5.5.4...v5.5.5) (2019-03-04)
-
-
-### Bug Fixes
-
-* 🐛 make useWindowSize work on server ([8f93853](https://github.com/streamich/react-use/commit/8f93853))
-
-## [5.5.4](https://github.com/streamich/react-use/compare/v5.5.3...v5.5.4) (2019-02-25)
-
-
-### Bug Fixes
-
-* 🐛 new React behaviour needs useState to set something ([e926faf](https://github.com/streamich/react-use/commit/e926faf)), closes [#128](https://github.com/streamich/react-use/issues/128)
-
-## [5.5.3](https://github.com/streamich/react-use/compare/v5.5.2...v5.5.3) (2019-02-25)
-
-
-### Bug Fixes
-
-* **deps:** update dependency use-callbag to ^0.2.0 ([4d49d0b](https://github.com/streamich/react-use/commit/4d49d0b))
-
-## [5.5.2](https://github.com/streamich/react-use/compare/v5.5.1...v5.5.2) (2019-02-24)
-
-
-### Bug Fixes
-
-* **deps:** update dependency use-onclickoutside to ^0.3.0 ([0baae6d](https://github.com/streamich/react-use/commit/0baae6d))
-
-## [5.5.1](https://github.com/streamich/react-use/compare/v5.5.0...v5.5.1) (2019-02-24)
-
-
-### Bug Fixes
-
-* **deps:** update dependency ts-easing to ^0.2.0 ([3321e11](https://github.com/streamich/react-use/commit/3321e11))
-
-# [5.5.0](https://github.com/streamich/react-use/compare/v5.4.1...v5.5.0) (2019-02-23)
-
-
-### Bug Fixes
-
-* add type definition for useList() remove() method ([ea2dc43](https://github.com/streamich/react-use/commit/ea2dc43))
-* useSetState bug ([83611a1](https://github.com/streamich/react-use/commit/83611a1))
-
-
-### Features
-
-* Add remove method for useList ([5a295d9](https://github.com/streamich/react-use/commit/5a295d9))
-
-## [5.4.1](https://github.com/streamich/react-use/compare/v5.4.0...v5.4.1) (2019-02-19)
-
-
-### Bug Fixes
-
-* 🐛 better async loading for keyboardjs ([2096bae](https://github.com/streamich/react-use/commit/2096bae)), closes [#103](https://github.com/streamich/react-use/issues/103)
-
-# [5.4.0](https://github.com/streamich/react-use/compare/v5.3.1...v5.4.0) (2019-02-19)
-
-
-### Features
-
-* add error and loading fields to useGeolocation ([6909a69](https://github.com/streamich/react-use/commit/6909a69))
-
-## [5.3.1](https://github.com/streamich/react-use/compare/v5.3.0...v5.3.1) (2019-02-17)
-
-
-### Bug Fixes
-
-* 🐛 fix typings in useOrientation sensor ([afbacac](https://github.com/streamich/react-use/commit/afbacac))
-* 🐛 fix useSetState after React update ([524abe5](https://github.com/streamich/react-use/commit/524abe5)), closes [#107](https://github.com/streamich/react-use/issues/107) [#107](https://github.com/streamich/react-use/issues/107)
-* useOrientation breaks in some devices ([d89bd54](https://github.com/streamich/react-use/commit/d89bd54))
-
-# [5.3.0](https://github.com/streamich/react-use/compare/v5.2.3...v5.3.0) (2019-02-07)
-
-
-### Features
-
-* Add updateAt method for useList ([ad05609](https://github.com/streamich/react-use/commit/ad05609))
-
-## [5.2.3](https://github.com/streamich/react-use/compare/v5.2.2...v5.2.3) (2019-02-07)
-
-
-### Bug Fixes
-
-* 🐛 fix build and update React deps ([27e26a0](https://github.com/streamich/react-use/commit/27e26a0))
-
-## [5.2.2](https://github.com/streamich/react-use/compare/v5.2.1...v5.2.2) (2019-02-02)
-
-
-### Bug Fixes
-
-* release useDebounce and useToggle fixes ([12ad880](https://github.com/streamich/react-use/commit/12ad880))
-
-## [5.2.1](https://github.com/streamich/react-use/compare/v5.2.0...v5.2.1) (2019-01-04)
-
-
-### Bug Fixes
-
-* use function to correctly update state in useToggle ([d854d27](https://github.com/streamich/react-use/commit/d854d27))
-
-# [5.2.0](https://github.com/streamich/react-use/compare/v5.1.2...v5.2.0) (2019-01-02)
-
-
-### Features
-
-* 🎸 add useKeyPress hook ([01df885](https://github.com/streamich/react-use/commit/01df885))
-* **useKeyPress:** allow complex bindings via key combos ([e53a20f](https://github.com/streamich/react-use/commit/e53a20f))
-
-## [5.1.2](https://github.com/streamich/react-use/compare/v5.1.1...v5.1.2) (2018-12-29)
-
-
-### Bug Fixes
-
-* reset state when calling useEffect in useAsync ([2f5af2c](https://github.com/streamich/react-use/commit/2f5af2c))
-
-## [5.1.1](https://github.com/streamich/react-use/compare/v5.1.0...v5.1.1) (2018-12-20)
-
-
-### Bug Fixes
-
-* lock react and react-dom to a fixed version ([#83](https://github.com/streamich/react-use/issues/83)) ([455812d](https://github.com/streamich/react-use/commit/455812d))
-
-# [5.1.0](https://github.com/streamich/react-use/compare/v5.0.0...v5.1.0) (2018-12-19)
-
-
-### Bug Fixes
-
-* 🐛 just use any for setTimeout because of diff environments ([55673cb](https://github.com/streamich/react-use/commit/55673cb))
-* 🐛 memoized does not receive arguments ([244a533](https://github.com/streamich/react-use/commit/244a533))
-* 🐛 use Timeout type for build to work ([8c66abe](https://github.com/streamich/react-use/commit/8c66abe))
-
-
-### Features
-
-* added useDebounce ([91ff6ba](https://github.com/streamich/react-use/commit/91ff6ba))
-* pass arguments to memoized callback ([#81](https://github.com/streamich/react-use/issues/81)) ([88dd513](https://github.com/streamich/react-use/commit/88dd513))
-
-# [5.0.0](https://github.com/streamich/react-use/compare/v4.11.1...v5.0.0) (2018-12-17)
-
-
-### Features
-
-* 🎸 list all useAsync state props so that TS dont complain ([7c1b107](https://github.com/streamich/react-use/commit/7c1b107))
-* 🎸 remove experimental hooks ([533e26f](https://github.com/streamich/react-use/commit/533e26f))
-* use discriminated union in useAsync ([966af4a](https://github.com/streamich/react-use/commit/966af4a))
-
-
-### BREAKING CHANGES
-
-* useRenderProp and useAsync are removed
-
-## [4.11.1](https://github.com/streamich/react-use/compare/v4.11.0...v4.11.1) (2018-12-16)
-
-
-### Bug Fixes
-
-* synchronously re-render bug of useRaf hook ([#77](https://github.com/streamich/react-use/issues/77)) ([5d74348](https://github.com/streamich/react-use/commit/5d74348))
-
-# [4.11.0](https://github.com/streamich/react-use/compare/v4.10.0...v4.11.0) (2018-12-05)
-
-
-### Features
-
-* 🎸 add useRefMounted hook ([dfb0510](https://github.com/streamich/react-use/commit/dfb0510))
-
-# [4.10.0](https://github.com/streamich/react-use/compare/v4.9.0...v4.10.0) (2018-11-10)
-
-
-### Features
-
-* bump useWait ([124ef99](https://github.com/streamich/react-use/commit/124ef99))
-
-# [4.9.0](https://github.com/streamich/react-use/compare/v4.8.0...v4.9.0) (2018-11-06)
-
-
-### Features
-
-* add useSessionStorage hook ([eca432a](https://github.com/streamich/react-use/commit/eca432a))
-* add useWait hook ([61c6058](https://github.com/streamich/react-use/commit/61c6058))
-
-# [4.8.0](https://github.com/streamich/react-use/compare/v4.7.0...v4.8.0) (2018-11-02)
-
-
-### Features
-
-* allow useSetState setter to accept function ([bfd114a](https://github.com/streamich/react-use/commit/bfd114a))
-
-# [4.7.0](https://github.com/streamich/react-use/compare/v4.6.0...v4.7.0) (2018-10-30)
-
-
-### Features
-
-* 🎸 add useHoverDirty hook ([c2aee59](https://github.com/streamich/react-use/commit/c2aee59))
-
-# [4.6.0](https://github.com/streamich/react-use/compare/v4.5.0...v4.6.0) (2018-10-30)
-
-
-### Features
-
-* 🎸 implement useLocalStorage without events ([d211722](https://github.com/streamich/react-use/commit/d211722))
-
-# [4.5.0](https://github.com/streamich/react-use/compare/v4.4.0...v4.5.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useAdopt hook ([91bee9a](https://github.com/streamich/react-use/commit/91bee9a))
-* 🎸 add useRenderProp hook ([2d85c61](https://github.com/streamich/react-use/commit/2d85c61))
-
-# [4.4.0](https://github.com/streamich/react-use/compare/v4.3.0...v4.4.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useCallbag hook ([ead142c](https://github.com/streamich/react-use/commit/ead142c))
-
-# [4.3.0](https://github.com/streamich/react-use/compare/v4.2.0...v4.3.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useOutsideClick hook ([90d2c22](https://github.com/streamich/react-use/commit/90d2c22))
-
-# [4.2.0](https://github.com/streamich/react-use/compare/v4.1.0...v4.2.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useVideo hook ([ff05419](https://github.com/streamich/react-use/commit/ff05419))
-* 🎸 allow to pass React el in useVideo and useAudio ([8670c74](https://github.com/streamich/react-use/commit/8670c74))
-
-# [4.1.0](https://github.com/streamich/react-use/compare/v4.0.0...v4.1.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add createMemo hook factory ([8730eaa](https://github.com/streamich/react-use/commit/8730eaa))
-
-# [4.0.0](https://github.com/streamich/react-use/compare/v3.1.0...v4.0.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useNumber alias ([a58a4a7](https://github.com/streamich/react-use/commit/a58a4a7))
-* 🎸 improve useCounter interface ([395e82b](https://github.com/streamich/react-use/commit/395e82b))
-
-
-### BREAKING CHANGES
-
-* useCounter interface changed
-
-# [3.1.0](https://github.com/streamich/react-use/compare/v3.0.0...v3.1.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useGetSetState ([dcd1013](https://github.com/streamich/react-use/commit/dcd1013))
-
-
-### Performance Improvements
-
-* ⚡️ wrape useGetSetState callbacks in useCallback ([3c1e57d](https://github.com/streamich/react-use/commit/3c1e57d))
-
-# [3.0.0](https://github.com/streamich/react-use/compare/v2.3.0...v3.0.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 accept any value type in useToggle and cast it to bool ([869f767](https://github.com/streamich/react-use/commit/869f767))
-
-
-### BREAKING CHANGES
-
-* now useToggle and useBoolean accept any value type and cast it to
-boolean.
-
-# [2.3.0](https://github.com/streamich/react-use/compare/v2.2.0...v2.3.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useBoolean hook ([ce6de24](https://github.com/streamich/react-use/commit/ce6de24))
-
-# [2.2.0](https://github.com/streamich/react-use/compare/v2.1.0...v2.2.0) (2018-10-29)
-
-
-### Features
-
-* 🎸 add useGetSet hook ([bfc30b9](https://github.com/streamich/react-use/commit/bfc30b9))
-* 🎸 add useUpdate hook ([c00f308](https://github.com/streamich/react-use/commit/c00f308))
-
-# [2.1.0](https://github.com/streamich/react-use.git/compare/v2.0.0...v2.1.0) (2018-10-28)
-
-
-### Features
-
-* 🎸 add useObservable ([711e831](https://github.com/streamich/react-use.git/commit/711e831))
-
-# [2.0.0](https://github.com/streamich/react-use.git/compare/v1.0.0...v2.0.0) (2018-10-28)
-
-
-### Features
-
-* 🎸 change API for useToggle hook ([#16](https://github.com/streamich/react-use.git/issues/16)) ([5a6da18](https://github.com/streamich/react-use.git/commit/5a6da18))
-
-
-### BREAKING CHANGES
-
-* useToggle interface changed
-
-# 1.0.0 (2018-10-28)
-
-
-### chore
-
-* 🤖 release v1 ([4236cf0](https://github.com/streamich/react-use.git/commit/4236cf0))
-
-
-### Continuous Integration
-
-* 🎡 store CircleCI artifacts, add git-cz ([690dd5e](https://github.com/streamich/react-use.git/commit/690dd5e))
-
-
-### Features
-
-* 🎸 add useAsync hook ([258d696](https://github.com/streamich/react-use.git/commit/258d696))
-* 🎸 add useAudio hook ([4336aa1](https://github.com/streamich/react-use.git/commit/4336aa1))
-* 🎸 add useBattery hook ([73ce535](https://github.com/streamich/react-use.git/commit/73ce535))
-* 🎸 add useCounter hook ([79e5b8c](https://github.com/streamich/react-use.git/commit/79e5b8c))
-* 🎸 add useCss hook ([2c0a7e4](https://github.com/streamich/react-use.git/commit/2c0a7e4))
-* 🎸 add useFavicon hook ([ab1739a](https://github.com/streamich/react-use.git/commit/ab1739a))
-* 🎸 add useGeolocation hook ([13a7326](https://github.com/streamich/react-use.git/commit/13a7326))
-* 🎸 add useHover hook ([406af20](https://github.com/streamich/react-use.git/commit/406af20))
-* 🎸 add useIdle hook ([74d3ece](https://github.com/streamich/react-use.git/commit/74d3ece))
-* 🎸 add useLifecycles hook ([f99c89f](https://github.com/streamich/react-use.git/commit/f99c89f))
-* 🎸 add useList hook ([4bea508](https://github.com/streamich/react-use.git/commit/4bea508))
-* 🎸 add useLocation hook ([46a8e2c](https://github.com/streamich/react-use.git/commit/46a8e2c))
-* 🎸 add useLogger hook ([7c38b75](https://github.com/streamich/react-use.git/commit/7c38b75))
-* 🎸 add useMap hook ([6509c25](https://github.com/streamich/react-use.git/commit/6509c25))
-* 🎸 add useMedia hook ([e1cc9ab](https://github.com/streamich/react-use.git/commit/e1cc9ab))
-* 🎸 add useMediaDevices hook ([4ea0277](https://github.com/streamich/react-use.git/commit/4ea0277))
-* 🎸 add useMotion hook ([91eb4ea](https://github.com/streamich/react-use.git/commit/91eb4ea))
-* 🎸 add useMount and useUnmount hooks ([63a1444](https://github.com/streamich/react-use.git/commit/63a1444))
-* 🎸 add useNetwork hook ([5881fa6](https://github.com/streamich/react-use.git/commit/5881fa6))
-* 🎸 add useOrientation hook ([c533b97](https://github.com/streamich/react-use.git/commit/c533b97))
-* 🎸 add useRaf hook ([26b2593](https://github.com/streamich/react-use.git/commit/26b2593))
-* 🎸 add useSetState hook ([972541d](https://github.com/streamich/react-use.git/commit/972541d))
-* 🎸 add useSize hook ([620b171](https://github.com/streamich/react-use.git/commit/620b171))
-* 🎸 add useSpeech hook ([3b971a2](https://github.com/streamich/react-use.git/commit/3b971a2))
-* 🎸 add useSprgin hook ([b4fe5b0](https://github.com/streamich/react-use.git/commit/b4fe5b0))
-* 🎸 add useTimeout hook ([86f094e](https://github.com/streamich/react-use.git/commit/86f094e))
-* 🎸 add useTitle hook ([1bff6d8](https://github.com/streamich/react-use.git/commit/1bff6d8))
-* 🎸 add useToggle() hook ([a36dceb](https://github.com/streamich/react-use.git/commit/a36dceb))
-* 🎸 add useTween hook ([877343e](https://github.com/streamich/react-use.git/commit/877343e))
-* 🎸 add useWindowSize() hook ([2c46899](https://github.com/streamich/react-use.git/commit/2c46899))
-* 🎸 do work on useLocaStorage ([2541716](https://github.com/streamich/react-use.git/commit/2541716))
-* 🎸 improve useSize, pass through state to the element ([5b1356a](https://github.com/streamich/react-use.git/commit/5b1356a))
-
-
-### BREAKING CHANGES
-
-* make semantic-release bump version
-* Released v1.0.0
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 67c03a54ea..0000000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Contributing
-
-Thanks for being willing to contribute 🙌 If you contribute to this project, you agree to release your work under the license of this project.
-
-**Working on your first Pull Request?** You can learn how from this [First Contributions](https://github.com/firstcontributions/first-contributions) guide.
-
-## Project setup
-
-1. Fork and clone the repo
-1. Run `yarn install` to install dependencies
-1. Create a branch for your PR with `git checkout -b pr/your-branch-name`
-
-> Tip: Keep your `master` branch pointing at the original repository and make
-> pull requests from branches on your fork. To do this, run:
->
-> ```sh
-> git remote add upstream https://github.com/streamich/react-use.git
-> git fetch upstream
-> git branch --set-upstream-to=upstream/master master
-> ```
->
-> This will add the original repository as a "remote" called "upstream," Then
-> fetch the git information from that remote, then set your local `master`
-> branch to use the upstream master branch whenever you run `git pull`. Then you
-> can make all of your pull request branches based on this `master` branch.
-> Whenever you want to update your version of `master`, do a regular `git pull`.
-
-## Development
-
-This library is a collection of React hooks so a proposal for a new hook will need to utilize the [React Hooks API](https://reactjs.org/docs/hooks-reference.html) internally to be taken into consideration.
-
-### Creating a new hook
-
-1. Create `src/useYourHookName.ts` and `stories/useYourHookName.story.tsx`, run `yarn start` to start the storybook development server and start coding your hook
-1. Create `tests/useYourHookName.test.ts`, run `yarn test:watch` to start the test runner in watch mode and start writing tests for your hook
-1. Create `docs/useYourHookName.md` and create documentation for your hook
-1. Export your hook from `src/index.ts` and add your hook to `README.md`
-
-You can also write your tests first if you prefer [test-driven development](https://en.wikipedia.org/wiki/Test-driven_development).
-
-### Updating an existing hook
-
-1. Run `yarn start` to start the storybook development server and start applying changes
-2. Update tests according to your changes using `yarn test:watch`
-3. Update documentation according to your changes
-
-## Committing and Pushing changes
-
-### Commit messages
-
-This repo uses [semantic-release](https://github.com/semantic-release/semantic-release) and [conventional commit messages](https://conventionalcommits.org) so prefix your commits with `fix:` or `feat:` if you want your changes to appear in [release notes](https://github.com/streamich/react-use/blob/master/CHANGELOG.md).
-
-### Git hooks
-
-There are git hooks set up with this project that are automatically enabled
-when you install dependencies. These hooks automatically test and validate your code when creating commits. They're really handy but can be temporarily disabled by adding a `--no-verify` flag to your commit command. This is useful when you want to commit and push to get feedback on uncompleted code.
-
-## Help needed
-
-Please have a look at the [open issues](https://github.com/streamich/react-use/issues) and respond to questions, bug reports and feature requests. Thanks!
-
-We're also looking to improve the code coverage on this project. To easily know what hooks need tests run `yarn test:coverage` to generate a code coverage report. You can see the report in your terminal or open `coverage/lcov-report/index.html` to see the HTML report.
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index fdddb29aa4..0000000000
--- a/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to
diff --git a/README.md b/README.md
deleted file mode 100644
index cc1728fafd..0000000000
--- a/README.md
+++ /dev/null
@@ -1,199 +0,0 @@
-
-
-- [**Sensors**](./docs/Sensors.md)
- - [`useBattery`](./docs/useBattery.md) — tracks device battery state. [![][img-demo]](https://codesandbox.io/s/qlvn662zww)
- - [`useGeolocation`](./docs/useGeolocation.md) — tracks geo location state of user's device. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usegeolocation--demo)
- - [`useHover` and `useHoverDirty`](./docs/useHover.md) — tracks mouse hover state of some element. [![][img-demo]](https://codesandbox.io/s/zpn583rvx)
- - [`useHash`](./docs/useHash.md) — tracks location hash value. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usehash--demo)
- - [`useIdle`](./docs/useIdle.md) — tracks whether user is being inactive.
- - [`useIntersection`](./docs/useIntersection.md) — tracks an HTML element's intersection. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-useintersection--demo)
- - [`useKey`](./docs/useKey.md), [`useKeyPress`](./docs/useKeyPress.md), [`useKeyboardJs`](./docs/useKeyboardJs.md), and [`useKeyPressEvent`](./docs/useKeyPressEvent.md) — track keys. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usekeypressevent--demo)
- - [`useLocation`](./docs/useLocation.md) and [`useSearchParam`](./docs/useSearchParam.md) — tracks page navigation bar location state.
- - [`useLongPress`](./docs/useLongPress.md) — tracks long press gesture of some element.
- - [`useMedia`](./docs/useMedia.md) — tracks state of a CSS media query. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemedia--demo)
- - [`useMediaDevices`](./docs/useMediaDevices.md) — tracks state of connected hardware devices.
- - [`useMotion`](./docs/useMotion.md) — tracks state of device's motion sensor.
- - [`useMouse` and `useMouseHovered`](./docs/useMouse.md) — tracks state of mouse position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemouse--docs)
- - [`useMouseWheel`](./docs/useMouseWheel.md) — tracks deltaY of scrolled mouse wheel. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemousewheel--docs)
- - [`useNetworkState`](./docs/useNetworkState.md) — tracks the state of browser's network connection. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usenetworkstate--demo)
- - [`useOrientation`](./docs/useOrientation.md) — tracks state of device's screen orientation.
- - [`usePageLeave`](./docs/usePageLeave.md) — triggers when mouse leaves page boundaries.
- - [`useScratch`](./docs/useScratch.md) — tracks mouse click-and-scrub state.
- - [`useScroll`](./docs/useScroll.md) — tracks an HTML element's scroll position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usescroll--docs)
- - [`useScrolling`](./docs/useScrolling.md) — tracks whether HTML element is scrolling.
- - [`useStartTyping`](./docs/useStartTyping.md) — detects when user starts typing.
- - [`useWindowScroll`](./docs/useWindowScroll.md) — tracks `Window` scroll position. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usewindowscroll--docs)
- - [`useWindowSize`](./docs/useWindowSize.md) — tracks `Window` dimensions. [![][img-demo]](https://codesandbox.io/s/m7ln22668)
- - [`useMeasure`](./docs/useMeasure.md) and [`useSize`](./docs/useSize.md) — tracks an HTML element's dimensions. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usemeasure--demo)
- - [`createBreakpoint`](./docs/createBreakpoint.md) — tracks `innerWidth`
- - [`useScrollbarWidth`](./docs/useScrollbarWidth.md) — detects browser's native scrollbars width. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usescrollbarwidth--demo)
- - [`usePinchZoom`](./docs/usePinchZoom.md) — tracks pointer events to detect pinch zoom in and out status. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/sensors-usePinchZoom--demo)
-
-
-- [**UI**](./docs/UI.md)
- - [`useAudio`](./docs/useAudio.md) — plays audio and exposes its controls. [![][img-demo]](https://codesandbox.io/s/2o4lo6rqy)
- - [`useClickAway`](./docs/useClickAway.md) — triggers callback when user clicks outside target area.
- - [`useCss`](./docs/useCss.md) — dynamically adjusts CSS.
- - [`useDrop` and `useDropArea`](./docs/useDrop.md) — tracks file, link and copy-paste drops.
- - [`useFullscreen`](./docs/useFullscreen.md) — display an element or video full-screen. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usefullscreen--demo)
- - [`useSlider`](./docs/useSlider.md) — provides slide behavior over any HTML element. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-useslider--demo)
- - [`useSpeech`](./docs/useSpeech.md) — synthesizes speech from a text string. [![][img-demo]](https://codesandbox.io/s/n090mqz69m)
- - [`useVibrate`](./docs/useVibrate.md) — provide physical feedback using the [Vibration API](https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API). [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usevibrate--demo)
- - [`useVideo`](./docs/useVideo.md) — plays video, tracks its state, and exposes playback controls. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/ui-usevideo--demo)
-
-
-- [**Animations**](./docs/Animations.md)
- - [`useRaf`](./docs/useRaf.md) — re-renders component on each `requestAnimationFrame`.
- - [`useInterval`](./docs/useInterval.md) and [`useHarmonicIntervalFn`](./docs/useHarmonicIntervalFn.md) — re-renders component on a set interval using `setInterval`.
- - [`useSpring`](./docs/useSpring.md) — interpolates number over time according to spring dynamics.
- - [`useTimeout`](./docs/useTimeout.md) — re-renders component after a timeout.
- - [`useTimeoutFn`](./docs/useTimeoutFn.md) — calls given function after a timeout. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/animation-usetimeoutfn--demo)
- - [`useTween`](./docs/useTween.md) — re-renders component, while tweening a number from 0 to 1. [![][img-demo]](https://codesandbox.io/s/52990wwzyl)
- - [`useUpdate`](./docs/useUpdate.md) — returns a callback, which re-renders component when called.
-
-
-- [**Side-effects**](./docs/Side-effects.md)
- - [`useAsync`](./docs/useAsync.md), [`useAsyncFn`](./docs/useAsyncFn.md), and [`useAsyncRetry`](./docs/useAsyncRetry.md) — resolves an `async` function.
- - [`useBeforeUnload`](./docs/useBeforeUnload.md) — shows browser alert when user try to reload or close the page.
- - [`useCookie`](./docs/useCookie.md) — provides way to read, update and delete a cookie. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usecookie--demo)
- - [`useCopyToClipboard`](./docs/useCopyToClipboard.md) — copies text to clipboard.
- - [`useDebounce`](./docs/useDebounce.md) — debounces a function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usedebounce--demo)
- - [`useError`](./docs/useError.md) — error dispatcher. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-useerror--demo)
- - [`useFavicon`](./docs/useFavicon.md) — sets favicon of the page.
- - [`useLocalStorage`](./docs/useLocalStorage.md) — manages a value in `localStorage`.
- - [`useLockBodyScroll`](./docs/useLockBodyScroll.md) — lock scrolling of the body element.
- - [`useRafLoop`](./docs/useRafLoop.md) — calls given function inside the RAF loop.
- - [`useSessionStorage`](./docs/useSessionStorage.md) — manages a value in `sessionStorage`.
- - [`useThrottle` and `useThrottleFn`](./docs/useThrottle.md) — throttles a function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/side-effects-usethrottle--demo)
- - [`useTitle`](./docs/useTitle.md) — sets title of the page.
- - [`usePermission`](./docs/usePermission.md) — query permission status for browser APIs.
-
-
-- [**Lifecycles**](./docs/Lifecycles.md)
- - [`useEffectOnce`](./docs/useEffectOnce.md) — a modified [`useEffect`](https://reactjs.org/docs/hooks-reference.html#useeffect) hook that only runs once.
- - [`useEvent`](./docs/useEvent.md) — subscribe to events.
- - [`useLifecycles`](./docs/useLifecycles.md) — calls `mount` and `unmount` callbacks.
- - [`useMountedState`](./docs/useMountedState.md) and [`useUnmountPromise`](./docs/useUnmountPromise.md) — track if component is mounted.
- - [`usePromise`](./docs/usePromise.md) — resolves promise only while component is mounted.
- - [`useLogger`](./docs/useLogger.md) — logs in console as component goes through life-cycles.
- - [`useMount`](./docs/useMount.md) — calls `mount` callbacks.
- - [`useUnmount`](./docs/useUnmount.md) — calls `unmount` callbacks.
- - [`useUpdateEffect`](./docs/useUpdateEffect.md) — run an `effect` only on updates.
- - [`useIsomorphicLayoutEffect`](./docs/useIsomorphicLayoutEffect.md) — `useLayoutEffect` that that works on server.
- - [`useDeepCompareEffect`](./docs/useDeepCompareEffect.md), [`useShallowCompareEffect`](./docs/useShallowCompareEffect.md), and [`useCustomCompareEffect`](./docs/useCustomCompareEffect.md)
-
-
-- [**State**](./docs/State.md)
- - [`createMemo`](./docs/createMemo.md) — factory of memoized hooks.
- - [`createReducer`](./docs/createReducer.md) — factory of reducer hooks with custom middleware.
- - [`createReducerContext`](./docs/createReducerContext.md) and [`createStateContext`](./docs/createStateContext.md) — factory of hooks for a sharing state between components.
- - [`useDefault`](./docs/useDefault.md) — returns the default value when state is `null` or `undefined`.
- - [`useGetSet`](./docs/useGetSet.md) — returns state getter `get()` instead of raw state.
- - [`useGetSetState`](./docs/useGetSetState.md) — as if [`useGetSet`](./docs/useGetSet.md) and [`useSetState`](./docs/useSetState.md) had a baby.
- - [`useLatest`](./docs/useLatest.md) — returns the latest state or props
- - [`usePrevious`](./docs/usePrevious.md) — returns the previous state or props. [![][img-demo]](https://codesandbox.io/s/fervent-galileo-krgx6)
- - [`usePreviousDistinct`](./docs/usePreviousDistinct.md) — like `usePrevious` but with a predicate to determine if `previous` should update.
- - [`useObservable`](./docs/useObservable.md) — tracks latest value of an `Observable`.
- - [`useRafState`](./docs/useRafState.md) — creates `setState` method which only updates after `requestAnimationFrame`. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-userafstate--demo)
- - [`useSetState`](./docs/useSetState.md) — creates `setState` method which works like `this.setState`. [![][img-demo]](https://codesandbox.io/s/n75zqn1xp0)
- - [`useStateList`](./docs/useStateList.md) — circularly iterates over an array. [![][img-demo]](https://codesandbox.io/s/bold-dewdney-pjzkd)
- - [`useToggle` and `useBoolean`](./docs/useToggle.md) — tracks state of a boolean. [![][img-demo]](https://codesandbox.io/s/focused-sammet-brw2d)
- - [`useCounter` and `useNumber`](./docs/useCounter.md) — tracks state of a number. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usecounter--demo)
- - [`useList`](./docs/useList.md) ~and [`useUpsert`](./docs/useUpsert.md)~ — tracks state of an array. [![][img-demo]](https://codesandbox.io/s/wonderful-mahavira-1sm0w)
- - [`useMap`](./docs/useMap.md) — tracks state of an object. [![][img-demo]](https://codesandbox.io/s/quirky-dewdney-gi161)
- - [`useSet`](./docs/useSet.md) — tracks state of a Set. [![][img-demo]](https://codesandbox.io/s/bold-shtern-6jlgw)
- - [`useQueue`](./docs/useQueue.md) — implements simple queue.
- - [`useStateValidator`](./docs/useStateValidator.md) — tracks state of an object. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usestatevalidator--demo)
- - [`useStateWithHistory`](./docs/useStateWithHistory.md) — stores previous state values and provides handles to travel through them. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usestatewithhistory--demo)
- - [`useMultiStateValidator`](./docs/useMultiStateValidator.md) — alike the `useStateValidator`, but tracks multiple states at a time. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemultistatevalidator--demo)
- - [`useMediatedState`](./docs/useMediatedState.md) — like the regular `useState` but with mediation by custom function. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemediatedstate--demo)
- - [`useFirstMountState`](./docs/useFirstMountState.md) — check if current render is first. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usefirstmountstate--demo)
- - [`useRendersCount`](./docs/useRendersCount.md) — count component renders. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-userenderscount--demo)
- - [`createGlobalState`](./docs/createGlobalState.md) — cross component shared state.[![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-createglobalstate--demo)
- - [`useMethods`](./docs/useMethods.md) — neat alternative to `useReducer`. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-usemethods--demo)
-
-
-- [**Miscellaneous**]()
- - [`useEnsuredForwardedRef`](./docs/useEnsuredForwardedRef.md) and [`ensuredForwardRef`](./docs/useEnsuredForwardedRef.md) — use a React.forwardedRef safely. [![][img-demo]](https://streamich.github.io/react-use/?path=/story/state-useensuredforwardedref--demo)
-
-
-
-
-
-
-
-
-
-
- Usage — how to import.
-
- Unlicense — public domain.
-
- Support — add yourself to backer list below.
-
-
-
-
-
-
-
-
-[img-demo]: https://img.shields.io/badge/demo-%20%20%20%F0%9F%9A%80-green.svg
-
-
-
Contributors
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/SECURITY.md b/SECURITY.md
deleted file mode 100644
index a5497b62af..0000000000
--- a/SECURITY.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Security Policy
-
-## Supported Versions
-
-We release patches for security vulnerabilities. The latest major version
-will support security patches.
-
-## Reporting a Vulnerability
-
-Please report (suspected) security vulnerabilities to
-**[streamich@gmail.com](mailto:streamich@gmail.com)**. We will try to respond
-within 48 hours. If the issue is confirmed, we will release a patch as soon
-as possible depending on complexity.
diff --git a/babel.config.js b/babel.config.js
deleted file mode 100644
index 86be860b75..0000000000
--- a/babel.config.js
+++ /dev/null
@@ -1,22 +0,0 @@
-module.exports = {
- presets: [
- [
- "@babel/preset-env",
- {
- targets: {
- node: "current"
- }
- }
- ],
- "@babel/preset-react",
- "@babel/preset-typescript"
- ],
- env: {
- test: {
- plugins: ['dynamic-import-node']
- },
- production: {
- plugins: ['@babel/plugin-syntax-dynamic-import']
- }
- }
-};
diff --git a/docs/Animations.md b/docs/Animations.md
deleted file mode 100644
index 96f8b7e2d0..0000000000
--- a/docs/Animations.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Animations
-
-*"Animation Hooks"* usually interpolate numeric values over time.
diff --git a/docs/Lifecycles.md b/docs/Lifecycles.md
deleted file mode 100644
index d36e76366e..0000000000
--- a/docs/Lifecycles.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Lifecycle
-
-*"Lifecycle Hooks"* modify and extend built-in React hooks or imitate React Class component lifecycle patterns.
diff --git a/docs/Sensors.md b/docs/Sensors.md
deleted file mode 100644
index 4f3aeecc1b..0000000000
--- a/docs/Sensors.md
+++ /dev/null
@@ -1,4 +0,0 @@
-# Sensors
-
-*"Sensor Hooks"* listen to changes in some interface and force your components
-to be re-rendered with the new state, up-to-date state.
diff --git a/docs/Side-effects.md b/docs/Side-effects.md
deleted file mode 100644
index e6051a4c6d..0000000000
--- a/docs/Side-effects.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Side-effects
-
-*"Side-effect Hooks"* allow your app trigger various side-effects using browser's API.
diff --git a/docs/State.md b/docs/State.md
deleted file mode 100644
index b9e6613fb1..0000000000
--- a/docs/State.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# State
-
-*"State Hooks"* allow you to easily manage state of booleans, arrays, and maps.
\ No newline at end of file
diff --git a/docs/UI.md b/docs/UI.md
deleted file mode 100644
index c938a430a7..0000000000
--- a/docs/UI.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# UI
-
-*"UI Hooks"* allow you to control and subscribe to state changes of UI elements.
diff --git a/docs/Usage.md b/docs/Usage.md
deleted file mode 100644
index 243e354f88..0000000000
--- a/docs/Usage.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# Usage
-
-You need to have React [`16.8.0`](https://reactjs.org/blog/2019/02/06/react-v16.8.0.html) or later installed to use the Hooks API. You can import each hook individually
-
-```js
-import useToggle from 'react-use/lib/useToggle'
-```
-
-or use ES6 named imports (tree shaking recommended)
-
-```js
-import {useToggle} from 'react-use'
-```
-
-Depending on your bundler you might run into a missing dependency error with ES6 named import statements. Some hooks require you to install peer dependencies so we recommend using individual imports. If you want the best of both worlds you can transform the named import statements to individual import statements with [`babel-plugin-import`](https://github.com/ant-design/babel-plugin-import) by adding the following config to your `.babelrc` file:
-
-```json
-[
- 'import',
- {
- libraryName: 'react-use',
- camel2DashComponentName: false,
- customName(/** @type {string} */ name) {
- const libraryDirectory = name.startsWith('Use')
- ? 'lib/component'
- : name.startsWith('create')
- ? 'lib/factory'
- : 'lib'
- return `react-use/${libraryDirectory}/${name}`
- }
- },
- 'import-react-use'
- ]
-```
diff --git a/docs/createBreakpoint.md b/docs/createBreakpoint.md
deleted file mode 100644
index a07cb68b15..0000000000
--- a/docs/createBreakpoint.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# `createBreakpoint`
-
-## Usage
-
-### use default breakpoint
-
-laptopL: 1440, laptop: 1024, tablet: 768
-
-```jsx
-import React from "react";
-import { createBreakpoint } from "react-use";
-
-const useBreakpoint = createBreakpoint();
-
-const Demo = () => {
- const breakpoint = useBreakpoint();
-
- if (breakpoint === "laptopL") return This is very big Laptop
;
- else if (breakpoint == "laptop") return This is Laptop
;
- else if (breakpoint == "tablet") return This is Tablet
;
- else return Too small!
;
-};
-```
-
-### use custom breakpoint
-
-XL: 1280, L: 768, S: 350
-
-```jsx
-import React from "react";
-import { createBreakpoint } from "react-use";
-
-const useBreakpoint = createBreakpoint({ XL: 1280, L: 768, S: 350 });
-
-const Demo = () => {
- const breakpoint = useBreakpoint();
-
- if (breakpoint === "XL") return XL
;
- else if (breakpoint == "L") return LoL
;
- else if (breakpoint == "S") return Sexyy
;
- else return Wth
;
-};
-```
diff --git a/docs/createGlobalState.md b/docs/createGlobalState.md
deleted file mode 100644
index 0e02813498..0000000000
--- a/docs/createGlobalState.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# `useGlobalState`
-
-A React hook that creates a globally shared state.
-
-## Usage
-
-```tsx
-const useGlobalValue = createGlobalState(0);
-
-const CompA: FC = () => {
- const [value, setValue] = useGlobalValue();
-
- return setValue(value + 1)}>+ ;
-};
-
-const CompB: FC = () => {
- const [value, setValue] = useGlobalValue();
-
- return setValue(value - 1)}>- ;
-};
-
-const Demo: FC = () => {
- const [value] = useGlobalValue();
- return (
-
- );
-};
-```
-
-It also allows initializing the state with a function and using a function in the setState:
-
-```tsx
-const useGlobalValue = createGlobalState(() => 0);
-
-const CompA: FC = () => {
- const [value, setValue] = useGlobalValue();
-
- return setValue(value => value + 1)}>+ ;
-};
-
-const CompB: FC = () => {
- const [value, setValue] = useGlobalValue();
-
- return setValue(value => value - 1)}>- ;
-};
-
-const Demo: FC = () => {
- const [value] = useGlobalValue();
- return (
-
- );
-};
-```
diff --git a/docs/createMemo.md b/docs/createMemo.md
deleted file mode 100644
index 2b3f8c5da6..0000000000
--- a/docs/createMemo.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `createMemo`
-
-Hook factory, receives a function to be memoized, returns a memoized React hook,
-which receives the same arguments and returns the same result as the original function.
-
-
-## Usage
-
-```jsx
-import {createMemo} from 'react-use';
-
-const fibonacci = n => {
- if (n === 0) return 0;
- if (n === 1) return 1;
- return fibonacci(n - 1) + fibonacci(n - 2);
-};
-
-const useMemoFibonacci = createMemo(fibonacci);
-
-const Demo = () => {
- const result = useMemoFibonacci(10);
-
- return (
-
- fib(10) = {result}
-
- );
-};
-```
-
-
-## Reference
-
-```js
-const useMemoFn = createMemo(fn);
-```
diff --git a/docs/createReducer.md b/docs/createReducer.md
deleted file mode 100644
index b61131fd5d..0000000000
--- a/docs/createReducer.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# `createReducer`
-
-Factory for reducer hooks with custom middleware with an identical API as [React's `useReducer`](https://reactjs.org/docs/hooks-reference.html#usereducer). Compatible with [Redux middleware](https://redux.js.org/advanced/middleware).
-
-## Usage
-
-An example with [`redux-thunk`](https://github.com/reduxjs/redux-thunk) and [`redux-logger`](https://github.com/LogRocket/redux-logger).
-
-```jsx
-import { createReducer } from 'react-use';
-import logger from 'redux-logger';
-import thunk from 'redux-thunk';
-
-const useThunkReducer = createReducer(thunk, logger);
-
-function reducer(state, action) {
- switch (action.type) {
- case 'increment':
- return { count: state.count + 1 };
- case 'decrement':
- return { count: state.count - 1 };
- case 'reset':
- return { count: action.payload };
- default:
- throw new Error();
- }
-}
-
-const Demo = ({ initialCount = 1 }) => {
- // Action creator to increment count, wait a second and then reset
- const addAndReset = React.useCallback(() => {
- return dispatch => {
- dispatch({ type: 'increment' });
-
- setTimeout(() => {
- dispatch({ type: 'reset', payload: initialCount });
- }, 1000);
- };
- }, [initialCount]);
-
- const [state, dispatch] = useThunkReducer(reducer, initialCount);
-
- return (
-
-
count: {state.count}
-
dispatch(addAndReset())}>Add and reset
-
dispatch({ type: 'reset', payload: { count: initialCount }})}
- >
- Reset
-
-
dispatch({ type: 'increment' })}>+
-
dispatch({ type: 'decrement' })}>-
-
- );
-};
-```
-
-## Reference
-
-```js
-const useMiddlewareReducer = createReducer(...middlewares);
-```
diff --git a/docs/createReducerContext.md b/docs/createReducerContext.md
deleted file mode 100644
index cd50315073..0000000000
--- a/docs/createReducerContext.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# `createReducerContext`
-
-Factory for react context hooks that will behave just like [React's `useReducer`](https://reactjs.org/docs/hooks-reference.html#usereducer) except the state will be shared among all components in the provider.
-
-This allows you to have a shared state that any component can update easily.
-
-## Usage
-
-An example with two counters that shared the same value.
-
-```jsx
-import { createReducerContext } from 'react-use';
-
-type Action = 'increment' | 'decrement';
-
-const reducer = (state: number, action: Action) => {
- switch (action) {
- case 'increment':
- return state + 1;
- case 'decrement':
- return state - 1;
- default:
- throw new Error();
- }
-};
-
-const [useSharedCounter, SharedCounterProvider] = createReducerContext(reducer, 0);
-
-const ComponentA = () => {
- const [count, dispatch] = useSharedCounter();
- return (
-
- Component A
- dispatch('decrement')}>
- -
-
- {count}
- dispatch('increment')}>
- +
-
-
- );
-};
-
-const ComponentB = () => {
- const [count, dispatch] = useSharedCounter();
- return (
-
- Component B
- dispatch('decrement')}>
- -
-
- {count}
- dispatch('increment')}>
- +
-
-
- );
-};
-
-const Demo = () => {
- return (
-
- Those two counters share the same value.
-
-
-
- );
-};
-```
-
-## Reference
-
-```jsx
-const [useSharedState, SharedStateProvider] = createReducerContext(reducer, initialState);
-
-// In wrapper
-const Wrapper = ({ children }) => (
- // You can override the initial state for each Provider
-
- { children }
-
-)
-
-// In a component
-const Component = () => {
- const [sharedState, dispatch] = useSharedState();
-
- // ...
-}
-```
diff --git a/docs/createStateContext.md b/docs/createStateContext.md
deleted file mode 100644
index 8bfb61aeae..0000000000
--- a/docs/createStateContext.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# `createStateContext`
-
-Factory for react context hooks that will behave just like [React's `useState`](https://reactjs.org/docs/hooks-reference.html#usestate) except the state will be shared among all components in the provider.
-
-This allows you to have a shared state that any component can update easily.
-
-## Usage
-
-An example with a shared text between two input fields.
-
-```jsx
-import { createStateContext } from 'react-use';
-
-const [useSharedText, SharedTextProvider] = createStateContext('');
-
-const ComponentA = () => {
- const [text, setText] = useSharedText();
- return (
-
- Component A:
-
- setText(ev.target.value)} />
-
- );
-};
-
-const ComponentB = () => {
- const [text, setText] = useSharedText();
- return (
-
- Component B:
-
- setText(ev.target.value)} />
-
- );
-};
-
-const Demo = () => {
- return (
-
- Those two fields share the same value.
-
-
-
- );
-};
-```
-
-## Reference
-
-```jsx
-const [useSharedState, SharedStateProvider] = createStateContext(initialValue);
-
-// In wrapper
-const Wrapper = ({ children }) => (
- // You can override the initial value for each Provider
-
- { children }
-
-)
-
-// In a component
-const Component = () => {
- const [sharedState, setSharedState] = useSharedState();
-
- // ...
-}
-```
diff --git a/docs/useAsync.md b/docs/useAsync.md
deleted file mode 100644
index 061f7ec85f..0000000000
--- a/docs/useAsync.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# `useAsync`
-
-React hook that resolves an `async` function or a function that returns
-a promise;
-
-## Usage
-
-```jsx
-import {useAsync} from 'react-use';
-
-const Demo = ({url}) => {
- const state = useAsync(async () => {
- const response = await fetch(url);
- const result = await response.text();
- return result
- }, [url]);
-
- return (
-
- {state.loading
- ?
Loading...
- : state.error
- ?
Error: {state.error.message}
- :
Value: {state.value}
- }
-
- );
-};
-```
-
-## Reference
-
-```ts
-useAsync(fn, args?: any[]);
-```
diff --git a/docs/useAsyncFn.md b/docs/useAsyncFn.md
deleted file mode 100644
index bf86788d92..0000000000
--- a/docs/useAsyncFn.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `useAsyncFn`
-
-React hook that returns state and a callback for an `async` function or a
-function that returns a promise. The state is of the same shape as `useAsync`.
-
-## Usage
-
-```jsx
-import {useAsyncFn} from 'react-use';
-
-const Demo = ({url}) => {
- const [state, doFetch] = useAsyncFn(async () => {
- const response = await fetch(url);
- const result = await response.text();
- return result
- }, [url]);
-
- return (
-
- {state.loading
- ?
Loading...
- : state.error
- ?
Error: {state.error.message}
- :
Value: {state.value}
- }
-
doFetch()}>Start loading
-
- );
-};
-```
-
-## Reference
-
-```ts
-useAsyncFn(fn, deps?: any[], initialState?: AsyncState);
-```
diff --git a/docs/useAsyncRetry.md b/docs/useAsyncRetry.md
deleted file mode 100644
index 3b1dd5e6c6..0000000000
--- a/docs/useAsyncRetry.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# `useAsyncRetry`
-
-Uses `useAsync` with an additional `retry` method to easily retry/refresh the async function;
-
-## Usage
-
-```jsx
-import {useAsyncRetry} from 'react-use';
-
-const Demo = ({url}) => {
- const state = useAsyncRetry(async () => {
- const response = await fetch(url);
- const result = await response.text();
- return result;
- }, [url]);
-
- return (
-
- {state.loading
- ?
Loading...
- : state.error
- ?
Error: {state.error.message}
- :
Value: {state.value}
- }
- {!loading &&
state.retry()}>Start loading }
-
- );
-};
-```
-
-## Reference
-
-```ts
-useAsyncRetry(fn, args?: any[]);
-```
diff --git a/docs/useAudio.md b/docs/useAudio.md
deleted file mode 100644
index 8939060400..0000000000
--- a/docs/useAudio.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# `useAudio`
-
-Creates `` element, tracks its state and exposes playback controls.
-
-
-## Usage
-
-```jsx
-import {useAudio} from 'react-use';
-
-const Demo = () => {
- const [audio, state, controls, ref] = useAudio({
- src: 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3',
- autoPlay: true,
- });
-
- return (
-
- {audio}
-
{JSON.stringify(state, null, 2)}
-
Pause
-
Play
-
-
Mute
-
Un-mute
-
-
controls.volume(.1)}>Volume: 10%
-
controls.volume(.5)}>Volume: 50%
-
controls.volume(1)}>Volume: 100%
-
-
controls.seek(state.time - 5)}>-5 sec
-
controls.seek(state.time + 5)}>+5 sec
-
- );
-};
-```
-
-
-## Reference
-
-```jsx
-const [audio, state, controls, ref] = useAudio(props);
-const [audio, state, controls] = useAudio( );
-```
-
-`audio` is React's `` element that you have to insert somewhere in your
-render tree, for example:
-
-```jsx
-{audio}
-```
-
-`state` tracks the state of the audio and has the following shape:
-
-```json
-{
- "buffered": [
- {
- "start": 0,
- "end": 425.952625
- }
- ],
- "time": 5.244996,
- "duration": 425.952625,
- "paused": false,
- "muted": false,
- "volume": 1,
- "playing": true
-}
-```
-
-`playing`: The audio is being played and is affected by the network. If it starts to buffer audio, it will be false
-
-`controls` is a list collection of methods that allow you to control the
-playback of the audio, it has the following interface:
-
-```ts
-interface AudioControls {
- play: () => Promise | void;
- pause: () => void;
- mute: () => void;
- unmute: () => void;
- volume: (volume: number) => void;
- seek: (time: number) => void;
-}
-```
-
-`ref` is a React reference to HTML `` element, you can access the element by
-`ref.current`, note that it may be `null`.
-
-And finally, `props` — all props that `` accepts.
diff --git a/docs/useBattery.md b/docs/useBattery.md
deleted file mode 100644
index 32498d866a..0000000000
--- a/docs/useBattery.md
+++ /dev/null
@@ -1,58 +0,0 @@
-# `useBattery`
-
-React sensor hook that tracks battery status.
-
->**Note:** current `BatteryManager` API state is obsolete.
->Although it may still work in some browsers, its use is discouraged since it could be removed at any time.
-
-
-## Usage
-
-```jsx
-import {useBattery} from 'react-use';
-
-const Demo = () => {
- const batteryState = useBattery();
-
- if (!batteryState.isSupported) {
- return (
-
- Battery sensor : not supported
-
- );
- }
-
- if (!batteryState.fetched) {
- return (
-
- Battery sensor : supported
- Battery state : fetching
-
- );
- }
-
- return (
-
- Battery sensor : supported
- Battery state : fetched
- Charge level : { (batteryState.level * 100).toFixed(0) }%
- Charging : { batteryState.charging ? 'yes' : 'no' }
- Charging time :
- { batteryState.chargingTime ? batteryState.chargingTime : 'finished' }
- Discharging time : { batteryState.dischargingTime }
-
- );
-};
-```
-
-## Reference
-
-```ts
-const {isSupported, level, charging, dischargingTime, chargingTime} = useBattery();
-```
-- **`isSupported`**_`: boolean`_ - whether browser/devise supports BatteryManager;
-- **`fetched`**_`: boolean`_ - whether battery state is fetched;
-- **`level`**_`: number`_ - representing the system's battery charge level scaled to a value between 0.0 and 1.0.
-- **`charging`**_`: boolean`_ - indicating whether or not the battery is currently being charged.
-- **`dischargingTime`**_`: number`_ - remaining time in seconds until the battery is completely discharged and the system will suspend.
-- **`chargingTime`**_`: number`_ - remaining time in seconds until the battery is fully charged, or 0 if the battery is already fully charged.
diff --git a/docs/useBeforeUnload.md b/docs/useBeforeUnload.md
deleted file mode 100644
index ca7dbe4a0f..0000000000
--- a/docs/useBeforeUnload.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# `useBeforeUnload`
-
-React side-effect hook that shows browser alert when user try to reload or close the page.
-
-
-## Usage
-
-### Boolean check
-
-```jsx
-import {useBeforeUnload} from 'react-use';
-
-const Demo = () => {
- const [dirty, toggleDirty] = useToggle(false);
- useBeforeUnload(dirty, 'You have unsaved changes, are you sure?');
-
- return (
-
- {dirty &&
Try to reload or close tab
}
-
toggleDirty()}>{dirty ? 'Disable' : 'Enable'}
-
- );
-};
-```
-
-### Function check
-
-Note: Since every `dirtyFn` change registers a new callback, you should use
-[refs](https://reactjs.org/docs/hooks-faq.html#how-to-read-an-often-changing-value-from-usecallback)
-if your test value changes often.
-
-```jsx
-import {useBeforeUnload} from 'react-use';
-
-const Demo = () => {
- const [dirty, toggleDirty] = useToggle(false);
- const dirtyFn = useCallback(() => {
- return dirty;
- }, [dirty]);
- useBeforeUnload(dirtyFn, 'You have unsaved changes, are you sure?');
-
- return (
-
- {dirty &&
Try to reload or close tab
}
-
toggleDirty()}>{dirty ? 'Disable' : 'Enable'}
-
- );
-};
-```
diff --git a/docs/useClickAway.md b/docs/useClickAway.md
deleted file mode 100644
index 84f83cabdb..0000000000
--- a/docs/useClickAway.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# `useClickAway`
-
-React UI hook that triggers a callback when user
-clicks outside the target element.
-
-
-## Usage
-
-```jsx
-import {useClickAway} from 'react-use';
-
-const Demo = () => {
- const ref = useRef(null);
- useClickAway(ref, () => {
- console.log('OUTSIDE CLICKED');
- });
-
- return (
-
- );
-};
-```
-
-## Reference
-
-```js
-useClickAway(ref, onMouseEvent)
-useClickAway(ref, onMouseEvent, ['click'])
-useClickAway(ref, onMouseEvent, ['mousedown', 'touchstart'])
-```
diff --git a/docs/useCookie.md b/docs/useCookie.md
deleted file mode 100644
index 92bf9f63e7..0000000000
--- a/docs/useCookie.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# `useCookie`
-
-React hook that returns the current value of a `cookie`, a callback to update the `cookie`
-and a callback to delete the `cookie.`
-
-## Usage
-
-```jsx
-import { useCookie } from "react-use";
-
-const Demo = () => {
- const [value, updateCookie, deleteCookie] = useCookie("my-cookie");
- const [counter, setCounter] = useState(1);
-
- useEffect(() => {
- deleteCookie();
- }, []);
-
- const updateCookieHandler = () => {
- updateCookie(`my-awesome-cookie-${counter}`);
- setCounter(c => c + 1);
- };
-
- return (
-
-
Value: {value}
-
Update Cookie
-
-
Delete Cookie
-
- );
-};
-```
-
-## Reference
-
-```ts
-const [value, updateCookie, deleteCookie] = useCookie(cookieName: string);
-```
diff --git a/docs/useCopyToClipboard.md b/docs/useCopyToClipboard.md
deleted file mode 100644
index a4822b34d3..0000000000
--- a/docs/useCopyToClipboard.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# `useCopyToClipboard`
-
-Copy text to a user's clipboard.
-
-## Usage
-
-```jsx
-const Demo = () => {
- const [text, setText] = React.useState('');
- const [state, copyToClipboard] = useCopyToClipboard();
-
- return (
-
-
setText(e.target.value)} />
-
copyToClipboard(text)}>copy text
- {state.error
- ?
Unable to copy value: {state.error.message}
- : state.value &&
Copied {state.value}
}
-
- )
-}
-```
-
-## Reference
-
-```js
-const [{value, error, noUserInteraction}, copyToClipboard] = useCopyToClipboard();
-```
-
-- `value` — value that was copied to clipboard, undefined when nothing was copied.
-- `error` — caught error when trying to copy to clipboard.
-- `noUserInteraction` — boolean indicating if user interaction was required to copy the value to clipboard to expose full API from underlying [`copy-to-clipboard`](https://github.com/sudodoki/copy-to-clipboard) library.
diff --git a/docs/useCounter.md b/docs/useCounter.md
deleted file mode 100644
index 3f49752ef6..0000000000
--- a/docs/useCounter.md
+++ /dev/null
@@ -1,60 +0,0 @@
-# `useCounter`
-
-React state hook that tracks a numeric value.
-
-`useNumber` is an alias for `useCounter`.
-
-
-## Usage
-
-```jsx
-import {useCounter, useNumber} from 'react-use';
-
-const Demo = () => {
- const [min, { inc: incMin, dec: decMin }] = useCounter(1);
- const [max, { inc: incMax, dec: decMax }] = useCounter(10);
- const [value, { inc, dec, set, reset }] = useCounter(5, max, min);
-
- return (
-
-
- current: { value } [min: { min }; max: { max }]
-
-
-
- Current value:
inc() }>Increment
-
dec() }>Decrement
-
inc(5) }>Increment (+5)
-
dec(5) }>Decrement (-5)
-
set(100) }>Set 100
-
reset() }>Reset
-
reset(25) }>Reset (25)
-
-
-
- Min value:
-
incMin() }>Increment
-
decMin() }>Decrement
-
-
-
- Max value:
-
incMax() }>Increment
-
decMax() }>Decrement
-
- );
-};
-```
-
-
-## Reference
-
-```ts
-const [ current, { inc, dec, get, set, reset } ] = useCounter(initial: number, max: number | null = null, min: number | null = null);
-```
-- `current` - current counter value;
-- `get(): number` - getter of current counter value;
-- `inc(delta: number): void` - increment current value;
-- `dec(delta: number): void` - decrement current value;
-- `set(value: number): void` - set arbitrary value;
-- `reset(value: number): void` - as the `set`, but also will assign value by reference to the `initial` parameter;
diff --git a/docs/useCss.md b/docs/useCss.md
deleted file mode 100644
index 98530dd5e9..0000000000
--- a/docs/useCss.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# `useCss`
-
-React UI hook that changes [CSS dynamically][gen-5]. Works like "virtual CSS" —
-it re-renders only CSS rules that change. It is different from inline styles, because
-you can use media queries and pseudo selectors.
-
-
-## Usage
-
-```jsx
-import {useCss} from 'react-use';
-
-const Demo = () => {
- const className = useCss({
- color: 'red',
- border: '1px solid red',
- '&:hover': {
- color: 'blue',
- },
- });
-
- return (
-
- Hover me!
-
- );
-};
-```
-
-
-## Examples
-
-```js
-const className = useCss({
- color: 'tomato',
- '&:hover': {
- color: 'orange',
- },
-});
-
-const className = useCss({
- svg: {
- fill: 'tomato',
- },
- '.global_class &:hover svg': {
- fill: 'orange',
- },
-});
-
-const className = useCss({
- color: 'tomato',
- '@media only screen and (max-width: 600px)': {
- color: 'orange',
- '&:hover': {
- color: 'red',
- }
- },
-});
-```
-
-[gen-5]: https://github.com/streamich/freestyler/blob/master/docs/en/generations.md#5th-generation
diff --git a/docs/useCustomCompareEffect.md b/docs/useCustomCompareEffect.md
deleted file mode 100644
index 3ec8f7265d..0000000000
--- a/docs/useCustomCompareEffect.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# `useCustomCompareEffect`
-
-A modified useEffect hook that accepts a comparator which is used for comparison on dependencies instead of reference equality.
-
-## Usage
-
-```jsx
-import {useCounter, useCustomCompareEffect} from 'react-use';
-import isEqual from 'lodash/isEqual';
-
-const Demo = () => {
- const [count, {inc: inc}] = useCounter(0);
- const options = { step: 2 };
-
- useCustomCompareEffect(() => {
- inc(options.step)
- }, [options], (prevDeps, nextDeps) => isEqual(prevDeps, nextDeps));
-
- return (
-
-
useCustomCompareEffect with deep comparison: {count}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useCustomCompareEffect(effect: () => void | (() => void | undefined), deps: any[], depsEqual: (prevDeps: any[], nextDeps: any[]) => boolean);
-```
diff --git a/docs/useDebounce.md b/docs/useDebounce.md
deleted file mode 100644
index 151e9a2af8..0000000000
--- a/docs/useDebounce.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# `useDebounce`
-
-React hook that delays invoking a function until after wait milliseconds have elapsed since the last time the debounced function was invoked.
-
-The third argument is the array of values that the debounce depends on, in the same manner as useEffect. The debounce timeout will start when one of the values changes.
-
-## Usage
-
-```jsx
-const Demo = () => {
- const [state, setState] = React.useState('Typing stopped');
- const [val, setVal] = React.useState('');
- const [debouncedValue, setDebouncedValue] = React.useState('');
-
- const [, cancel] = useDebounce(
- () => {
- setState('Typing stopped');
- setDebouncedValue(val);
- },
- 2000,
- [val]
- );
-
- return (
-
-
{
- setState('Waiting for typing to stop...');
- setVal(currentTarget.value);
- }}
- />
-
{state}
-
- Debounced value: {debouncedValue}
- Cancel debounce
-
-
- );
-};
-```
-
-## Reference
-
-```ts
-const [
- isReady: () => boolean | null,
- cancel: () => void,
-] = useDebounce(fn: Function, ms: number, deps: DependencyList = []);
-```
-
-- **`fn`**_`: Function`_ - function that will be called;
-- **`ms`**_`: number`_ - delay in milliseconds;
-- **`deps`**_`: DependencyList`_ - array of values that the debounce depends on, in the same manner as useEffect;
-- **`isReady`**_`: ()=>boolean|null`_ - function returning current debounce state:
- - `false` - pending
- - `true` - called
- - `null` - cancelled
-- **`cancel`**_`: ()=>void`_ - cancel the debounce
diff --git a/docs/useDeepCompareEffect.md b/docs/useDeepCompareEffect.md
deleted file mode 100644
index 9ed37c4d8b..0000000000
--- a/docs/useDeepCompareEffect.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# `useDeepCompareEffect`
-
-A modified useEffect hook that is using deep comparison on its dependencies instead of reference equality.
-
-## Usage
-
-```jsx
-import {useCounter, useDeepCompareEffect} from 'react-use';
-
-const Demo = () => {
- const [count, {inc: inc}] = useCounter(0);
- const options = { step: 2 };
-
- useDeepCompareEffect(() => {
- inc(options.step)
- }, [options]);
-
- return (
-
-
useDeepCompareEffect: {count}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useDeepCompareEffect(effect: () => void | (() => void | undefined), deps: any[]);
-```
diff --git a/docs/useDefault.md b/docs/useDefault.md
deleted file mode 100644
index 9ef0bc7de5..0000000000
--- a/docs/useDefault.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# `useDefault`
-
-React state hook that returns the default value when state is null or undefined.
-
-## Usage
-
-```jsx
-import {useDefault} from 'react-use';
-
-const Demo = () => {
- const initialUser = { name: 'Marshall' }
- const defaultUser = { name: 'Mathers' }
- const [user, setUser] = useDefault(defaultUser, initialUser);
-
- return (
-
-
User: {user.name}
-
setUser({ name: e.target.value })} />
-
setUser(null)}>set to null
-
- );
-};
-```
diff --git a/docs/useDrop.md b/docs/useDrop.md
deleted file mode 100644
index 5fee420849..0000000000
--- a/docs/useDrop.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# `useDrop` and `useDropArea`
-
-Triggers on file, link drop and copy-paste.
-
-`useDrop` tracks events for the whole page, `useDropArea` tracks drop events
-for a specific element.
-
-
-## Usage
-
-`useDrop`:
-
-```jsx
-import {useDrop} from 'react-use';
-
-const Demo = () => {
- const state = useDrop({
- onFiles: files => console.log('files', files),
- onUri: uri => console.log('uri', uri),
- onText: text => console.log('text', text),
- });
-
- return (
-
- Drop something on the page.
-
- );
-};
-```
-
-`useDropArea`:
-
-```jsx
-import {useDropArea} from 'react-use';
-
-const Demo = () => {
- const [bond, state] = useDropArea({
- onFiles: files => console.log('files', files),
- onUri: uri => console.log('uri', uri),
- onText: text => console.log('text', text),
- });
-
- return (
-
- Drop something here.
-
- );
-};
-```
diff --git a/docs/useEffectOnce.md b/docs/useEffectOnce.md
deleted file mode 100644
index bb93bb6e89..0000000000
--- a/docs/useEffectOnce.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# `useEffectOnce`
-
-React lifecycle hook that runs an effect only once.
-
-## Usage
-
-```jsx
-import {useEffectOnce} from 'react-use';
-
-const Demo = () => {
- useEffectOnce(() => {
- console.log('Running effect once on mount')
-
- return () => {
- console.log('Running clean-up of effect on unmount')
- }
- });
-
- return null;
-};
-```
-
-## Reference
-
-```js
-useEffectOnce(effect: EffectCallback);
-```
diff --git a/docs/useEnsuredForwardedRef.md b/docs/useEnsuredForwardedRef.md
deleted file mode 100644
index b094a284bc..0000000000
--- a/docs/useEnsuredForwardedRef.md
+++ /dev/null
@@ -1,63 +0,0 @@
-# `useEnsuredForwardedRef`
-
-React hook to use a ForwardedRef safely.
-
-In some scenarios, you may need to use a _ref_ from inside and outside a component. If that's the case, you should use `React.forwardRef` to pass it through the child component. This is useful when you only want to forward that _ref_ and expose an internal `HTMLelement` to a parent component, for example. However, if you need to manipulate that reference inside a child's lifecycle hook... things get complicated, since you can't always ensure that the _ref_ is being sent by the parent component and if it is not, you will get `undefined` instead of a valid _ref_.
-
-This hook is useful in this specific case, it will __ensure__ that you get a valid reference on the other side.
-
-## Usage
-
-```jsx
-import {ensuredForwardRef} from 'react-use';
-
-const Demo = () => {
- return (
-
- );
-};
-
-const Child = ensuredForwardRef((props, ref) => {
- useEffect(() => {
- console.log(ref.current.getBoundingClientRect())
- }, [])
-
- return (
-
- );
-});
-```
-
-## Alternative usage
-
-```jsx
-import {useEnsuredForwardedRef} from 'react-use';
-
-const Demo = () => {
- return (
-
- );
-};
-
-const Child = React.forwardRef((props, ref) => {
- // Here `ref` is undefined
- const ensuredForwardRef = useEnsuredForwardedRef(ref);
- // ensuredForwardRef will always be a valid reference.
-
- useEffect(() => {
- console.log(ensuredForwardRef.current.getBoundingClientRect())
- }, [])
-
- return (
-
- );
-});
-```
-
-## Reference
-
-```ts
-ensuredForwardRef(Component: RefForwardingComponent): ForwardRefExoticComponent & RefAttributes>;
-
-useEnsuredForwardedRef(ref: React.MutableRefObject): React.MutableRefObject;
-```
diff --git a/docs/useError.md b/docs/useError.md
deleted file mode 100644
index 5a506f6d66..0000000000
--- a/docs/useError.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# `useError`
-
-React side-effect hook that returns an error dispatcher.
-
-## Usage
-
-```jsx
-import { useError } from 'react-use';
-
-const Demo = () => {
- const dispatchError = useError();
-
- const clickHandler = () => {
- dispatchError(new Error('Some error!'));
- };
-
- return Click me to throw ;
-};
-
-// In parent app
-const App = () => (
-
-
-
-);
-```
-
-## Reference
-
-```js
-const dispatchError = useError();
-```
-
-- `dispatchError` — Callback of type `(err: Error) => void`
diff --git a/docs/useEvent.md b/docs/useEvent.md
deleted file mode 100644
index a800296013..0000000000
--- a/docs/useEvent.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# `useEvent`
-
-React sensor hook that subscribes a `handler` to events.
-
-
-## Usage
-
-```jsx
-import {useEvent, useList} from 'react-use';
-
-const Demo = () => {
- const [list, {push, clear}] = useList();
-
- const onKeyDown = useCallback(({key}) => {
- if (key === 'r') clear();
- push(key);
- }, []);
-
- useEvent('keydown', onKeyDown);
-
- return (
-
-
- Press some keys on your keyboard, r key resets the list
-
-
- {JSON.stringify(list, null, 4)}
-
-
- );
-};
-```
-
-
-## Examples
-
-```js
-useEvent('keydown', handler)
-useEvent('scroll', handler, window, {capture: true})
-```
diff --git a/docs/useFavicon.md b/docs/useFavicon.md
deleted file mode 100644
index 1302445d6e..0000000000
--- a/docs/useFavicon.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# `useFavicon`
-
-React side-effect hook sets the favicon of the page.
-
-
-## Usage
-
-```jsx
-import {useFavicon} from 'react-use';
-
-const Demo = () => {
- useFavicon('https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico');
-
- return null;
-};
-```
diff --git a/docs/useFirstMountState.md b/docs/useFirstMountState.md
deleted file mode 100644
index 8d2a737389..0000000000
--- a/docs/useFirstMountState.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# `useFirstMountState`
-
-Returns `true` if component is just mounted (on first render) and `false` otherwise.
-
-## Usage
-
-```typescript jsx
-import * as React from 'react';
-import { useFirstMountState } from 'react-use';
-
-const Demo = () => {
- const isFirstMount = useFirstMountState();
- const update = useUpdate();
-
- return (
-
- This component is just mounted: {isFirstMount ? 'YES' : 'NO'}
-
- re-render
-
- );
-};
-```
-
-## Reference
-
-```typescript
-const isFirstMount: boolean = useFirstMountState();
-```
diff --git a/docs/useFullscreen.md b/docs/useFullscreen.md
deleted file mode 100644
index 246f57c725..0000000000
--- a/docs/useFullscreen.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# `useFullscreen`
-
-Display an element full-screen, optional fallback for fullscreen video on iOS.
-
-## Usage
-
-```jsx
-import {useFullscreen, useToggle} from 'react-use';
-
-const Demo = () => {
- const ref = useRef(null)
- const [show, toggle] = useToggle(false);
- const isFullscreen = useFullscreen(ref, show, {onClose: () => toggle(false)});
-
- return (
-
-
{isFullscreen ? 'Fullscreen' : 'Not fullscreen'}
-
toggle()}>Toggle
-
-
- );
-};
-```
-
-## Reference
-
-```ts
-useFullscreen(ref, show, {onClose})
-```
diff --git a/docs/useGeolocation.md b/docs/useGeolocation.md
deleted file mode 100644
index 91ad346fb7..0000000000
--- a/docs/useGeolocation.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# `useGeolocation`
-
-React sensor hook that tracks user's geographic location. This hook accepts [position options](https://developer.mozilla.org/docs/Web/API/PositionOptions).
-
-## Usage
-
-```jsx
-import {useGeolocation} from 'react-use';
-
-const Demo = () => {
- const state = useGeolocation();
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useGeolocation(options: PositionOptions)
-```
diff --git a/docs/useGetSet.md b/docs/useGetSet.md
deleted file mode 100644
index bda5cd40e1..0000000000
--- a/docs/useGetSet.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# `useGetSet`
-
-React state hook that returns state getter function instead of
-raw state itself, this prevents subtle bugs when state is used
-in nested functions.
-
-
-## Usage
-
-Below example uses `useGetSet` to increment a number after 1 second
-on each click.
-
-```jsx
-import {useGetSet} from 'react-use';
-
-const Demo = () => {
- const [get, set] = useGetSet(0);
- const onClick = () => {
- setTimeout(() => {
- set(get() + 1)
- }, 1_000);
- };
-
- return (
- Clicked: {get()}
- );
-};
-```
-
-If you would do this example in a naive way using regular `useState`
-hook, the counter would not increment correctly if you click fast multiple times.
-
-```jsx
-const DemoWrong = () => {
- const [cnt, set] = useState(0);
- const onClick = () => {
- setTimeout(() => {
- set(cnt + 1)
- }, 1_000);
- };
-
- return (
- Clicked: {cnt}
- );
-};
-```
diff --git a/docs/useGetSetState.md b/docs/useGetSetState.md
deleted file mode 100644
index 7bd9edbde3..0000000000
--- a/docs/useGetSetState.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# `useGetSetState`
-
-A mix of `useGetSet` and `useGetSetState`.
-
-
-## Usage
-
-```jsx
-import {useGetSetState} from 'react-use';
-
-const Demo = () => {
- const [get, setState] = useGetSetState({cnt: 0});
- const onClick = () => {
- setTimeout(() => {
- setState({cnt: get().cnt + 1})
- }, 1000);
- };
-
- return (
- Clicked: {get().cnt}
- );
-};
-```
diff --git a/docs/useHarmonicIntervalFn.md b/docs/useHarmonicIntervalFn.md
deleted file mode 100644
index 47e3620f3d..0000000000
--- a/docs/useHarmonicIntervalFn.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# `useHarmonicIntervalFn`
-
-Same as [`useInterval`](./useInterval.md) hook, but triggers all effects with the same delay
-at the same time.
-
-For example, this allows you to create ticking clocks on the page which re-render second counter
-all at the same time.
-
-
-## Reference
-
-```js
-useHarmonicIntervalFn(fn, delay?: number)
-```
diff --git a/docs/useHash.md b/docs/useHash.md
deleted file mode 100644
index 7cb4092b6f..0000000000
--- a/docs/useHash.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# `useHash`
-
-React sensor hook that tracks browser's location hash.
-
-## Usage
-
-```jsx
-import {useHash} from 'react-use';
-
-const Demo = () => {
- const [hash, setHash] = useHash();
-
- useMount(() => {
- setHash('#/path/to/page?userId=123');
- });
-
- return (
-
-
window.location.href:
-
-
{window.location.href}
-
-
Edit hash:
-
- setHash(e.target.value)} />
-
-
- );
-};
-```
-
-## API
-
-`const [hash, setHash] = useHash()`
-
-Get latest url hash with `hash` and set url hash with `setHash`.
-
-- `hash: string`: get current url hash. listen to `hashchange` event.
-- `setHash: (newHash: string) => void`: change url hash. Invoke this method will trigger `hashchange` event.
\ No newline at end of file
diff --git a/docs/useHover.md b/docs/useHover.md
deleted file mode 100644
index b88e909e79..0000000000
--- a/docs/useHover.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# `useHover` and `useHoverDirty`
-
-React UI sensor hooks that track if some element is being hovered
-by a mouse.
-
-- `useHover` accepts a React element or a function that returns one,
-`useHoverDirty` accepts React ref.
-- `useHover` sets react `onMouseEnter` and `onMouseLeave` events,
-`useHoverDirty` sets DOM `onmouseover` and `onmouseout` events.
-
-
-## Usage
-
-```jsx
-import {useHover} from 'react-use';
-
-const Demo = () => {
- const element = (hovered) =>
-
- Hover me! {hovered && 'Thanks!'}
-
;
- const [hoverable, hovered] = useHover(element);
-
- return (
-
- {hoverable}
-
{hovered ? 'HOVERED' : ''}
-
- );
-};
-```
-
-
-## Reference
-
-```js
-const [newReactElement, isHovering] = useHover(reactElement);
-const [newReactElement, isHovering] = useHover((isHovering) => reactElement);
-const isHovering = useHoverDirty(ref);
-```
diff --git a/docs/useIdle.md b/docs/useIdle.md
deleted file mode 100644
index 986429f7f5..0000000000
--- a/docs/useIdle.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# `useIdle`
-
-React sensor hook that tracks if user on the page is idle.
-
-
-## Usage
-
-```jsx
-import {useIdle} from 'react-use';
-
-const Demo = () => {
- const isIdle = useIdle(3e3);
-
- return (
-
-
User is idle: {isIdle ? 'Yes 😴' : 'Nope'}
-
- );
-};
-```
-
-
-## Reference
-
-```js
-useIdle(ms, initialState);
-```
-
-- `ms` — time in milliseconds after which to consider use idle, defaults to `60e3` — one minute.
-- `initialState` — whether to consider user initially idle, defaults to false.
diff --git a/docs/useIntersection.md b/docs/useIntersection.md
deleted file mode 100644
index 802ee1da6a..0000000000
--- a/docs/useIntersection.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `useIntersection`
-
-React sensor hook that tracks the changes in the intersection of a target element with an ancestor element or with a top-level document's viewport. Uses the [Intersection Observer API](https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API) and returns a [IntersectionObserverEntry](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserverEntry).
-
-## Usage
-
-```jsx
-import * as React from 'react';
-import { useIntersection } from 'react-use';
-
-const Demo = () => {
- const intersectionRef = React.useRef(null);
- const intersection = useIntersection(intersectionRef, {
- root: null,
- rootMargin: '0px',
- threshold: 1
- });
-
- return (
-
- {intersection && intersection.intersectionRatio < 1
- ? 'Obscured'
- : 'Fully in view'}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useIntersection(
- ref: RefObject,
- options: IntersectionObserverInit,
-): IntersectionObserverEntry | null;
-```
diff --git a/docs/useInterval.md b/docs/useInterval.md
deleted file mode 100644
index 5c3ae9a7ab..0000000000
--- a/docs/useInterval.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# `useInterval`
-
-A declarative interval hook based on [Dan Abramov's article on overreacted.io](https://overreacted.io/making-setinterval-declarative-with-react-hooks). The interval can be paused by setting the delay to `null`.
-
-## Usage
-
-```jsx
-import * as React from 'react';
-import {useInterval} from 'react-use';
-
-const Demo = () => {
- const [count, setCount] = React.useState(0);
- const [delay, setDelay] = React.useState(1000);
- const [isRunning, toggleIsRunning] = useBoolean(true);
-
- useInterval(
- () => {
- setCount(count + 1);
- },
- isRunning ? delay : null
- );
-
- return (
-
-
- delay: setDelay(Number(event.target.value))} />
-
-
count: {count}
-
- {isRunning ? 'stop' : 'start'}
-
-
- );
-};
-```
-
-## Reference
-
-```js
-useInterval(callback, delay?: number)
-```
diff --git a/docs/useIsomorphicLayoutEffect.md b/docs/useIsomorphicLayoutEffect.md
deleted file mode 100644
index 11620a5d02..0000000000
--- a/docs/useIsomorphicLayoutEffect.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# `useIsomorphicLayoutEffect`
-
-`useLayoutEffect` that does not show warning when server-side rendering, see [Alex Reardon's article](https://medium.com/@alexandereardon/uselayouteffect-and-ssr-192986cdcf7a) for more info.
-
-## Usage
-
-```jsx
-import {useIsomorphicLayoutEffect} from 'react-use';
-
-const Demo = ({value}) => {
- useIsomorphicLayoutEffect(() => {
- window.console.log(value)
- }, [value]);
-
- return null;
-};
-```
-
-
-## Reference
-
-```ts
-useIsomorphicLayoutEffect(effect: EffectCallback, deps?: ReadonlyArray | undefined);
-```
diff --git a/docs/useKey.md b/docs/useKey.md
deleted file mode 100644
index ef626f356f..0000000000
--- a/docs/useKey.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# `useKey`
-
-React UI sensor hook that executes a `handler` when a keyboard key is used.
-
-## Usage
-
-```jsx
-import {useKey} from 'react-use';
-
-const Demo = () => {
- const [count, set] = useState(0);
- const increment = () => set(count => ++count);
- useKey('ArrowUp', increment);
-
- return (
-
- Press arrow up: {count}
-
- );
-};
-```
-
-Or as render-prop:
-
-```jsx
-import UseKey from 'react-use/lib/component/UseKey';
-
- alert('"a" key pressed!')} />
-```
-
-
-## Reference
-
-```js
-useKey(filter, handler, options?, deps?)
-```
-
-
-## Examples
-
-```js
-useKey('a', () => alert('"a" pressed'));
-
-const predicate = (event) => event.key === 'a'
-useKey(predicate, handler, {event: 'keyup'});
-```
diff --git a/docs/useKeyPress.md b/docs/useKeyPress.md
deleted file mode 100644
index a68ee8f64b..0000000000
--- a/docs/useKeyPress.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `useKeyPress`
-
-React UI sensor hook that detects when the user is pressing a specific
-key on their keyboard.
-
-
-## Usage
-
-```jsx
-import {useKeyPress} from 'react-use';
-
-const keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];
-
-const Demo = () => {
- const states = [];
- for (const key of keys) states.push(useKeyPress(key)[0]);
-
- return (
-
- Try pressing numbers
-
- {states.reduce((s, pressed, index) => s + (pressed ? (s ? ' + ' : '') + keys[index] : ''), '')}
-
- );
-};
-```
-
-
-## Examples
-
-```js
-const isPressed = useKeyPress('a');
-
-const predicate = (event) => event.key === 'a';
-const isPressed = useKeyPress(predicate);
-```
diff --git a/docs/useKeyPressEvent.md b/docs/useKeyPressEvent.md
deleted file mode 100644
index 3b29b0980a..0000000000
--- a/docs/useKeyPressEvent.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# `useKeyPressEvent`
-
-This hook fires `keydown` and `keyup` callbacks, similar to how [`useKey`](./useKey.md)
-hook does, but it only triggers each callback once per press cycle. For example,
-if you press and hold a key, it will fire `keydown` callback only once.
-
-
-## Usage
-
-```jsx
-import React, { useState } from React;
-import {useKeyPressEvent} from 'react-use';
-
-const Demo = () => {
- const [count, setCount] = useState(0);
-
- const increment = () => setCount(count => ++count);
- const decrement = () => setCount(count => --count);
- const reset = () => setCount(count => 0);
-
- useKeyPressEvent(']', increment, increment);
- useKeyPressEvent('[', decrement, decrement);
- useKeyPressEvent('r', reset);
-
- return (
-
-
- Try pressing [, ], and r to
- see the count incremented and decremented.
-
Count: {count}
-
- );
-};
-```
-
-
-## Reference
-
-```js
-useKeyPressEvent('', keydown);
-useKeyPressEvent('', keydown, keyup);
-useKeyPressEvent('', keydown, keyup, useKeyPress);
-```
diff --git a/docs/useKeyboardJs.md b/docs/useKeyboardJs.md
deleted file mode 100644
index 3df9d49d1b..0000000000
--- a/docs/useKeyboardJs.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# `useKeyboardJs`
-
-React UI sensor hook that detects complex key combos like detecting when
-multiple keys are held down at the same time or requiring them to be held down in a specified order.
-
-Via [KeyboardJS key combos](https://github.com/RobertWHurst/KeyboardJS).
-Check its documentation for further details on how to make combo strings.
-
-## Usage
-
-```jsx
-import useKeyboardJs from 'react-use/lib/useKeyboardJs';
-
-const Demo = () => {
- const [isPressed] = useKeyboardJs('a + b');
-
- return (
-
- [a + b] pressed: {isPressed ? 'Yes' : 'No'}
-
- );
-};
-```
-
-Note: Because of dependency on `keyboardjs` you have to import this hook directly like shown above.
-
-## Requirements
-
-Install [`keyboardjs`](https://github.com/RobertWHurst/KeyboardJS) peer dependency:
-
-```bash
-npm add keyboardjs
-# or
-yarn add keyboardjs
-```
-
-## Reference
-
-```js
-useKeyboardJs(combination: string | string[]): [isPressed: boolean, event?: KeyboardEvent]
-```
diff --git a/docs/useLatest.md b/docs/useLatest.md
deleted file mode 100644
index cf1cc752dc..0000000000
--- a/docs/useLatest.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `useLatest`
-
-React state hook that returns the latest state as described in the [React hooks FAQ](https://reactjs.org/docs/hooks-faq.html#why-am-i-seeing-stale-props-or-state-inside-my-function).
-
-This is mostly useful to get access to the latest value of some props or state inside an asynchronous callback, instead of that value at the time the callback was created from.
-
-## Usage
-
-```jsx
-import { useLatest } from 'react-use';
-
-const Demo = () => {
- const [count, setCount] = React.useState(0);
- const latestCount = useLatest(count);
-
- function handleAlertClick() {
- setTimeout(() => {
- alert(`Latest count value: ${latestCount.current}`);
- }, 3000);
- }
-
- return (
-
-
You clicked {count} times
-
setCount(count + 1)}>Click me
-
Show alert
-
- );
-};
-```
-
-## Reference
-
-```ts
-const latestState = useLatest = (state: T): MutableRefObject;
-```
diff --git a/docs/useLifecycles.md b/docs/useLifecycles.md
deleted file mode 100644
index 37df081675..0000000000
--- a/docs/useLifecycles.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# `useLifecycles`
-
-React lifecycle hook that call `mount` and `unmount` callbacks, when
-component is mounted and un-mounted, respectively.
-
-
-## Usage
-
-```jsx
-import {useLifecycles} from 'react-use';
-
-const Demo = () => {
- useLifecycles(() => console.log('MOUNTED'), () => console.log('UNMOUNTED'));
- return null;
-};
-```
-
-
-## Reference
-
-```js
-useLifecycles(mount, unmount);
-```
diff --git a/docs/useList.md b/docs/useList.md
deleted file mode 100644
index caffe42f6b..0000000000
--- a/docs/useList.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# `useList`
-
-Tracks an array and provides methods to modify it.
-To cause component re-render you have to use these methods instead of direct interaction with array - it won't cause re-render.
-
-We can ensure that actions object and actions itself will not mutate or change between renders, so there is no need to add it to useEffect dependencies and safe to pass them down to children.
-
-**Note:** `remove` action is deprecated and actually is a copy of `removeAt` action. Within closest updates it will gain different functionality.
-
-## Usage
-
-```jsx
-import {useList} from 'react-use';
-
-const Demo = () => {
- const [list, { set, push, updateAt, insertAt, update, updateFirst, upsert, sort, filter, removeAt, clear, reset }] = useList([1, 2, 3, 4, 5]);
-
- return (
-
-
set([1, 2, 3])}>Set to [1, 2, 3]
-
push(Date.now())}>Push timestamp
-
updateAt(1, Date.now())}>Update value at index 1
-
remove(1)}>Remove element at index 1
-
filter(item => item % 2 === 0)}>Filter even values
-
sort((a, b) => a - b)}>Sort ascending
-
sort((a, b) => b - a)}>Sort descending
-
Clear
-
Reset
-
{JSON.stringify(list, null, 2)}
-
- );
-};
-```
-
-## Reference
-```ts
-import {useList} from "react-use";
-
-const [list, {
- set,
- push,
- updateAt,
- insertAt,
- update,
- updateFirst,
- upsert,
- sort,
- filter,
- removeAt,
- remove,
- clear,
- reset
-}] = useList(array: any[] | ()=> any[]);
-```
-
-- **`list`**_`: T{}`_ — current list;
-- **`set`**_`: (list: T[]) => void;`_ — Set new list instead old one;
-- **`push`**_`: (...items: T[]) => void;`_ — Add item(s) at the end of list;
-- **`updateAt`**_`: (index: number, item: T) => void;`_ — Replace item at given position. If item at given position not exists it will be set;
-- **`insertAt`**_`: (index: number, item: T) => void;`_ — Insert item at given position, all items to the right will be shifted;
-- **`update`**_`: (predicate: (a: T, b: T) => boolean, newItem: T) => void;`_ — Replace all items that matches predicate with given one;
-- **`updateFirst`**_`: (predicate: (a: T, b: T) => boolean, newItem: T) => void;`_ — Replace first item matching predicate with given one;
-- **`upsert`**_`: (predicate: (a: T, b: T) => boolean, newItem: T) => void;`_ — Like `updateFirst` but in case of predicate miss - pushes item to the list;
-- **`sort`**_`: (compareFn?: (a: T, b: T) => number) => void;`_ — Sort list with given sorting function;
-- **`filter`**_`: (callbackFn: (value: T, index?: number, array?: T[]) => boolean, thisArg?: any) => void;`_ — Same as native Array's method;
-- **`removeAt`**_`: (index: number) => void;`_ — Removes item at given position. All items to the right from removed will be shifted;
-- **`remove`**_`: (index: number) => void;`_ — _**DEPRECATED:**_ Use removeAt method instead;
-- **`clear`**_`: () => void;`_ — Make the list empty;
-- **`reset`**_`: () => void;`_ — Reset list to initial value;
-
-## Related hooks
-
-- [useUpsert](./useUpsert.md)
diff --git a/docs/useLocalStorage.md b/docs/useLocalStorage.md
deleted file mode 100644
index a00c68a600..0000000000
--- a/docs/useLocalStorage.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# `useLocalStorage`
-
-React side-effect hook that manages a single `localStorage` key.
-
-## Usage
-
-```jsx
-import { useLocalStorage } from 'react-use';
-
-const Demo = () => {
- const [value, setValue, remove] = useLocalStorage('my-key', 'foo');
-
- return (
-
-
Value: {value}
-
setValue('bar')}>bar
-
setValue('baz')}>baz
-
remove()}>Remove
-
- );
-};
-```
-
-## Reference
-
-```js
-useLocalStorage(key);
-useLocalStorage(key, initialValue);
-useLocalStorage(key, initialValue, { raw: true });
-useLocalStorage(key, initialValue, {
- raw: false,
- serializer: (value: T) => string,
- deserializer: (value: string) => T,
-});
-```
-
-- `key` — `localStorage` key to manage.
-- `initialValue` — initial value to set, if value in `localStorage` is empty.
-- `raw` — boolean, if set to `true`, hook will not attempt to JSON serialize stored values.
-- `serializer` — custom serializer (defaults to `JSON.stringify`)
-- `deserializer` — custom deserializer (defaults to `JSON.parse`)
diff --git a/docs/useLocation.md b/docs/useLocation.md
deleted file mode 100644
index bf572f98b4..0000000000
--- a/docs/useLocation.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# `useLocation`
-
-React sensor hook that tracks brower's location.
-
-For Internet Explorer you need to [install a polyfill](https://github.com/streamich/react-use/issues/73).
-
-
-## Usage
-
-```jsx
-import {useLocation} from 'react-use';
-
-const Demo = () => {
- const state = useLocation();
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
diff --git a/docs/useLockBodyScroll.md b/docs/useLockBodyScroll.md
deleted file mode 100644
index ee2f819713..0000000000
--- a/docs/useLockBodyScroll.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# `useLockBodyScroll`
-
-React side-effect hook that locks scrolling on the body element. Useful for modal and other overlay components.
-
-Accepts ref object pointing to any HTML element as second parameter. Parent body element will be found and it's scroll will be locked/unlocked. It is needed to proper iFrame handling.
-By default it uses body element of script's parent window.
-
->Note: To improve performance you can pass body's or iframe's ref object, thus no parent lookup will be performed
-
-## Usage
-
-```jsx
-import {useLockBodyScroll, useToggle} from 'react-use';
-
-const Demo = () => {
- const [locked, toggleLocked] = useToggle(false)
-
- useLockBodyScroll(locked);
-
- return (
-
- toggleLocked()}>
- {locked ? 'Unlock' : 'Lock'}
-
-
- );
-};
-```
-
-## Reference
-
-```ts
-useLockBodyScroll(locked: boolean = true, elementRef?: RefObject);
-```
-
-- `locked` — Hook will lock scrolling on the body element if `true`, defaults to `true`
-- `elementRef` — The element ref object to find the body element. Can be either a ref to body or iframe element.
diff --git a/docs/useLogger.md b/docs/useLogger.md
deleted file mode 100644
index 662b6b072d..0000000000
--- a/docs/useLogger.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# `useLogger`
-
-React lifecycle hook that console logs parameters as component transitions through lifecycles.
-
-## Usage
-
-```jsx
-import {useLogger} from 'react-use';
-
-const Demo = (props) => {
- useLogger('Demo', props);
- return null;
-};
-```
-
-## Example Output
-
-```
-Demo mounted {}
-Demo updated {}
-Demo unmounted
-```
-
-## Reference
-
-```js
-useLogger(componentName: string, ...rest);
-```
-
-- `componentName` — component name.
-- `...rest` — parameters to log.
diff --git a/docs/useLongPress.md b/docs/useLongPress.md
deleted file mode 100644
index 59109166ca..0000000000
--- a/docs/useLongPress.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# `useLongPress`
-
-React sensor hook that fires a callback after long pressing.
-
-## Usage
-
-```jsx
-import { useLongPress } from 'react-use';
-
-const Demo = () => {
- const onLongPress = () => {
- console.log('calls callback after long pressing 300ms');
- };
-
- const defaultOptions = {
- isPreventDefault: true,
- delay: 300,
- };
- const longPressEvent = useLongPress(onLongPress, defaultOptions);
-
- return useLongPress ;
-};
-```
-
-## Reference
-
-```ts
-const {
- onMouseDown,
- onTouchStart,
- onMouseUp,
- onMouseLeave,
- onTouchEnd
-} = useLongPress(
- callback: (e: TouchEvent | MouseEvent) => void,
- options?: {
- isPreventDefault?: true,
- delay?: 300
- }
-)
-```
-
-- `callback` — callback function.
-- `options?` — optional parameter.
- - `isPreventDefault?` — whether to call `event.preventDefault()` of `touchend` event, for preventing ghost click on mobile devices in some cases, defaults to `true`.
- - `delay?` — delay in milliseconds after which to calls provided callback, defaults to `300`.
diff --git a/docs/useMap.md b/docs/useMap.md
deleted file mode 100644
index 49821ee024..0000000000
--- a/docs/useMap.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# `useMap`
-
-React state hook that tracks a value of an object.
-
-## Usage
-
-```jsx
-import {useMap} from 'react-use';
-
-const Demo = () => {
- const [map, {set, setAll, remove, reset}] = useMap({
- hello: 'there',
- });
-
- return (
-
-
set(String(Date.now()), new Date().toJSON())}>
- Add
-
-
reset()}>
- Reset
-
-
setAll({ hello: 'new', data: 'data' })}>
- Set new data
-
-
remove('hello')} disabled={!map.hello}>
- Remove 'hello'
-
-
{JSON.stringify(map, null, 2)}
-
- );
-};
-```
diff --git a/docs/useMeasure.md b/docs/useMeasure.md
deleted file mode 100644
index 306fec3b6a..0000000000
--- a/docs/useMeasure.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# `useMeasure`
-
-React sensor hook that tracks dimensions of an HTML element using the [Resize Observer API](https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver).
-
-## Usage
-
-```jsx
-import { useMeasure } from "react-use";
-
-const Demo = () => {
- const [ref, { x, y, width, height, top, right, bottom, left }] = useMeasure();
-
- return (
-
-
x: {x}
-
y: {y}
-
width: {width}
-
height: {height}
-
top: {top}
-
right: {right}
-
bottom: {bottom}
-
left: {left}
-
- );
-};
-```
-
-This hook uses [`ResizeObserver` API][resize-observer], if you want to support
-legacy browsers, consider installing [`resize-observer-polyfill`][resize-observer-polyfill]
-before running your app.
-
-```js
-if (!window.ResizeObserver) {
- window.ResizeObserver = (await import('resize-observer-polyfill')).default;
-}
-```
-
-
-## Related hooks
-
-- [useSize](./useSize.md)
-
-
-[resize-observer]: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver
-[resize-observer-polyfill]: https://www.npmjs.com/package/resize-observer-polyfill
diff --git a/docs/useMedia.md b/docs/useMedia.md
deleted file mode 100644
index 97ee040c50..0000000000
--- a/docs/useMedia.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# `useMedia`
-
-React sensor hook that tracks state of a CSS media query.
-
-## Usage
-
-```jsx
-import {useMedia} from 'react-use';
-
-const Demo = () => {
- const isWide = useMedia('(min-width: 480px)');
-
- return (
-
- Screen is wide: {isWide ? 'Yes' : 'No'}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useMedia(query: string, defaultState: boolean = false): boolean;
-```
-
-The `defaultState` parameter is only used as a fallback for server side rendering.
-
-When server side rendering, it is important to set this parameter because without it the server's initial state will fallback to false, but the client will initialize to the result of the media query. When React hydrates the server render, it may not match the client's state. See the [React docs](https://reactjs.org/docs/react-dom.html#hydrate) for more on why this is can lead to costly bugs 🐛.
diff --git a/docs/useMediaDevices.md b/docs/useMediaDevices.md
deleted file mode 100644
index 7dbc6528c5..0000000000
--- a/docs/useMediaDevices.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# `useMediaDevices`
-
-React sensor hook that tracks connected hardware devices.
-
-
-## Usage
-
-```jsx
-import {useMediaDevices} from 'react-use';
-
-const Demo = () => {
- const state = useMediaDevices();
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
diff --git a/docs/useMediatedState.md b/docs/useMediatedState.md
deleted file mode 100644
index 0779a2e97d..0000000000
--- a/docs/useMediatedState.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# `useMediatedState`
-
-A lot like the standard `useState`, but with mediation process.
-
-## Usage
-```ts
-import * as React from 'react';
-import { useMediatedState } from '../useMediatedState';
-
-const inputMediator = s => s.replace(/[\s]+/g, ' ');
-const Demo = () => {
- const [state, setState] = useMediatedState(inputMediator, '');
-
- return (
-
-
You will not be able to enter more than one space
-
) => {
- setState(ev.target.value);
- }}
- />
-
- );
-};
-```
-
-## Reference
-```ts
-const [state, setState] = useMediatedState(
- mediator: StateMediator,
- initialState?: S
-);
-```
-
-> Initial state will be set as-is.
-
-In case mediator expects 2 arguments it will receive the `setState` function as second argument, it is useful for async mediators.
->This hook will not cancel previous mediation when new one been invoked, you have to handle it yourself._
diff --git a/docs/useMethods.md b/docs/useMethods.md
deleted file mode 100644
index 718f80e617..0000000000
--- a/docs/useMethods.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# `useMethods`
-
-React hook that simplifies the `useReducer` implementation.
-
-## Usage
-
-```jsx
-import { useMethods } from 'react-use';
-
-const initialState = {
- count: 0,
-};
-
-function createMethods(state) {
- return {
- reset() {
- return initialState;
- },
- increment() {
- return { ...state, count: state.count + 1 };
- },
- decrement() {
- return { ...state, count: state.count - 1 };
- },
- };
-}
-
-const Demo = () => {
- const [state, methods] = useMethods(createMethods, initialState);
-
- return (
- <>
- Count: {state.count}
- -
- +
- >
- );
-};
-```
-
-## Reference
-
-```js
-const [state, methods] = useMethods(createMethods, initialState);
-```
-
-- `createMethods` — function that takes current state and return an object containing methods that return updated state.
-- `initialState` — initial value of the state.
diff --git a/docs/useMotion.md b/docs/useMotion.md
deleted file mode 100644
index 4089a19850..0000000000
--- a/docs/useMotion.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# `useMotion`
-
-React sensor hook that uses device's acceleration sensor to track its motions.
-
-
-## Usage
-
-```jsx
-import {useMotion} from 'react-use';
-
-const Demo = () => {
- const state = useMotion();
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
diff --git a/docs/useMount.md b/docs/useMount.md
deleted file mode 100644
index 14b4b4a3bc..0000000000
--- a/docs/useMount.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# `useMount`
-
-React lifecycle hook that calls a function after the component is mounted. Use `useLifecycles` if you need both a mount and unmount function.
-
-## Usage
-
-```jsx
-import {useMount} from 'react-use';
-
-const Demo = () => {
- useMount(() => alert('MOUNTED'));
- return null;
-};
-```
-
-## Reference
-
-```ts
-useMount(fn: () => void);
-```
diff --git a/docs/useMountedState.md b/docs/useMountedState.md
deleted file mode 100644
index 95fb7a6928..0000000000
--- a/docs/useMountedState.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# `useMountedState`
-
-> **NOTE!:** despite having `State` in its name **_this hook does not cause component re-render_**.
-> This component designed to be used to avoid state updates on unmounted components.
-
-Lifecycle hook providing ability to check component's mount state.
-Returns a function that will return `true` if component mounted and `false` otherwise.
-
-## Usage
-
-```jsx
-import * as React from 'react';
-import {useMountedState} from 'react-use';
-
-const Demo = () => {
- const isMounted = useMountedState();
-
- React.useEffect(() => {
- setTimeout(() => {
- if (isMounted()) {
- // ...
- } else {
- // ...
- }
- }, 1000);
- });
-};
-```
diff --git a/docs/useMouse.md b/docs/useMouse.md
deleted file mode 100644
index 795517e8a0..0000000000
--- a/docs/useMouse.md
+++ /dev/null
@@ -1,34 +0,0 @@
-# `useMouse` and `useMouseHovered`
-
-React sensor hooks that re-render on mouse position changes. `useMouse` simply tracks
-mouse position; `useMouseHovered` allows you to specify extra options:
-
-- `bound` — to bind mouse coordinates within the element
-- `whenHovered` — whether to attach `mousemove` event handler only when user hovers over the element
-
-## Usage
-
-```jsx
-import {useMouse} from 'react-use';
-
-const Demo = () => {
- const ref = React.useRef(null);
- const {docX, docY, posX, posY, elX, elY, elW, elH} = useMouse(ref);
-
- return (
-
-
Mouse position in document - x:{docX} y:{docY}
-
Mouse position in element - x:{elX} y:{elY}
-
Element position- x:{posX} y:{posY}
-
Element dimensions - {elW}x{elH}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useMouse(ref);
-useMouseHovered(ref, {bound: false, whenHovered: false});
-```
diff --git a/docs/useMouseWheel.md b/docs/useMouseWheel.md
deleted file mode 100644
index dd22a8fd44..0000000000
--- a/docs/useMouseWheel.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# `useMouseWheel`
-React Hook to get deltaY of mouse scrolled in window.
-
-## Usage
-
-```jsx
-import { useMouseWheel } from 'react-use';
-
-const Demo = () => {
- const mouseWheel = useMouseWheel()
- return (
- <>
- delta Y Scrolled: {mouseWheel}
- >
- );
-};
-```
diff --git a/docs/useMultiStateValidator.md b/docs/useMultiStateValidator.md
deleted file mode 100644
index 595fe3a62f..0000000000
--- a/docs/useMultiStateValidator.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# `useMultiStateValidator`
-
-Each time any of given states changes - validator function is invoked.
-
-## Usage
-```ts
-import * as React from 'react';
-import { useMultiStateValidator } from 'react-use';
-
-const DemoStateValidator = (s: number[]) => [s.every((num: number) => !(num % 2))] as [boolean];
-const Demo = () => {
- const [state1, setState1] = React.useState(1);
- const [state2, setState2] = React.useState(1);
- const [state3, setState3] = React.useState(1);
- const [[isValid]] = useMultiStateValidator([state1, state2, state3], DemoStateValidator);
-
- return (
-
- );
-};
-```
-
-## Reference
-```ts
-const [validity, revalidate] = useStateValidator(
- state: any[] | { [p: string]: any } | { [p: number]: any },
- validator: (state, setValidity?)=>[boolean|null, ...any[]],
- initialValidity: any = [undefined]
-);
-```
-- **`state`**_`: any[] | { [p: string]: any } | { [p: number]: any }`_ can be both an array or object. It's _values_ will be used as a deps for inner `useEffect`.
-- **`validity`**_`: [boolean|null, ...any[]]`_ result of validity check. First element is strictly nullable boolean, but others can contain arbitrary data;
-- **`revalidate`**_`: ()=>void`_ runs validator once again
-- **`validator`**_`: (state, setValidity?)=>[boolean|null, ...any[]]`_ should return an array suitable for validity state described above;
- - `states` - current states values as they've been passed to the hook;
- - `setValidity` - if defined hook will not trigger validity change automatically. Useful for async validators;
-- `initialValidity` - validity value which set when validity is nt calculated yet;
diff --git a/docs/useNetworkState.md b/docs/useNetworkState.md
deleted file mode 100644
index d05dfd2368..0000000000
--- a/docs/useNetworkState.md
+++ /dev/null
@@ -1,77 +0,0 @@
-# `useNetworkState`
-
-Tracks the state of browser's network connection.
-
-As of the standard it is not guaranteed that browser connected to the _Internet_, it only guarantees the network
-connection.
-
-## Usage
-
-```jsx
-import {useNetworkState} from 'react-use';
-
-const Demo = () => {
- const state = useNetworkState();
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
-
-#### State interface:
-
-```typescript
-interface IUseNetworkState {
- /**
- * @desc Whether browser connected to the network or not.
- */
- online: boolean | undefined;
- /**
- * @desc Previous value of `online` property. Helps to identify if browser
- * just connected or lost connection.
- */
- previous: boolean | undefined;
- /**
- * @desc The {Date} object pointing to the moment when state change occurred.
- */
- since: Date | undefined;
- /**
- * @desc Effective bandwidth estimate in megabits per second, rounded to the
- * nearest multiple of 25 kilobits per seconds.
- */
- downlink: number | undefined;
- /**
- * @desc Maximum downlink speed, in megabits per second (Mbps), for the
- * underlying connection technology
- */
- downlinkMax: number | undefined;
- /**
- * @desc Effective type of the connection meaning one of 'slow-2g', '2g', '3g', or '4g'.
- * This value is determined using a combination of recently observed round-trip time
- * and downlink values.
- */
- effectiveType: 'slow-2g' | '2g' | '3g' | '4g' | undefined;
- /**
- * @desc Estimated effective round-trip time of the current connection, rounded
- * to the nearest multiple of 25 milliseconds
- */
- rtt: number | undefined;
- /**
- * @desc Wheter user has set a reduced data usage option on the user agent.
- */
- saveData: boolen | undefined;
- /**
- * @desc The type of connection a device is using to communicate with the network.
- */
- type: 'bluetooth' | 'cellular' | 'ethernet' | 'none' | 'wifi' | 'wimax' | 'other' | 'unknown' | undefined;
-}
-```
-
-#### Call signature
-
-```typescript
-function useNetworkState(initialState?: IUseNetworkState | (() => IUseNetworkState)): IUseNetworkState;
-```
diff --git a/docs/useObservable.md b/docs/useObservable.md
deleted file mode 100644
index 6d57af64ee..0000000000
--- a/docs/useObservable.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# `useObservable`
-
-React state hook that tracks the latest value of an `Observable`.
-
-
-## Usage
-
-```jsx
-import {useObservable} from 'react-use';
-
-const counter$ = new BehaviorSubject(0);
-const Demo = () => {
- const value = useObservable(counter$, 0);
-
- return (
- counter$.next(value + 1)}>
- Clicked {value} times
-
- );
-};
-```
diff --git a/docs/useOrientation.md b/docs/useOrientation.md
deleted file mode 100644
index 9fb5e07272..0000000000
--- a/docs/useOrientation.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# `useOrientation`
-
-React sensor hook that tracks screen orientation of user's device.
-
-Returns state in the following shape
-
-```js
-{
- angle: 0,
- type: 'landscape-primary'
-}
-```
-
-
-## Usage
-
-```jsx
-import {useOrientation} from 'react-use';
-
-const Demo = () => {
- const state = useOrientation();
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
diff --git a/docs/usePageLeave.md b/docs/usePageLeave.md
deleted file mode 100644
index 4d06abe77e..0000000000
--- a/docs/usePageLeave.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# `usePageLeave`
-
-React sensor hook that fires a callback when mouse leaves the page.
-
-## Usage
-
-```jsx
-import {usePageLeave} from 'react-use';
-
-const Demo = () => {
- usePageLeave(() => console.log('Page left...'));
-
- return null;
-};
-```
diff --git a/docs/usePermission.md b/docs/usePermission.md
deleted file mode 100644
index 4c0080b22d..0000000000
--- a/docs/usePermission.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# `usePermission`
-
-React side-effect hook to query permission status of browser APIs.
-
-## Usage
-
-```jsx
-import {usePermission} from 'react-use';
-
-const Demo = () => {
- const state = usePermission({ name: 'microphone' });
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
diff --git a/docs/usePinchZoom.md b/docs/usePinchZoom.md
deleted file mode 100644
index 12449fac4e..0000000000
--- a/docs/usePinchZoom.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `usePinchZoom`
-
-React sensor hook that tracks the changes in pointer touch events and detects value of pinch difference and tell if user is zooming in or out.
-
-## Usage
-
-```jsx
-import { usePinchZoom } from "react-use";
-
-const Demo = () => {
- const [scale, setState] = useState(1);
- const scaleRef = useRef();
- const { zoomingState, pinchState } = usePinchZoom(scaleRef);
-
- useEffect(() => {
- if (zoomingState === "ZOOM_IN") {
- // perform zoom in scaling
- setState(scale + 0.1)
- } else if (zoomingState === "ZOOM_OUT") {
- // perform zoom out in scaling
- setState(scale - 0.1)
- }
- }, [zoomingState]);
-
- return (
-
-
-
- );
-};
-```
diff --git a/docs/usePrevious.md b/docs/usePrevious.md
deleted file mode 100644
index 76c49d4abd..0000000000
--- a/docs/usePrevious.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# `usePrevious`
-
-React state hook that returns the previous state as described in the [React hooks FAQ](https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state).
-
-## Usage
-
-```jsx
-import {usePrevious} from 'react-use';
-
-const Demo = () => {
- const [count, setCount] = React.useState(0);
- const prevCount = usePrevious(count);
-
- return (
-
- setCount(count + 1)}>+
- setCount(count - 1)}>-
-
- Now: {count}, before: {prevCount}
-
-
- );
-};
-```
-
-## Reference
-
-```ts
-const prevState = usePrevious = (state: T): T;
-```
diff --git a/docs/usePreviousDistinct.md b/docs/usePreviousDistinct.md
deleted file mode 100644
index 484110aa25..0000000000
--- a/docs/usePreviousDistinct.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# `usePreviousDistinct`
-
-Just like `usePrevious` but it will only update once the value actually changes. This is important when other
-hooks are involved and you aren't just interested in the previous props version, but want to know the previous
-distinct value
-
-## Usage
-
-```jsx
-import {usePreviousDistinct, useCounter} from 'react-use';
-
-const Demo = () => {
- const [count, { inc: relatedInc }] = useCounter(0);
- const [unrelatedCount, { inc }] = useCounter(0);
- const prevCount = usePreviousDistinct(count);
-
- return (
-
- Now: {count}, before: {prevCount}
- relatedInc()}>Increment
- Unrelated: {unrelatedCount}
- inc()}>Increment Unrelated
-
- );
-};
-```
-
-You can also provide a way of identifying the value as unique. By default, a strict equals is used.
-
-```jsx
-import {usePreviousDistinct} from 'react-use';
-
-const Demo = () => {
- const [str, setStr] = React.useState("something_lowercase");
- const [unrelatedCount] = React.useState(0);
- const prevStr = usePreviousDistinct(str, (prev, next) => (prev && prev.toUpperCase()) === next.toUpperCase());
-
- return (
-
- Now: {count}, before: {prevCount}
- Unrelated: {unrelatedCount}
-
- );
-};
-```
-
-## Reference
-
-```ts
-const prevState = usePreviousDistinct = (state: T, compare?: (prev: T | undefined, next: T) => boolean): T;
-```
diff --git a/docs/usePromise.md b/docs/usePromise.md
deleted file mode 100644
index b3c1fbfa92..0000000000
--- a/docs/usePromise.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# `usePromise`
-
-React Lifecycle hook that returns a helper function for wrapping promises.
-Promises wrapped with this function will resolve only when component is mounted.
-
-
-## Usage
-
-```jsx
-import {usePromise} from 'react-use';
-
-const Demo = ({promise}) => {
- const mounted = usePromise();
- const [value, setValue] = useState();
-
- useEffect(() => {
- (async () => {
- const value = await mounted(promise);
- // This line will not execute if component gets unmounted.
- setValue(value);
- })();
- });
-};
-```
diff --git a/docs/useQueue.md b/docs/useQueue.md
deleted file mode 100644
index ef688bb8fd..0000000000
--- a/docs/useQueue.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# `useQueue`
-
-React state hook implements simple FIFO queue.
-
-
-## Usage
-
-```jsx
-import { useQueue } from 'react-use';
-
-const Demo = () => {
- const { add, remove, first, last, size } = useQueue();
-
- return (
-
-
- first: {first}
- last: {last}
- size: {size}
-
-
add((last || 0) + 1)}>Add
-
remove()}>Remove
-
- );
-};
-```
diff --git a/docs/useRaf.md b/docs/useRaf.md
deleted file mode 100644
index 246306fbcc..0000000000
--- a/docs/useRaf.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# `useRaf`
-
-React animation hook that forces component to re-render on each `requestAnimationFrame`,
-returns percentage of time elapsed.
-
-
-## Usage
-
-```jsx
-import {useRaf} from 'react-use';
-
-const Demo = () => {
- const elapsed = useRaf(5000, 1000);
-
- return (
-
- Elapsed: {elapsed}
-
- );
-};
-```
-
-
-## Reference
-
-```ts
-useRaf(ms?: number, delay?: number): number;
-```
-
-- `ms` — milliseconds for how long to keep re-rendering component, defaults to `1e12`.
-- `delay` — delay in milliseconds after which to start re-rendering component, defaults to `0`.
diff --git a/docs/useRafLoop.md b/docs/useRafLoop.md
deleted file mode 100644
index a326600728..0000000000
--- a/docs/useRafLoop.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# `useRafLoop`
-
-This hook call given function within the RAF loop without re-rendering parent component.
-Loop stops automatically on component unmount.
-
-Additionally hook provides methods to start/stop loop and check current state.
-
-## Usage
-
-```jsx
-import * as React from 'react';
-import { useRafLoop, useUpdate } from 'react-use';
-
-const Demo = () => {
- const [ticks, setTicks] = React.useState(0);
- const [lastCall, setLastCall] = React.useState(0);
- const update = useUpdate();
-
- const [loopStop, loopStart, isActive] = useRafLoop((time) => {
- setTicks(ticks => ticks + 1);
- setLastCall(time);
- });
-
- return (
-
-
RAF triggered: {ticks} (times)
-
Last high res timestamp: {lastCall}
-
-
{
- isActive() ? loopStop() : loopStart();
- update();
- }}>{isActive() ? 'STOP' : 'START'}
-
- );
-};
-```
-
-## Reference
-
-```ts
-const [stopLoop, startLoop, isActive] = useRafLoop(callback: FrameRequestCallback, initiallyActive = true);
-```
-* **`callback`**_: `(time: number)=>void`_ — function to call each RAF tick.
- * **`time`**_: `number`_ — DOMHighResTimeStamp, which indicates the current time (based on the number of milliseconds since time origin).
-* **`initiallyActive`**_: `boolean`_ — whether loop should be started at initial render.
-* Return
- * **`stopLoop`**_: `()=>void`_ — stop loop if it is active.
- * **`startLoop`**_: `()=>void`_ — start loop if it was inactive.
- * **`isActive`**_: `()=>boolean`_ — _true_ if loop is active.
-
diff --git a/docs/useRafState.md b/docs/useRafState.md
deleted file mode 100644
index 7740724bb3..0000000000
--- a/docs/useRafState.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# `useRafState`
-
-React state hook that only updates state in the callback of [`requestAnimationFrame`](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame).
-
-## Usage
-
-```jsx
-import {useRafState, useMount} from 'react-use';
-
-const Demo = () => {
- const [state, setState] = useRafState({
- width: 0,
- height: 0,
- });
-
- useMount(() => {
- const onResize = () => {
- setState({
- width: window.clientWidth,
- height: window.height,
- });
- };
-
- window.addEventListener('resize', onResize);
-
- return () => {
- window.removeEventListener('resize', onResize);
- };
- });
-
- return {JSON.stringify(state, null, 2)} ;
-};
-```
diff --git a/docs/useRendersCount.md b/docs/useRendersCount.md
deleted file mode 100644
index 134049939e..0000000000
--- a/docs/useRendersCount.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# `useRendersCount`
-
-Tracks component's renders count including the first render.
-
-## Usage
-
-```typescript jsx
-import * as React from 'react';
-import { useRendersCount } from "react-use";
-
-const Demo = () => {
- const update = useUpdate();
- const rendersCount = useRendersCount();
-
- return (
-
- Renders count: {rendersCount}
-
- re-render
-
- );
-};
-```
-
-## Reference
-
-```typescript
-const rendersCount: number = useRendersCount();
-```
diff --git a/docs/useScratch.md b/docs/useScratch.md
deleted file mode 100644
index 0ba6c31108..0000000000
--- a/docs/useScratch.md
+++ /dev/null
@@ -1,75 +0,0 @@
-# `useScratch`
-
-React sensor hook that tracks state of mouse "scrubs" (or "scratches").
-
-## Usage
-
-```jsx
-import useScratch from 'react-use/lib/useScratch';
-
-const Demo = () => {
- const [ref, state] = useScratch();
-
- const blockStyle: React.CSSProperties = {
- position: 'relative',
- width: 400,
- height: 400,
- border: '1px solid tomato',
- };
-
- const preStyle: React.CSSProperties = {
- pointerEvents: 'none',
- userSelect: 'none',
- };
-
- let { x = 0, y = 0, dx = 0, dy = 0 } = state;
- if (dx < 0) [x, dx] = [x + dx, -dx];
- if (dy < 0) [y, dy] = [y + dy, -dy];
-
- const rectangleStyle: React.CSSProperties = {
- position: 'absolute',
- left: x,
- top: y,
- width: dx,
- height: dy,
- border: '1px solid tomato',
- pointerEvents: 'none',
- userSelect: 'none',
- };
-
- return (
-
-
{JSON.stringify(state, null, 4)}
- {state.isScratching &&
}
-
- );
-};
-```
-
-## Reference
-
-```ts
-const [ref, state] = useScratch();
-```
-
-`state` is:
-
-```ts
-export interface ScratchSensorState {
- isScratching: boolean;
- start?: number;
- end?: number;
- x?: number;
- y?: number;
- dx?: number;
- dy?: number;
- docX?: number;
- docY?: number;
- posX?: number;
- posY?: number;
- elH?: number;
- elW?: number;
- elX?: number;
- elY?: number;
-}
-```
diff --git a/docs/useScroll.md b/docs/useScroll.md
deleted file mode 100644
index 0139b3dcd3..0000000000
--- a/docs/useScroll.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# `useScroll`
-
-React sensor hook that re-renders when the scroll position in a DOM element changes.
-
-## Usage
-
-```jsx
-import {useScroll} from 'react-use';
-
-const Demo = () => {
- const scrollRef = React.useRef(null);
- const {x, y} = useScroll(scrollRef);
-
- return (
-
- );
-};
-```
-
-## Reference
-
-```ts
-useScroll(ref: RefObject);
-```
diff --git a/docs/useScrollbarWidth.md b/docs/useScrollbarWidth.md
deleted file mode 100644
index b3246dfa91..0000000000
--- a/docs/useScrollbarWidth.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# `useScrollbarWidth`
-
-Hook that will return current browser's scrollbar width.
-In case hook been called before DOM ready, it will return `undefined` and will cause re-render on first available RAF.
-> **_NOTE:_** it does not work (return 0) for mobile devices, because their scrollbar width can not be determined.
-
-## Usage
-
-```jsx
-const Demo = () => {
- const sbw = useScrollbarWidth();
-
- return (
-
- {sbw === undefined ? `DOM is not ready yet, SBW detection delayed` : `Browser's scrollbar width is ${sbw}px`}
-
- );
-};
-```
-
-## Reference
-
-```typescript
-const sbw: number | undefined = useScrollbarWidth();
-```
diff --git a/docs/useScrolling.md b/docs/useScrolling.md
deleted file mode 100644
index 346da07c0b..0000000000
--- a/docs/useScrolling.md
+++ /dev/null
@@ -1,26 +0,0 @@
-# `useScrolling`
-
-React sensor hook that keeps track of whether the user is scrolling or not.
-
-## Usage
-
-```jsx
-import { useScrolling } from "react-use";
-
-const Demo = () => {
- const scrollRef = React.useRef(null);
- const scrolling = useScrolling(scrollRef);
-
- return (
-
- {
{scrolling ? "Scrolling" : "Not scrolling"}
}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useScrolling(ref: RefObject);
-```
diff --git a/docs/useSearchParam.md b/docs/useSearchParam.md
deleted file mode 100644
index 6d9fe29c56..0000000000
--- a/docs/useSearchParam.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# `useSearchParam`
-
-React sensor hook that tracks browser's location search param.
-
-## Usage
-
-```jsx
-import {useSearchParam} from 'react-use';
-
-const Demo = () => {
- const edit = useSearchParam('edit');
-
- return (
-
-
edit: {edit || '🤷♂️'}
-
- history.pushState({}, '', location.pathname + '?edit=123')}>Edit post 123 (?edit=123)
-
-
- history.pushState({}, '', location.pathname + '?edit=999')}>Edit post 999 (?edit=999)
-
-
- history.pushState({}, '', location.pathname)}>Close modal
-
-
- );
-};
-```
-
-## Caveats/Gotchas
-
-When using a hash router, like `react-router`'s [``](https://github.com/ReactTraining/react-router/blob/master/packages/react-router-dom/docs/api/HashRouter.md), this hook won't be able to read the search parameters as they are considered part of the hash of the URL by browsers.
diff --git a/docs/useSessionStorage.md b/docs/useSessionStorage.md
deleted file mode 100644
index 1ac6956d8f..0000000000
--- a/docs/useSessionStorage.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# `useSessionStorage`
-
-React side-effect hook that manages a single `sessionStorage` key.
-
-
-## Usage
-
-```jsx
-import {useSessionStorage} from 'react-use';
-
-const Demo = () => {
- const [value, setValue] = useSessionStorage('my-key', 'foo');
-
- return (
-
-
Value: {value}
-
setValue('bar')}>bar
-
setValue('baz')}>baz
-
- );
-};
-```
-
-
-## Reference
-
-```js
-useSessionStorage(key);
-useSessionStorage(key, initialValue);
-useSessionStorage(key, initialValue, raw);
-```
-
-- `key` — `sessionStorage` key to manage.
-- `initialValue` — initial value to set, if value in `sessionStorage` is empty.
-- `raw` — boolean, if set to `true`, hook will not attempt to JSON serialize stored values.
diff --git a/docs/useSet.md b/docs/useSet.md
deleted file mode 100644
index 66b9cc0d9f..0000000000
--- a/docs/useSet.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# `useSet`
-
-React state hook that tracks a [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set).
-
-## Usage
-
-What is the difference between the "clear()" method and the "reset()" method?
-
-The "reset()" method returns the "Set" to the initial value passed during "useSet
-The "clear()" method completely empties the "Set".
-
-```jsx
-import {useSet} from 'react-use';
-
-const Demo = () => {
- const [set, { add, has, remove, toggle, reset, clear }] = useSet(new Set(['hello']));
-
- return (
-
-
add(String(Date.now()))}>Add
-
reset()}>Reset
-
clear()}>Clear
-
remove('hello')} disabled={!has('hello')}>
- Remove 'hello'
-
-
toggle('hello')}>Toggle hello
-
{JSON.stringify(Array.from(set), null, 2)}
-
- );
-};
-```
diff --git a/docs/useSetState.md b/docs/useSetState.md
deleted file mode 100644
index 7d488fa29e..0000000000
--- a/docs/useSetState.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# `useSetState`
-
-React state hook that creates `setState` method which works similar to how
-`this.setState` works in class components—it merges object changes into
-current state.
-
-
-## Usage
-
-```jsx
-import {useSetState} from 'react-use';
-
-const Demo = () => {
- const [state, setState] = useSetState({});
-
- return (
-
-
{JSON.stringify(state, null, 2)}
-
setState({hello: 'world'})}>hello
-
setState({foo: 'bar'})}>foo
-
{
- setState((prevState) => ({
- count: (prevState.count || 0) + 1,
- }))
- }}
- >
- count
-
-
- );
-};
-```
-
-## Reference
-
-```js
-const [state, setState] = useSetState({cnt: 0});
-
-setState({cnt: state.cnt + 1});
-setState((prevState) => ({
- cnt: prevState + 1,
-}));
-```
diff --git a/docs/useShallowCompareEffect.md b/docs/useShallowCompareEffect.md
deleted file mode 100644
index 4ece957c96..0000000000
--- a/docs/useShallowCompareEffect.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# `useShallowCompareEffect`
-
-A modified useEffect hook that is using shallow comparison on each of its dependencies instead of reference equality.
-
-## Usage
-
-```jsx
-import {useCounter, useShallowCompareEffect} from 'react-use';
-
-const Demo = () => {
- const [count, {inc: inc}] = useCounter(0);
- const options = { step: 2 };
-
- useShallowCompareEffect(() => {
- inc(options.step)
- }, [options]);
-
- return (
-
-
useShallowCompareEffect: {count}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useShallowCompareEffect(effect: () => void | (() => void | undefined), deps: any[]);
-```
diff --git a/docs/useSize.md b/docs/useSize.md
deleted file mode 100644
index 3784d01796..0000000000
--- a/docs/useSize.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# `useSize`
-
-React sensor hook that tracks size of an HTML element.
-
-## Usage
-
-```jsx
-import {useSize} from 'react-use';
-
-const Demo = () => {
- const [sized, {width, height}] = useSize(
- ({width}) => Size me up! ({width}px)
,
- { width: 100, height: 100 }
- );
-
- return (
-
- {sized}
-
width: {width}
-
height: {height}
-
- );
-};
-```
-
-## Reference
-
-```js
-useSize(element, initialSize);
-```
-
-- `element` — sized element.
-- `initialSize` — initial size containing a `width` and `height` key.
-
-## Related hooks
-
-- [useMeasure](./useMeasure.md)
diff --git a/docs/useSlider.md b/docs/useSlider.md
deleted file mode 100644
index 2ea78d0f29..0000000000
--- a/docs/useSlider.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# `useSlider`
-
-React UI hook that provides slide behavior over any HTML element. Supports both mouse and touch events.
-
-## Usage
-
-```jsx
-import {useSlider} from 'react-use';
-
-const Demo = () => {
- const ref = React.useRef(null);
- const {isSliding, value, pos, length} = useSlider(ref);
-
- return (
-
-
-
- {Math.round(value * 100)}%
-
-
🎚
-
-
- );
-};
-```
diff --git a/docs/useSpeech.md b/docs/useSpeech.md
deleted file mode 100644
index fa77e6995a..0000000000
--- a/docs/useSpeech.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# `useSpeech`
-
-React UI hook that synthesizes human voice that speaks a given string.
-
-
-## Usage
-
-```jsx
-import {useSpeech} from 'react-use';
-
-const voices = window.speechSynthesis.getVoices();
-
-const Demo = () => {
- const state = useSpeech('Hello world!', { rate: 0.8, pitch: 0.5, voice: voices[0] });
-
- return (
-
- {JSON.stringify(state, null, 2)}
-
- );
-};
-```
diff --git a/docs/useSpring.md b/docs/useSpring.md
deleted file mode 100644
index 1a9271bd7c..0000000000
--- a/docs/useSpring.md
+++ /dev/null
@@ -1,43 +0,0 @@
-# `useSpring`
-
-React animation hook that updates a single numeric value over time according
-to spring dynamics.
-
-## Usage
-
-```jsx
-import useSpring from 'react-use/lib/useSpring';
-
-const Demo = () => {
- const [target, setTarget] = useState(50);
- const value = useSpring(target);
-
- return (
-
- {value}
-
- setTarget(0)}>Set 0
- setTarget(100)}>Set 100
-
- );
-};
-```
-
-Note: Because of dependency on `rebound` you have to import this hook directly like shown above.
-
-## Requirements
-
-Install [`rebound`](https://github.com/facebook/rebound-js) peer dependency:
-
-```bash
-npm add rebound
-# or
-yarn add rebound
-```
-
-## Reference
-
-```js
-const currentValue = useSpring(targetValue);
-const currentValue = useSpring(targetValue, tension, friction);
-```
diff --git a/docs/useStartTyping.md b/docs/useStartTyping.md
deleted file mode 100644
index b43c143bab..0000000000
--- a/docs/useStartTyping.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# `useStartTyping`
-
-React sensor hook that fires a callback when user starts typing. Can be used
-to focus default input field on the page.
-
-## Usage
-
-```jsx
-import {useStartTyping} from 'react-use';
-
-const Demo = () => {
- useStartTyping(() => alert('Started typing...'));
-
- return null;
-};
-```
diff --git a/docs/useStateList.md b/docs/useStateList.md
deleted file mode 100644
index 21cf8f8d1b..0000000000
--- a/docs/useStateList.md
+++ /dev/null
@@ -1,54 +0,0 @@
-# `useStateList`
-
-Provides handles for circular iteration over states list.
-Supports forward and backward iterations and arbitrary position set.
-
-## Usage
-
-```jsx
-import { useStateList } from 'react-use';
-import { useRef } from 'react';
-
-const stateSet = ['first', 'second', 'third', 'fourth', 'fifth'];
-
-const Demo = () => {
- const { state, prev, next, setStateAt, setState, currentIndex, isFirst, isLast } = useStateList(stateSet);
- const indexInput = useRef(null);
- const stateInput = useRef(null);
-
- return (
-
-
- {state} [index: {currentIndex}], [isFirst: {isFirst}], [isLast: {isLast}]
-
-
prev()}>prev
-
-
next()}>next
-
-
-
setStateAt((indexInput.current!.value as unknown) as number)}>set state by index
-
-
-
setState(stateInput.current!.value)}> set state by value
-
- );
-};
-```
-
-## Reference
-
-```ts
-const { state, currentIndex, prev, next, setStateAt, setState, isFirst, isLast } = useStateList(stateSet: T[] = []);
-```
-
-If `stateSet` changed, became shorter than before and `currentIndex` left in shrunk gap - the last element of list will be taken as current.
-
-- **`state`**_`: T`_ — current state value;
-- **`currentIndex`**_`: number`_ — current state index;
-- **`prev()`**_`: void`_ — switches state to the previous one. If first element selected it will switch to the last one;
-- **`next()`**_`: void`_ — switches state to the next one. If last element selected it will switch to the first one;
-- **`setStateAt(newIndex: number)`**_`: void`_ — set the arbitrary state by index. Indexes are looped, and can be negative.
- _4ex:_ if list contains 5 elements, attempt to set index 9 will bring use to the 5th element, in case of negative index it will start counting from the right, so -17 will bring us to the 4th element.
-- **`setState(state: T)`**_`: void`_ — set the arbitrary state value that exists in `stateSet`. _In case new state does not exists in `stateSet` an Error will be thrown._
-- **`isFirst`**_`: boolean`_ — `true` if current state is the first one.
-- **`isLast`**_`: boolean`_ — `true` if current state is the last one.
diff --git a/docs/useStateValidator.md b/docs/useStateValidator.md
deleted file mode 100644
index 0b434fcaf9..0000000000
--- a/docs/useStateValidator.md
+++ /dev/null
@@ -1,47 +0,0 @@
-# `useStateValidator`
-
-Each time given state changes - validator function is invoked.
-
-## Usage
-```ts
-import * as React from 'react';
-import { useCallback } from 'react';
-import { useStateValidator } from 'react-use';
-
-const DemoStateValidator = s => [s === '' ? null : (s * 1) % 2 === 0];
-const Demo = () => {
- const [state, setState] = React.useState(0);
- const [[isValid]] = useStateValidator(state, DemoStateValidator);
-
- return (
-
-
Below field is valid only if number is even
-
) => {
- setState(ev.target.value);
- }}
- />
- {isValid !== null &&
{isValid ? 'Valid!' : 'Invalid'} }
-
- );
-};
-```
-
-## Reference
-```ts
-const [validity, revalidate] = useStateValidator(
- state: any,
- validator: (state, setValidity?)=>[boolean|null, ...any[]],
- initialValidity: any
-);
-```
-- **`validity`**_`: [boolean|null, ...any[]]`_ result of validity check. First element is strictly nullable boolean, but others can contain arbitrary data;
-- **`revalidate`**_`: ()=>void`_ runs validator once again
-- **`validator`**_`: (state, setValidity?)=>[boolean|null, ...any[]]`_ should return an array suitable for validity state described above;
- - `state` - current state;
- - `setValidity` - if defined hook will not trigger validity change automatically. Useful for async validators;
-- `initialValidity` - validity value which set when validity is nt calculated yet;
diff --git a/docs/useStateWithHistory.md b/docs/useStateWithHistory.md
deleted file mode 100644
index fe6dcbcbf4..0000000000
--- a/docs/useStateWithHistory.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# `useStateHistory`
-
-Stores defined amount of previous state values and provides handles to travel through them.
-
-## Usage
-
-## Reference
-
-```typescript
-const [state, setState, stateHistory] = useStateWithHistory(
- initialState?: S | (()=>S),
- capacity?: number = 10,
- initialHistory?: S
-);
-```
-
-- **`state`**, **`setState`** and **`initialState`** are exactly the same with native React's `useState` hook;
-- **`capacity`** - amount of history entries held by storage;
-- **`initialHistory`** - if defined it will be used as initial history value, otherwise history will equal `[ initialState ]`.
-Initial state will not be pushed to initial history.
-If entries amount is greater than `capacity` parameter it won't be modified on init but will be trimmed on the next call to `setState`;
-- **`stateHistory`** - an object containing history state:
- - **`history`**_`: S[]`_ - an array holding history entries. _It will have the same ref all the time so be careful with that one!_;
- - **`position`**_`: number`_ - current position _index_ in history;
- - **`capacity`**_`: number = 10`_ - maximum amount of history entries;
- - **`back`**_`: (amount?: number) => void`_ - go back in state history, it will cause `setState` to be invoked and component re-render.
- If first element of history reached, the call will have no effect;
- - **`forward`**_`: (amount?: number) => void`_ - go forward in state history, it will cause `setState` to be invoked and component re-render.
- If last element of history is reached, the call will have no effect;
- - **`go`**_`: (position: number) => void`_ - go to arbitrary position in history.
- In case `position` is non-negative ot will count elements from beginning.
- Negative `position` will cause elements counting from the end, so `go(-2)` equals `go(history.length - 1)`;
-
diff --git a/docs/useThrottle.md b/docs/useThrottle.md
deleted file mode 100644
index 7557cee256..0000000000
--- a/docs/useThrottle.md
+++ /dev/null
@@ -1,29 +0,0 @@
-# `useThrottle` and `useThrottleFn`
-
-React hooks that throttle.
-
-## Usage
-
-```jsx
-import React, { useState } from 'react';
-import { useThrottle, useThrottleFn } from 'react-use';
-
-const Demo = ({value}) => {
- const throttledValue = useThrottle(value);
- // const throttledValue = useThrottleFn(value => value, 200, [value]);
-
- return (
- <>
- Value: {value}
- Throttled value: {throttledValue}
- >
- );
-};
-```
-
-## Reference
-
-```ts
-useThrottle(value, ms?: number);
-useThrottleFn(fn, ms, args);
-```
diff --git a/docs/useThrottleFn.md b/docs/useThrottleFn.md
deleted file mode 100644
index db64375b92..0000000000
--- a/docs/useThrottleFn.md
+++ /dev/null
@@ -1,49 +0,0 @@
-# `useThrottleFn`
-
-React hook that invokes a function and then delays subsequent function calls until after wait milliseconds have elapsed since the last time the throttled function was invoked.
-
-The third argument is the array of values that the throttle depends on, in the same manner as useEffect. The throttle timeout will start when one of the values changes.
-
-## Usage
-
-```jsx
-import React, { useState } from 'react';
-import { useThrottleFn } from 'react-use';
-
-const Demo = () => {
- const [status, setStatus] = React.useState('Updating stopped');
- const [value, setValue] = React.useState('');
- const [throttledValue, setThrottledValue] = React.useState('');
-
- useThrottleFn(
- () => {
- setStatus('Waiting for input...');
- setThrottledValue(value);
- },
- 2000,
- [value]
- );
-
- return (
-
-
{
- setStatus('Updating stopped');
- setValue(currentTarget.value);
- }}
- />
-
{status}
-
Throttled value: {throttledValue}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useThrottleFn(fn, ms: number, args: any[]);
-```
diff --git a/docs/useTimeout.md b/docs/useTimeout.md
deleted file mode 100644
index 6c09e62c7d..0000000000
--- a/docs/useTimeout.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# `useTimeout`
-
-Re-renders the component after a specified number of milliseconds.
-Provides handles to cancel and/or reset the timeout.
-
-## Usage
-
-```jsx
-import { useTimeout } from 'react-use';
-
-function TestComponent(props: { ms?: number } = {}) {
- const ms = props.ms || 5000;
- const [isReady, cancel] = useTimeout(ms);
-
- return (
-
- { isReady() ? 'I\'m reloaded after timeout' : `I will be reloaded after ${ ms / 1000 }s` }
- { isReady() === false ? Cancel : '' }
-
- );
-}
-
-const Demo = () => {
- return (
-
-
-
-
- );
-};
-```
-
-## Reference
-
-```ts
-const [
- isReady: () => boolean | null,
- cancel: () => void,
- reset: () => void,
-] = useTimeout(ms: number = 0);
-```
-
-- **`isReady`**_` :()=>boolean|null`_ - function returning current timeout state:
- - `false` - pending re-render
- - `true` - re-render performed
- - `null` - re-render cancelled
-- **`cancel`**_` :()=>void`_ - cancel the timeout (component will not be re-rendered)
-- **`reset`**_` :()=>void`_ - reset the timeout
diff --git a/docs/useTimeoutFn.md b/docs/useTimeoutFn.md
deleted file mode 100644
index 48e4bc2d99..0000000000
--- a/docs/useTimeoutFn.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# `useTimeoutFn`
-
-Calls given function after specified amount of milliseconds.
-
-Several thing about it's work:
-- does not re-render component;
-- automatically cancel timeout on cancel;
-- automatically reset timeout on delay change;
-- reset function call will cancel previous timeout;
-- timeout will NOT be reset on function change. It will be called within the timeout, you have to reset it on your own when needed.
-
-## Usage
-
-```jsx
-import * as React from 'react';
-import { useTimeoutFn } from 'react-use';
-
-const Demo = () => {
- const [state, setState] = React.useState('Not called yet');
-
- function fn() {
- setState(`called at ${Date.now()}`);
- }
-
- const [isReady, cancel, reset] = useTimeoutFn(fn, 5000);
- const cancelButtonClick = useCallback(() => {
- if (isReady() === false) {
- cancel();
- setState(`cancelled`);
- } else {
- reset();
- setState('Not called yet');
- }
- }, []);
-
- const readyState = isReady();
-
- return (
-
-
{readyState !== null ? 'Function will be called in 5 seconds' : 'Timer cancelled'}
-
{readyState === false ? 'cancel' : 'restart'} timeout
-
-
Function state: {readyState === false ? 'Pending' : readyState ? 'Called' : 'Cancelled'}
-
{state}
-
- );
-};
-```
-
-## Reference
-
-```ts
-const [
- isReady: () => boolean | null,
- cancel: () => void,
- reset: () => void,
-] = useTimeoutFn(fn: Function, ms: number = 0);
-```
-
-- **`fn`**_`: Function`_ - function that will be called;
-- **`ms`**_`: number`_ - delay in milliseconds;
-- **`isReady`**_`: ()=>boolean|null`_ - function returning current timeout state:
- - `false` - pending
- - `true` - called
- - `null` - cancelled
-- **`cancel`**_`: ()=>void`_ - cancel the timeout
-- **`reset`**_`: ()=>void`_ - reset the timeout
-
diff --git a/docs/useTitle.md b/docs/useTitle.md
deleted file mode 100644
index 6e52755cb3..0000000000
--- a/docs/useTitle.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# `useTitle`
-
-React side-effect hook that sets title of the page.
-
-
-## Usage
-
-```jsx
-import {useTitle} from 'react-use';
-
-const Demo = () => {
- useTitle('Hello world!');
-
- return null;
-};
-```
diff --git a/docs/useToggle.md b/docs/useToggle.md
deleted file mode 100644
index 0405c6ce18..0000000000
--- a/docs/useToggle.md
+++ /dev/null
@@ -1,24 +0,0 @@
-# `useToggle`
-
-React state hook that tracks value of a boolean.
-
-`useBoolean` is an alias for `useToggle`.
-
-## Usage
-
-```jsx
-import {useToggle} from 'react-use';
-
-const Demo = () => {
- const [on, toggle] = useToggle(true);
-
- return (
-
-
{on ? 'ON' : 'OFF'}
-
Toggle
-
toggle(true)}>set ON
-
toggle(false)}>set OFF
-
- );
-};
-```
diff --git a/docs/useTween.md b/docs/useTween.md
deleted file mode 100644
index bef2fad113..0000000000
--- a/docs/useTween.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# `useTween`
-
-React animation hook that tweens a number between 0 and 1.
-
-
-## Usage
-
-```jsx
-import {useTween} from 'react-use';
-
-const Demo = () => {
- const t = useTween();
-
- return (
-
- Tween: {t}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useTween(easing?: string, ms?: number, delay?: number): number
-```
-
-Returns a number that begins with 0 and ends with 1 when animation ends.
-
-- `easing` — one of the valid [easing names](https://github.com/streamich/ts-easing/blob/master/src/index.ts), defaults to `inCirc`.
-- `ms` — milliseconds for how long to keep re-rendering component, defaults to `200`.
-- `delay` — delay in milliseconds after which to start re-rendering component, defaults to `0`.
diff --git a/docs/useUnmount.md b/docs/useUnmount.md
deleted file mode 100644
index a887e222a0..0000000000
--- a/docs/useUnmount.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# `useUnmount`
-
-React lifecycle hook that calls a function when the component will unmount. Use `useLifecycles` if you need both a mount and unmount function.
-
-## Usage
-
-```jsx
-import {useUnmount} from 'react-use';
-
-const Demo = () => {
- useUnmount(() => alert('UNMOUNTED'));
- return null;
-};
-```
-
-## Reference
-
-```ts
-useUnmount(fn: () => void | undefined);
-```
diff --git a/docs/useUnmountPromise.md b/docs/useUnmountPromise.md
deleted file mode 100644
index 5a129cb936..0000000000
--- a/docs/useUnmountPromise.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# `useUnmountPromise`
-
-A life-cycle hook that provides a higher order promise that does not resolve if component un-mounts.
-
-
-## Usage
-
-```ts
-import useUnmountPromise from 'react-use/lib/useUnmountPromise';
-
-const Demo = () => {
- const mounted = useUnmountPromise();
- useEffect(async () => {
- await mounted(someFunction()); // Will not resolve if component un-mounts.
- });
-};
-```
-
-
-## Reference
-
-```ts
-const mounted = useUnmountPromise();
-
-mounted(promise);
-mounted(promise, onError);
-```
-
-- `onError` — if promise rejects after the component is unmounted, `onError`
- callback is called with the error.
diff --git a/docs/useUpdate.md b/docs/useUpdate.md
deleted file mode 100644
index 9f9549efe1..0000000000
--- a/docs/useUpdate.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# `useUpdate`
-
-React utility hook that returns a function that forces component
-to re-render when called.
-
-
-## Usage
-
-```jsx
-import {useUpdate} from 'react-use';
-
-const Demo = () => {
- const update = useUpdate();
- return (
- <>
- Time: {Date.now()}
- Update
- >
- );
-};
-```
diff --git a/docs/useUpdateEffect.md b/docs/useUpdateEffect.md
deleted file mode 100644
index ca3c7f6d75..0000000000
--- a/docs/useUpdateEffect.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# `useUpdateEffect`
-
-React effect hook that ignores the first invocation (e.g. on mount). The signature is exactly the same as the `useEffect` hook.
-
-
-## Usage
-
-```jsx
-import React from 'react'
-import {useUpdateEffect} from 'react-use';
-
-const Demo = () => {
- const [count, setCount] = React.useState(0);
-
- React.useEffect(() => {
- const interval = setInterval(() => {
- setCount(count => count + 1)
- }, 1000)
-
- return () => {
- clearInterval(interval)
- }
- }, [])
-
- useUpdateEffect(() => {
- console.log('count', count) // will only show 1 and beyond
-
- return () => { // *OPTIONAL*
- // do something on unmount
- }
- }) // you can include deps array if necessary
-
- return Count: {count}
-};
-```
diff --git a/docs/useUpsert.md b/docs/useUpsert.md
deleted file mode 100644
index 25fe7d71fd..0000000000
--- a/docs/useUpsert.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `useUpsert`
-
-> DEPRECATED!
-> Use `useList` hook's upsert action instead
-
-Superset of [`useList`](./useList.md). Provides an additional method to upsert (update or insert) an element into the list.
-
-## Usage
-
-```jsx
-import {useUpsert} from 'react-use';
-
-const Demo = () => {
- const comparisonFunction = (a: DemoType, b: DemoType) => {
- return a.id === b.id;
- };
- const [list, { set, upsert, remove }] = useUpsert(comparisonFunction, initialItems);
-
- return (
-
- {list.map((item: DemoType, index: number) => (
-
- upsert({ ...item, text: e.target.value })} />
- remove(index)}>Remove
-
- ))}
-
upsert({ id: (list.length + 1).toString(), text: '' })}>Add item
-
set([])}>Reset
-
- );
-};
-```
-
-## Related hooks
-
-- [useList](./useList.md)
diff --git a/docs/useVibrate.md b/docs/useVibrate.md
deleted file mode 100644
index 957d01149f..0000000000
--- a/docs/useVibrate.md
+++ /dev/null
@@ -1,31 +0,0 @@
-# `useVibrate`
-
-React UI hook to provide physical feedback with device vibration hardware using the [Vibration API](https://developer.mozilla.org/en-US/docs/Web/API/Vibration_API).
-
-## Usage
-
-```jsx
-import {useVibrate} from 'react-use';
-
-const Demo = () => {
- const [vibrating, toggleVibrating] = useToggle(false);
-
- useVibrate(vibrating, [300, 100, 200, 100, 1000, 300], false);
-
- return (
-
- {vibrating ? 'Stop' : 'Vibrate'}
-
- );
-};
-```
-
-## Reference
-
-```ts
-useVibrate(
- enabled: boolean = true,
- pattern: number | number[] = [1000, 1000],
- loop: boolean = true
-): void;
-```
diff --git a/docs/useVideo.md b/docs/useVideo.md
deleted file mode 100644
index 7d0dfb9257..0000000000
--- a/docs/useVideo.md
+++ /dev/null
@@ -1,87 +0,0 @@
-# `useVideo`
-
-Creates `` element, tracks its state and exposes playback controls.
-
-
-## Usage
-
-```jsx
-import {useVideo} from 'react-use';
-
-const Demo = () => {
- const [video, state, controls, ref] = useVideo(
-
- );
-
- return (
-
- {video}
-
{JSON.stringify(state, null, 2)}
-
Pause
-
Play
-
-
Mute
-
Un-mute
-
-
controls.volume(.1)}>Volume: 10%
-
controls.volume(.5)}>Volume: 50%
-
controls.volume(1)}>Volume: 100%
-
-
controls.seek(state.time - 5)}>-5 sec
-
controls.seek(state.time + 5)}>+5 sec
-
- );
-};
-```
-
-
-## Reference
-
-```jsx
-const [video, state, controls, ref] = useVideo(props);
-const [video, state, controls, ref] = useVideo( );
-```
-
-`video` is React's `` element that you have to insert somewhere in your
-render tree, for example:
-
-```jsx
-{video}
-```
-
-`state` tracks the state of the video and has the following shape:
-
-```json
-{
- "buffered": [
- {
- "start": 0,
- "end": 425.952625
- }
- ],
- "time": 5.244996,
- "duration": 425.952625,
- "paused": false,
- "muted": false,
- "volume": 1
-}
-```
-
-`controls` is a list collection of methods that allow you to control the
-playback of the video, it has the following interface:
-
-```ts
-interface AudioControls {
- play: () => Promise | void;
- pause: () => void;
- mute: () => void;
- unmute: () => void;
- volume: (volume: number) => void;
- seek: (time: number) => void;
-}
-```
-
-`ref` is a React reference to HTML `` element, you can access the element by
-`ref.current`, note that it may be `null`.
-
-And finally, `props` — all props that `` accepts.
\ No newline at end of file
diff --git a/docs/useWindowScroll.md b/docs/useWindowScroll.md
deleted file mode 100644
index aec69a11d1..0000000000
--- a/docs/useWindowScroll.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# `useWindowScroll`
-
-React sensor hook that re-renders on window scroll.
-
-## Usage
-
-```jsx
-import {useWindowScroll} from 'react-use';
-
-const Demo = () => {
- const {x, y} = useWindowScroll();
-
- return (
-
- );
-};
-```
diff --git a/docs/useWindowSize.md b/docs/useWindowSize.md
deleted file mode 100644
index 836d8c10ec..0000000000
--- a/docs/useWindowSize.md
+++ /dev/null
@@ -1,36 +0,0 @@
-# `useWindowSize`
-
-React sensor hook that tracks dimensions of the browser window.
-
-
-## Usage
-
-```jsx
-import {useWindowSize} from 'react-use';
-
-const Demo = () => {
- const {width, height} = useWindowSize();
-
- return (
-
-
width: {width}
-
height: {height}
-
- );
-};
-```
-
-## Reference
-
-```js
-useWindowSize(options);
-```
-
-- `initialWidth` — Initial width value for non-browser environments.
-- `initialHeight` — Initial height value for non-browser environments.
-- `onChange` — Callback function triggered when the window size changes.
-
-## Related hooks
-
-- [useSize](./useSize.md)
-- [useMeasure](./useMeasure.md)
\ No newline at end of file
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 0000000000..428500fde1
Binary files /dev/null and b/favicon.ico differ
diff --git a/iframe.html b/iframe.html
new file mode 100644
index 0000000000..61a02e26b1
--- /dev/null
+++ b/iframe.html
@@ -0,0 +1,348 @@
+Webpack App
Name Description Default Control propertyName * This is a short description
defaultValue
Set string propertyName * This is a short description
defaultValue
Set string propertyName * This is a short description
defaultValue
Set string
No Preview Sorry, but you either have no stories or none are selected somehow.
Please check the Storybook config. Try reloading the page. If the problem persists, check the browser console, or the terminal you've run Storybook from.
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000..2dea69e066
--- /dev/null
+++ b/index.html
@@ -0,0 +1,59 @@
+Webpack App
\ No newline at end of file
diff --git a/jest.config.base.ts b/jest.config.base.ts
deleted file mode 100644
index cd95d9ef5d..0000000000
--- a/jest.config.base.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import type { Config } from '@jest/types';
-
-export const baseJestConfig: Config.InitialOptions = {
- 'preset': 'ts-jest',
- 'clearMocks': true,
- 'coverageDirectory': 'coverage',
- 'testMatch': [
- '/tests/**/*.test.(ts|tsx)'
- ],
- 'setupFiles': [
- '/tests/setupTests.ts'
- ]
-}
diff --git a/jest.config.node.ts b/jest.config.node.ts
deleted file mode 100644
index c0f51543bc..0000000000
--- a/jest.config.node.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { Config } from '@jest/types';
-import { baseJestConfig } from './jest.config.base';
-
-const config: Config.InitialOptions = {
- ...baseJestConfig,
- testEnvironment: 'node', // browser-like
-}
-
-export default config;
diff --git a/jest.config.ts b/jest.config.ts
deleted file mode 100644
index 10a1f21e29..0000000000
--- a/jest.config.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import type { Config } from '@jest/types';
-import { baseJestConfig } from './jest.config.base';
-
-const config: Config.InitialOptions = {
- ...baseJestConfig,
- testEnvironment: 'jsdom', // browser-like
-}
-
-export default config;
diff --git a/main.1590b857.iframe.bundle.js b/main.1590b857.iframe.bundle.js
new file mode 100644
index 0000000000..e54619eaa4
--- /dev/null
+++ b/main.1590b857.iframe.bundle.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[1],{"./.storybook/config.js":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),function(module){__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js");var _storybook_react__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),_storybook_addon_options__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/@storybook/addon-options/dist/index.js");Object(_storybook_addon_options__WEBPACK_IMPORTED_MODULE_6__.setOptions)({sortStoriesByKind:!1,showStoriesPanel:!0,showAddonPanel:!0,showSearchBox:!1,addonPanelInRight:!0,hierarchySeparator:/\//,hierarchyRootSeparator:/\|/,sidebarAnimations:!1});var req=__webpack_require__("./stories sync recursive \\.story\\.tsx?$");Object(_storybook_react__WEBPACK_IMPORTED_MODULE_5__.configure)((function loadStories(){req.keys().forEach((function(filename){return req(filename)}))}),module)}.call(this,__webpack_require__("./node_modules/webpack/buildin/harmony-module.js")(module))},"./.storybook/config.js-generated-config-entry.js":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__("./node_modules/core-js/modules/es.object.keys.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.array.filter.js"),__webpack_require__("./node_modules/core-js/modules/es.object.get-own-property-descriptor.js"),__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.object.get-own-property-descriptors.js"),__webpack_require__("./node_modules/core-js/modules/es.object.define-properties.js"),__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js");var _root_repo_node_modules_storybook_client_api__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__("./node_modules/@storybook/client-api/dist/esm/ClientApi.js"),_root_repo_node_modules_storybook_client_logger__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__("./node_modules/@storybook/client-logger/dist/esm/index.js"),_root_repo_storybook_config_js__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./.storybook/config.js");function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.keys(_root_repo_storybook_config_js__WEBPACK_IMPORTED_MODULE_11__).forEach((function(key){var value=_root_repo_storybook_config_js__WEBPACK_IMPORTED_MODULE_11__[key];switch(key){case"args":case"argTypes":return _root_repo_node_modules_storybook_client_logger__WEBPACK_IMPORTED_MODULE_10__.a.warn("Invalid args/argTypes in config, ignoring.",JSON.stringify(value));case"decorators":return value.forEach((function(decorator){return Object(_root_repo_node_modules_storybook_client_api__WEBPACK_IMPORTED_MODULE_9__.d)(decorator,!1)}));case"loaders":return value.forEach((function(loader){return Object(_root_repo_node_modules_storybook_client_api__WEBPACK_IMPORTED_MODULE_9__.e)(loader,!1)}));case"parameters":return Object(_root_repo_node_modules_storybook_client_api__WEBPACK_IMPORTED_MODULE_9__.f)(function _objectSpread(target){for(var i=1;icreateBreakpoint\nUsage \nuse default breakpoint \nlaptopL: 1440, laptop: 1024, tablet: 768
\nimport React from "react";\nimport { createBreakpoint } from "react-use";\n\nconst useBreakpoint = createBreakpoint();\n\nconst Demo = () => {\n const breakpoint = useBreakpoint();\n\n if (breakpoint === "laptopL") return <div> This is very big Laptop </div>;\n else if (breakpoint == "laptop") return <div> This is Laptop</div>;\n else if (breakpoint == "tablet") return <div> This is Tablet</div>;\n else return <div> Too small!</div>;\n}; \nuse custom breakpoint \nXL: 1280, L: 768, S: 350
\nimport React from "react";\nimport { createBreakpoint } from "react-use";\n\nconst useBreakpoint = createBreakpoint({ XL: 1280, L: 768, S: 350 });\n\nconst Demo = () => {\n const breakpoint = useBreakpoint();\n\n if (breakpoint === "XL") return <div> XL </div>;\n else if (breakpoint == "L") return <div> LoL</div>;\n else if (breakpoint == "S") return <div> Sexyy</div>;\n else return <div> Wth</div>;\n}; \n'},"./docs/createGlobalState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useGlobalState \nA React hook that creates a globally shared state.
\nUsage \nconst useGlobalValue = createGlobalState<number>(0);\n\nconst CompA: FC = () => {\n const [value, setValue] = useGlobalValue();\n\n return <button onClick={() => setValue(value + 1)}>+</button>;\n};\n\nconst CompB: FC = () => {\n const [value, setValue] = useGlobalValue();\n\n return <button onClick={() => setValue(value - 1)}>-</button>;\n};\n\nconst Demo: FC = () => {\n const [value] = useGlobalValue();\n return (\n <div>\n <p>{value}</p>\n <CompA />\n <CompB />\n </div>\n );\n}; \nIt also allows initializing the state with a function and using a function in the setState:
\nconst useGlobalValue = createGlobalState<number>(() => 0);\n\nconst CompA: FC = () => {\n const [value, setValue] = useGlobalValue();\n\n return <button onClick={() => setValue(value => value + 1)}>+</button>;\n};\n\nconst CompB: FC = () => {\n const [value, setValue] = useGlobalValue();\n\n return <button onClick={() => setValue(value => value - 1)}>-</button>;\n};\n\nconst Demo: FC = () => {\n const [value] = useGlobalValue();\n return (\n <div>\n <p>{value}</p>\n <CompA />\n <CompB />\n </div>\n );\n}; \n'},"./docs/createMemo.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='createMemo \nHook factory, receives a function to be memoized, returns a memoized React hook,\nwhich receives the same arguments and returns the same result as the original function.
\nUsage \nimport {createMemo} from 'react-use';\n\nconst fibonacci = n => {\n if (n === 0) return 0;\n if (n === 1) return 1;\n return fibonacci(n - 1) + fibonacci(n - 2);\n};\n\nconst useMemoFibonacci = createMemo(fibonacci);\n\nconst Demo = () => {\n const result = useMemoFibonacci(10);\n\n return (\n <div>\n fib(10) = {result}\n </div>\n );\n}; \nReference \nconst useMemoFn = createMemo(fn); \n'},"./docs/createReducer.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='createReducer \nFactory for reducer hooks with custom middleware with an identical API as React's useReducer . Compatible with Redux middleware .
\nUsage \nAn example with redux-thunk and redux-logger .
\nimport { createReducer } from 'react-use';\nimport logger from 'redux-logger';\nimport thunk from 'redux-thunk';\n\nconst useThunkReducer = createReducer(thunk, logger);\n\nfunction reducer(state, action) {\n switch (action.type) {\n case 'increment':\n return { count: state.count + 1 };\n case 'decrement':\n return { count: state.count - 1 };\n case 'reset':\n return { count: action.payload };\n default:\n throw new Error();\n }\n}\n\nconst Demo = ({ initialCount = 1 }) => {\n // Action creator to increment count, wait a second and then reset\n const addAndReset = React.useCallback(() => {\n return dispatch => {\n dispatch({ type: 'increment' });\n\n setTimeout(() => {\n dispatch({ type: 'reset', payload: initialCount });\n }, 1000);\n };\n }, [initialCount]);\n\n const [state, dispatch] = useThunkReducer(reducer, initialCount);\n\n return (\n <div>\n <p>count: {state.count}</p>\n <button onClick={() => dispatch(addAndReset())}>Add and reset</button>\n <button\n onClick={() => dispatch({ type: 'reset', payload: { count: initialCount }})}\n >\n Reset\n </button>\n <button onClick={() => dispatch({ type: 'increment' })}>+</button>\n <button onClick={() => dispatch({ type: 'decrement' })}>-</button>\n </div>\n );\n}; \nReference \nconst useMiddlewareReducer = createReducer(...middlewares); \n'},"./docs/createReducerContext.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='createReducerContext \nFactory for react context hooks that will behave just like React's useReducer except the state will be shared among all components in the provider.
\nThis allows you to have a shared state that any component can update easily.
\nUsage \nAn example with two counters that shared the same value.
\nimport { createReducerContext } from 'react-use';\n\ntype Action = 'increment' | 'decrement';\n\nconst reducer = (state: number, action: Action) => {\n switch (action) {\n case 'increment':\n return state + 1;\n case 'decrement':\n return state - 1;\n default:\n throw new Error();\n }\n};\n\nconst [useSharedCounter, SharedCounterProvider] = createReducerContext(reducer, 0);\n\nconst ComponentA = () => {\n const [count, dispatch] = useSharedCounter();\n return (\n <p>\n Component A \n <button type="button" onClick={() => dispatch('decrement')}>\n -\n </button>\n {count} \n <button type="button" onClick={() => dispatch('increment')}>\n +\n </button>\n </p>\n );\n};\n\nconst ComponentB = () => {\n const [count, dispatch] = useSharedCounter();\n return (\n <p>\n Component B \n <button type="button" onClick={() => dispatch('decrement')}>\n -\n </button>\n {count} \n <button type="button" onClick={() => dispatch('increment')}>\n +\n </button>\n </p>\n );\n};\n\nconst Demo = () => {\n return (\n <SharedCounterProvider>\n <p>Those two counters share the same value.</p>\n <ComponentA />\n <ComponentB />\n </SharedCounterProvider>\n );\n}; \nReference \nconst [useSharedState, SharedStateProvider] = createReducerContext(reducer, initialState);\n\n// In wrapper\nconst Wrapper = ({ children }) => (\n // You can override the initial state for each Provider\n <SharedStateProvider initialState={overrideInitialState}>\n { children }\n </SharedStateProvider>\n)\n\n// In a component\nconst Component = () => {\n const [sharedState, dispatch] = useSharedState();\n\n // ...\n} \n'},"./docs/createStateContext.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='createStateContext \nFactory for react context hooks that will behave just like React's useState except the state will be shared among all components in the provider.
\nThis allows you to have a shared state that any component can update easily.
\nUsage \nAn example with a shared text between two input fields.
\nimport { createStateContext } from 'react-use';\n\nconst [useSharedText, SharedTextProvider] = createStateContext('');\n\nconst ComponentA = () => {\n const [text, setText] = useSharedText();\n return (\n <p>\n Component A:\n <br />\n <input type="text" value={text} onInput={ev => setText(ev.target.value)} />\n </p>\n );\n};\n\nconst ComponentB = () => {\n const [text, setText] = useSharedText();\n return (\n <p>\n Component B:\n <br />\n <input type="text" value={text} onInput={ev => setText(ev.target.value)} />\n </p>\n );\n};\n\nconst Demo = () => {\n return (\n <SharedTextProvider>\n <p>Those two fields share the same value.</p>\n <ComponentA />\n <ComponentB />\n </SharedTextProvider>\n );\n}; \nReference \nconst [useSharedState, SharedStateProvider] = createStateContext(initialValue);\n\n// In wrapper\nconst Wrapper = ({ children }) => (\n // You can override the initial value for each Provider\n <SharedStateProvider initialValue={overrideInitialValue}>\n { children }\n </SharedStateProvider>\n)\n\n// In a component\nconst Component = () => {\n const [sharedState, setSharedState] = useSharedState();\n\n // ...\n} \n'},"./docs/useAsync.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useAsync \nReact hook that resolves an async function or a function that returns\na promise;
\nUsage \nimport {useAsync} from 'react-use';\n\nconst Demo = ({url}) => {\n const state = useAsync(async () => {\n const response = await fetch(url);\n const result = await response.text();\n return result\n }, [url]);\n\n return (\n <div>\n {state.loading\n ? <div>Loading...</div>\n : state.error\n ? <div>Error: {state.error.message}</div>\n : <div>Value: {state.value}</div>\n }\n </div>\n );\n}; \nReference \nuseAsync(fn, args?: any[]); \n'},"./docs/useAsyncFn.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useAsyncFn \nReact hook that returns state and a callback for an async function or a\nfunction that returns a promise. The state is of the same shape as useAsync.
\nUsage \nimport {useAsyncFn} from 'react-use';\n\nconst Demo = ({url}) => {\n const [state, doFetch] = useAsyncFn(async () => {\n const response = await fetch(url);\n const result = await response.text();\n return result\n }, [url]);\n\n return (\n <div>\n {state.loading\n ? <div>Loading...</div>\n : state.error\n ? <div>Error: {state.error.message}</div>\n : <div>Value: {state.value}</div>\n }\n <button onClick={() => doFetch()}>Start loading</button>\n </div>\n );\n}; \nReference \nuseAsyncFn<Result, Args>(fn, deps?: any[], initialState?: AsyncState<Result>); \n'},"./docs/useAsyncRetry.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useAsyncRetry \nUses useAsync with an additional retry method to easily retry/refresh the async function;
\nUsage \nimport {useAsyncRetry} from 'react-use';\n\nconst Demo = ({url}) => {\n const state = useAsyncRetry(async () => {\n const response = await fetch(url);\n const result = await response.text();\n return result;\n }, [url]);\n\n return (\n <div>\n {state.loading\n ? <div>Loading...</div>\n : state.error\n ? <div>Error: {state.error.message}</div>\n : <div>Value: {state.value}</div>\n }\n {!loading && <button onClick={() => state.retry()}>Start loading</button>}\n </div>\n );\n}; \nReference \nuseAsyncRetry(fn, args?: any[]); \n'},"./docs/useAudio.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useAudio \nCreates <audio> element, tracks its state and exposes playback controls.
\nUsage \nimport {useAudio} from 'react-use';\n\nconst Demo = () => {\n const [audio, state, controls, ref] = useAudio({\n src: 'https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3',\n autoPlay: true,\n });\n\n return (\n <div>\n {audio}\n <pre>{JSON.stringify(state, null, 2)}</pre>\n <button onClick={controls.pause}>Pause</button>\n <button onClick={controls.play}>Play</button>\n <br/>\n <button onClick={controls.mute}>Mute</button>\n <button onClick={controls.unmute}>Un-mute</button>\n <br/>\n <button onClick={() => controls.volume(.1)}>Volume: 10%</button>\n <button onClick={() => controls.volume(.5)}>Volume: 50%</button>\n <button onClick={() => controls.volume(1)}>Volume: 100%</button>\n <br/>\n <button onClick={() => controls.seek(state.time - 5)}>-5 sec</button>\n <button onClick={() => controls.seek(state.time + 5)}>+5 sec</button>\n </div>\n );\n}; \nReference \nconst [audio, state, controls, ref] = useAudio(props);\nconst [audio, state, controls] = useAudio(<audio {...props}/>); \naudio is React's <audio> element that you have to insert somewhere in your\nrender tree, for example:
\n<div>{audio}</div> \nstate tracks the state of the audio and has the following shape:
\n{\n "buffered": [\n {\n "start": 0,\n "end": 425.952625\n }\n ],\n "time": 5.244996,\n "duration": 425.952625,\n "paused": false,\n "muted": false,\n "volume": 1,\n "playing": true\n} \nplaying: The audio is being played and is affected by the network. If it starts to buffer audio, it will be false
\ncontrols is a list collection of methods that allow you to control the\nplayback of the audio, it has the following interface:
\ninterface AudioControls {\n play: () => Promise<void> | void;\n pause: () => void;\n mute: () => void;\n unmute: () => void;\n volume: (volume: number) => void;\n seek: (time: number) => void;\n} \nref is a React reference to HTML <audio> element, you can access the element by\nref.current, note that it may be null.
\nAnd finally, props — all props that <audio> accepts.
\n'},"./docs/useBattery.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useBattery \nReact sensor hook that tracks battery status.
\n\nNote: current BatteryManager API state is obsolete. Although it may still work in some browsers, its use is discouraged since it could be removed at any time.
\n \nUsage \nimport {useBattery} from 'react-use';\n\nconst Demo = () => {\n const batteryState = useBattery();\n\n if (!batteryState.isSupported) {\n return (\n <div>\n <strong>Battery sensor</strong>: <span>not supported</span>\n </div>\n );\n }\n\n if (!batteryState.fetched) {\n return (\n <div>\n <strong>Battery sensor</strong>: <span>supported</span> <br />\n <strong>Battery state</strong>: <span>fetching</span>\n </div>\n );\n }\n\n return (\n <div>\n <strong>Battery sensor</strong>: <span>supported</span> <br />\n <strong>Battery state</strong>: <span>fetched</span> <br />\n <strong>Charge level</strong>: <span>{ (batteryState.level * 100).toFixed(0) }%</span> <br />\n <strong>Charging</strong>: <span>{ batteryState.charging ? 'yes' : 'no' }</span> <br />\n <strong>Charging time</strong>: \n <span>{ batteryState.chargingTime ? batteryState.chargingTime : 'finished' }</span> <br />\n <strong>Discharging time</strong>: <span>{ batteryState.dischargingTime }</span>\n </div>\n );\n}; \nReference \nconst {isSupported, level, charging, dischargingTime, chargingTime} = useBattery(); \n\nisSupported: boolean - whether browser/devise supports BatteryManager; \nfetched: boolean - whether battery state is fetched; \nlevel: number - representing the system's battery charge level scaled to a value between 0.0 and 1.0. \ncharging: boolean - indicating whether or not the battery is currently being charged. \ndischargingTime: number - remaining time in seconds until the battery is completely discharged and the system will suspend. \nchargingTime: number - remaining time in seconds until the battery is fully charged, or 0 if the battery is already fully charged. \n \n'},"./docs/useBeforeUnload.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useBeforeUnload \nReact side-effect hook that shows browser alert when user try to reload or close the page.
\nUsage \nBoolean check \nimport {useBeforeUnload} from 'react-use';\n\nconst Demo = () => {\n const [dirty, toggleDirty] = useToggle(false);\n useBeforeUnload(dirty, 'You have unsaved changes, are you sure?');\n\n return (\n <div>\n {dirty && <p>Try to reload or close tab</p>}\n <button onClick={() => toggleDirty()}>{dirty ? 'Disable' : 'Enable'}</button>\n </div>\n );\n}; \nFunction check \nNote: Since every dirtyFn change registers a new callback, you should use\nrefs \nif your test value changes often.
\nimport {useBeforeUnload} from 'react-use';\n\nconst Demo = () => {\n const [dirty, toggleDirty] = useToggle(false);\n const dirtyFn = useCallback(() => {\n return dirty;\n }, [dirty]);\n useBeforeUnload(dirtyFn, 'You have unsaved changes, are you sure?');\n\n return (\n <div>\n {dirty && <p>Try to reload or close tab</p>}\n <button onClick={() => toggleDirty()}>{dirty ? 'Disable' : 'Enable'}</button>\n </div>\n );\n}; \n'},"./docs/useClickAway.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useClickAway \nReact UI hook that triggers a callback when user\nclicks outside the target element.
\nUsage \nimport {useClickAway} from 'react-use';\n\nconst Demo = () => {\n const ref = useRef(null);\n useClickAway(ref, () => {\n console.log('OUTSIDE CLICKED');\n });\n\n return (\n <div ref={ref} style={{\n width: 200,\n height: 200,\n background: 'red',\n }} />\n );\n}; \nReference \nuseClickAway(ref, onMouseEvent)\nuseClickAway(ref, onMouseEvent, ['click'])\nuseClickAway(ref, onMouseEvent, ['mousedown', 'touchstart']) \n'},"./docs/useCookie.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useCookie \nReact hook that returns the current value of a cookie, a callback to update the cookie\nand a callback to delete the cookie.
\nUsage \nimport { useCookie } from "react-use";\n\nconst Demo = () => {\n const [value, updateCookie, deleteCookie] = useCookie("my-cookie");\n const [counter, setCounter] = useState(1);\n\n useEffect(() => {\n deleteCookie();\n }, []);\n\n const updateCookieHandler = () => {\n updateCookie(`my-awesome-cookie-${counter}`);\n setCounter(c => c + 1);\n };\n\n return (\n <div>\n <p>Value: {value}</p>\n <button onClick={updateCookieHandler}>Update Cookie</button>\n <br />\n <button onClick={deleteCookie}>Delete Cookie</button>\n </div>\n );\n}; \nReference \nconst [value, updateCookie, deleteCookie] = useCookie(cookieName: string); \n'},"./docs/useCopyToClipboard.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useCopyToClipboard \nCopy text to a user's clipboard.
\nUsage \nconst Demo = () => {\n const [text, setText] = React.useState('');\n const [state, copyToClipboard] = useCopyToClipboard();\n\n return (\n <div>\n <input value={text} onChange={e => setText(e.target.value)} />\n <button type="button" onClick={() => copyToClipboard(text)}>copy text</button>\n {state.error\n ? <p>Unable to copy value: {state.error.message}</p>\n : state.value && <p>Copied {state.value}</p>}\n </div>\n )\n} \nReference \nconst [{value, error, noUserInteraction}, copyToClipboard] = useCopyToClipboard(); \n\nvalue — value that was copied to clipboard, undefined when nothing was copied. \nerror — caught error when trying to copy to clipboard. \nnoUserInteraction — boolean indicating if user interaction was required to copy the value to clipboard to expose full API from underlying copy-to-clipboard library. \n \n'},"./docs/useCounter.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useCounter \nReact state hook that tracks a numeric value.
\nuseNumber is an alias for useCounter.
\nUsage \nimport {useCounter, useNumber} from 'react-use';\n\nconst Demo = () => {\n const [min, { inc: incMin, dec: decMin }] = useCounter(1);\n const [max, { inc: incMax, dec: decMax }] = useCounter(10);\n const [value, { inc, dec, set, reset }] = useCounter(5, max, min);\n\n return (\n <div>\n <div>\n current: { value } [min: { min }; max: { max }]\n </div>\n\n <br />\n Current value: <button onClick={ () => inc() }>Increment</button>\n <button onClick={ () => dec() }>Decrement</button>\n <button onClick={ () => inc(5) }>Increment (+5)</button>\n <button onClick={ () => dec(5) }>Decrement (-5)</button>\n <button onClick={ () => set(100) }>Set 100</button>\n <button onClick={ () => reset() }>Reset</button>\n <button onClick={ () => reset(25) }>Reset (25)</button>\n\n <br />\n <br />\n Min value:\n <button onClick={ () => incMin() }>Increment</button>\n <button onClick={ () => decMin() }>Decrement</button>\n\n <br />\n <br />\n Max value:\n <button onClick={ () => incMax() }>Increment</button>\n <button onClick={ () => decMax() }>Decrement</button>\n </div>\n );\n}; \nReference \nconst [ current, { inc, dec, get, set, reset } ] = useCounter(initial: number, max: number | null = null, min: number | null = null); \n\ncurrent - current counter value; \nget(): number - getter of current counter value; \ninc(delta: number): void - increment current value; \ndec(delta: number): void - decrement current value; \nset(value: number): void - set arbitrary value; \nreset(value: number): void - as the set, but also will assign value by reference to the initial parameter; \n \n'},"./docs/useCss.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useCss \nReact UI hook that changes CSS dynamically . Works like "virtual CSS" —\nit re-renders only CSS rules that change. It is different from inline styles, because\nyou can use media queries and pseudo selectors.
\nUsage \nimport {useCss} from 'react-use';\n\nconst Demo = () => {\n const className = useCss({\n color: 'red',\n border: '1px solid red',\n '&:hover': {\n color: 'blue',\n },\n });\n\n return (\n <div className={className}>\n Hover me!\n </div>\n );\n}; \nExamples \nconst className = useCss({\n color: 'tomato',\n '&:hover': {\n color: 'orange',\n },\n});\n\nconst className = useCss({\n svg: {\n fill: 'tomato',\n },\n '.global_class &:hover svg': {\n fill: 'orange',\n },\n});\n\nconst className = useCss({\n color: 'tomato',\n '@media only screen and (max-width: 600px)': {\n color: 'orange',\n '&:hover': {\n color: 'red',\n }\n },\n}); \n'},"./docs/useCustomCompareEffect.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useCustomCompareEffect \nA modified useEffect hook that accepts a comparator which is used for comparison on dependencies instead of reference equality.
\nUsage \nimport {useCounter, useCustomCompareEffect} from 'react-use';\nimport isEqual from 'lodash/isEqual';\n\nconst Demo = () => {\n const [count, {inc: inc}] = useCounter(0);\n const options = { step: 2 };\n\n useCustomCompareEffect(() => {\n inc(options.step)\n }, [options], (prevDeps, nextDeps) => isEqual(prevDeps, nextDeps));\n\n return (\n <div>\n <p>useCustomCompareEffect with deep comparison: {count}</p>\n </div>\n );\n}; \nReference \nuseCustomCompareEffect(effect: () => void | (() => void | undefined), deps: any[], depsEqual: (prevDeps: any[], nextDeps: any[]) => boolean); \n'},"./docs/useDebounce.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useDebounce \nReact hook that delays invoking a function until after wait milliseconds have elapsed since the last time the debounced function was invoked.
\nThe third argument is the array of values that the debounce depends on, in the same manner as useEffect. The debounce timeout will start when one of the values changes.
\nUsage \nconst Demo = () => {\n const [state, setState] = React.useState('Typing stopped');\n const [val, setVal] = React.useState('');\n const [debouncedValue, setDebouncedValue] = React.useState('');\n\n const [, cancel] = useDebounce(\n () => {\n setState('Typing stopped');\n setDebouncedValue(val);\n },\n 2000,\n [val]\n );\n\n return (\n <div>\n <input\n type="text"\n value={val}\n placeholder="Debounced input"\n onChange={({ currentTarget }) => {\n setState('Waiting for typing to stop...');\n setVal(currentTarget.value);\n }}\n />\n <div>{state}</div>\n <div>\n Debounced value: {debouncedValue}\n <button onClick={cancel}>Cancel debounce</button>\n </div>\n </div>\n );\n}; \nReference \nconst [\n isReady: () => boolean | null,\n cancel: () => void,\n] = useDebounce(fn: Function, ms: number, deps: DependencyList = []); \n\nfn: Function - function that will be called; \nms: number - delay in milliseconds; \ndeps: DependencyList - array of values that the debounce depends on, in the same manner as useEffect; \nisReady: ()=>boolean|null - function returning current debounce state:\nfalse - pending \ntrue - called \nnull - cancelled \n \n \ncancel: ()=>void - cancel the debounce \n \n'},"./docs/useDeepCompareEffect.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useDeepCompareEffect \nA modified useEffect hook that is using deep comparison on its dependencies instead of reference equality.
\nUsage \nimport {useCounter, useDeepCompareEffect} from 'react-use';\n\nconst Demo = () => {\n const [count, {inc: inc}] = useCounter(0);\n const options = { step: 2 };\n\n useDeepCompareEffect(() => {\n inc(options.step)\n }, [options]);\n\n return (\n <div>\n <p>useDeepCompareEffect: {count}</p>\n </div>\n );\n}; \nReference \nuseDeepCompareEffect(effect: () => void | (() => void | undefined), deps: any[]); \n'},"./docs/useDefault.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useDefault \nReact state hook that returns the default value when state is null or undefined.
\nUsage \nimport {useDefault} from 'react-use';\n\nconst Demo = () => {\n const initialUser = { name: 'Marshall' }\n const defaultUser = { name: 'Mathers' }\n const [user, setUser] = useDefault(defaultUser, initialUser);\n\n return (\n <div>\n <div>User: {user.name}</div>\n <input onChange={e => setUser({ name: e.target.value })} />\n <button onClick={() => setUser(null)}>set to null</button>\n </div>\n );\n}; \n'},"./docs/useDrop.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useDrop and useDropArea \nTriggers on file, link drop and copy-paste.
\nuseDrop tracks events for the whole page, useDropArea tracks drop events\nfor a specific element.
\nUsage \nuseDrop:
\nimport {useDrop} from 'react-use';\n\nconst Demo = () => {\n const state = useDrop({\n onFiles: files => console.log('files', files),\n onUri: uri => console.log('uri', uri),\n onText: text => console.log('text', text),\n });\n\n return (\n <div>\n Drop something on the page.\n </div>\n );\n}; \nuseDropArea:
\nimport {useDropArea} from 'react-use';\n\nconst Demo = () => {\n const [bond, state] = useDropArea({\n onFiles: files => console.log('files', files),\n onUri: uri => console.log('uri', uri),\n onText: text => console.log('text', text),\n });\n\n return (\n <div {...bond}>\n Drop something here.\n </div>\n );\n}; \n'},"./docs/useEffectOnce.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useEffectOnce \nReact lifecycle hook that runs an effect only once.
\nUsage \nimport {useEffectOnce} from 'react-use';\n\nconst Demo = () => {\n useEffectOnce(() => {\n console.log('Running effect once on mount')\n\n return () => {\n console.log('Running clean-up of effect on unmount')\n }\n });\n\n return null;\n}; \nReference \nuseEffectOnce(effect: EffectCallback); \n'},"./docs/useEnsuredForwardedRef.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useEnsuredForwardedRef \nReact hook to use a ForwardedRef safely.
\nIn some scenarios, you may need to use a ref from inside and outside a component. If that's the case, you should use React.forwardRef to pass it through the child component. This is useful when you only want to forward that ref and expose an internal HTMLelement to a parent component, for example. However, if you need to manipulate that reference inside a child's lifecycle hook... things get complicated, since you can't always ensure that the ref is being sent by the parent component and if it is not, you will get undefined instead of a valid ref .
\nThis hook is useful in this specific case, it will ensure that you get a valid reference on the other side.
\nUsage \nimport {ensuredForwardRef} from 'react-use';\n\nconst Demo = () => {\n return (\n <Child />\n );\n};\n\nconst Child = ensuredForwardRef((props, ref) => {\n useEffect(() => {\n console.log(ref.current.getBoundingClientRect())\n }, [])\n\n return (\n <div ref={ref} />\n );\n}); \nAlternative usage \nimport {useEnsuredForwardedRef} from 'react-use';\n\nconst Demo = () => {\n return (\n <Child />\n );\n};\n\nconst Child = React.forwardRef((props, ref) => {\n // Here `ref` is undefined\n const ensuredForwardRef = useEnsuredForwardedRef(ref);\n // ensuredForwardRef will always be a valid reference.\n\n useEffect(() => {\n console.log(ensuredForwardRef.current.getBoundingClientRect())\n }, [])\n\n return (\n <div ref={ensuredForwardRef} />\n );\n}); \nReference \nensuredForwardRef<T, P = {}>(Component: RefForwardingComponent<T, P>): ForwardRefExoticComponent<PropsWithoutRef<P> & RefAttributes<T>>;\n\nuseEnsuredForwardedRef<T>(ref: React.MutableRefObject<T>): React.MutableRefObject<T>; \n'},"./docs/useError.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useError \nReact side-effect hook that returns an error dispatcher.
\nUsage \nimport { useError } from 'react-use';\n\nconst Demo = () => {\n const dispatchError = useError();\n\n const clickHandler = () => {\n dispatchError(new Error('Some error!'));\n };\n\n return <button onClick={clickHandler}>Click me to throw</button>;\n};\n\n// In parent app\nconst App = () => (\n <ErrorBoundary>\n <Demo />\n </ErrorBoundary>\n); \nReference \nconst dispatchError = useError(); \n\ndispatchError — Callback of type (err: Error) => void \n \n'},"./docs/useEvent.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useEvent \nReact sensor hook that subscribes a handler to events.
\nUsage \nimport {useEvent, useList} from 'react-use';\n\nconst Demo = () => {\n const [list, {push, clear}] = useList();\n\n const onKeyDown = useCallback(({key}) => {\n if (key === 'r') clear();\n push(key);\n }, []);\n\n useEvent('keydown', onKeyDown);\n\n return (\n <div>\n <p>\n Press some keys on your keyboard, <code style={{color: 'tomato'}}>r</code> key resets the list\n </p>\n <pre>\n {JSON.stringify(list, null, 4)}\n </pre>\n </div>\n );\n}; \nExamples \nuseEvent('keydown', handler)\nuseEvent('scroll', handler, window, {capture: true}) \n'},"./docs/useFavicon.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useFavicon \nReact side-effect hook sets the favicon of the page.
\nUsage \nimport {useFavicon} from 'react-use';\n\nconst Demo = () => {\n useFavicon('https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico');\n\n return null;\n}; \n'},"./docs/useFirstMountState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useFirstMountState \nReturns true if component is just mounted (on first render) and false otherwise.
\nUsage \nimport * as React from 'react';\nimport { useFirstMountState } from 'react-use';\n\nconst Demo = () => {\n const isFirstMount = useFirstMountState();\n const update = useUpdate();\n\n return (\n <div>\n <span>This component is just mounted: {isFirstMount ? 'YES' : 'NO'}</span>\n <br />\n <button onClick={update}>re-render</button>\n </div>\n );\n}; \nReference \nconst isFirstMount: boolean = useFirstMountState(); \n'},"./docs/useFullscreen.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useFullscreen \nDisplay an element full-screen, optional fallback for fullscreen video on iOS.
\nUsage \nimport {useFullscreen, useToggle} from 'react-use';\n\nconst Demo = () => {\n const ref = useRef(null)\n const [show, toggle] = useToggle(false);\n const isFullscreen = useFullscreen(ref, show, {onClose: () => toggle(false)});\n\n return (\n <div ref={ref} style={{backgroundColor: 'white'}}>\n <div>{isFullscreen ? 'Fullscreen' : 'Not fullscreen'}</div>\n <button onClick={() => toggle()}>Toggle</button>\n <video src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" autoPlay />\n </div>\n );\n}; \nReference \nuseFullscreen(ref, show, {onClose}) \n'},"./docs/useGeolocation.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useGeolocation \nReact sensor hook that tracks user's geographic location. This hook accepts position options .
\nUsage \nimport {useGeolocation} from 'react-use';\n\nconst Demo = () => {\n const state = useGeolocation();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n}; \nReference \nuseGeolocation(options: PositionOptions) \n'},"./docs/useGetSet.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useGetSet \nReact state hook that returns state getter function instead of\nraw state itself, this prevents subtle bugs when state is used\nin nested functions.
\nUsage \nBelow example uses useGetSet to increment a number after 1 second\non each click.
\nimport {useGetSet} from 'react-use';\n\nconst Demo = () => {\n const [get, set] = useGetSet(0);\n const onClick = () => {\n setTimeout(() => {\n set(get() + 1)\n }, 1_000);\n };\n\n return (\n <button onClick={onClick}>Clicked: {get()}</button>\n );\n}; \nIf you would do this example in a naive way using regular useState\nhook, the counter would not increment correctly if you click fast multiple times.
\nconst DemoWrong = () => {\n const [cnt, set] = useState(0);\n const onClick = () => {\n setTimeout(() => {\n set(cnt + 1)\n }, 1_000);\n };\n\n return (\n <button onClick={onClick}>Clicked: {cnt}</button>\n );\n}; \n'},"./docs/useGetSetState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useGetSetState \nA mix of useGetSet and useGetSetState.
\nUsage \nimport {useGetSetState} from 'react-use';\n\nconst Demo = () => {\n const [get, setState] = useGetSetState({cnt: 0});\n const onClick = () => {\n setTimeout(() => {\n setState({cnt: get().cnt + 1})\n }, 1000);\n };\n\n return (\n <button onClick={onClick}>Clicked: {get().cnt}</button>\n );\n}; \n'},"./docs/useHarmonicIntervalFn.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useHarmonicIntervalFn \nSame as useInterval hook, but triggers all effects with the same delay\nat the same time.
\nFor example, this allows you to create ticking clocks on the page which re-render second counter\nall at the same time.
\nReference \nuseHarmonicIntervalFn(fn, delay?: number) \n'},"./docs/useHash.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useHash \nReact sensor hook that tracks browser's location hash.
\nUsage \nimport {useHash} from 'react-use';\n\nconst Demo = () => {\n const [hash, setHash] = useHash();\n\n useMount(() => {\n setHash('#/path/to/page?userId=123');\n });\n\n return (\n <div>\n <div>window.location.href:</div>\n <div>\n <pre>{window.location.href}</pre>\n </div>\n <div>Edit hash: </div>\n <div>\n <input style={{ width: '100%' }} value={hash} onChange={e => setHash(e.target.value)} />\n </div>\n </div>\n );\n}; \nAPI \nconst [hash, setHash] = useHash()
\nGet latest url hash with hash and set url hash with setHash.
\n\nhash: string: get current url hash. listen to hashchange event. \nsetHash: (newHash: string) => void: change url hash. Invoke this method will trigger hashchange event. \n \n'},"./docs/useHover.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useHover and useHoverDirty \nReact UI sensor hooks that track if some element is being hovered\nby a mouse.
\n\nuseHover accepts a React element or a function that returns one,\nuseHoverDirty accepts React ref. \nuseHover sets react onMouseEnter and onMouseLeave events,\nuseHoverDirty sets DOM onmouseover and onmouseout events. \n \nUsage \nimport {useHover} from 'react-use';\n\nconst Demo = () => {\n const element = (hovered) =>\n <div>\n Hover me! {hovered && 'Thanks!'}\n </div>;\n const [hoverable, hovered] = useHover(element);\n\n return (\n <div>\n {hoverable}\n <div>{hovered ? 'HOVERED' : ''}</div>\n </div>\n );\n}; \nReference \nconst [newReactElement, isHovering] = useHover(reactElement);\nconst [newReactElement, isHovering] = useHover((isHovering) => reactElement);\nconst isHovering = useHoverDirty(ref); \n'},"./docs/useIdle.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useIdle \nReact sensor hook that tracks if user on the page is idle.
\nUsage \nimport {useIdle} from 'react-use';\n\nconst Demo = () => {\n const isIdle = useIdle(3e3);\n\n return (\n <div>\n <div>User is idle: {isIdle ? 'Yes 😴' : 'Nope'}</div>\n </div>\n );\n}; \nReference \nuseIdle(ms, initialState); \n\nms — time in milliseconds after which to consider use idle, defaults to 60e3 — one minute. \ninitialState — whether to consider user initially idle, defaults to false. \n \n'},"./docs/useIntersection.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useIntersection \nReact sensor hook that tracks the changes in the intersection of a target element with an ancestor element or with a top-level document's viewport. Uses the Intersection Observer API and returns a IntersectionObserverEntry .
\nUsage \nimport * as React from 'react';\nimport { useIntersection } from 'react-use';\n\nconst Demo = () => {\n const intersectionRef = React.useRef(null);\n const intersection = useIntersection(intersectionRef, {\n root: null,\n rootMargin: '0px',\n threshold: 1\n });\n\n return (\n <div ref={intersectionRef}>\n {intersection && intersection.intersectionRatio < 1\n ? 'Obscured'\n : 'Fully in view'}\n </div>\n );\n}; \nReference \nuseIntersection(\n ref: RefObject<HTMLElement>,\n options: IntersectionObserverInit,\n): IntersectionObserverEntry | null; \n'},"./docs/useInterval.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useInterval \nA declarative interval hook based on Dan Abramov's article on overreacted.io . The interval can be paused by setting the delay to null.
\nUsage \nimport * as React from 'react';\nimport {useInterval} from 'react-use';\n\nconst Demo = () => {\n const [count, setCount] = React.useState(0);\n const [delay, setDelay] = React.useState(1000);\n const [isRunning, toggleIsRunning] = useBoolean(true);\n\n useInterval(\n () => {\n setCount(count + 1);\n },\n isRunning ? delay : null\n );\n\n return (\n <div>\n <div>\n delay: <input value={delay} onChange={event => setDelay(Number(event.target.value))} />\n </div>\n <h1>count: {count}</h1>\n <div>\n <button onClick={toggleIsRunning}>{isRunning ? 'stop' : 'start'}</button>\n </div>\n </div>\n );\n}; \nReference \nuseInterval(callback, delay?: number) \n'},"./docs/useIsomorphicLayoutEffect.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useIsomorphicLayoutEffect \nuseLayoutEffect that does not show warning when server-side rendering, see Alex Reardon's article for more info.
\nUsage \nimport {useIsomorphicLayoutEffect} from 'react-use';\n\nconst Demo = ({value}) => {\n useIsomorphicLayoutEffect(() => {\n window.console.log(value)\n }, [value]);\n\n return null;\n}; \nReference \nuseIsomorphicLayoutEffect(effect: EffectCallback, deps?: ReadonlyArray<any> | undefined); \n'},"./docs/useKey.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useKey \nReact UI sensor hook that executes a handler when a keyboard key is used.
\nUsage \nimport {useKey} from 'react-use';\n\nconst Demo = () => {\n const [count, set] = useState(0);\n const increment = () => set(count => ++count);\n useKey('ArrowUp', increment);\n\n return (\n <div>\n Press arrow up: {count}\n </div>\n );\n}; \nOr as render-prop:
\nimport UseKey from 'react-use/lib/component/UseKey';\n\n<UseKey filter='a' fn={() => alert('"a" key pressed!')} /> \nReference \nuseKey(filter, handler, options?, deps?) \nExamples \nuseKey('a', () => alert('"a" pressed'));\n\nconst predicate = (event) => event.key === 'a'\nuseKey(predicate, handler, {event: 'keyup'}); \n'},"./docs/useKeyPress.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useKeyPress \nReact UI sensor hook that detects when the user is pressing a specific\nkey on their keyboard.
\nUsage \nimport {useKeyPress} from 'react-use';\n\nconst keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'];\n\nconst Demo = () => {\n const states = [];\n for (const key of keys) states.push(useKeyPress(key)[0]);\n\n return (\n <div style={{textAlign: 'center'}}>\n Try pressing numbers\n <br />\n {states.reduce((s, pressed, index) => s + (pressed ? (s ? ' + ' : '') + keys[index] : ''), '')}\n </div>\n );\n}; \nExamples \nconst isPressed = useKeyPress('a');\n\nconst predicate = (event) => event.key === 'a';\nconst isPressed = useKeyPress(predicate); \n'},"./docs/useKeyPressEvent.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useKeyPressEvent \nThis hook fires keydown and keyup callbacks, similar to how useKey \nhook does, but it only triggers each callback once per press cycle. For example,\nif you press and hold a key, it will fire keydown callback only once.
\nUsage \nimport React, { useState } from React;\nimport {useKeyPressEvent} from 'react-use';\n\nconst Demo = () => {\n const [count, setCount] = useState(0);\n\n const increment = () => setCount(count => ++count);\n const decrement = () => setCount(count => --count);\n const reset = () => setCount(count => 0);\n\n useKeyPressEvent(']', increment, increment);\n useKeyPressEvent('[', decrement, decrement);\n useKeyPressEvent('r', reset);\n\n return (\n <div>\n <p>\n Try pressing <code>[</code>, <code>]</code>, and <code>r</code> to\n see the count incremented and decremented.</p>\n <p>Count: {count}</p>\n </div>\n );\n}; \nReference \nuseKeyPressEvent('<key>', keydown);\nuseKeyPressEvent('<key>', keydown, keyup);\nuseKeyPressEvent('<key>', keydown, keyup, useKeyPress); \n'},"./docs/useKeyboardJs.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useKeyboardJs \nReact UI sensor hook that detects complex key combos like detecting when\nmultiple keys are held down at the same time or requiring them to be held down in a specified order.
\nVia KeyboardJS key combos .\nCheck its documentation for further details on how to make combo strings.
\nUsage \nimport useKeyboardJs from 'react-use/lib/useKeyboardJs';\n\nconst Demo = () => {\n const [isPressed] = useKeyboardJs('a + b');\n\n return (\n <div>\n [a + b] pressed: {isPressed ? 'Yes' : 'No'}\n </div>\n );\n}; \nNote: Because of dependency on keyboardjs you have to import this hook directly like shown above.
\nRequirements \nInstall keyboardjs peer dependency:
\nnpm add keyboardjs\n# or\nyarn add keyboardjs \nReference \nuseKeyboardJs(combination: string | string[]): [isPressed: boolean, event?: KeyboardEvent] \n'},"./docs/useLatest.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useLatest \nReact state hook that returns the latest state as described in the React hooks FAQ .
\nThis is mostly useful to get access to the latest value of some props or state inside an asynchronous callback, instead of that value at the time the callback was created from.
\nUsage \nimport { useLatest } from 'react-use';\n\nconst Demo = () => {\n const [count, setCount] = React.useState(0);\n const latestCount = useLatest(count);\n\n function handleAlertClick() {\n setTimeout(() => {\n alert(`Latest count value: ${latestCount.current}`);\n }, 3000);\n }\n\n return (\n <div>\n <p>You clicked {count} times</p>\n <button onClick={() => setCount(count + 1)}>Click me</button>\n <button onClick={handleAlertClick}>Show alert</button>\n </div>\n );\n}; \nReference \nconst latestState = useLatest = <T>(state: T): MutableRefObject<T>; \n'},"./docs/useLifecycles.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useLifecycles \nReact lifecycle hook that call mount and unmount callbacks, when\ncomponent is mounted and un-mounted, respectively.
\nUsage \nimport {useLifecycles} from 'react-use';\n\nconst Demo = () => {\n useLifecycles(() => console.log('MOUNTED'), () => console.log('UNMOUNTED'));\n return null;\n}; \nReference \nuseLifecycles(mount, unmount); \n'},"./docs/useList.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useList \nTracks an array and provides methods to modify it. To cause component re-render you have to use these methods instead of direct interaction with array - it won't cause re-render.
\nWe can ensure that actions object and actions itself will not mutate or change between renders, so there is no need to add it to useEffect dependencies and safe to pass them down to children.
\nNote: remove action is deprecated and actually is a copy of removeAt action. Within closest updates it will gain different functionality.
\nUsage \nimport {useList} from 'react-use';\n\nconst Demo = () => {\n const [list, { set, push, updateAt, insertAt, update, updateFirst, upsert, sort, filter, removeAt, clear, reset }] = useList([1, 2, 3, 4, 5]);\n\n return (\n <div>\n <button onClick={() => set([1, 2, 3])}>Set to [1, 2, 3]</button>\n <button onClick={() => push(Date.now())}>Push timestamp</button>\n <button onClick={() => updateAt(1, Date.now())}>Update value at index 1</button>\n <button onClick={() => remove(1)}>Remove element at index 1</button>\n <button onClick={() => filter(item => item % 2 === 0)}>Filter even values</button>\n <button onClick={() => sort((a, b) => a - b)}>Sort ascending</button>\n <button onClick={() => sort((a, b) => b - a)}>Sort descending</button>\n <button onClick={clear}>Clear</button>\n <button onClick={reset}>Reset</button>\n <pre>{JSON.stringify(list, null, 2)}</pre>\n </div>\n );\n}; \nReference \nimport {useList} from "react-use";\n\nconst [list, { \n set, \n push, \n updateAt, \n insertAt, \n update, \n updateFirst,\n upsert, \n sort, \n filter, \n removeAt, \n remove, \n clear, \n reset \n}] = useList(array: any[] | ()=> any[]); \n\nlist: T{} — current list; \nset: (list: T[]) => void; — Set new list instead old one; \npush: (...items: T[]) => void; — Add item(s) at the end of list; \nupdateAt: (index: number, item: T) => void; — Replace item at given position. If item at given position not exists it will be set; \ninsertAt: (index: number, item: T) => void; — Insert item at given position, all items to the right will be shifted; \nupdate: (predicate: (a: T, b: T) => boolean, newItem: T) => void; — Replace all items that matches predicate with given one; \nupdateFirst: (predicate: (a: T, b: T) => boolean, newItem: T) => void; — Replace first item matching predicate with given one; \nupsert: (predicate: (a: T, b: T) => boolean, newItem: T) => void; — Like updateFirst but in case of predicate miss - pushes item to the list; \nsort: (compareFn?: (a: T, b: T) => number) => void; — Sort list with given sorting function; \nfilter: (callbackFn: (value: T, index?: number, array?: T[]) => boolean, thisArg?: any) => void; — Same as native Array's method; \nremoveAt: (index: number) => void; — Removes item at given position. All items to the right from removed will be shifted; \nremove: (index: number) => void; — DEPRECATED: Use removeAt method instead; \nclear: () => void; — Make the list empty; \nreset: () => void; — Reset list to initial value; \n \n\n\n'},"./docs/useLocalStorage.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useLocalStorage \nReact side-effect hook that manages a single localStorage key.
\nUsage \nimport { useLocalStorage } from 'react-use';\n\nconst Demo = () => {\n const [value, setValue, remove] = useLocalStorage('my-key', 'foo');\n\n return (\n <div>\n <div>Value: {value}</div>\n <button onClick={() => setValue('bar')}>bar</button>\n <button onClick={() => setValue('baz')}>baz</button>\n <button onClick={() => remove()}>Remove</button>\n </div>\n );\n}; \nReference \nuseLocalStorage(key);\nuseLocalStorage(key, initialValue);\nuseLocalStorage(key, initialValue, { raw: true });\nuseLocalStorage(key, initialValue, {\n raw: false,\n serializer: (value: T) => string,\n deserializer: (value: string) => T,\n}); \n\nkey — localStorage key to manage. \ninitialValue — initial value to set, if value in localStorage is empty. \nraw — boolean, if set to true, hook will not attempt to JSON serialize stored values. \nserializer — custom serializer (defaults to JSON.stringify) \ndeserializer — custom deserializer (defaults to JSON.parse) \n \n'},"./docs/useLocation.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useLocation \nReact sensor hook that tracks brower's location.
\nFor Internet Explorer you need to install a polyfill .
\nUsage \nimport {useLocation} from 'react-use';\n\nconst Demo = () => {\n const state = useLocation();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n}; \n'},"./docs/useLockBodyScroll.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useLockBodyScroll \nReact side-effect hook that locks scrolling on the body element. Useful for modal and other overlay components.
\nAccepts ref object pointing to any HTML element as second parameter. Parent body element will be found and it's scroll will be locked/unlocked. It is needed to proper iFrame handling. By default it uses body element of script's parent window.
\n\nNote: To improve performance you can pass body's or iframe's ref object, thus no parent lookup will be performed
\n \nUsage \nimport {useLockBodyScroll, useToggle} from 'react-use';\n\nconst Demo = () => {\n const [locked, toggleLocked] = useToggle(false)\n\n useLockBodyScroll(locked);\n\n return (\n <div>\n <button onClick={() => toggleLocked()}>\n {locked ? 'Unlock' : 'Lock'}\n </button>\n </div>\n );\n}; \nReference \nuseLockBodyScroll(locked: boolean = true, elementRef?: RefObject<HTMLElement>); \n\nlocked — Hook will lock scrolling on the body element if true, defaults to true \nelementRef — The element ref object to find the body element. Can be either a ref to body or iframe element. \n \n'},"./docs/useLogger.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useLogger \nReact lifecycle hook that console logs parameters as component transitions through lifecycles.
\nUsage \nimport {useLogger} from 'react-use';\n\nconst Demo = (props) => {\n useLogger('Demo', props);\n return null;\n}; \nExample Output \nDemo mounted {}\nDemo updated {}\nDemo unmountedReference \nuseLogger(componentName: string, ...rest); \n\ncomponentName — component name. \n...rest — parameters to log. \n \n'},"./docs/useLongPress.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useLongPress \nReact sensor hook that fires a callback after long pressing.
\nUsage \nimport { useLongPress } from 'react-use';\n\nconst Demo = () => {\n const onLongPress = () => {\n console.log('calls callback after long pressing 300ms');\n };\n\n const defaultOptions = {\n isPreventDefault: true,\n delay: 300,\n };\n const longPressEvent = useLongPress(onLongPress, defaultOptions);\n\n return <button {...longPressEvent}>useLongPress</button>;\n}; \nReference \nconst {\n onMouseDown,\n onTouchStart,\n onMouseUp,\n onMouseLeave,\n onTouchEnd\n} = useLongPress(\n callback: (e: TouchEvent | MouseEvent) => void,\n options?: {\n isPreventDefault?: true,\n delay?: 300\n }\n) \n\ncallback — callback function. \noptions? — optional parameter.\nisPreventDefault? — whether to call event.preventDefault() of touchend event, for preventing ghost click on mobile devices in some cases, defaults to true. \ndelay? — delay in milliseconds after which to calls provided callback, defaults to 300. \n \n \n \n'},"./docs/useMap.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMap \nReact state hook that tracks a value of an object.
\nUsage \nimport {useMap} from 'react-use';\n\nconst Demo = () => {\n const [map, {set, setAll, remove, reset}] = useMap({\n hello: 'there',\n });\n\n return (\n <div>\n <button onClick={() => set(String(Date.now()), new Date().toJSON())}>\n Add\n </button>\n <button onClick={() => reset()}>\n Reset\n </button>\n <button onClick={() => setAll({ hello: 'new', data: 'data' })}>\n Set new data\n </button>\n <button onClick={() => remove('hello')} disabled={!map.hello}>\n Remove 'hello'\n </button>\n <pre>{JSON.stringify(map, null, 2)}</pre>\n </div>\n );\n}; \n'},"./docs/useMeasure.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMeasure \nReact sensor hook that tracks dimensions of an HTML element using the Resize Observer API .
\nUsage \nimport { useMeasure } from "react-use";\n\nconst Demo = () => {\n const [ref, { x, y, width, height, top, right, bottom, left }] = useMeasure();\n\n return (\n <div ref={ref}>\n <div>x: {x}</div> \n <div>y: {y}</div>\n <div>width: {width}</div>\n <div>height: {height}</div>\n <div>top: {top}</div>\n <div>right: {right}</div>\n <div>bottom: {bottom}</div>\n <div>left: {left}</div>\n </div>\n );\n}; \nThis hook uses ResizeObserver API , if you want to support \nlegacy browsers, consider installing resize-observer-polyfill \nbefore running your app.
\nif (!window.ResizeObserver) {\n window.ResizeObserver = (await import('resize-observer-polyfill')).default;\n} \n\n\n'},"./docs/useMedia.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='\nReact sensor hook that tracks state of a CSS media query.
\nUsage \nimport {useMedia} from 'react-use';\n\nconst Demo = () => {\n const isWide = useMedia('(min-width: 480px)');\n\n return (\n <div>\n Screen is wide: {isWide ? 'Yes' : 'No'}\n </div>\n );\n}; \nReference \nuseMedia(query: string, defaultState: boolean = false): boolean; \nThe defaultState parameter is only used as a fallback for server side rendering.
\nWhen server side rendering, it is important to set this parameter because without it the server's initial state will fallback to false, but the client will initialize to the result of the media query. When React hydrates the server render, it may not match the client's state. See the React docs for more on why this is can lead to costly bugs 🐛.
\n'},"./docs/useMediaDevices.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='\nReact sensor hook that tracks connected hardware devices.
\nUsage \nimport {useMediaDevices} from 'react-use';\n\nconst Demo = () => {\n const state = useMediaDevices();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n}; \n'},"./docs/useMediatedState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='\nA lot like the standard useState, but with mediation process.
\nUsage \nimport * as React from 'react';\nimport { useMediatedState } from '../useMediatedState';\n\nconst inputMediator = s => s.replace(/[\\s]+/g, ' ');\nconst Demo = () => {\n const [state, setState] = useMediatedState(inputMediator, '');\n\n return (\n <div>\n <div>You will not be able to enter more than one space</div>\n <input type="text" min="0" max="10" \n value={state}\n onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n setState(ev.target.value);\n }}\n />\n </div>\n );\n}; \nReference \nconst [state, setState] = useMediatedState<S=any>(\n mediator: StateMediator<S>,\n initialState?: S\n); \n\nInitial state will be set as-is.
\n \nIn case mediator expects 2 arguments it will receive the setState function as second argument, it is useful for async mediators.
\n\nThis hook will not cancel previous mediation when new one been invoked, you have to handle it yourself._
\n \n'},"./docs/useMethods.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMethods \nReact hook that simplifies the useReducer implementation.
\nUsage \nimport { useMethods } from 'react-use';\n\nconst initialState = {\n count: 0,\n};\n\nfunction createMethods(state) {\n return {\n reset() {\n return initialState;\n },\n increment() {\n return { ...state, count: state.count + 1 };\n },\n decrement() {\n return { ...state, count: state.count - 1 };\n },\n };\n}\n\nconst Demo = () => {\n const [state, methods] = useMethods(createMethods, initialState);\n\n return (\n <>\n <p>Count: {state.count}</p>\n <button onClick={methods.decrement}>-</button>\n <button onClick={methods.increment}>+</button>\n </>\n );\n}; \nReference \nconst [state, methods] = useMethods(createMethods, initialState); \n\ncreateMethods — function that takes current state and return an object containing methods that return updated state. \ninitialState — initial value of the state. \n \n'},"./docs/useMotion.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMotion \nReact sensor hook that uses device's acceleration sensor to track its motions.
\nUsage \nimport {useMotion} from 'react-use';\n\nconst Demo = () => {\n const state = useMotion();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n}; \n'},"./docs/useMount.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMount \nReact lifecycle hook that calls a function after the component is mounted. Use useLifecycles if you need both a mount and unmount function.
\nUsage \nimport {useMount} from 'react-use';\n\nconst Demo = () => {\n useMount(() => alert('MOUNTED'));\n return null;\n}; \nReference \nuseMount(fn: () => void); \n'},"./docs/useMountedState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMountedState \n\nNOTE!: despite having State in its name this hook does not cause component re-render . \nThis component designed to be used to avoid state updates on unmounted components.
\n \nLifecycle hook providing ability to check component's mount state. Returns a function that will return true if component mounted and false otherwise.
\nUsage \nimport * as React from 'react';\nimport {useMountedState} from 'react-use';\n\nconst Demo = () => {\n const isMounted = useMountedState();\n\n React.useEffect(() => {\n setTimeout(() => {\n if (isMounted()) {\n // ...\n } else {\n // ...\n }\n }, 1000);\n });\n}; \n'},"./docs/useMouse.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMouse and useMouseHovered \nReact sensor hooks that re-render on mouse position changes. useMouse simply tracks\nmouse position; useMouseHovered allows you to specify extra options:
\n\nbound — to bind mouse coordinates within the element \nwhenHovered — whether to attach mousemove event handler only when user hovers over the element \n \nUsage \nimport {useMouse} from 'react-use';\n\nconst Demo = () => {\n const ref = React.useRef(null);\n const {docX, docY, posX, posY, elX, elY, elW, elH} = useMouse(ref);\n\n return (\n <div ref={ref}>\n <div>Mouse position in document - x:{docX} y:{docY}</div>\n <div>Mouse position in element - x:{elX} y:{elY}</div>\n <div>Element position- x:{posX} y:{posY}</div>\n <div>Element dimensions - {elW}x{elH}</div>\n </div>\n );\n}; \nReference \nuseMouse(ref);\nuseMouseHovered(ref, {bound: false, whenHovered: false}); \n'},"./docs/useMouseWheel.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMouseWheel \nReact Hook to get deltaY of mouse scrolled in window.
\nUsage \nimport { useMouseWheel } from 'react-use';\n\nconst Demo = () => {\n const mouseWheel = useMouseWheel()\n return (\n <>\n <h3>delta Y Scrolled: {mouseWheel}</h3>\n </>\n );\n}; \n'},"./docs/useMultiStateValidator.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useMultiStateValidator \nEach time any of given states changes - validator function is invoked.
\nUsage \nimport * as React from 'react';\nimport { useMultiStateValidator } from 'react-use';\n\nconst DemoStateValidator = (s: number[]) => [s.every((num: number) => !(num % 2))] as [boolean];\nconst Demo = () => {\n const [state1, setState1] = React.useState<number>(1);\n const [state2, setState2] = React.useState<number>(1);\n const [state3, setState3] = React.useState<number>(1);\n const [[isValid]] = useMultiStateValidator([state1, state2, state3], DemoStateValidator);\n\n return (\n <div>\n <div>Below fields will be valid if all of them is even</div>\n <input type="number" min="1" max="10" value={state1}\n onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n setState1((ev.target.value as unknown) as number);\n }}\n />\n <input type="number" min="1" max="10" value={state2}\n onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n setState2((ev.target.value as unknown) as number);\n }}\n />\n <input type="number" min="1" max="10" value={state3}\n onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n setState3((ev.target.value as unknown) as number);\n }}\n />\n {isValid !== null && <span>{isValid ? 'Valid!' : 'Invalid'}</span>}\n </div>\n );\n}; \nReference \nconst [validity, revalidate] = useStateValidator(\n state: any[] | { [p: string]: any } | { [p: number]: any },\n validator: (state, setValidity?)=>[boolean|null, ...any[]],\n initialValidity: any = [undefined]\n); \n\nstate: any[] | { [p: string]: any } | { [p: number]: any } can be both an array or object. It's values will be used as a deps for inner useEffect. \nvalidity: [boolean|null, ...any[]] result of validity check. First element is strictly nullable boolean, but others can contain arbitrary data; \nrevalidate: ()=>void runs validator once again \nvalidator: (state, setValidity?)=>[boolean|null, ...any[]] should return an array suitable for validity state described above;\nstates - current states values as they've been passed to the hook; \nsetValidity - if defined hook will not trigger validity change automatically. Useful for async validators; \n \n \ninitialValidity - validity value which set when validity is nt calculated yet; \n \n'},"./docs/useNetworkState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useNetworkState \nTracks the state of browser's network connection.
\nAs of the standard it is not guaranteed that browser connected to the Internet , it only guarantees the network\nconnection.
\nUsage \nimport {useNetworkState} from 'react-use';\n\nconst Demo = () => {\n const state = useNetworkState();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n}; \nState interface: \ninterface IUseNetworkState {\n /**\n * @desc Whether browser connected to the network or not.\n */\n online: boolean | undefined;\n /**\n * @desc Previous value of `online` property. Helps to identify if browser\n * just connected or lost connection.\n */\n previous: boolean | undefined;\n /**\n * @desc The {Date} object pointing to the moment when state change occurred.\n */\n since: Date | undefined;\n /**\n * @desc Effective bandwidth estimate in megabits per second, rounded to the\n * nearest multiple of 25 kilobits per seconds.\n */\n downlink: number | undefined;\n /**\n * @desc Maximum downlink speed, in megabits per second (Mbps), for the\n * underlying connection technology\n */\n downlinkMax: number | undefined;\n /**\n * @desc Effective type of the connection meaning one of 'slow-2g', '2g', '3g', or '4g'.\n * This value is determined using a combination of recently observed round-trip time\n * and downlink values.\n */\n effectiveType: 'slow-2g' | '2g' | '3g' | '4g' | undefined;\n /**\n * @desc Estimated effective round-trip time of the current connection, rounded\n * to the nearest multiple of 25 milliseconds\n */\n rtt: number | undefined;\n /**\n * @desc Wheter user has set a reduced data usage option on the user agent.\n */\n saveData: boolen | undefined;\n /**\n * @desc The type of connection a device is using to communicate with the network.\n */\n type: 'bluetooth' | 'cellular' | 'ethernet' | 'none' | 'wifi' | 'wimax' | 'other' | 'unknown' | undefined;\n} \nCall signature \nfunction useNetworkState(initialState?: IUseNetworkState | (() => IUseNetworkState)): IUseNetworkState; \n'},"./docs/useObservable.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useObservable \nReact state hook that tracks the latest value of an Observable.
\nUsage \nimport {useObservable} from 'react-use';\n\nconst counter$ = new BehaviorSubject(0);\nconst Demo = () => {\n const value = useObservable(counter$, 0);\n\n return (\n <button onClick={() => counter$.next(value + 1)}>\n Clicked {value} times\n </button>\n );\n}; \n'},"./docs/useOrientation.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useOrientation \nReact sensor hook that tracks screen orientation of user's device.
\nReturns state in the following shape
\n{\n angle: 0,\n type: 'landscape-primary'\n} \nUsage \nimport {useOrientation} from 'react-use';\n\nconst Demo = () => {\n const state = useOrientation();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n}; \n'},"./docs/usePageLeave.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='usePageLeave \nReact sensor hook that fires a callback when mouse leaves the page.
\nUsage \nimport {usePageLeave} from 'react-use';\n\nconst Demo = () => {\n usePageLeave(() => console.log('Page left...'));\n\n return null;\n}; \n'},"./docs/usePermission.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='usePermission \nReact side-effect hook to query permission status of browser APIs.
\nUsage \nimport {usePermission} from 'react-use';\n\nconst Demo = () => {\n const state = usePermission({ name: 'microphone' });\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n}; \n'},"./docs/usePinchZoom.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='usePinchZoom \nReact sensor hook that tracks the changes in pointer touch events and detects value of pinch difference and tell if user is zooming in or out.
\nUsage \nimport { usePinchZoom } from "react-use";\n\nconst Demo = () => {\n const [scale, setState] = useState(1);\n const scaleRef = useRef();\n const { zoomingState, pinchState } = usePinchZoom(scaleRef);\n\n useEffect(() => {\n if (zoomingState === "ZOOM_IN") {\n // perform zoom in scaling\n setState(scale + 0.1)\n } else if (zoomingState === "ZOOM_OUT") {\n // perform zoom out in scaling\n setState(scale - 0.1)\n }\n }, [zoomingState]);\n\n return (\n <div ref={scaleRef}>\n <img\n src="https://www.olympus-imaging.co.in/content/000107506.jpg"\n style={{\n zoom: scale,\n }}\n />\n </div>\n );\n}; \n'},"./docs/usePrevious.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='usePrevious \nReact state hook that returns the previous state as described in the React hooks FAQ .
\nUsage \nimport {usePrevious} from 'react-use';\n\nconst Demo = () => {\n const [count, setCount] = React.useState(0);\n const prevCount = usePrevious(count);\n\n return (\n <p>\n <button onClick={() => setCount(count + 1)}>+</button>\n <button onClick={() => setCount(count - 1)}>-</button>\n <p>\n Now: {count}, before: {prevCount}\n </p>\n </p>\n );\n}; \nReference \nconst prevState = usePrevious = <T>(state: T): T; \n'},"./docs/usePreviousDistinct.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='usePreviousDistinct \nJust like usePrevious but it will only update once the value actually changes. This is important when other\nhooks are involved and you aren't just interested in the previous props version, but want to know the previous\ndistinct value
\nUsage \nimport {usePreviousDistinct, useCounter} from 'react-use';\n\nconst Demo = () => {\n const [count, { inc: relatedInc }] = useCounter(0);\n const [unrelatedCount, { inc }] = useCounter(0);\n const prevCount = usePreviousDistinct(count);\n\n return (\n <p>\n Now: {count}, before: {prevCount}\n <button onClick={() => relatedInc()}>Increment</button>\n Unrelated: {unrelatedCount}\n <button onClick={() => inc()}>Increment Unrelated</button>\n </p>\n );\n}; \nYou can also provide a way of identifying the value as unique. By default, a strict equals is used.
\nimport {usePreviousDistinct} from 'react-use';\n\nconst Demo = () => {\n const [str, setStr] = React.useState("something_lowercase");\n const [unrelatedCount] = React.useState(0);\n const prevStr = usePreviousDistinct(str, (prev, next) => (prev && prev.toUpperCase()) === next.toUpperCase());\n\n return (\n <p>\n Now: {count}, before: {prevCount}\n Unrelated: {unrelatedCount}\n </p>\n );\n}; \nReference \nconst prevState = usePreviousDistinct = <T>(state: T, compare?: (prev: T | undefined, next: T) => boolean): T; \n'},"./docs/usePromise.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='usePromise \nReact Lifecycle hook that returns a helper function for wrapping promises.\nPromises wrapped with this function will resolve only when component is mounted.
\nUsage \nimport {usePromise} from 'react-use';\n\nconst Demo = ({promise}) => {\n const mounted = usePromise();\n const [value, setValue] = useState();\n\n useEffect(() => {\n (async () => {\n const value = await mounted(promise);\n // This line will not execute if <Demo> component gets unmounted.\n setValue(value);\n })();\n });\n}; \n'},"./docs/useQueue.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useQueue \nReact state hook implements simple FIFO queue.
\nUsage \nimport { useQueue } from 'react-use';\n\nconst Demo = () => {\n const { add, remove, first, last, size } = useQueue();\n\n return (\n <div>\n <ul>\n <li>first: {first}</li>\n <li>last: {last}</li>\n <li>size: {size}</li>\n </ul>\n <button onClick={() => add((last || 0) + 1)}>Add</button>\n <button onClick={() => remove()}>Remove</button>\n </div>\n );\n}; \n'},"./docs/useRaf.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useRaf \nReact animation hook that forces component to re-render on each requestAnimationFrame,\nreturns percentage of time elapsed.
\nUsage \nimport {useRaf} from 'react-use';\n\nconst Demo = () => {\n const elapsed = useRaf(5000, 1000);\n\n return (\n <div>\n Elapsed: {elapsed}\n </div>\n );\n}; \nReference \nuseRaf(ms?: number, delay?: number): number; \n\nms — milliseconds for how long to keep re-rendering component, defaults to 1e12. \ndelay — delay in milliseconds after which to start re-rendering component, defaults to 0. \n \n'},"./docs/useRafLoop.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useRafLoop \nThis hook call given function within the RAF loop without re-rendering parent component.\nLoop stops automatically on component unmount.
\nAdditionally hook provides methods to start/stop loop and check current state.
\nUsage \nimport * as React from 'react';\nimport { useRafLoop, useUpdate } from 'react-use';\n\nconst Demo = () => {\n const [ticks, setTicks] = React.useState(0);\n const [lastCall, setLastCall] = React.useState(0);\n const update = useUpdate();\n\n const [loopStop, loopStart, isActive] = useRafLoop((time) => {\n setTicks(ticks => ticks + 1);\n setLastCall(time);\n });\n\n return (\n <div>\n <div>RAF triggered: {ticks} (times)</div>\n <div>Last high res timestamp: {lastCall}</div>\n <br />\n <button onClick={() => {\n isActive() ? loopStop() : loopStart();\n update();\n }}>{isActive() ? 'STOP' : 'START'}</button>\n </div>\n );\n}; \nReference \nconst [stopLoop, startLoop, isActive] = useRafLoop(callback: FrameRequestCallback, initiallyActive = true); \n\ncallback: (time: number)=>void — function to call each RAF tick.\ntime: number — DOMHighResTimeStamp, which indicates the current time (based on the number of milliseconds since time origin). \n \n \ninitiallyActive: boolean — whether loop should be started at initial render. \nReturn\nstopLoop: ()=>void — stop loop if it is active. \nstartLoop: ()=>void — start loop if it was inactive. \nisActive: ()=>boolean — true if loop is active. \n \n \n \n'},"./docs/useRafState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useRafState \nReact state hook that only updates state in the callback of requestAnimationFrame .
\nUsage \nimport {useRafState, useMount} from 'react-use';\n\nconst Demo = () => {\n const [state, setState] = useRafState({\n width: 0,\n height: 0,\n });\n\n useMount(() => {\n const onResize = () => {\n setState({\n width: window.clientWidth,\n height: window.height,\n });\n };\n\n window.addEventListener('resize', onResize);\n\n return () => {\n window.removeEventListener('resize', onResize);\n };\n });\n\n return <pre>{JSON.stringify(state, null, 2)}</pre>;\n}; \n'},"./docs/useRendersCount.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useRendersCount \nTracks component's renders count including the first render.
\nUsage \nimport * as React from 'react';\nimport { useRendersCount } from "react-use"; \n\nconst Demo = () => {\n const update = useUpdate();\n const rendersCount = useRendersCount();\n\n return (\n <div>\n <span>Renders count: {rendersCount}</span>\n <br />\n <button onClick={update}>re-render</button>\n </div>\n );\n}; \nReference \nconst rendersCount: number = useRendersCount(); \n'},"./docs/useScratch.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useScratch \nReact sensor hook that tracks state of mouse "scrubs" (or "scratches").
\nUsage \nimport useScratch from 'react-use/lib/useScratch';\n\nconst Demo = () => {\n const [ref, state] = useScratch();\n\n const blockStyle: React.CSSProperties = {\n position: 'relative',\n width: 400,\n height: 400,\n border: '1px solid tomato',\n };\n\n const preStyle: React.CSSProperties = {\n pointerEvents: 'none',\n userSelect: 'none',\n };\n\n let { x = 0, y = 0, dx = 0, dy = 0 } = state;\n if (dx < 0) [x, dx] = [x + dx, -dx];\n if (dy < 0) [y, dy] = [y + dy, -dy];\n\n const rectangleStyle: React.CSSProperties = {\n position: 'absolute',\n left: x,\n top: y,\n width: dx,\n height: dy,\n border: '1px solid tomato',\n pointerEvents: 'none',\n userSelect: 'none',\n };\n\n return (\n <div ref={ref} style={blockStyle}>\n <pre style={preStyle}>{JSON.stringify(state, null, 4)}</pre>\n {state.isScratching && <div style={rectangleStyle} />}\n </div>\n );\n}; \nReference \nconst [ref, state] = useScratch(); \nstate is:
\nexport interface ScratchSensorState {\n isScratching: boolean;\n start?: number;\n end?: number;\n x?: number;\n y?: number;\n dx?: number;\n dy?: number;\n docX?: number;\n docY?: number;\n posX?: number;\n posY?: number;\n elH?: number;\n elW?: number;\n elX?: number;\n elY?: number;\n} \n'},"./docs/useScroll.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='\nReact sensor hook that re-renders when the scroll position in a DOM element changes.
\nUsage \nimport {useScroll} from 'react-use';\n\nconst Demo = () => {\n const scrollRef = React.useRef(null);\n const {x, y} = useScroll(scrollRef);\n\n return (\n <div ref={scrollRef}>\n <div>x: {x}</div>\n <div>y: {y}</div>\n </div>\n );\n}; \nReference \nuseScroll(ref: RefObject<HTMLElement>); \n'},"./docs/useScrolling.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='\nReact sensor hook that keeps track of whether the user is scrolling or not.
\nUsage \nimport { useScrolling } from "react-use";\n\nconst Demo = () => {\n const scrollRef = React.useRef(null);\n const scrolling = useScrolling(scrollRef);\n\n return (\n <div ref={scrollRef}>\n {<div>{scrolling ? "Scrolling" : "Not scrolling"}</div>}\n </div>\n );\n}; \nReference \nuseScrolling(ref: RefObject<HTMLElement>); \n'},"./docs/useSearchParam.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSearchParam \nReact sensor hook that tracks browser's location search param.
\nUsage \nimport {useSearchParam} from 'react-use';\n\nconst Demo = () => {\n const edit = useSearchParam('edit');\n\n return (\n <div>\n <div>edit: {edit || '🤷♂️'}</div>\n <div>\n <button onClick={() => history.pushState({}, '', location.pathname + '?edit=123')}>Edit post 123 (?edit=123)</button>\n </div>\n <div>\n <button onClick={() => history.pushState({}, '', location.pathname + '?edit=999')}>Edit post 999 (?edit=999)</button>\n </div>\n <div>\n <button onClick={() => history.pushState({}, '', location.pathname)}>Close modal</button>\n </div>\n </div>\n );\n}; \nCaveats/Gotchas \nWhen using a hash router, like react-router's <HashRouter> , this hook won't be able to read the search parameters as they are considered part of the hash of the URL by browsers.
\n'},"./docs/useSessionStorage.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSessionStorage \nReact side-effect hook that manages a single sessionStorage key.
\nUsage \nimport {useSessionStorage} from 'react-use';\n\nconst Demo = () => {\n const [value, setValue] = useSessionStorage('my-key', 'foo');\n\n return (\n <div>\n <div>Value: {value}</div>\n <button onClick={() => setValue('bar')}>bar</button>\n <button onClick={() => setValue('baz')}>baz</button>\n </div>\n );\n}; \nReference \nuseSessionStorage(key);\nuseSessionStorage(key, initialValue);\nuseSessionStorage(key, initialValue, raw); \n\nkey — sessionStorage key to manage. \ninitialValue — initial value to set, if value in sessionStorage is empty. \nraw — boolean, if set to true, hook will not attempt to JSON serialize stored values. \n \n'},"./docs/useSet.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSet \nReact state hook that tracks a Set .
\nUsage \nWhat is the difference between the "clear()" method and the "reset()" method?
\nThe "reset()" method returns the "Set" to the initial value passed during "useSet\nThe "clear()" method completely empties the "Set".
\nimport {useSet} from 'react-use';\n\nconst Demo = () => {\n const [set, { add, has, remove, toggle, reset, clear }] = useSet(new Set(['hello']));\n\n return (\n <div>\n <button onClick={() => add(String(Date.now()))}>Add</button>\n <button onClick={() => reset()}>Reset</button>\n <button onClick={() => clear()}>Clear</button>\n <button onClick={() => remove('hello')} disabled={!has('hello')}>\n Remove 'hello'\n </button>\n <button onClick={() => toggle('hello')}>Toggle hello</button>\n <pre>{JSON.stringify(Array.from(set), null, 2)}</pre>\n </div>\n );\n}; \n'},"./docs/useSetState.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSetState \nReact state hook that creates setState method which works similar to how\nthis.setState works in class components—it merges object changes into\ncurrent state.
\nUsage \nimport {useSetState} from 'react-use';\n\nconst Demo = () => {\n const [state, setState] = useSetState({});\n\n return (\n <div>\n <pre>{JSON.stringify(state, null, 2)}</pre>\n <button onClick={() => setState({hello: 'world'})}>hello</button>\n <button onClick={() => setState({foo: 'bar'})}>foo</button>\n <button \n onClick={() => {\n setState((prevState) => ({\n count: (prevState.count || 0) + 1,\n }))\n }}\n >\n count\n </button>\n </div>\n );\n}; \nReference \nconst [state, setState] = useSetState({cnt: 0});\n\nsetState({cnt: state.cnt + 1});\nsetState((prevState) => ({\n cnt: prevState + 1,\n})); \n'},"./docs/useShallowCompareEffect.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useShallowCompareEffect \nA modified useEffect hook that is using shallow comparison on each of its dependencies instead of reference equality.
\nUsage \nimport {useCounter, useShallowCompareEffect} from 'react-use';\n\nconst Demo = () => {\n const [count, {inc: inc}] = useCounter(0);\n const options = { step: 2 };\n\n useShallowCompareEffect(() => {\n inc(options.step)\n }, [options]);\n\n return (\n <div>\n <p>useShallowCompareEffect: {count}</p>\n </div>\n );\n}; \nReference \nuseShallowCompareEffect(effect: () => void | (() => void | undefined), deps: any[]); \n'},"./docs/useSize.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSize \nReact sensor hook that tracks size of an HTML element.
\nUsage \nimport {useSize} from 'react-use';\n\nconst Demo = () => {\n const [sized, {width, height}] = useSize(\n ({width}) => <div style={{background: 'red'}}>Size me up! ({width}px)</div>,\n { width: 100, height: 100 }\n );\n\n return (\n <div>\n {sized}\n <div>width: {width}</div>\n <div>height: {height}</div>\n </div>\n );\n}; \nReference \nuseSize(element, initialSize); \n\nelement — sized element. \ninitialSize — initial size containing a width and height key. \n \n\n\n'},"./docs/useSlider.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSlider \nReact UI hook that provides slide behavior over any HTML element. Supports both mouse and touch events.
\nUsage \nimport {useSlider} from 'react-use';\n\nconst Demo = () => {\n const ref = React.useRef(null);\n const {isSliding, value, pos, length} = useSlider(ref);\n\n return (\n <div>\n <div ref={ref} style={{ position: 'relative' }}>\n <p style={{ textAlign: 'center', color: isSliding ? 'red' : 'green' }}>\n {Math.round(value * 100)}%\n </p>\n <div style={{ position: 'absolute', left: pos }}>🎚</div>\n </div>\n </div>\n );\n}; \n'},"./docs/useSpeech.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSpeech \nReact UI hook that synthesizes human voice that speaks a given string.
\nUsage \nimport {useSpeech} from 'react-use';\n\nconst voices = window.speechSynthesis.getVoices();\n\nconst Demo = () => {\n const state = useSpeech('Hello world!', { rate: 0.8, pitch: 0.5, voice: voices[0] });\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre> \n );\n}; \n'},"./docs/useSpring.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useSpring \nReact animation hook that updates a single numeric value over time according\nto spring dynamics.
\nUsage \nimport useSpring from 'react-use/lib/useSpring';\n\nconst Demo = () => {\n const [target, setTarget] = useState(50);\n const value = useSpring(target);\n\n return (\n <div>\n {value}\n <br />\n <button onClick={() => setTarget(0)}>Set 0</button>\n <button onClick={() => setTarget(100)}>Set 100</button>\n </div>\n );\n}; \nNote: Because of dependency on rebound you have to import this hook directly like shown above.
\nRequirements \nInstall rebound peer dependency:
\nnpm add rebound\n# or\nyarn add rebound \nReference \nconst currentValue = useSpring(targetValue);\nconst currentValue = useSpring(targetValue, tension, friction); \n'},"./docs/useStartTyping.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useStartTyping \nReact sensor hook that fires a callback when user starts typing. Can be used\nto focus default input field on the page.
\nUsage \nimport {useStartTyping} from 'react-use';\n\nconst Demo = () => {\n useStartTyping(() => alert('Started typing...'));\n\n return null;\n}; \n'},"./docs/useStateList.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useStateList \nProvides handles for circular iteration over states list. Supports forward and backward iterations and arbitrary position set.
\nUsage \nimport { useStateList } from 'react-use';\nimport { useRef } from 'react';\n\nconst stateSet = ['first', 'second', 'third', 'fourth', 'fifth'];\n\nconst Demo = () => {\n const { state, prev, next, setStateAt, setState, currentIndex, isFirst, isLast } = useStateList(stateSet);\n const indexInput = useRef<HTMLInputElement>(null);\n const stateInput = useRef<HTMLInputElement>(null);\n\n return (\n <div>\n <pre>\n {state} [index: {currentIndex}], [isFirst: {isFirst}], [isLast: {isLast}]\n </pre>\n <button onClick={() => prev()}>prev</button>\n <br />\n <button onClick={() => next()}>next</button>\n <br />\n <input type="text" ref={indexInput} style={{ width: 120 }} />\n <button onClick={() => setStateAt((indexInput.current!.value as unknown) as number)}>set state by index</button>\n <br />\n <input type="text" ref={stateInput} style={{ width: 120 }} />\n <button onClick={() => setState(stateInput.current!.value)}> set state by value</button>\n </div>\n );\n}; \nReference \nconst { state, currentIndex, prev, next, setStateAt, setState, isFirst, isLast } = useStateList<T>(stateSet: T[] = []); \nIf stateSet changed, became shorter than before and currentIndex left in shrunk gap - the last element of list will be taken as current.
\n\nstate: T — current state value; \ncurrentIndex: number — current state index; \nprev(): void — switches state to the previous one. If first element selected it will switch to the last one; \nnext(): void — switches state to the next one. If last element selected it will switch to the first one; \nsetStateAt(newIndex: number): void — set the arbitrary state by index. Indexes are looped, and can be negative.4ex: if list contains 5 elements, attempt to set index 9 will bring use to the 5th element, in case of negative index it will start counting from the right, so -17 will bring us to the 4th element. \nsetState(state: T): void — set the arbitrary state value that exists in stateSet. In case new state does not exists in stateSet an Error will be thrown. \nisFirst: boolean — true if current state is the first one. \nisLast: boolean — true if current state is the last one. \n \n'},"./docs/useStateValidator.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useStateValidator \nEach time given state changes - validator function is invoked.
\nUsage \nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { useStateValidator } from 'react-use';\n\nconst DemoStateValidator = s => [s === '' ? null : (s * 1) % 2 === 0];\nconst Demo = () => {\n const [state, setState] = React.useState<string | number>(0);\n const [[isValid]] = useStateValidator(state, DemoStateValidator);\n\n return (\n <div>\n <div>Below field is valid only if number is even</div>\n <input\n type="number"\n min="0"\n max="10"\n value={state}\n onChange={(ev: React.ChangeEvent<HTMLInputElement>) => {\n setState(ev.target.value);\n }}\n />\n {isValid !== null && <span>{isValid ? 'Valid!' : 'Invalid'}</span>}\n </div>\n );\n}; \nReference \nconst [validity, revalidate] = useStateValidator(\n state: any,\n validator: (state, setValidity?)=>[boolean|null, ...any[]],\n initialValidity: any\n); \n\nvalidity: [boolean|null, ...any[]] result of validity check. First element is strictly nullable boolean, but others can contain arbitrary data; \nrevalidate: ()=>void runs validator once again \nvalidator: (state, setValidity?)=>[boolean|null, ...any[]] should return an array suitable for validity state described above;\nstate - current state; \nsetValidity - if defined hook will not trigger validity change automatically. Useful for async validators; \n \n \ninitialValidity - validity value which set when validity is nt calculated yet; \n \n'},"./docs/useStateWithHistory.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useStateHistory \nStores defined amount of previous state values and provides handles to travel through them.
\nUsage \nReference \nconst [state, setState, stateHistory] = useStateWithHistory<S = undefined>(\n initialState?: S | (()=>S),\n capacity?: number = 10,\n initialHistory?: S\n); \n\nstate , setState and initialState are exactly the same with native React's useState hook; \ncapacity - amount of history entries held by storage; \ninitialHistory - if defined it will be used as initial history value, otherwise history will equal [ initialState ]. \nInitial state will not be pushed to initial history. If entries amount is greater than capacity parameter it won't be modified on init but will be trimmed on the next call to setState; \nstateHistory - an object containing history state:\nhistory: S[] - an array holding history entries. It will have the same ref all the time so be careful with that one! ; \nposition: number - current position index in history; \ncapacity: number = 10 - maximum amount of history entries; \nback: (amount?: number) => void - go back in state history, it will cause setState to be invoked and component re-render.\nIf first element of history reached, the call will have no effect; \nforward: (amount?: number) => void - go forward in state history, it will cause setState to be invoked and component re-render. If last element of history is reached, the call will have no effect; \ngo: (position: number) => void - go to arbitrary position in history. In case position is non-negative ot will count elements from beginning.\nNegative position will cause elements counting from the end, so go(-2) equals go(history.length - 1); \n \n \n \n'},"./docs/useThrottle.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useThrottle and useThrottleFn \nReact hooks that throttle.
\nUsage \nimport React, { useState } from 'react';\nimport { useThrottle, useThrottleFn } from 'react-use';\n\nconst Demo = ({value}) => {\n const throttledValue = useThrottle(value);\n // const throttledValue = useThrottleFn(value => value, 200, [value]);\n\n return (\n <>\n <div>Value: {value}</div>\n <div>Throttled value: {throttledValue}</div>\n </>\n );\n}; \nReference \nuseThrottle(value, ms?: number);\nuseThrottleFn(fn, ms, args); \n'},"./docs/useTimeout.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useTimeout \nRe-renders the component after a specified number of milliseconds. Provides handles to cancel and/or reset the timeout.
\nUsage \nimport { useTimeout } from 'react-use';\n\nfunction TestComponent(props: { ms?: number } = {}) {\n const ms = props.ms || 5000;\n const [isReady, cancel] = useTimeout(ms);\n\n return (\n <div>\n { isReady() ? 'I\\'m reloaded after timeout' : `I will be reloaded after ${ ms / 1000 }s` }\n { isReady() === false ? <button onClick={ cancel }>Cancel</button> : '' }\n </div>\n );\n}\n\nconst Demo = () => {\n return (\n <div>\n <TestComponent />\n <TestComponent ms={ 10000 } />\n </div>\n );\n}; \nReference \nconst [\n isReady: () => boolean | null,\n cancel: () => void,\n reset: () => void,\n] = useTimeout(ms: number = 0); \n\nisReady:()=>boolean|null - function returning current timeout state:\nfalse - pending re-render \ntrue - re-render performed \nnull - re-render cancelled \n \n \ncancel:()=>void - cancel the timeout (component will not be re-rendered) \nreset:()=>void - reset the timeout \n \n'},"./docs/useTimeoutFn.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useTimeoutFn \nCalls given function after specified amount of milliseconds.
\nSeveral thing about it's work:
\n\ndoes not re-render component; \nautomatically cancel timeout on cancel; \nautomatically reset timeout on delay change; \nreset function call will cancel previous timeout; \ntimeout will NOT be reset on function change. It will be called within the timeout, you have to reset it on your own when needed. \n \nUsage \nimport * as React from 'react';\nimport { useTimeoutFn } from 'react-use';\n\nconst Demo = () => {\n const [state, setState] = React.useState('Not called yet');\n\n function fn() {\n setState(`called at ${Date.now()}`);\n }\n\n const [isReady, cancel, reset] = useTimeoutFn(fn, 5000);\n const cancelButtonClick = useCallback(() => {\n if (isReady() === false) {\n cancel();\n setState(`cancelled`);\n } else {\n reset();\n setState('Not called yet');\n }\n }, []);\n\n const readyState = isReady();\n\n return (\n <div>\n <div>{readyState !== null ? 'Function will be called in 5 seconds' : 'Timer cancelled'}</div>\n <button onClick={cancelButtonClick}> {readyState === false ? 'cancel' : 'restart'} timeout</button>\n <br />\n <div>Function state: {readyState === false ? 'Pending' : readyState ? 'Called' : 'Cancelled'}</div>\n <div>{state}</div>\n </div>\n );\n}; \nReference \nconst [\n isReady: () => boolean | null,\n cancel: () => void,\n reset: () => void,\n] = useTimeoutFn(fn: Function, ms: number = 0); \n\nfn: Function - function that will be called; \nms: number - delay in milliseconds; \nisReady: ()=>boolean|null - function returning current timeout state:\nfalse - pending \ntrue - called \nnull - cancelled \n \n \ncancel: ()=>void - cancel the timeout \nreset: ()=>void - reset the timeout \n \n'},"./docs/useTitle.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useTitle \nReact side-effect hook that sets title of the page.
\nUsage \nimport {useTitle} from 'react-use';\n\nconst Demo = () => {\n useTitle('Hello world!');\n\n return null;\n}; \n'},"./docs/useToggle.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useToggle \nReact state hook that tracks value of a boolean.
\nuseBoolean is an alias for useToggle.
\nUsage \nimport {useToggle} from 'react-use';\n\nconst Demo = () => {\n const [on, toggle] = useToggle(true);\n\n return (\n <div>\n <div>{on ? 'ON' : 'OFF'}</div>\n <button onClick={toggle}>Toggle</button>\n <button onClick={() => toggle(true)}>set ON</button>\n <button onClick={() => toggle(false)}>set OFF</button>\n </div>\n );\n}; \n'},"./docs/useTween.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useTween \nReact animation hook that tweens a number between 0 and 1.
\nUsage \nimport {useTween} from 'react-use';\n\nconst Demo = () => {\n const t = useTween();\n\n return (\n <div>\n Tween: {t}\n </div>\n );\n}; \nReference \nuseTween(easing?: string, ms?: number, delay?: number): number \nReturns a number that begins with 0 and ends with 1 when animation ends.
\n\neasing — one of the valid easing names , defaults to inCirc. \nms — milliseconds for how long to keep re-rendering component, defaults to 200. \ndelay — delay in milliseconds after which to start re-rendering component, defaults to 0. \n \n'},"./docs/useUnmount.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useUnmount \nReact lifecycle hook that calls a function when the component will unmount. Use useLifecycles if you need both a mount and unmount function.
\nUsage \nimport {useUnmount} from 'react-use';\n\nconst Demo = () => {\n useUnmount(() => alert('UNMOUNTED'));\n return null;\n}; \nReference \nuseUnmount(fn: () => void | undefined); \n'},"./docs/useUpdate.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useUpdate \nReact utility hook that returns a function that forces component\nto re-render when called.
\nUsage \nimport {useUpdate} from 'react-use';\n\nconst Demo = () => {\n const update = useUpdate();\n return (\n <>\n <div>Time: {Date.now()}</div>\n <button onClick={update}>Update</button>\n </>\n );\n}; \n'},"./docs/useUpdateEffect.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useUpdateEffect \nReact effect hook that ignores the first invocation (e.g. on mount). The signature is exactly the same as the useEffect hook.
\nUsage \nimport React from 'react'\nimport {useUpdateEffect} from 'react-use';\n\nconst Demo = () => {\n const [count, setCount] = React.useState(0);\n\n React.useEffect(() => {\n const interval = setInterval(() => {\n setCount(count => count + 1)\n }, 1000)\n\n return () => {\n clearInterval(interval)\n }\n }, [])\n\n useUpdateEffect(() => {\n console.log('count', count) // will only show 1 and beyond\n\n return () => { // *OPTIONAL*\n // do something on unmount\n }\n }) // you can include deps array if necessary\n\n return <div>Count: {count}</div>\n}; \n'},"./docs/useUpsert.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useUpsert \n\nDEPRECATED! \nUse useList hook's upsert action instead
\n \nSuperset of useList . Provides an additional method to upsert (update or insert) an element into the list.
\nUsage \nimport {useUpsert} from 'react-use';\n\nconst Demo = () => {\n const comparisonFunction = (a: DemoType, b: DemoType) => {\n return a.id === b.id;\n };\n const [list, { set, upsert, remove }] = useUpsert(comparisonFunction, initialItems);\n\n return (\n <div style={{ display: 'inline-flex', flexDirection: 'column' }}>\n {list.map((item: DemoType, index: number) => (\n <div key={item.id}>\n <input value={item.text} onChange={e => upsert({ ...item, text: e.target.value })} />\n <button onClick={() => remove(index)}>Remove</button>\n </div>\n ))}\n <button onClick={() => upsert({ id: (list.length + 1).toString(), text: '' })}>Add item</button>\n <button onClick={() => set([])}>Reset</button>\n </div>\n );\n}; \n\n\n'},"./docs/useVibrate.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useVibrate \nReact UI hook to provide physical feedback with device vibration hardware using the Vibration API .
\nUsage \nimport {useVibrate} from 'react-use';\n\nconst Demo = () => {\n const [vibrating, toggleVibrating] = useToggle(false);\n\n useVibrate(vibrating, [300, 100, 200, 100, 1000, 300], false);\n\n return (\n <div>\n <button onClick={toggleVibrating}>{vibrating ? 'Stop' : 'Vibrate'}</button>\n </div>\n );\n}; \nReference \nuseVibrate(\n enabled: boolean = true,\n pattern: number | number[] = [1000, 1000],\n loop: boolean = true\n): void; \n'},"./docs/useVideo.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useVideo \nCreates <video> element, tracks its state and exposes playback controls.
\nUsage \nimport {useVideo} from 'react-use';\n\nconst Demo = () => {\n const [video, state, controls, ref] = useVideo(\n <video src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" autoPlay />\n );\n\n return (\n <div>\n {video}\n <pre>{JSON.stringify(state, null, 2)}</pre>\n <button onClick={controls.pause}>Pause</button>\n <button onClick={controls.play}>Play</button>\n <br/>\n <button onClick={controls.mute}>Mute</button>\n <button onClick={controls.unmute}>Un-mute</button>\n <br/>\n <button onClick={() => controls.volume(.1)}>Volume: 10%</button>\n <button onClick={() => controls.volume(.5)}>Volume: 50%</button>\n <button onClick={() => controls.volume(1)}>Volume: 100%</button>\n <br/>\n <button onClick={() => controls.seek(state.time - 5)}>-5 sec</button>\n <button onClick={() => controls.seek(state.time + 5)}>+5 sec</button>\n </div>\n );\n}; \nReference \nconst [video, state, controls, ref] = useVideo(props);\nconst [video, state, controls, ref] = useVideo(<video {...props}/>); \nvideo is React's <video> element that you have to insert somewhere in your\nrender tree, for example:
\n<div>{video}</div> \nstate tracks the state of the video and has the following shape:
\n{\n "buffered": [\n {\n "start": 0,\n "end": 425.952625\n }\n ],\n "time": 5.244996,\n "duration": 425.952625,\n "paused": false,\n "muted": false,\n "volume": 1\n} \ncontrols is a list collection of methods that allow you to control the\nplayback of the video, it has the following interface:
\ninterface AudioControls {\n play: () => Promise<void> | void;\n pause: () => void;\n mute: () => void;\n unmute: () => void;\n volume: (volume: number) => void;\n seek: (time: number) => void;\n} \nref is a React reference to HTML <video> element, you can access the element by\nref.current, note that it may be null.
\nAnd finally, props — all props that <video> accepts.
\n'},"./docs/useWindowScroll.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='\nReact sensor hook that re-renders on window scroll.
\nUsage \nimport {useWindowScroll} from 'react-use';\n\nconst Demo = () => {\n const {x, y} = useWindowScroll();\n\n return (\n <div>\n <div>x: {x}</div>\n <div>y: {y}</div>\n </div>\n );\n}; \n'},"./docs/useWindowSize.md":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),__webpack_exports__.default='useWindowSize \nReact sensor hook that tracks dimensions of the browser window.
\nUsage \nimport {useWindowSize} from 'react-use';\n\nconst Demo = () => {\n const {width, height} = useWindowSize();\n\n return (\n <div>\n <div>width: {width}</div>\n <div>height: {height}</div>\n </div>\n );\n}; \n'},"./src/component/UseKey.tsx":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.filter.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),useKey_1=tslib_1.__importDefault(__webpack_require__("./src/useKey.ts")),UseKey=tslib_1.__importDefault(__webpack_require__("./src/factory/createRenderProp.ts")).default(useKey_1.default,(function(_a){var filter=_a.filter,fn=_a.fn,deps=_a.deps;return[filter,fn,tslib_1.__rest(_a,["filter","fn","deps"]),deps]}));exports.default=UseKey;try{RenderProp.displayName="RenderProp",RenderProp.__docgenInfo={description:"",displayName:"RenderProp",props:{}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["src/component/UseKey.tsx#RenderProp"]={docgenInfo:RenderProp.__docgenInfo,name:"RenderProp",path:"src/component/UseKey.tsx#RenderProp"})}catch(__react_docgen_typescript_loader_error){}},"./src/factory/createBreakpoint.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.sort.js"),__webpack_require__("./node_modules/core-js/modules/es.object.entries.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reduce.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts");exports.default=function createBreakpoint(breakpoints){return void 0===breakpoints&&(breakpoints={laptopL:1440,laptop:1024,tablet:768}),function(){var _a=react_1.useState(util_1.isBrowser?window.innerWidth:0),screen=_a[0],setScreen=_a[1];react_1.useEffect((function(){var setSideScreen=function setSideScreen(){setScreen(window.innerWidth)};return setSideScreen(),util_1.on(window,"resize",setSideScreen),function(){util_1.off(window,"resize",setSideScreen)}}));var sortedBreakpoints=react_1.useMemo((function(){return Object.entries(breakpoints).sort((function(a,b){return a[1]>=b[1]?1:-1}))}),[breakpoints]);return sortedBreakpoints.reduce((function(acc,_a){var name=_a[0],width=_a[1];return screen>=width?name:acc}),sortedBreakpoints[0][0])}}},"./src/factory/createGlobalState.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.array.filter.js"),__webpack_require__("./node_modules/core-js/modules/es.array.includes.js"),__webpack_require__("./node_modules/core-js/modules/es.string.includes.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.createGlobalState=void 0;var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),hookState_1=__webpack_require__("./src/misc/hookState.ts"),useEffectOnce_1=tslib_1.__importDefault(__webpack_require__("./src/useEffectOnce.ts")),useIsomorphicLayoutEffect_1=tslib_1.__importDefault(__webpack_require__("./src/useIsomorphicLayoutEffect.ts"));function createGlobalState(initialState){var store={state:initialState instanceof Function?initialState():initialState,setState:function setState(nextState){store.state=hookState_1.resolveHookState(nextState,store.state),store.setters.forEach((function(setter){return setter(store.state)}))},setters:[]};return function(){var _a=react_1.useState(store.state),globalState=_a[0],stateSetter=_a[1];return useEffectOnce_1.default((function(){return function(){store.setters=store.setters.filter((function(setter){return setter!==stateSetter}))}})),useIsomorphicLayoutEffect_1.default((function(){store.setters.includes(stateSetter)||store.setters.push(stateSetter)})),[globalState,store.setState]}}exports.createGlobalState=createGlobalState,exports.default=createGlobalState},"./src/factory/createHTMLMediaHook.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),react_1=__webpack_require__("./node_modules/react/index.js"),useSetState_1=tslib_1.__importDefault(__webpack_require__("./src/useSetState.ts")),parseTimeRanges_1=tslib_1.__importDefault(__webpack_require__("./src/misc/parseTimeRanges.ts"));exports.default=function createHTMLMediaHook(tag){return function(elOrProps){var element,props;props=React.isValidElement(elOrProps)?(element=elOrProps).props:elOrProps;var _a=useSetState_1.default({buffered:[],time:0,duration:0,paused:!0,muted:!1,volume:1,playing:!1}),state=_a[0],setState=_a[1],ref=react_1.useRef(null),wrapEvent=function wrapEvent(userEvent,proxyEvent){return function(event){try{proxyEvent&&proxyEvent(event)}finally{userEvent&&userEvent(event)}}},onPlay=function onPlay(){return setState({paused:!1})},onPlaying=function onPlaying(){return setState({playing:!0})},onWaiting=function onWaiting(){return setState({playing:!1})},onPause=function onPause(){return setState({paused:!0,playing:!1})},onVolumeChange=function onVolumeChange(){var el=ref.current;el&&setState({muted:el.muted,volume:el.volume})},onDurationChange=function onDurationChange(){var el=ref.current;if(el){var duration=el.duration,buffered=el.buffered;setState({duration:duration,buffered:parseTimeRanges_1.default(buffered)})}},onTimeUpdate=function onTimeUpdate(){var el=ref.current;el&&setState({time:el.currentTime})},onProgress=function onProgress(){var el=ref.current;el&&setState({buffered:parseTimeRanges_1.default(el.buffered)})};element=element?React.cloneElement(element,tslib_1.__assign(tslib_1.__assign({controls:!1},props),{ref:ref,onPlay:wrapEvent(props.onPlay,onPlay),onPlaying:wrapEvent(props.onPlaying,onPlaying),onWaiting:wrapEvent(props.onWaiting,onWaiting),onPause:wrapEvent(props.onPause,onPause),onVolumeChange:wrapEvent(props.onVolumeChange,onVolumeChange),onDurationChange:wrapEvent(props.onDurationChange,onDurationChange),onTimeUpdate:wrapEvent(props.onTimeUpdate,onTimeUpdate),onProgress:wrapEvent(props.onProgress,onProgress)})):React.createElement(tag,tslib_1.__assign(tslib_1.__assign({controls:!1},props),{ref:ref,onPlay:wrapEvent(props.onPlay,onPlay),onPlaying:wrapEvent(props.onPlaying,onPlaying),onWaiting:wrapEvent(props.onWaiting,onWaiting),onPause:wrapEvent(props.onPause,onPause),onVolumeChange:wrapEvent(props.onVolumeChange,onVolumeChange),onDurationChange:wrapEvent(props.onDurationChange,onDurationChange),onTimeUpdate:wrapEvent(props.onTimeUpdate,onTimeUpdate),onProgress:wrapEvent(props.onProgress,onProgress)}));var lockPlay=!1,controls={play:function play(){var el=ref.current;if(el&&!lockPlay){var promise=el.play();if("object"==typeof promise){lockPlay=!0;var resetLock=function resetLock(){lockPlay=!1};promise.then(resetLock,resetLock)}return promise}},pause:function pause(){var el=ref.current;if(el&&!lockPlay)return el.pause()},seek:function seek(time){var el=ref.current;el&&void 0!==state.duration&&(time=Math.min(state.duration,Math.max(0,time)),el.currentTime=time)},volume:function volume(_volume){var el=ref.current;el&&(_volume=Math.min(1,Math.max(0,_volume)),el.volume=_volume,setState({volume:_volume}))},mute:function mute(){var el=ref.current;el&&(el.muted=!0)},unmute:function unmute(){var el=ref.current;el&&(el.muted=!1)}};return react_1.useEffect((function(){var el=ref.current;el&&(setState({volume:el.volume,muted:el.muted,paused:el.paused}),props.autoPlay&&el.paused&&controls.play())}),[props.src]),[element,state,controls,ref]}}},"./src/factory/createMemo.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js");exports.default=function createMemo(fn){return function(){for(var args=[],_i=0;_iarr.length?arr[index]=item:arr.splice(index,0,item),arr}))},update:function update(predicate,newItem){actions.set((function(curr){return curr.map((function(item){return predicate(item,newItem)?newItem:item}))}))},updateFirst:function updateFirst(predicate,newItem){var index=list.current.findIndex((function(item){return predicate(item,newItem)}));index>=0&&actions.updateAt(index,newItem)},upsert:function upsert(predicate,newItem){var index=list.current.findIndex((function(item){return predicate(item,newItem)}));index>=0?actions.updateAt(index,newItem):actions.push(newItem)},sort:function sort(compareFn){actions.set((function(curr){return curr.slice().sort(compareFn)}))},filter:function filter(callbackFn,thisArg){actions.set((function(curr){return curr.slice().filter(callbackFn,thisArg)}))},removeAt:function removeAt(index){actions.set((function(curr){var arr=curr.slice();return arr.splice(index,1),arr}))},clear:function clear(){actions.set([])},reset:function reset(){actions.set(hookState_1.resolveHookState(initialList).slice())}};return a.remove=a.removeAt,a}),[]);return[list.current,actions]}},"./src/useLocalStorage.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts");exports.default=function useLocalStorage(key,initialValue,options){if(!util_1.isBrowser)return[initialValue,util_1.noop,util_1.noop];if(!key)throw new Error("useLocalStorage key may not be falsy");var deserializer=options?options.raw?function(value){return value}:options.deserializer:JSON.parse,initializer=react_1.useRef((function(key){try{var serializer=options?options.raw?String:options.serializer:JSON.stringify,localStorageValue=localStorage.getItem(key);return null!==localStorageValue?deserializer(localStorageValue):(initialValue&&localStorage.setItem(key,serializer(initialValue)),initialValue)}catch(_a){return initialValue}})),_a=react_1.useState((function(){return initializer.current(key)})),state=_a[0],setState=_a[1];react_1.useLayoutEffect((function(){return setState(initializer.current(key))}),[key]);var set=react_1.useCallback((function(valOrFunc){try{var newState="function"==typeof valOrFunc?valOrFunc(state):valOrFunc;if(void 0===newState)return;var value=void 0;value=options?options.raw?"string"==typeof newState?newState:JSON.stringify(newState):options.serializer?options.serializer(newState):JSON.stringify(newState):JSON.stringify(newState),localStorage.setItem(key,value),setState(deserializer(value))}catch(_a){}}),[key,setState]),remove=react_1.useCallback((function(){try{localStorage.removeItem(key),setState(void 0)}catch(_a){}}),[key,setState]);return[state,set,remove]}},"./src/useLocation.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.string.search.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.exec.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts"),patchHistoryMethod=function patchHistoryMethod(method){var history=window.history,original=history[method];history[method]=function(state){var result=original.apply(this,arguments),event=new Event(method.toLowerCase());return event.state=state,window.dispatchEvent(event),result}};util_1.isBrowser&&(patchHistoryMethod("pushState"),patchHistoryMethod("replaceState"));var buildState=function buildState(trigger){var _a=window.history,state=_a.state,length=_a.length,_b=window.location;return{trigger:trigger,state:state,length:length,hash:_b.hash,host:_b.host,hostname:_b.hostname,href:_b.href,origin:_b.origin,pathname:_b.pathname,port:_b.port,protocol:_b.protocol,search:_b.search}},hasEventConstructor="function"==typeof Event;exports.default=util_1.isBrowser&&hasEventConstructor?function useLocationBrowser(){var _a=react_1.useState(buildState("load")),state=_a[0],setState=_a[1];return react_1.useEffect((function(){var onPopstate=function onPopstate(){return setState(buildState("popstate"))},onPushstate=function onPushstate(){return setState(buildState("pushstate"))},onReplacestate=function onReplacestate(){return setState(buildState("replacestate"))};return util_1.on(window,"popstate",onPopstate),util_1.on(window,"pushstate",onPushstate),util_1.on(window,"replacestate",onReplacestate),function(){util_1.off(window,"popstate",onPopstate),util_1.off(window,"pushstate",onPushstate),util_1.off(window,"replacestate",onReplacestate)}}),[]),state}:function useLocationServer(){return{trigger:"load",length:1}}},"./src/useLockBodyScroll.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.map.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.getClosestBody=void 0;var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts");function getClosestBody(el){if(!el)return null;if("BODY"===el.tagName)return el;if("IFRAME"===el.tagName){var document=el.contentDocument;return document?document.body:null}return el.offsetParent?getClosestBody(el.offsetParent):null}function preventDefault(rawEvent){var e=rawEvent||window.event;return e.touches.length>1||(e.preventDefault&&e.preventDefault(),!1)}exports.getClosestBody=getClosestBody;var isIosDevice=util_1.isBrowser&&window.navigator&&window.navigator.platform&&/iP(ad|hone|od)/.test(window.navigator.platform),bodies=new Map,doc="object"==typeof document?document:void 0,documentListenerAdded=!1;exports.default=doc?function useLockBody(locked,elementRef){void 0===locked&&(locked=!0);var bodyRef=react_1.useRef(doc.body);elementRef=elementRef||bodyRef;var unlock=function unlock(body){var bodyInfo=bodies.get(body);bodyInfo&&(1===bodyInfo.counter?(bodies.delete(body),isIosDevice?(body.ontouchmove=null,documentListenerAdded&&(util_1.off(document,"touchmove",preventDefault),documentListenerAdded=!1)):body.style.overflow=bodyInfo.initialOverflow):bodies.set(body,{counter:bodyInfo.counter-1,initialOverflow:bodyInfo.initialOverflow}))};react_1.useEffect((function(){var body=getClosestBody(elementRef.current);body&&(locked?function lock(body){var bodyInfo=bodies.get(body);bodyInfo?bodies.set(body,{counter:bodyInfo.counter+1,initialOverflow:bodyInfo.initialOverflow}):(bodies.set(body,{counter:1,initialOverflow:body.style.overflow}),isIosDevice?documentListenerAdded||(util_1.on(document,"touchmove",preventDefault,{passive:!1}),documentListenerAdded=!0):body.style.overflow="hidden")}(body):unlock(body))}),[locked,elementRef.current]),react_1.useEffect((function(){var body=getClosestBody(elementRef.current);if(body)return function(){unlock(body)}}),[])}:function useLockBodyMock(_locked,_elementRef){void 0===_locked&&(_locked=!0)}},"./src/useLogger.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),useEffectOnce_1=tslib_1.__importDefault(__webpack_require__("./src/useEffectOnce.ts")),useUpdateEffect_1=tslib_1.__importDefault(__webpack_require__("./src/useUpdateEffect.ts"));exports.default=function useLogger(componentName){for(var rest=[],_i=1;_i=2?validatorInner.current(statesInner.current,setValidity):setValidity(validatorInner.current(statesInner.current))}),[setValidity]);return react_1.useEffect((function(){validate()}),Object.values(states)),[validity,validate]}},"./src/useNetworkState.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.date.to-string.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts"),nav=util_1.isNavigator?navigator:void 0,conn=nav&&(nav.connection||nav.mozConnection||nav.webkitConnection);function getConnectionState(previousState){var online=null==nav?void 0:nav.onLine,previousOnline=null==previousState?void 0:previousState.online;return{online:online,previous:previousOnline,since:online!==previousOnline?new Date:null==previousState?void 0:previousState.since,downlink:null==conn?void 0:conn.downlink,downlinkMax:null==conn?void 0:conn.downlinkMax,effectiveType:null==conn?void 0:conn.effectiveType,rtt:null==conn?void 0:conn.rtt,saveData:null==conn?void 0:conn.saveData,type:null==conn?void 0:conn.type}}exports.default=function useNetworkState(initialState){var _a=react_1.useState(null!=initialState?initialState:getConnectionState),state=_a[0],setState=_a[1];return react_1.useEffect((function(){var handleStateChange=function handleStateChange(){setState(getConnectionState)};return util_1.on(window,"online",handleStateChange,{passive:!0}),util_1.on(window,"offline",handleStateChange,{passive:!0}),conn&&util_1.on(conn,"change",handleStateChange,{passive:!0}),function(){util_1.off(window,"online",handleStateChange),util_1.off(window,"offline",handleStateChange),conn&&util_1.off(conn,"change",handleStateChange)}}),[]),state}},"./src/useNumber.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var useCounter_1=__webpack_require__("./node_modules/tslib/tslib.es6.js").__importDefault(__webpack_require__("./src/useCounter.ts"));exports.default=useCounter_1.default},"./src/useObservable.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),useIsomorphicLayoutEffect_1=tslib_1.__importDefault(__webpack_require__("./src/useIsomorphicLayoutEffect.ts"));exports.default=function useObservable(observable$,initialValue){var _a=react_1.useState(initialValue),value=_a[0],update=_a[1];return useIsomorphicLayoutEffect_1.default((function(){var s=observable$.subscribe(update);return function(){return s.unsubscribe()}}),[observable$]),value}},"./src/useOrientation.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts"),defaultState={angle:0,type:"landscape-primary"};exports.default=function useOrientation(initialState){void 0===initialState&&(initialState=defaultState);var _a=react_1.useState(initialState),state=_a[0],setState=_a[1];return react_1.useEffect((function(){var screen=window.screen,mounted=!0,onChange=function onChange(){if(mounted){var orientation=screen.orientation;if(orientation){var angle=orientation.angle,type=orientation.type;setState({angle:angle,type:type})}else void 0!==window.orientation?setState({angle:"number"==typeof window.orientation?window.orientation:0,type:""}):setState(initialState)}};return util_1.on(window,"orientationchange",onChange),onChange(),function(){mounted=!1,util_1.off(window,"orientationchange",onChange)}}),[]),state}},"./src/usePageLeave.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts");exports.default=function usePageLeave(onPageLeave,args){void 0===args&&(args=[]),react_1.useEffect((function(){if(onPageLeave){var handler=function handler(event){var from=(event=event||window.event).relatedTarget||event.toElement;from&&"HTML"!==from.nodeName||onPageLeave()};return util_1.on(document,"mouseout",handler),function(){util_1.off(document,"mouseout",handler)}}}),args)}},"./src/usePermission.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts");exports.default=function usePermission(permissionDesc){var _a=react_1.useState(""),state=_a[0],setState=_a[1];return react_1.useEffect((function(){var mounted=!0,permissionStatus=null,onChange=function onChange(){mounted&&setState((function(){var _a;return null!==(_a=null==permissionStatus?void 0:permissionStatus.state)&&void 0!==_a?_a:""}))};return navigator.permissions.query(permissionDesc).then((function(status){permissionStatus=status,util_1.on(permissionStatus,"change",onChange),onChange()})).catch(util_1.noop),function(){permissionStatus&&util_1.off(permissionStatus,"change",onChange),mounted=!1,permissionStatus=null}}),[permissionDesc]),state}},"./src/usePinchZoom.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.splice.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.ZoomState=void 0;var ZoomState,react_1=__webpack_require__("./node_modules/react/index.js");!function(ZoomState){ZoomState.ZOOMING_IN="ZOOMING_IN",ZoomState.ZOOMING_OUT="ZOOMING_OUT"}(ZoomState=exports.ZoomState||(exports.ZoomState={}));exports.default=function usePinchZoom(ref){var cacheRef=react_1.useMemo((function(){return{evCache:[],prevDiff:-1}}),[ref.current]),_a=react_1.useState(),zoomingState=_a[0],setZoomingState=_a[1],pointermove_handler=function pointermove_handler(ev){for(var i=0;i0&&(curDiff>cacheRef.prevDiff&&setZoomingState([ZoomState.ZOOMING_IN,curDiff]),curDiff1?value=1:value<0&&(value=0),reverse_1&&(value=1-value),setState({value:value}),(options.onScrub||util_1.noop)(value)}}))};return util_1.on(ref.current,"mousedown",onMouseDown_1),util_1.on(ref.current,"touchstart",onTouchStart_1),function(){util_1.off(ref.current,"mousedown",onMouseDown_1),util_1.off(ref.current,"touchstart",onTouchStart_1)}}}),[ref,options.vertical]),state}},"./src/useSpeech.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),Object.defineProperty(exports,"__esModule",{value:!0});var Status,tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js");!function(Status){Status[Status.init=0]="init",Status[Status.play=1]="play",Status[Status.pause=2]="pause",Status[Status.end=3]="end"}(Status||(Status={}));exports.default=function useSpeech(text,options){var mounted=react_1.useRef(!1),_a=react_1.useState((function(){var _a=options.voice||{},_b=_a.lang,lang=void 0===_b?"default":_b,_c=_a.name,name=void 0===_c?"":_c;return{isPlaying:!1,status:Status[Status.init],lang:options.lang||"default",voiceInfo:{lang:lang,name:name},rate:options.rate||1,pitch:options.pitch||1,volume:options.volume||1}})),state=_a[0],setState=_a[1],handlePlay=react_1.useCallback((function(){mounted.current&&setState((function(preState){return tslib_1.__assign(tslib_1.__assign({},preState),{isPlaying:!0,status:Status[Status.play]})}))}),[]),handlePause=react_1.useCallback((function(){mounted.current&&setState((function(preState){return tslib_1.__assign(tslib_1.__assign({},preState),{isPlaying:!1,status:Status[Status.pause]})}))}),[]),handleEnd=react_1.useCallback((function(){mounted.current&&setState((function(preState){return tslib_1.__assign(tslib_1.__assign({},preState),{isPlaying:!1,status:Status[Status.end]})}))}),[]);return react_1.useEffect((function(){mounted.current=!0;var utterance=new SpeechSynthesisUtterance(text);return options.lang&&(utterance.lang=options.lang),options.voice&&(utterance.voice=options.voice),utterance.rate=options.rate||1,utterance.pitch=options.pitch||1,utterance.volume=options.volume||1,utterance.onstart=handlePlay,utterance.onpause=handlePause,utterance.onresume=handlePlay,utterance.onend=handleEnd,window.speechSynthesis.speak(utterance),function(){mounted.current=!1}}),[]),state}},"./src/useSpring.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),rebound_1=__webpack_require__("./node_modules/rebound/dist/rebound.js");exports.default=function useSpring(targetValue,tension,friction){void 0===targetValue&&(targetValue=0),void 0===tension&&(tension=50),void 0===friction&&(friction=3);var _a=react_1.useState(null),spring=_a[0],setSpring=_a[1],_b=react_1.useState(targetValue),value=_b[0],setValue=_b[1],listener=react_1.useMemo((function(){return{onSpringUpdate:function onSpringUpdate(currentSpring){var newValue=currentSpring.getCurrentValue();setValue(newValue)}}}),[]);return react_1.useEffect((function(){if(!spring){var newSpring=(new rebound_1.SpringSystem).createSpring(tension,friction);newSpring.setCurrentValue(targetValue),setSpring(newSpring),newSpring.addListener(listener)}return function(){spring&&(spring.removeListener(listener),setSpring(null))}}),[tension,friction,spring]),react_1.useEffect((function(){spring&&spring.setEndValue(targetValue)}),[targetValue]),value}},"./src/useStartTyping.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var useIsomorphicLayoutEffect_1=__webpack_require__("./node_modules/tslib/tslib.es6.js").__importDefault(__webpack_require__("./src/useIsomorphicLayoutEffect.ts")),util_1=__webpack_require__("./src/misc/util.ts");exports.default=function useStartTyping(onStartTyping){useIsomorphicLayoutEffect_1.default((function(){var keydown=function keydown(event){!function isFocusedElementEditable(){var activeElement=document.activeElement,body=document.body;if(!activeElement)return!1;if(activeElement===body)return!1;switch(activeElement.tagName){case"INPUT":case"TEXTAREA":return!0}return activeElement.hasAttribute("contenteditable")}()&&function isTypedCharGood(_a){var keyCode=_a.keyCode,metaKey=_a.metaKey,ctrlKey=_a.ctrlKey,altKey=_a.altKey;return!(metaKey||ctrlKey||altKey)&&(keyCode>=48&&keyCode<=57||keyCode>=65&&keyCode<=90)}(event)&&onStartTyping(event)};return util_1.on(document,"keydown",keydown),function(){util_1.off(document,"keydown",keydown)}}),[])}},"./src/useStateList.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.index-of.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),useMountedState_1=tslib_1.__importDefault(__webpack_require__("./src/useMountedState.ts")),useUpdate_1=tslib_1.__importDefault(__webpack_require__("./src/useUpdate.ts")),useUpdateEffect_1=tslib_1.__importDefault(__webpack_require__("./src/useUpdateEffect.ts"));exports.default=function useStateList(stateSet){void 0===stateSet&&(stateSet=[]);var isMounted=useMountedState_1.default(),update=useUpdate_1.default(),index=react_1.useRef(0);useUpdateEffect_1.default((function(){stateSet.length<=index.current&&(index.current=stateSet.length-1,update())}),[stateSet.length]);var actions=react_1.useMemo((function(){return{next:function next(){return actions.setStateAt(index.current+1)},prev:function prev(){return actions.setStateAt(index.current-1)},setStateAt:function setStateAt(newIndex){isMounted()&&stateSet.length&&newIndex!==index.current&&(index.current=newIndex>=0?newIndex%stateSet.length:stateSet.length+newIndex%stateSet.length,update())},setState:function setState(state){if(isMounted()){var newIndex=stateSet.length?stateSet.indexOf(state):-1;if(-1===newIndex)throw new Error("State '"+state+"' is not a valid state (does not exist in state list)");index.current=newIndex,update()}}}}),[stateSet]);return tslib_1.__assign({state:stateSet[index.current],currentIndex:index.current,isFirst:0===index.current,isLast:index.current===stateSet.length-1},actions)}},"./src/useStateValidator.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js");exports.default=function useStateValidator(state,validator,initialState){void 0===initialState&&(initialState=[void 0]);var validatorInner=react_1.useRef(validator),stateInner=react_1.useRef(state);validatorInner.current=validator,stateInner.current=state;var _a=react_1.useState(initialState),validity=_a[0],setValidity=_a[1],validate=react_1.useCallback((function(){validatorInner.current.length>=2?validatorInner.current(stateInner.current,setValidity):setValidity(validatorInner.current(stateInner.current))}),[setValidity]);return react_1.useEffect((function(){validate()}),[state]),[validity,validate]}},"./src/useStateWithHistory.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.useStateWithHistory=void 0;var react_1=__webpack_require__("./node_modules/react/index.js"),useFirstMountState_1=__webpack_require__("./src/useFirstMountState.ts"),hookState_1=__webpack_require__("./src/misc/hookState.ts");exports.useStateWithHistory=function useStateWithHistory(initialState,capacity,initialHistory){if(void 0===capacity&&(capacity=10),capacity<1)throw new Error("Capacity has to be greater than 1, got '"+capacity+"'");var isFirstMount=useFirstMountState_1.useFirstMountState(),_a=react_1.useState(initialState),state=_a[0],innerSetState=_a[1],history=react_1.useRef(null!=initialHistory?initialHistory:[]),historyPosition=react_1.useRef(0);return isFirstMount&&(history.current.length?(history.current[history.current.length-1]!==initialState&&history.current.push(initialState),history.current.length>capacity&&(history.current=history.current.slice(history.current.length-capacity))):history.current.push(initialState),historyPosition.current=history.current.length&&history.current.length-1),[state,react_1.useCallback((function(newState){innerSetState((function(currentState){return(newState=hookState_1.resolveHookState(newState,currentState))!==currentState&&(historyPosition.currentcapacity&&(history.current=history.current.slice(history.current.length-capacity))),newState}))}),[state,capacity]),react_1.useMemo((function(){return{history:history.current,position:historyPosition.current,capacity:capacity,back:function back(amount){void 0===amount&&(amount=1),historyPosition.current&&innerSetState((function(){return historyPosition.current-=Math.min(amount,historyPosition.current),history.current[historyPosition.current]}))},forward:function forward(amount){void 0===amount&&(amount=1),historyPosition.current!==history.current.length-1&&innerSetState((function(){return historyPosition.current=Math.min(historyPosition.current+amount,history.current.length-1),history.current[historyPosition.current]}))},go:function go(position){position!==historyPosition.current&&innerSetState((function(){return historyPosition.current=position<0?Math.max(history.current.length+position,0):Math.min(history.current.length-1,position),history.current[historyPosition.current]}))}}}),[state])]}},"./src/useThrottle.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),useUnmount_1=tslib_1.__importDefault(__webpack_require__("./src/useUnmount.ts"));exports.default=function useThrottle(value,ms){void 0===ms&&(ms=200);var _a=react_1.useState(value),state=_a[0],setState=_a[1],timeout=react_1.useRef(),nextValue=react_1.useRef(null),hasNextValue=react_1.useRef(0);return react_1.useEffect((function(){if(timeout.current)nextValue.current=value,hasNextValue.current=!0;else{setState(value);timeout.current=setTimeout((function timeoutCallback_1(){hasNextValue.current?(hasNextValue.current=!1,setState(nextValue.current),timeout.current=setTimeout(timeoutCallback_1,ms)):timeout.current=void 0}),ms)}}),[value]),useUnmount_1.default((function(){timeout.current&&clearTimeout(timeout.current)})),state}},"./src/useThrottleFn.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),useUnmount_1=tslib_1.__importDefault(__webpack_require__("./src/useUnmount.ts"));exports.default=function useThrottleFn(fn,ms,args){void 0===ms&&(ms=200);var _a=react_1.useState(null),state=_a[0],setState=_a[1],timeout=react_1.useRef(),nextArgs=react_1.useRef();return react_1.useEffect((function(){if(timeout.current)nextArgs.current=args;else{setState(fn.apply(void 0,args));timeout.current=setTimeout((function timeoutCallback_1(){nextArgs.current?(setState(fn.apply(void 0,nextArgs.current)),nextArgs.current=void 0,timeout.current=setTimeout(timeoutCallback_1,ms)):timeout.current=void 0}),ms)}}),args),useUnmount_1.default((function(){timeout.current&&clearTimeout(timeout.current)})),state}},"./src/useTimeout.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),useTimeoutFn_1=tslib_1.__importDefault(__webpack_require__("./src/useTimeoutFn.ts")),useUpdate_1=tslib_1.__importDefault(__webpack_require__("./src/useUpdate.ts"));exports.default=function useTimeout(ms){void 0===ms&&(ms=0);var update=useUpdate_1.default();return useTimeoutFn_1.default(update,ms)}},"./src/useTimeoutFn.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js");exports.default=function useTimeoutFn(fn,ms){void 0===ms&&(ms=0);var ready=react_1.useRef(!1),timeout=react_1.useRef(),callback=react_1.useRef(fn),isReady=react_1.useCallback((function(){return ready.current}),[]),set=react_1.useCallback((function(){ready.current=!1,timeout.current&&clearTimeout(timeout.current),timeout.current=setTimeout((function(){ready.current=!0,callback.current()}),ms)}),[ms]),clear=react_1.useCallback((function(){ready.current=null,timeout.current&&clearTimeout(timeout.current)}),[]);return react_1.useEffect((function(){callback.current=fn}),[fn]),react_1.useEffect((function(){return set(),clear}),[ms]),[isReady,clear,set]}},"./src/useTitle.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),DEFAULT_USE_TITLE_OPTIONS={restoreOnUnmount:!1};exports.default="undefined"!=typeof document?function useTitle(title,options){void 0===options&&(options=DEFAULT_USE_TITLE_OPTIONS);var prevTitleRef=react_1.useRef(document.title);document.title!==title&&(document.title=title),react_1.useEffect((function(){return options&&options.restoreOnUnmount?function(){document.title=prevTitleRef.current}:void 0}),[])}:function(_title){}},"./src/useToggle.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),toggleReducer=function toggleReducer(state,nextValue){return"boolean"==typeof nextValue?nextValue:!state};exports.default=function useToggle(initialValue){return react_1.useReducer(toggleReducer,initialValue)}},"./src/useTween.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.join.js"),__webpack_require__("./node_modules/core-js/modules/es.object.keys.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),ts_easing_1=__webpack_require__("./node_modules/ts-easing/lib/index.js"),useRaf_1=tslib_1.__importDefault(__webpack_require__("./src/useRaf.ts"));exports.default=function useTween(easingName,ms,delay){return void 0===easingName&&(easingName="inCirc"),void 0===ms&&(ms=200),void 0===delay&&(delay=0),(0,ts_easing_1.easing[easingName])(useRaf_1.default(ms,delay))}},"./src/useUnmount.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),useEffectOnce_1=tslib_1.__importDefault(__webpack_require__("./src/useEffectOnce.ts"));exports.default=function useUnmount(fn){var fnRef=react_1.useRef(fn);fnRef.current=fn,useEffectOnce_1.default((function(){return function(){return fnRef.current()}}))}},"./src/useUnmountPromise.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),useEffectOnce_1=tslib_1.__importDefault(__webpack_require__("./src/useEffectOnce.ts"));exports.default=function useUnmountPromise(){var refUnmounted=react_1.useRef(!1);return useEffectOnce_1.default((function(){return function(){refUnmounted.current=!0}})),react_1.useMemo((function(){return function race(promise,onError){return new Promise((function(resolve,reject){promise.then((function(result){refUnmounted.current||resolve(result)}),(function(error){refUnmounted.current?onError?onError(error):console.error("useUnmountPromise",error):reject(error)}))}))}}),[])}},"./src/useUpdate.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),updateReducer=function updateReducer(num){return(num+1)%1e6};exports.default=function useUpdate(){return react_1.useReducer(updateReducer,0)[1]}},"./src/useUpdateEffect.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),useFirstMountState_1=__webpack_require__("./src/useFirstMountState.ts");exports.default=function useUpdateEffect(effect,deps){var isFirstMount=useFirstMountState_1.useFirstMountState();react_1.useEffect((function(){if(!isFirstMount)return effect()}),deps)}},"./src/useUpsert.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),useList_1=tslib_1.__importDefault(__webpack_require__("./src/useList.ts"));exports.default=function useUpsert(predicate,initialList){void 0===initialList&&(initialList=[]);var _a=useList_1.default(initialList),list=_a[0],listActions=_a[1];return[list,tslib_1.__assign(tslib_1.__assign({},listActions),{upsert:function upsert(newItem){listActions.upsert(predicate,newItem)}})]}},"./src/useVibrate.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reduce.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts"),isVibrationApiSupported=util_1.isNavigator&&"vibrate"in navigator;exports.default=isVibrationApiSupported?function useVibrate(enabled,pattern,loop){void 0===enabled&&(enabled=!0),void 0===pattern&&(pattern=[1e3,1e3]),void 0===loop&&(loop=!0),react_1.useEffect((function(){var interval;if(enabled&&(navigator.vibrate(pattern),loop)){var duration=pattern instanceof Array?pattern.reduce((function(a,b){return a+b})):pattern;interval=setInterval((function(){navigator.vibrate(pattern)}),duration)}return function(){enabled&&(navigator.vibrate(0),loop&&clearInterval(interval))}}),[enabled])}:util_1.noop},"./src/useVideo.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var useVideo=__webpack_require__("./node_modules/tslib/tslib.es6.js").__importDefault(__webpack_require__("./src/factory/createHTMLMediaHook.ts")).default("video");exports.default=useVideo},"./src/useWindowScroll.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),util_1=__webpack_require__("./src/misc/util.ts"),useRafState_1=tslib_1.__importDefault(__webpack_require__("./src/useRafState.ts"));exports.default=function useWindowScroll(){var _a=useRafState_1.default((function(){return{x:util_1.isBrowser?window.pageXOffset:0,y:util_1.isBrowser?window.pageYOffset:0}})),state=_a[0],setState=_a[1];return react_1.useEffect((function(){var handler=function handler(){setState((function(state){var pageXOffset=window.pageXOffset,pageYOffset=window.pageYOffset;return state.x!==pageXOffset||state.y!==pageYOffset?{x:pageXOffset,y:pageYOffset}:state}))};return handler(),util_1.on(window,"scroll",handler,{capture:!1,passive:!0}),function(){util_1.off(window,"scroll",handler)}}),[]),state}},"./src/useWindowSize.ts":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/react/index.js"),useRafState_1=tslib_1.__importDefault(__webpack_require__("./src/useRafState.ts")),util_1=__webpack_require__("./src/misc/util.ts");exports.default=function useWindowSize(initialWidth,initialHeight){void 0===initialWidth&&(initialWidth=1/0),void 0===initialHeight&&(initialHeight=1/0);var _a=useRafState_1.default({width:util_1.isBrowser?window.innerWidth:initialWidth,height:util_1.isBrowser?window.innerHeight:initialHeight}),state=_a[0],setState=_a[1];return react_1.useEffect((function(){if(util_1.isBrowser){var handler_1=function handler_1(){setState({width:window.innerWidth,height:window.innerHeight})};return util_1.on(window,"resize",handler_1),function(){util_1.off(window,"resize",handler_1)}}}),[]),state}},"./stories sync recursive \\.story\\.tsx?$":function(module,exports,__webpack_require__){var map={"./comps/UseKey.story.tsx":"./stories/comps/UseKey.story.tsx","./createBreakpoint.story.tsx":"./stories/createBreakpoint.story.tsx","./createGlobalState.story.tsx":"./stories/createGlobalState.story.tsx","./createMemo.story.tsx":"./stories/createMemo.story.tsx","./createReducer.story.tsx":"./stories/createReducer.story.tsx","./createReducerContext.story.tsx":"./stories/createReducerContext.story.tsx","./createStateContext.story.tsx":"./stories/createStateContext.story.tsx","./useAsync.story.tsx":"./stories/useAsync.story.tsx","./useAsyncFn.story.tsx":"./stories/useAsyncFn.story.tsx","./useAsyncRetry.story.tsx":"./stories/useAsyncRetry.story.tsx","./useAudio.story.tsx":"./stories/useAudio.story.tsx","./useBattery.story.tsx":"./stories/useBattery.story.tsx","./useBeforeUnload.story.tsx":"./stories/useBeforeUnload.story.tsx","./useBoolean.story.tsx":"./stories/useBoolean.story.tsx","./useClickAway.story.tsx":"./stories/useClickAway.story.tsx","./useCookie.story.tsx":"./stories/useCookie.story.tsx","./useCopyToClipboard.story.tsx":"./stories/useCopyToClipboard.story.tsx","./useCounter.story.tsx":"./stories/useCounter.story.tsx","./useCss.story.tsx":"./stories/useCss.story.tsx","./useCustomCompareEffect.story.tsx":"./stories/useCustomCompareEffect.story.tsx","./useDebounce.story.tsx":"./stories/useDebounce.story.tsx","./useDeepCompareEffect.story.tsx":"./stories/useDeepCompareEffect.story.tsx","./useDefault.story.tsx":"./stories/useDefault.story.tsx","./useDrop.story.tsx":"./stories/useDrop.story.tsx","./useDropArea.story.tsx":"./stories/useDropArea.story.tsx","./useEffectOnce.story.tsx":"./stories/useEffectOnce.story.tsx","./useEnsuredForwardedRef.story.tsx":"./stories/useEnsuredForwardedRef.story.tsx","./useError.story.tsx":"./stories/useError.story.tsx","./useEvent.story.tsx":"./stories/useEvent.story.tsx","./useFavicon.story.tsx":"./stories/useFavicon.story.tsx","./useFirstMountState.story.tsx":"./stories/useFirstMountState.story.tsx","./useFullscreen.story.tsx":"./stories/useFullscreen.story.tsx","./useGeolocation.story.tsx":"./stories/useGeolocation.story.tsx","./useGetSet.story.tsx":"./stories/useGetSet.story.tsx","./useGetSetState.story.tsx":"./stories/useGetSetState.story.tsx","./useHarmonicIntervalFn.story.tsx":"./stories/useHarmonicIntervalFn.story.tsx","./useHash.story.tsx":"./stories/useHash.story.tsx","./useHover.story.tsx":"./stories/useHover.story.tsx","./useHoverDirty.story.tsx":"./stories/useHoverDirty.story.tsx","./useIdle.story.tsx":"./stories/useIdle.story.tsx","./useIntersection.story.tsx":"./stories/useIntersection.story.tsx","./useInterval.story.tsx":"./stories/useInterval.story.tsx","./useIsomorphicLayoutEffect.story.tsx":"./stories/useIsomorphicLayoutEffect.story.tsx","./useKey.story.tsx":"./stories/useKey.story.tsx","./useKeyPress.story.tsx":"./stories/useKeyPress.story.tsx","./useKeyPressEvent.story.tsx":"./stories/useKeyPressEvent.story.tsx","./useKeyboardJs.story.tsx":"./stories/useKeyboardJs.story.tsx","./useLatest.story.tsx":"./stories/useLatest.story.tsx","./useLifecycles.story.tsx":"./stories/useLifecycles.story.tsx","./useList.story.tsx":"./stories/useList.story.tsx","./useLocalStorage.story.tsx":"./stories/useLocalStorage.story.tsx","./useLocation.story.tsx":"./stories/useLocation.story.tsx","./useLockBodyScroll.story.tsx":"./stories/useLockBodyScroll.story.tsx","./useLogger.story.tsx":"./stories/useLogger.story.tsx","./useLongPress.story.tsx":"./stories/useLongPress.story.tsx","./useMap.story.tsx":"./stories/useMap.story.tsx","./useMeasure.story.tsx":"./stories/useMeasure.story.tsx","./useMedia.story.tsx":"./stories/useMedia.story.tsx","./useMediaDevices.story.tsx":"./stories/useMediaDevices.story.tsx","./useMediatedState.story.tsx":"./stories/useMediatedState.story.tsx","./useMethods.story.tsx":"./stories/useMethods.story.tsx","./useMotion.story.tsx":"./stories/useMotion.story.tsx","./useMount.story.tsx":"./stories/useMount.story.tsx","./useMountedState.story.tsx":"./stories/useMountedState.story.tsx","./useMouse.story.tsx":"./stories/useMouse.story.tsx","./useMouseHovered.story.tsx":"./stories/useMouseHovered.story.tsx","./useMouseWheel.story.tsx":"./stories/useMouseWheel.story.tsx","./useMultiStateValidator.story.tsx":"./stories/useMultiStateValidator.story.tsx","./useNetwork.story.tsx":"./stories/useNetwork.story.tsx","./useObservable.story.tsx":"./stories/useObservable.story.tsx","./useOrientation.story.tsx":"./stories/useOrientation.story.tsx","./usePageLeave.story.tsx":"./stories/usePageLeave.story.tsx","./usePermission.story.tsx":"./stories/usePermission.story.tsx","./usePinchZoom.story.tsx":"./stories/usePinchZoom.story.tsx","./usePrevious.story.tsx":"./stories/usePrevious.story.tsx","./usePreviousDistinct.story.tsx":"./stories/usePreviousDistinct.story.tsx","./usePromise.story.tsx":"./stories/usePromise.story.tsx","./useQueue.story.tsx":"./stories/useQueue.story.tsx","./useRaf.story.tsx":"./stories/useRaf.story.tsx","./useRafLoop.story.tsx":"./stories/useRafLoop.story.tsx","./useRafState.story.tsx":"./stories/useRafState.story.tsx","./useRendersCount.story.tsx":"./stories/useRendersCount.story.tsx","./useScratch.story.tsx":"./stories/useScratch.story.tsx","./useScroll.story.tsx":"./stories/useScroll.story.tsx","./useScrollbarWidth.story.tsx":"./stories/useScrollbarWidth.story.tsx","./useScrolling.story.tsx":"./stories/useScrolling.story.tsx","./useSearchParam.story.tsx":"./stories/useSearchParam.story.tsx","./useSessionStorage.story.tsx":"./stories/useSessionStorage.story.tsx","./useSet.story.tsx":"./stories/useSet.story.tsx","./useSetState.story.tsx":"./stories/useSetState.story.tsx","./useShallowCompareEffect.story.tsx":"./stories/useShallowCompareEffect.story.tsx","./useSize.story.tsx":"./stories/useSize.story.tsx","./useSlider.story.tsx":"./stories/useSlider.story.tsx","./useSpeech.story.tsx":"./stories/useSpeech.story.tsx","./useSpring.story.tsx":"./stories/useSpring.story.tsx","./useStartTyping.story.tsx":"./stories/useStartTyping.story.tsx","./useStateList.story.tsx":"./stories/useStateList.story.tsx","./useStateValidator.story.tsx":"./stories/useStateValidator.story.tsx","./useStateWithHistory.story.tsx":"./stories/useStateWithHistory.story.tsx","./useThrottle.story.tsx":"./stories/useThrottle.story.tsx","./useThrottleFn.story.tsx":"./stories/useThrottleFn.story.tsx","./useTimeout.story.tsx":"./stories/useTimeout.story.tsx","./useTimeoutFn.story.tsx":"./stories/useTimeoutFn.story.tsx","./useTitle.story.tsx":"./stories/useTitle.story.tsx","./useToggle.story.tsx":"./stories/useToggle.story.tsx","./useTween.story.tsx":"./stories/useTween.story.tsx","./useUnmount.story.tsx":"./stories/useUnmount.story.tsx","./useUpdate.story.tsx":"./stories/useUpdate.story.tsx","./useUpdateEffect.story.tsx":"./stories/useUpdateEffect.story.tsx","./useUpsert.story.tsx":"./stories/useUpsert.story.tsx","./useVibrate.story.tsx":"./stories/useVibrate.story.tsx","./useVideo.story.tsx":"./stories/useVideo.story.tsx","./useWindowScroll.story.tsx":"./stories/useWindowScroll.story.tsx","./useWindowSize.story.tsx":"./stories/useWindowSize.story.tsx"};function webpackContext(req){var id=webpackContextResolve(req);return __webpack_require__(id)}function webpackContextResolve(req){if(!__webpack_require__.o(map,req)){var e=new Error("Cannot find module '"+req+"'");throw e.code="MODULE_NOT_FOUND",e}return map[req]}webpackContext.keys=function webpackContextKeys(){return Object.keys(map)},webpackContext.resolve=webpackContextResolve,module.exports=webpackContext,webpackContext.id="./stories sync recursive \\.story\\.tsx?$"},"./stories/comps/UseKey.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),UseKey_1=tslib_1.__importDefault(__webpack_require__("./src/component/UseKey.tsx"));react_1.storiesOf("Components/",module).add("Demo",(function(){return React.createElement("div",null,'Press "q" key!',React.createElement(UseKey_1.default,{filter:"q",fn:function fn(){return alert("Q pressed!")}}))}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/createBreakpoint.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),addon_knobs_1=__webpack_require__("./node_modules/@storybook/addon-knobs/dist/esm/index.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),react_2=tslib_1.__importDefault(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),useBreakpointA=src_1.createBreakpoint(),useBreakpointB=src_1.createBreakpoint({mobileM:350,laptop:1024,tablet:768}),Demo=function Demo(){var breakpointA=useBreakpointA(),breakpointB=useBreakpointB();return react_2.default.createElement("div",null,react_2.default.createElement("p",null,"try resize your window"),react_2.default.createElement("p",null,"createBreakpoint() #default : { laptopL: 1440, laptop: 1024, tablet: 768 }"),react_2.default.createElement("p",null,breakpointA),react_2.default.createElement("p",null,"createBreakpoint({ mobileM: 350, laptop: 1024, tablet: 768 })"),react_2.default.createElement("p",null,breakpointB))};react_1.storiesOf("sensors/createBreakpoint",module).addDecorator(addon_knobs_1.withKnobs).add("Docs",(function(){return react_2.default.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/createBreakpoint.md")})})).add("Demo",(function(){return react_2.default.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/createGlobalState.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),react_2=tslib_1.__importDefault(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),useGlobalValue=src_1.createGlobalState(0),CompA=function CompA(){var _a=useGlobalValue(),value=_a[0],setValue=_a[1];return react_2.default.createElement("button",{onClick:function onClick(){return setValue(value+1)}},"+")},CompB=function CompB(){var _a=useGlobalValue(),value=_a[0],setValue=_a[1];return react_2.default.createElement("button",{onClick:function onClick(){return setValue(value-1)}},"-")},Demo=function Demo(){var value=useGlobalValue()[0];return react_2.default.createElement("div",null,react_2.default.createElement("p",null,value),react_2.default.createElement(CompA,null),react_2.default.createElement(CompB,null))};react_1.storiesOf("State/createGlobalState",module).add("Docs",(function(){return react_2.default.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/createGlobalState.md")})})).add("Demo",(function(){return react_2.default.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/createMemo.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),useMemoFibonacci=src_1.createMemo((function fibonacci(n){return 0===n?0:1===n?1:fibonacci(n-1)+fibonacci(n-2)})),Demo=function Demo(){var result=useMemoFibonacci(10);return React.createElement("div",null,"fib(10) = ",result)};react_1.storiesOf("State/createMemo",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/createMemo.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/createReducer.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),redux_logger_1=tslib_1.__importDefault(__webpack_require__("./node_modules/redux-logger/dist/redux-logger.js")),redux_thunk_1=tslib_1.__importDefault(__webpack_require__("./node_modules/redux-thunk/es/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),useThunkReducer=src_1.createReducer(redux_thunk_1.default,redux_logger_1.default);function init(initialCount){return{count:initialCount}}function reducer(state,action){switch(action.type){case"increment":return{count:state.count+1};case"decrement":return{count:state.count-1};case"reset":return init(action.payload);default:throw new Error}}var Demo=function Demo(_a){var _b=_a.initialCount,initialCount=void 0===_b?1:_b,addAndReset=React.useCallback((function(){return function(dispatch2){dispatch2({type:"increment"}),setTimeout((function(){dispatch2({type:"reset",payload:initialCount})}),1e3)}}),[initialCount]),_c=useThunkReducer(reducer,initialCount,init),state=_c[0],dispatch=_c[1];return React.createElement("div",null,React.createElement("pre",null,JSON.stringify(state,null,2)),React.createElement("button",{onClick:function onClick(){return dispatch(addAndReset())}},"Add and reset"),React.createElement("button",{onClick:function onClick(){return dispatch({type:"reset",payload:initialCount})}},"Reset"),React.createElement("button",{onClick:function onClick(){return dispatch({type:"increment"})}},"+"),React.createElement("button",{onClick:function onClick(){return dispatch({type:"decrement"})}},"-"),React.createElement("p",null,"Open your developer console to see actions logged by middleware"))};react_1.storiesOf("State/createReducer",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/createReducer.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/createReducerContext.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),_a=src_1.createReducerContext((function reducer(state,action){switch(action){case"increment":return state+1;case"decrement":return state-1;default:throw new Error}}),0),useSharedCounter=_a[0],SharedCounterProvider=_a[1],ComponentA=function ComponentA(){var _a=useSharedCounter(),count=_a[0],dispatch=_a[1];return React.createElement("p",null,"Component A ",React.createElement("button",{type:"button",onClick:function onClick(){return dispatch("decrement")}},"-")," ",count," ",React.createElement("button",{type:"button",onClick:function onClick(){return dispatch("increment")}},"+"))},ComponentB=function ComponentB(){var _a=useSharedCounter(),count=_a[0],dispatch=_a[1];return React.createElement("p",null,"Component B ",React.createElement("button",{type:"button",onClick:function onClick(){return dispatch("decrement")}},"-")," ",count," ",React.createElement("button",{type:"button",onClick:function onClick(){return dispatch("increment")}},"+"))},Demo=function Demo(){return React.createElement(SharedCounterProvider,null,React.createElement("p",null,"Those two counters share the same value."),React.createElement(ComponentA,null),React.createElement(ComponentB,null))};react_1.storiesOf("State/createReducerContext",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/createReducerContext.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/createStateContext.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),_a=src_1.createStateContext(""),useSharedText=_a[0],SharedTextProvider=_a[1],ComponentA=function ComponentA(){var _a=useSharedText(),text=_a[0],setText=_a[1];return React.createElement("p",null,"Component A:",React.createElement("br",null),React.createElement("input",{type:"text",value:text,onInput:function onInput(ev){return setText(ev.currentTarget.value)}}))},ComponentB=function ComponentB(){var _a=useSharedText(),text=_a[0],setText=_a[1];return React.createElement("p",null,"Component B:",React.createElement("br",null),React.createElement("input",{type:"text",value:text,onInput:function onInput(ev){return setText(ev.currentTarget.value)}}))},Demo=function Demo(){return React.createElement(SharedTextProvider,null,React.createElement("p",null,"Those two fields share the same value."),React.createElement(ComponentA,null),React.createElement(ComponentB,null))};react_1.storiesOf("State/createStateContext",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/createStateContext.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useAsync.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),addon_knobs_1=__webpack_require__("./node_modules/@storybook/addon-knobs/dist/esm/index.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(_a){var delay=_a.delay,state=src_1.useAsync((function(){return new Promise((function(resolve,reject){setTimeout((function(){Math.random()>.5?resolve("✌️"):reject(new Error("A pseudo random error occurred"))}),delay)}))}),[delay]);return React.createElement("div",null,state.loading?React.createElement("p",null,"Loading..."):state.error?React.createElement("p",null,"Error: ",state.error.message):React.createElement("p",null,"Value: ",state.value),React.createElement("pre",null,JSON.stringify(state,null,2)))};react_1.storiesOf("Side effects/useAsync",module).addDecorator(addon_knobs_1.withKnobs).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useAsync.md")})})).add("Demo",(function(){var delay=addon_knobs_1.number("delay",1e3,{range:!0,min:100,max:5e3,step:100});return React.createElement(Demo,{delay:delay})}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useAsyncFn.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useAsyncFn((function(){return new Promise((function(resolve,reject){setTimeout((function(){Math.random()>.5?resolve("✌️"):reject(new Error("A pseudo random error occurred"))}),1e3)}))})),state=_a[0],callback=_a[1];return React.createElement("div",null,state.loading?React.createElement("p",null,"Loading..."):state.error?React.createElement("p",null,"Error: ",state.error.message):React.createElement("p",null,"Value: ",state.value),React.createElement("button",{onClick:function onClick(){return callback()}},"Start"),React.createElement("pre",null,JSON.stringify(state,null,2)))};react_1.storiesOf("Side effects/useAsyncFn",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useAsyncFn.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useAsyncRetry.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),addon_knobs_1=__webpack_require__("./node_modules/@storybook/addon-knobs/dist/esm/index.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(_a){var delay=_a.delay,state=src_1.useAsyncRetry((function(){return new Promise((function(resolve,reject){setTimeout((function(){Math.random()>.5?resolve("✌️"):reject(new Error("A pseudo random error occurred"))}),delay)}))}),[delay]);return React.createElement("div",null,state.loading?React.createElement("p",null,"Loading..."):state.error?React.createElement("p",null,"Error: ",state.error.message):React.createElement("p",null,"Value: ",state.value),React.createElement("button",{onClick:function onClick(){return state.retry()}},"Retry"),React.createElement("pre",null,JSON.stringify(state,null,2)))};react_1.storiesOf("Side effects/useAsyncRetry",module).addDecorator(addon_knobs_1.withKnobs).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useAsyncRetry.md")})})).add("Demo",(function(){var delay=addon_knobs_1.number("delay",1e3,{range:!0,min:100,max:5e3,step:100});return React.createElement(Demo,{delay:delay})}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useAudio.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useAudio({src:"https://www.soundhelix.com/examples/mp3/SoundHelix-Song-2.mp3",autoPlay:!0}),audio=_a[0],state=_a[1],controls=_a[2];_a[3];return React.createElement("div",null,audio,React.createElement("pre",null,JSON.stringify(state,null,2)),React.createElement("button",{onClick:controls.pause},"Pause"),React.createElement("button",{onClick:controls.play},"Play"),React.createElement("br",null),React.createElement("button",{onClick:controls.mute},"Mute"),React.createElement("button",{onClick:controls.unmute},"Un-mute"),React.createElement("br",null),React.createElement("button",{onClick:function onClick(){return controls.volume(.1)}},"Volume: 10%"),React.createElement("button",{onClick:function onClick(){return controls.volume(.5)}},"Volume: 50%"),React.createElement("button",{onClick:function onClick(){return controls.volume(1)}},"Volume: 100%"),React.createElement("br",null),React.createElement("button",{onClick:function onClick(){return controls.seek(state.time-5)}},"-5 sec"),React.createElement("button",{onClick:function onClick(){return controls.seek(state.time+5)}},"+5 sec"))};react_1.storiesOf("UI/useAudio",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useAudio.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useBattery.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.number.to-fixed.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var batteryState=src_1.useBattery();return batteryState.isSupported?batteryState.fetched?React.createElement("div",null,React.createElement("strong",null,"Battery sensor"),": ",React.createElement("span",null,"supported")," ",React.createElement("br",null),React.createElement("strong",null,"Battery state"),": ",React.createElement("span",null,"fetched")," ",React.createElement("br",null),React.createElement("strong",null,"Charge level"),": "," ",React.createElement("span",null,(100*batteryState.level).toFixed(0),"%")," ",React.createElement("br",null),React.createElement("strong",null,"Charging"),": ",React.createElement("span",null,batteryState.charging?"yes":"no")," ",React.createElement("br",null),React.createElement("strong",null,"Charging time"),": ",React.createElement("span",null,batteryState.chargingTime?batteryState.chargingTime:"finished")," ",React.createElement("br",null),React.createElement("strong",null,"Discharging time"),": ",React.createElement("span",null,batteryState.dischargingTime)):React.createElement("div",null,React.createElement("strong",null,"Battery sensor"),": ",React.createElement("span",null,"supported")," ",React.createElement("br",null),React.createElement("strong",null,"Battery state"),": ",React.createElement("span",null,"fetching")):React.createElement("div",null,React.createElement("strong",null,"Battery sensor"),": ",React.createElement("span",null,"not supported"))};react_1.storiesOf("Sensors/useBattery",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useBattery.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useBeforeUnload.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),react_2=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),DemoBool=function DemoBool(){var _a=src_1.useToggle(!1),dirty=_a[0],toggleDirty=_a[1];return src_1.useBeforeUnload(dirty,"You have unsaved changes, are you sure?"),react_2.default.createElement("div",null,dirty&&react_2.default.createElement("p",null,"Try to reload or close tab"),react_2.default.createElement("button",{onClick:function onClick(){return toggleDirty()}},dirty?"Disable":"Enable"))},DemoFunc=function DemoFunc(){var _a=src_1.useToggle(!1),dirty=_a[0],toggleDirty=_a[1],dirtyFn=react_2.useCallback((function(){return dirty}),[dirty]);return src_1.useBeforeUnload(dirtyFn,"You have unsaved changes, are you sure?"),react_2.default.createElement("div",null,dirty&&react_2.default.createElement("p",null,"Try to reload or close tab"),react_2.default.createElement("button",{onClick:function onClick(){return toggleDirty()}},dirty?"Disable":"Enable"))};react_1.storiesOf("Side effects/useBeforeUnload",module).add("Docs",(function(){return react_2.default.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useBeforeUnload.md")})})).add("Demo (boolean)",(function(){return react_2.default.createElement(DemoBool,null)})).add("Demo (function)",(function(){return react_2.default.createElement(DemoFunc,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useBoolean.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useBoolean(!0),on=_a[0],toggle=_a[1];return React.createElement("div",null,React.createElement("div",null,on?"ON":"OFF"),React.createElement("button",{onClick:function onClick(){return toggle()}},"Toggle"),React.createElement("button",{onClick:function onClick(){return toggle(!0)}},"set ON"),React.createElement("button",{onClick:function onClick(){return toggle(!1)}},"set OFF"))};react_1.storiesOf("State/useBoolean",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useToggle.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useClickAway.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),addon_actions_1=__webpack_require__("./node_modules/@storybook/addon-actions/dist/esm/index.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),react_2=__webpack_require__("./node_modules/react/index.js"),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var ref=react_2.useRef(null);return src_1.useClickAway(ref,addon_actions_1.action("outside clicked")),React.createElement("div",{ref:ref,style:{width:200,height:200,background:"red"}})};react_1.storiesOf("UI/useClickAway",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useClickAway.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useCookie.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),react_2=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useCookie("my-cookie"),value=_a[0],updateCookie=_a[1],deleteCookie=_a[2],_b=react_2.useState(1),counter=_b[0],setCounter=_b[1];react_2.useEffect((function(){deleteCookie()}),[]);return react_2.default.createElement("div",null,react_2.default.createElement("p",null,"Value: ",value),react_2.default.createElement("button",{onClick:function updateCookieHandler(){updateCookie("my-awesome-cookie-"+counter),setCounter((function(c){return c+1}))}},"Update Cookie"),react_2.default.createElement("br",null),react_2.default.createElement("button",{onClick:deleteCookie},"Delete Cookie"))};react_1.storiesOf("Side effects/useCookie",module).add("Docs",(function(){return react_2.default.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useCookie.md")})})).add("Demo",(function(){return react_2.default.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useCopyToClipboard.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=React.useState(""),text=_a[0],setText=_a[1],_b=src_1.useCopyToClipboard(),state=_b[0],copyToClipboard=_b[1];return React.createElement("div",null,React.createElement("input",{value:text,onChange:function onChange(e){return setText(e.target.value)}}),React.createElement("button",{type:"button",onClick:function onClick(){return copyToClipboard(text)}},"copy text"),state.error?React.createElement("p",null,"Unable to copy value: ",state.error.message):state.value&&React.createElement(React.Fragment,null,React.createElement("p",null,"Copied ",state.value," ",state.noUserInteraction?"without":"with"," user interaction"),React.createElement("input",{type:"text",placeholder:"Paste it in here to check"})))};react_1.storiesOf("Side-effects/useCopyToClipboard",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useCopyToClipboard.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useCounter.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=React.useState(5),initialValue=_a[0],setInitialValue=_a[1],_b=src_1.useCounter(1),min=_b[0],_c=_b[1],incMin=_c.inc,decMin=_c.dec,_d=src_1.useCounter(10),max=_d[0],_e=_d[1],incMax=_e.inc,decMax=_e.dec,_f=src_1.useCounter(initialValue,max,min),value=_f[0],_g=_f[1],inc=_g.inc,dec=_g.dec,set=_g.set,reset=_g.reset;return React.createElement("div",null,React.createElement("div",null,"current: ",value," [min: ",min,"; max: ",max,"]"),React.createElement("br",null),"Current value: ",React.createElement("button",{onClick:function onClick(){return inc()}},"Increment"),React.createElement("button",{onClick:function onClick(){return dec()}},"Decrement"),React.createElement("button",{onClick:function onClick(){return inc(5)}},"Increment (+5)"),React.createElement("button",{onClick:function onClick(){return dec(5)}},"Decrement (-5)"),React.createElement("button",{onClick:function onClick(){return set(100)}},"Set 100"),React.createElement("button",{onClick:function onClick(){return reset()}},"Reset"),React.createElement("button",{onClick:function onClick(){return reset(25)}},"Reset (25)"),React.createElement("br",null),React.createElement("br",null),"Min value:",React.createElement("button",{onClick:function onClick(){return incMin()}},"Increment"),React.createElement("button",{onClick:function onClick(){return decMin()}},"Decrement"),React.createElement("br",null),React.createElement("br",null),"Max value:",React.createElement("button",{onClick:function onClick(){return incMax()}},"Increment"),React.createElement("button",{onClick:function onClick(){return decMax()}},"Decrement"),React.createElement("br",null),React.createElement("br",null),"Initial value: ",initialValue,React.createElement("button",{onClick:function onClick(){return setInitialValue((function(v){return++v}))}},"Increment"),React.createElement("button",{onClick:function onClick(){return setInitialValue((function(v){return--v}))}},"Decrement"))};react_1.storiesOf("State/useCounter",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useCounter.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useCss.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var className=src_1.useCss({color:"red",border:"1px solid red","&:hover":{color:"blue"}});return React.createElement("div",{className:className},"hello")};react_1.storiesOf("UI/useCss",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useCss.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useCustomCompareEffect.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),isDeepEqual_1=tslib_1.__importDefault(__webpack_require__("./src/misc/isDeepEqual.ts")),Demo=function Demo(){var _a=src_1.useCounter(0),countNormal=_a[0],incNormal=_a[1].inc,_b=src_1.useCounter(0),countDeep=_b[0],incDeep=_b[1].inc,options={max:500};return React.useEffect((function(){countNormal=window.history.window.history.length-1},"Forward >")," Step size: ",React.createElement("input",{type:"number",value:stepSize,min:1,max:3,onChange:handleStepSizeChange})),React.createElement("div",{style:{marginTop:8}},React.createElement("div",null,"Current history"),React.createElement("div",{dangerouslySetInnerHTML:{__html:JSON.stringify(window.history.history,null,2).replace(/\n/g," ").replace(/ /g," ")}})))};react_1.storiesOf("State/useStateWithHistory",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useStateWithHistory.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useThrottle.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=React.useState(""),value=_a[0],setValue=_a[1],throttledValue=src_1.useThrottle(value,2e3),_b=React.useState(throttledValue),lastThrottledValue=_b[0],setLastThrottledValue=_b[1],_c=src_1.useCounter(),count=_c[0],inc=_c[1].inc;return React.useEffect((function(){lastThrottledValue!==throttledValue&&(setLastThrottledValue(throttledValue),inc())})),React.createElement("div",{style:{width:300,margin:"40px auto"}},React.createElement("input",{type:"text",value:value,placeholder:"Throttled input",style:{width:"100%"},onChange:function onChange(_a){var currentTarget=_a.currentTarget;setValue(currentTarget.value)}}),React.createElement("br",null),React.createElement("br",null),React.createElement("div",null,"Throttled value: ",throttledValue),React.createElement("div",null,"Times updated: ",count))};react_1.storiesOf("Side effects/useThrottle",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useThrottle.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useThrottleFn.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=React.useState(""),value=_a[0],setValue=_a[1],throttledValue=src_1.useThrottleFn((function(defaultValue){return defaultValue}),2e3,[value]),_b=React.useState(throttledValue),lastThrottledValue=_b[0],setLastThrottledValue=_b[1],_c=src_1.useCounter(),count=_c[0],inc=_c[1].inc;return React.useEffect((function(){lastThrottledValue!==throttledValue&&(setLastThrottledValue(throttledValue),inc())})),React.createElement("div",{style:{width:300,margin:"40px auto"}},React.createElement("input",{type:"text",value:value,placeholder:"Throttled input",style:{width:"100%"},onChange:function onChange(_a){var currentTarget=_a.currentTarget;setValue(currentTarget.value)}}),React.createElement("br",null),React.createElement("br",null),React.createElement("div",null,"Throttled value: ",throttledValue),React.createElement("div",null,"Times updated: ",count))};react_1.storiesOf("Side effects/useThrottleFn",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useThrottle.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useTimeout.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx"));function TestComponent(props){void 0===props&&(props={});var ms=props.ms||5e3,_a=src_1.useTimeout(ms),isReady=_a[0],cancel=_a[1];return React.createElement("div",null,isReady()?"I'm reloaded after timeout":"I will be reloaded after "+ms/1e3+"s",!1===isReady()?React.createElement("button",{onClick:cancel},"Cancel"):"")}var Demo=function Demo(){return React.createElement("div",null,React.createElement(TestComponent,null),React.createElement(TestComponent,{ms:1e4}))};react_1.storiesOf("Animation/useTimeout",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useTimeout.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useTimeoutFn.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.date.now.js"),__webpack_require__("./node_modules/core-js/modules/es.date.to-string.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),react_2=__webpack_require__("./node_modules/react/index.js"),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=React.useState("Not called yet"),state=_a[0],setState=_a[1];var _b=src_1.useTimeoutFn((function fn(){setState("called at "+Date.now())}),5e3),isReady=_b[0],cancel=_b[1],reset=_b[2],cancelButtonClick=react_2.useCallback((function(){!1===isReady()?(cancel(),setState("cancelled")):(reset(),setState("Not called yet"))}),[]),readyState=isReady();return React.createElement("div",null,React.createElement("div",null,null!==readyState?"Function will be called in 5 seconds":"Timer cancelled"),React.createElement("button",{onClick:cancelButtonClick}," ",!1===readyState?"cancel":"restart"," timeout"),React.createElement("br",null),React.createElement("div",null,"Function state: ",!1===readyState?"Pending":readyState?"Called":"Cancelled"),React.createElement("div",null,state))};react_1.storiesOf("Animation/useTimeoutFn",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useTimeoutFn.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useTitle.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),NewTabStory_1=tslib_1.__importDefault(__webpack_require__("./stories/util/NewTabStory.tsx")),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){return src_1.useTitle("Hello world!"),React.createElement(NewTabStory_1.default,null,'Title should be "Hello world!"')};react_1.storiesOf("Side effects/useTitle",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useTitle.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useToggle.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useToggle(!0),on=_a[0],toggle=_a[1];return React.createElement("div",null,React.createElement("div",null,on?"ON":"OFF"),React.createElement("button",{onClick:toggle},"Toggle"),React.createElement("button",{onClick:function onClick(){return toggle(!0)}},"set ON"),React.createElement("button",{onClick:function onClick(){return toggle(!1)}},"set OFF"))};react_1.storiesOf("State/useToggle",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useToggle.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useTween.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var t=src_1.useTween();return React.createElement("div",null,"Tween: ",t)};react_1.storiesOf("Animation/useTween",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useTween.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useUnmount.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){return src_1.useUnmount((function(){return alert("UNMOUNTED")})),React.createElement("div",null,React.createElement("code",null,"useUnmount()")," hook can be used to perform side-effects when component unmounts. This component will alert you when it is un-mounted.")};react_1.storiesOf("Lifecycle/useUnmount",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useUnmount.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useUpdate.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.date.now.js"),__webpack_require__("./node_modules/core-js/modules/es.date.to-string.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var update=src_1.useUpdate();return React.createElement(React.Fragment,null,React.createElement("div",null,"Time: ",Date.now()),React.createElement("button",{onClick:update},"Update"))};react_1.storiesOf("Animation/useUpdate",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useUpdate.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useUpdateEffect.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=React.useState(0),count=_a[0],setCount=_a[1],_b=React.useState(!1),didUpdate=_b[0],setDidUpdate=_b[1];return src_1.useUpdateEffect((function(){setDidUpdate(!0)}),[count]),React.createElement("div",null,React.createElement("button",{onClick:function onClick(){return setCount((function(currentCount){return currentCount+1}))}},"Count: ",count),React.createElement("p",null,"Updated: ",didUpdate))};react_1.storiesOf("Lifecycle/useUpdateEffect",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useUpdateEffect.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useUpsert.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.date.to-string.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),initialItems=[{id:"1",text:"Sample"},{id:"2",text:""}],Demo=function Demo(){var _a=src_1.useUpsert((function comparisonFunction(a,b){return a.id===b.id}),initialItems),list=_a[0],_b=_a[1],set=_b.set,upsert=_b.upsert,remove=_b.remove;return React.createElement("div",{style:{display:"inline-flex",flexDirection:"column"}},list.map((function(item,index){return React.createElement("div",{key:item.id},React.createElement("input",{value:item.text,onChange:function onChange(e){return upsert(tslib_1.__assign(tslib_1.__assign({},item),{text:e.target.value}))}}),React.createElement("button",{onClick:function onClick(){return remove(index)}},"Remove"))})),React.createElement("button",{onClick:function onClick(){return upsert({id:(list.length+1).toString(),text:""})}},"Add item"),React.createElement("button",{onClick:function onClick(){return set([])}},"Reset"))};react_1.storiesOf("State/useUpsert",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useUpsert.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useVibrate.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useToggle(!1),vibrating=_a[0],toggleVibrating=_a[1];return src_1.useVibrate(vibrating,[300,100,200,100,1e3,300]),React.createElement("div",null,React.createElement("button",{onClick:toggleVibrating},vibrating?"Stop":"Vibrate"))};react_1.storiesOf("UI/useVibrate",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useVibrate.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useVideo.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useVideo(React.createElement("video",{src:"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",autoPlay:!0})),video=_a[0],state=_a[1],controls=_a[2];_a[3];return React.createElement("div",null,video,React.createElement("pre",null,JSON.stringify(state,null,2)),React.createElement("button",{onClick:controls.pause},"Pause"),React.createElement("button",{onClick:controls.play},"Play"),React.createElement("br",null),React.createElement("button",{onClick:controls.mute},"Mute"),React.createElement("button",{onClick:controls.unmute},"Un-mute"),React.createElement("br",null),React.createElement("button",{onClick:function onClick(){return controls.volume(.1)}},"Volume: 10%"),React.createElement("button",{onClick:function onClick(){return controls.volume(.5)}},"Volume: 50%"),React.createElement("button",{onClick:function onClick(){return controls.volume(1)}},"Volume: 100%"),React.createElement("br",null),React.createElement("button",{onClick:function onClick(){return controls.seek(state.time-5)}},"-5 sec"),React.createElement("button",{onClick:function onClick(){return controls.seek(state.time+5)}},"+5 sec"))};react_1.storiesOf("UI/useVideo",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useVideo.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useWindowScroll.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useWindowScroll(),x=_a.x,y=_a.y;return React.createElement("div",{style:{width:"200vw",height:"200vh"}},React.createElement("div",{style:{position:"fixed",left:0,right:0}},React.createElement("div",null,"x: ",x),React.createElement("div",null,"y: ",y)))};react_1.storiesOf("Sensors/useWindowScroll",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useWindowScroll.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/useWindowSize.story.tsx":function(module,exports,__webpack_require__){"use strict";(function(module){__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var tslib_1=__webpack_require__("./node_modules/tslib/tslib.es6.js"),react_1=__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js"),React=tslib_1.__importStar(__webpack_require__("./node_modules/react/index.js")),src_1=__webpack_require__("./src/index.ts"),ShowDocs_1=tslib_1.__importDefault(__webpack_require__("./stories/util/ShowDocs.tsx")),Demo=function Demo(){var _a=src_1.useWindowSize(),width=_a.width,height=_a.height;return React.createElement("div",null,React.createElement("div",null,"width: ",width),React.createElement("div",null,"height: ",height))};react_1.storiesOf("Sensors/useWindowSize",module).add("Docs",(function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__("./docs/useWindowSize.md")})})).add("Demo",(function(){return React.createElement(Demo,null)}))}).call(this,__webpack_require__("./node_modules/webpack/buildin/module.js")(module))},"./stories/util/CenterStory.tsx":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0}),exports.CenterStory=void 0;var React=__webpack_require__("./node_modules/tslib/tslib.es6.js").__importStar(__webpack_require__("./node_modules/react/index.js")),CenterStory=function CenterStory(_a){var children=_a.children;return React.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",maxWidth:"400px",margin:"40px auto"}},React.createElement("div",{style:{width:"100%"}},children))};exports.CenterStory=CenterStory;try{CenterStory.displayName="CenterStory",CenterStory.__docgenInfo={description:"",displayName:"CenterStory",props:{}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["stories/util/CenterStory.tsx#CenterStory"]={docgenInfo:CenterStory.__docgenInfo,name:"CenterStory",path:"stories/util/CenterStory.tsx#CenterStory"})}catch(__react_docgen_typescript_loader_error){}},"./stories/util/ConsoleStory.tsx":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__("./node_modules/tslib/tslib.es6.js").__importStar(__webpack_require__("./node_modules/react/index.js")),ConsoleStory=function ConsoleStory(_a){var _b=_a.message,message=void 0===_b?"Open the developer console to see logs":_b;return React.createElement("p",null,message)};exports.default=ConsoleStory;try{ConsoleStory.displayName="ConsoleStory",ConsoleStory.__docgenInfo={description:"",displayName:"ConsoleStory",props:{message:{defaultValue:{value:"Open the developer console to see logs"},description:"",name:"message",required:!1,type:{name:"string"}}}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["stories/util/ConsoleStory.tsx#ConsoleStory"]={docgenInfo:ConsoleStory.__docgenInfo,name:"ConsoleStory",path:"stories/util/ConsoleStory.tsx#ConsoleStory"})}catch(__react_docgen_typescript_loader_error){}},"./stories/util/NewTabStory.tsx":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__("./node_modules/tslib/tslib.es6.js").__importStar(__webpack_require__("./node_modules/react/index.js")),NewTabStory=function NewTabStory(_a){var children=_a.children;return window.location===window.parent.location?children:React.createElement("p",null,"This story should be"," ",React.createElement("a",{href:window.location.href,target:"_blank",title:"Open in new tab",rel:"noreferrer"},"opened in a new tab"),".")};exports.default=NewTabStory;try{NewTabStory.displayName="NewTabStory",NewTabStory.__docgenInfo={description:"",displayName:"NewTabStory",props:{}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["stories/util/NewTabStory.tsx#NewTabStory"]={docgenInfo:NewTabStory.__docgenInfo,name:"NewTabStory",path:"stories/util/NewTabStory.tsx#NewTabStory"})}catch(__react_docgen_typescript_loader_error){}},"./stories/util/ShowDocs.tsx":function(module,exports,__webpack_require__){"use strict";__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),Object.defineProperty(exports,"__esModule",{value:!0});var h=__webpack_require__("./node_modules/tslib/tslib.es6.js").__importStar(__webpack_require__("./node_modules/react/index.js")).createElement,ShowDocs=function ShowDocs(props){return h("div",{},h("div",{style:{padding:"0 20px"},dangerouslySetInnerHTML:{__html:props.md.default}}),h("style",{dangerouslySetInnerHTML:{__html:"\n@import url(https://fonts.googleapis.com/css?family=Merriweather:300italic,300);\n\nh1, h1 code, h2, h2 code, h3, h3 code, h4, h4 code {\n color: #333;\n}\n\nhtml {\n font-size: 16px;\n max-width: 700px;\n margin: auto;\n}\n\nbody {\n color: #444;\n font-family: 'Merriweather', Georgia, serif;\n max-width: 700px;\n margin: auto;\n}\n\n/* === A bit of a gross hack so we can have bleeding divs/blockquotes. */\n\ndiv {\n width: 100%;\n}\n\ndiv img {\n width: 100%;\n}\n\nblockquote p {\n font-size: 1.5rem;\n font-style: italic;\n margin: 1rem auto 1rem;\n max-width: 48rem;\n}\n\nli {\n margin-left: 2rem;\n}\n\n/* Counteract the specificity of the gross *:not() chain. */\nh1 {\n padding: 1m 0 !important;\n}\n/* === End gross hack */\n\np {\n color: #555;\n height: auto;\n line-height: 1.45;\n}\n\npre, code {\n font-family: Menlo, Monaco, \"Courier New\", monospace;\n color: #42b983;\n}\n\npre, pre code {\n color: #000;\n}\n\npre {\n background-color: #fafafa;\n font-size: .8rem;\n overflow-x: scroll;\n padding: 1.125em;\n}\n\na, a pre, a code,\na:visited {\n color: #3498db;\n}\n\na:hover,\na:focus,\na:active {\n color: #2980b9;\n}\n "}}))};exports.default=ShowDocs;try{ShowDocs.displayName="ShowDocs",ShowDocs.__docgenInfo={description:"",displayName:"ShowDocs",props:{}},"undefined"!=typeof STORYBOOK_REACT_CLASSES&&(STORYBOOK_REACT_CLASSES["stories/util/ShowDocs.tsx#ShowDocs"]={docgenInfo:ShowDocs.__docgenInfo,name:"ShowDocs",path:"stories/util/ShowDocs.tsx#ShowDocs"})}catch(__react_docgen_typescript_loader_error){}},"./storybook-init-framework-entry.js":function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__("./node_modules/@storybook/react/dist/esm/client/index.js")},0:function(module,exports,__webpack_require__){__webpack_require__("./node_modules/@storybook/core-client/dist/esm/globals/polyfills.js"),__webpack_require__("./node_modules/@storybook/core-client/dist/esm/globals/globals.js"),__webpack_require__("./storybook-init-framework-entry.js"),__webpack_require__("./node_modules/@storybook/react/dist/esm/client/preview/config-generated-config-entry.js"),module.exports=__webpack_require__("./.storybook/config.js-generated-config-entry.js")},1:function(module,exports){}},[[0,2,3]]]);
\ No newline at end of file
diff --git a/main.ffc28e742b178a8c5a77.manager.bundle.js b/main.ffc28e742b178a8c5a77.manager.bundle.js
new file mode 100644
index 0000000000..49fce9d9b7
--- /dev/null
+++ b/main.ffc28e742b178a8c5a77.manager.bundle.js
@@ -0,0 +1 @@
+(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{754:function(module,exports,__webpack_require__){__webpack_require__(755),__webpack_require__(916),module.exports=__webpack_require__(1398)},829:function(module,exports){},916:function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__);__webpack_require__(917),__webpack_require__(994),__webpack_require__(997),__webpack_require__(1005)}},[[754,3,4]]]);
\ No newline at end of file
diff --git a/package.json b/package.json
deleted file mode 100644
index 6164925c77..0000000000
--- a/package.json
+++ /dev/null
@@ -1,167 +0,0 @@
-{
- "name": "react-use",
- "version": "17.6.0",
- "description": "Collection of React Hooks",
- "main": "lib/index.js",
- "module": "esm/index.js",
- "sideEffects": false,
- "files": [
- "lib/",
- "esm/"
- ],
- "types": "lib/index.d.ts",
- "typings": "lib/index.d.ts",
- "scripts": {
- "start": "yarn storybook",
- "test": "jest --maxWorkers 2",
- "test:ssr": "jest --maxWorkers 2 --config ./jest.config.node.ts",
- "test:watch": "jest --watch",
- "test:coverage": "jest --coverage",
- "lint": "eslint \"{src,tests,stories}/**/*.{ts,tsx}\"",
- "lint:fix": "yarn lint --fix",
- "lint:types": "tsc --noEmit",
- "build:cjs": "tsc",
- "build:es": "tsc -m esNext --outDir esm",
- "build": "yarn build:cjs && yarn build:es",
- "clean": "rimraf lib storybook-static esm",
- "storybook": "start-storybook -p 6008",
- "storybook:build": "build-storybook",
- "storybook:upload": "gh-pages -d storybook-static --git \"$(which git)\"",
- "storybook:clean": "rimraf storybook-static",
- "release": "semantic-release"
- },
- "husky": {
- "hooks": {
- "pre-commit": "lint-staged",
- "pre-push": "yarn lint && yarn clean && yarn build && yarn test"
- }
- },
- "author": "@streamich",
- "license": "Unlicense",
- "repository": {
- "type": "git",
- "url": "https://github.com/streamich/react-use"
- },
- "bugs": {
- "url": "https://github.com/streamich/react-use/issues"
- },
- "homepage": "https://github.com/streamich/react-use#readme",
- "dependencies": {
- "@types/js-cookie": "^2.2.6",
- "@xobotyi/scrollbar-width": "^1.9.5",
- "copy-to-clipboard": "^3.3.1",
- "fast-deep-equal": "^3.1.3",
- "fast-shallow-equal": "^1.0.0",
- "js-cookie": "^2.2.1",
- "nano-css": "^5.6.2",
- "react-universal-interface": "^0.6.2",
- "resize-observer-polyfill": "^1.5.1",
- "screenfull": "^5.1.0",
- "set-harmonic-interval": "^1.0.1",
- "throttle-debounce": "^3.0.1",
- "ts-easing": "^0.2.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "react": "*",
- "react-dom": "*"
- },
- "devDependencies": {
- "@babel/core": "7.28.3",
- "@babel/plugin-syntax-dynamic-import": "7.8.3",
- "@babel/preset-env": "7.28.3",
- "@babel/preset-react": "7.27.1",
- "@babel/preset-typescript": "7.27.1",
- "@semantic-release/changelog": "6.0.3",
- "@semantic-release/git": "10.0.1",
- "@semantic-release/npm": "12.0.2",
- "@shopify/jest-dom-mocks": "2.11.7",
- "@storybook/addon-actions": "6.4.9",
- "@storybook/addon-knobs": "6.4.0",
- "@storybook/addon-notes": "5.3.21",
- "@storybook/addon-options": "5.3.21",
- "@storybook/react": "6.4.9",
- "@testing-library/react": "12.1.5",
- "@testing-library/react-hooks": "7.0.2",
- "@types/jest": "27.5.2",
- "@types/react": "17.0.0",
- "@typescript-eslint/eslint-plugin": "5.62.0",
- "@typescript-eslint/parser": "5.62.0",
- "babel-core": "6.26.3",
- "babel-eslint": "10.1.0",
- "babel-loader": "8.4.1",
- "babel-plugin-dynamic-import-node": "2.3.3",
- "eslint": "8.57.1",
- "eslint-config-prettier": "8.10.2",
- "eslint-config-react-app": "6.0.0",
- "eslint-plugin-flowtype": "8.0.3",
- "eslint-plugin-import": "2.32.0",
- "eslint-plugin-jsx-a11y": "6.10.2",
- "eslint-plugin-prettier": "4.2.5",
- "eslint-plugin-react": "7.37.5",
- "eslint-plugin-react-hooks": "4.6.0",
- "fork-ts-checker-webpack-plugin": "6.5.3",
- "gh-pages": "5.0.0",
- "husky": "7.0.4",
- "jest": "26.6.3",
- "jest-localstorage-mock": "2.4.26",
- "keyboardjs": "2.7.0",
- "lint-staged": "12.5.0",
- "markdown-loader": "6.0.0",
- "prettier": "2.3.0",
- "raf-stub": "3.0.0",
- "react": "17.0.2",
- "react-dom": "17.0.2",
- "react-frame-component": "5.2.7",
- "react-spring": "9.7.5",
- "react-test-renderer": "17.0.2",
- "rebound": "0.1.0",
- "redux-logger": "3.0.6",
- "redux-thunk": "2.4.2",
- "rimraf": "3.0.2",
- "rxjs": "7.8.2",
- "semantic-release": "24.2.7",
- "ts-jest": "26.5.6",
- "ts-loader": "8.4.0",
- "ts-node": "10.9.2",
- "typescript": "4.1.5"
- },
- "config": {
- "commitizen": {
- "path": "git-cz"
- }
- },
- "release": {
- "branches": [
- "master",
- {
- "name": "next",
- "prerelease": "rc"
- }
- ],
- "verifyConditions": [
- "@semantic-release/changelog",
- "@semantic-release/npm",
- "@semantic-release/git"
- ],
- "prepare": [
- "@semantic-release/changelog",
- "@semantic-release/npm",
- "@semantic-release/git"
- ]
- },
- "lint-staged": {
- "src/**/**/*.{ts,tsx}": [
- "eslint --fix",
- "git add"
- ]
- },
- "volta": {
- "node": "14.21.3",
- "yarn": "1.22.22"
- },
- "collective": {
- "type": "opencollective",
- "url": "https://opencollective.com/react-use"
- }
-}
diff --git a/renovate.json b/renovate.json
deleted file mode 100644
index 37ab773ab4..0000000000
--- a/renovate.json
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "extends": [
- "config:base"
- ],
- "automerge": true,
- "pinVersions": false,
- "ignoreUnstable": true,
- "major": {
- "automerge": false
- },
- "devDependencies": {
- "automerge": true,
- "pinVersions": true
- }
-}
diff --git a/runtime~main.45d3badd.iframe.bundle.js b/runtime~main.45d3badd.iframe.bundle.js
new file mode 100644
index 0000000000..6647f33221
--- /dev/null
+++ b/runtime~main.45d3badd.iframe.bundle.js
@@ -0,0 +1 @@
+!function(modules){function webpackJsonpCallback(data){for(var moduleId,chunkId,chunkIds=data[0],moreModules=data[1],executeModules=data[2],i=0,resolves=[];i [
- filter,
- fn,
- rest,
- deps,
-]);
-
-export default UseKey;
diff --git a/src/factory/createBreakpoint.ts b/src/factory/createBreakpoint.ts
deleted file mode 100644
index d61832827f..0000000000
--- a/src/factory/createBreakpoint.ts
+++ /dev/null
@@ -1,33 +0,0 @@
-import { useEffect, useMemo, useState } from 'react';
-import { isBrowser, off, on } from '../misc/util';
-
-const createBreakpoint =
- (breakpoints: { [name: string]: number } = { laptopL: 1440, laptop: 1024, tablet: 768 }) =>
- () => {
- const [screen, setScreen] = useState(isBrowser ? window.innerWidth : 0);
-
- useEffect(() => {
- const setSideScreen = (): void => {
- setScreen(window.innerWidth);
- };
- setSideScreen();
- on(window, 'resize', setSideScreen);
- return () => {
- off(window, 'resize', setSideScreen);
- };
- });
- const sortedBreakpoints = useMemo(
- () => Object.entries(breakpoints).sort((a, b) => (a[1] >= b[1] ? 1 : -1)),
- [breakpoints]
- );
- const result = sortedBreakpoints.reduce((acc, [name, width]) => {
- if (screen >= width) {
- return name;
- } else {
- return acc;
- }
- }, sortedBreakpoints[0][0]);
- return result;
- };
-
-export default createBreakpoint;
diff --git a/src/factory/createGlobalState.ts b/src/factory/createGlobalState.ts
deleted file mode 100644
index c06ba9a085..0000000000
--- a/src/factory/createGlobalState.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { useState } from 'react';
-import { IHookStateInitAction, IHookStateSetAction, resolveHookState } from '../misc/hookState';
-import useEffectOnce from '../useEffectOnce';
-import useIsomorphicLayoutEffect from '../useIsomorphicLayoutEffect';
-
-export function createGlobalState(
- initialState: IHookStateInitAction
-): () => [S, (state: IHookStateSetAction) => void];
-export function createGlobalState(): () => [
- S,
- (state: IHookStateSetAction) => void
-];
-
-export function createGlobalState(initialState?: S) {
- const store: {
- state: S;
- setState: (state: IHookStateSetAction) => void;
- setters: any[];
- } = {
- state: initialState instanceof Function ? initialState() : initialState,
- setState(nextState: IHookStateSetAction) {
- store.state = resolveHookState(nextState, store.state);
- store.setters.forEach((setter) => setter(store.state));
- },
- setters: [],
- };
-
- return () => {
- const [globalState, stateSetter] = useState(store.state);
-
- useEffectOnce(() => () => {
- store.setters = store.setters.filter((setter) => setter !== stateSetter);
- });
-
- useIsomorphicLayoutEffect(() => {
- if (!store.setters.includes(stateSetter)) {
- store.setters.push(stateSetter);
- }
- });
-
- return [globalState, store.setState];
- };
-}
-
-export default createGlobalState;
diff --git a/src/factory/createHTMLMediaHook.ts b/src/factory/createHTMLMediaHook.ts
deleted file mode 100644
index 92d62c9d79..0000000000
--- a/src/factory/createHTMLMediaHook.ts
+++ /dev/null
@@ -1,242 +0,0 @@
-import * as React from 'react';
-import { useEffect, useRef } from 'react';
-import useSetState from '../useSetState';
-import parseTimeRanges from '../misc/parseTimeRanges';
-
-export interface HTMLMediaProps
- extends React.AudioHTMLAttributes,
- React.VideoHTMLAttributes {
- src: string;
-}
-
-export interface HTMLMediaState {
- buffered: any[];
- duration: number;
- paused: boolean;
- muted: boolean;
- time: number;
- volume: number;
- playing: boolean;
-}
-
-export interface HTMLMediaControls {
- play: () => Promise | void;
- pause: () => void;
- mute: () => void;
- unmute: () => void;
- volume: (volume: number) => void;
- seek: (time: number) => void;
-}
-
-type MediaPropsWithRef = HTMLMediaProps & { ref?: React.MutableRefObject };
-
-export default function createHTMLMediaHook(
- tag: 'audio' | 'video'
-) {
- return (elOrProps: HTMLMediaProps | React.ReactElement) => {
- let element: React.ReactElement> | undefined;
- let props: MediaPropsWithRef;
-
- if (React.isValidElement(elOrProps)) {
- element = elOrProps;
- props = element.props;
- } else {
- props = elOrProps;
- }
-
- const [state, setState] = useSetState({
- buffered: [],
- time: 0,
- duration: 0,
- paused: true,
- muted: false,
- volume: 1,
- playing: false,
- });
- const ref = useRef(null);
-
- const wrapEvent = (userEvent, proxyEvent?) => {
- return (event) => {
- try {
- proxyEvent && proxyEvent(event);
- } finally {
- userEvent && userEvent(event);
- }
- };
- };
-
- const onPlay = () => setState({ paused: false });
- const onPlaying = () => setState({ playing: true });
- const onWaiting = () => setState({ playing: false });
- const onPause = () => setState({ paused: true, playing: false });
- const onVolumeChange = () => {
- const el = ref.current;
- if (!el) {
- return;
- }
- setState({
- muted: el.muted,
- volume: el.volume,
- });
- };
- const onDurationChange = () => {
- const el = ref.current;
- if (!el) {
- return;
- }
- const { duration, buffered } = el;
- setState({
- duration,
- buffered: parseTimeRanges(buffered),
- });
- };
- const onTimeUpdate = () => {
- const el = ref.current;
- if (!el) {
- return;
- }
- setState({ time: el.currentTime });
- };
- const onProgress = () => {
- const el = ref.current;
- if (!el) {
- return;
- }
- setState({ buffered: parseTimeRanges(el.buffered) });
- };
-
- if (element) {
- element = React.cloneElement(element, {
- controls: false,
- ...props,
- ref,
- onPlay: wrapEvent(props.onPlay, onPlay),
- onPlaying: wrapEvent(props.onPlaying, onPlaying),
- onWaiting: wrapEvent(props.onWaiting, onWaiting),
- onPause: wrapEvent(props.onPause, onPause),
- onVolumeChange: wrapEvent(props.onVolumeChange, onVolumeChange),
- onDurationChange: wrapEvent(props.onDurationChange, onDurationChange),
- onTimeUpdate: wrapEvent(props.onTimeUpdate, onTimeUpdate),
- onProgress: wrapEvent(props.onProgress, onProgress),
- });
- } else {
- element = React.createElement(tag, {
- controls: false,
- ...props,
- ref,
- onPlay: wrapEvent(props.onPlay, onPlay),
- onPlaying: wrapEvent(props.onPlaying, onPlaying),
- onWaiting: wrapEvent(props.onWaiting, onWaiting),
- onPause: wrapEvent(props.onPause, onPause),
- onVolumeChange: wrapEvent(props.onVolumeChange, onVolumeChange),
- onDurationChange: wrapEvent(props.onDurationChange, onDurationChange),
- onTimeUpdate: wrapEvent(props.onTimeUpdate, onTimeUpdate),
- onProgress: wrapEvent(props.onProgress, onProgress),
- } as any); // TODO: fix this typing.
- }
-
- // Some browsers return `Promise` on `.play()` and may throw errors
- // if one tries to execute another `.play()` or `.pause()` while that
- // promise is resolving. So we prevent that with this lock.
- // See: https://bugs.chromium.org/p/chromium/issues/detail?id=593273
- let lockPlay: boolean = false;
-
- const controls = {
- play: () => {
- const el = ref.current;
- if (!el) {
- return undefined;
- }
-
- if (!lockPlay) {
- const promise = el.play();
- const isPromise = typeof promise === 'object';
-
- if (isPromise) {
- lockPlay = true;
- const resetLock = () => {
- lockPlay = false;
- };
- promise.then(resetLock, resetLock);
- }
-
- return promise;
- }
- return undefined;
- },
- pause: () => {
- const el = ref.current;
- if (el && !lockPlay) {
- return el.pause();
- }
- },
- seek: (time: number) => {
- const el = ref.current;
- if (!el || state.duration === undefined) {
- return;
- }
- time = Math.min(state.duration, Math.max(0, time));
- el.currentTime = time;
- },
- volume: (volume: number) => {
- const el = ref.current;
- if (!el) {
- return;
- }
- volume = Math.min(1, Math.max(0, volume));
- el.volume = volume;
- setState({ volume });
- },
- mute: () => {
- const el = ref.current;
- if (!el) {
- return;
- }
- el.muted = true;
- },
- unmute: () => {
- const el = ref.current;
- if (!el) {
- return;
- }
- el.muted = false;
- },
- };
-
- useEffect(() => {
- const el = ref.current!;
-
- if (!el) {
- if (process.env.NODE_ENV !== 'production') {
- if (tag === 'audio') {
- console.error(
- 'useAudio() ref to element is empty at mount. ' +
- 'It seem you have not rendered the audio element, which it ' +
- 'returns as the first argument const [audio] = useAudio(...).'
- );
- } else if (tag === 'video') {
- console.error(
- 'useVideo() ref to element is empty at mount. ' +
- 'It seem you have not rendered the video element, which it ' +
- 'returns as the first argument const [video] = useVideo(...).'
- );
- }
- }
- return;
- }
-
- setState({
- volume: el.volume,
- muted: el.muted,
- paused: el.paused,
- });
-
- // Start media, if autoPlay requested.
- if (props.autoPlay && el.paused) {
- controls.play();
- }
- }, [props.src]);
-
- return [element, state, controls, ref] as const;
- };
-}
diff --git a/src/factory/createMemo.ts b/src/factory/createMemo.ts
deleted file mode 100644
index 8fe16ee90a..0000000000
--- a/src/factory/createMemo.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { useMemo } from 'react';
-
-const createMemo =
- any>(fn: T) =>
- (...args: Parameters) =>
- useMemo>(() => fn(...args), args);
-
-export default createMemo;
diff --git a/src/factory/createReducer.ts b/src/factory/createReducer.ts
deleted file mode 100644
index ef2af42efc..0000000000
--- a/src/factory/createReducer.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { MutableRefObject, useCallback, useRef, useState } from 'react';
-import useUpdateEffect from '../useUpdateEffect';
-
-type Dispatch = (action: Action) => void;
-
-interface Store {
- getState: () => State;
- dispatch: Dispatch;
-}
-
-type Middleware = (
- store: Store
-) => (next: Dispatch) => (action: Action) => void;
-
-function composeMiddleware(chain: Middleware[]) {
- return (context: Store, dispatch: Dispatch) => {
- return chain.reduceRight((res, middleware) => {
- return middleware(context)(res);
- }, dispatch);
- };
-}
-
-const createReducer = (...middlewares: Middleware[]) => {
- const composedMiddleware = composeMiddleware(middlewares);
-
- return (
- reducer: (state: State, action: Action) => State,
- initialState: State,
- initializer = (value: State) => value
- ): [State, Dispatch] => {
- const ref = useRef(initializer(initialState));
- const [, setState] = useState(ref.current);
-
- const dispatch = useCallback(
- (action) => {
- ref.current = reducer(ref.current, action);
- setState(ref.current);
- return action;
- },
- [reducer]
- );
-
- const dispatchRef: MutableRefObject> = useRef(
- composedMiddleware(
- {
- getState: () => ref.current,
- dispatch: (...args: [Action]) => dispatchRef.current(...args),
- },
- dispatch
- )
- );
-
- useUpdateEffect(() => {
- dispatchRef.current = composedMiddleware(
- {
- getState: () => ref.current,
- dispatch: (...args: [Action]) => dispatchRef.current(...args),
- },
- dispatch
- );
- }, [dispatch]);
-
- return [ref.current, dispatchRef.current];
- };
-};
-
-export default createReducer;
diff --git a/src/factory/createReducerContext.ts b/src/factory/createReducerContext.ts
deleted file mode 100644
index 52f24da416..0000000000
--- a/src/factory/createReducerContext.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { createContext, createElement, useContext, useReducer } from 'react';
-
-const createReducerContext = >(
- reducer: R,
- defaultInitialState: React.ReducerState
-) => {
- const context =
- createContext<[React.ReducerState, React.Dispatch>] | undefined>(
- undefined
- );
- const providerFactory = (props, children) => createElement(context.Provider, props, children);
-
- const ReducerProvider = ({
- children,
- initialState,
- }: {
- children?: React.ReactNode;
- initialState?: React.ReducerState;
- }) => {
- const state = useReducer(
- reducer,
- initialState !== undefined ? initialState : defaultInitialState
- );
- return providerFactory({ value: state }, children);
- };
-
- const useReducerContext = () => {
- const state = useContext(context);
- if (state == null) {
- throw new Error(`useReducerContext must be used inside a ReducerProvider.`);
- }
- return state;
- };
-
- return [useReducerContext, ReducerProvider, context] as const;
-};
-
-export default createReducerContext;
diff --git a/src/factory/createRenderProp.ts b/src/factory/createRenderProp.ts
deleted file mode 100644
index 0b0aa2a311..0000000000
--- a/src/factory/createRenderProp.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-const defaultMapPropsToArgs = (props) => [props];
-
-export default function createRenderProp(hook, mapPropsToArgs = defaultMapPropsToArgs) {
- return function RenderProp(props) {
- const state = hook(...mapPropsToArgs(props));
- const { children, render = children } = props;
- return render ? render(state) || null : null;
- };
-}
diff --git a/src/factory/createRouter.ts b/src/factory/createRouter.ts
deleted file mode 100644
index f2690e09ef..0000000000
--- a/src/factory/createRouter.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-import React from 'react';
-
-export interface RouterProviderProps {
- route: string;
- fullRoute?: string;
- parent?: any;
-}
-
-const createRouter = () => {
- const context = React.createContext({
- route: '',
- });
-
- // not sure if this supposed to be unused, ignoring ts error for now
- // @ts-ignore
- const Router: React.SFC = (props) => {
- const { route, fullRoute, parent, children } = props;
-
- if (process.env.NODE_ENV !== 'production') {
- if (typeof route !== 'string') {
- throw new TypeError('Router route must be a string.');
- }
- }
-
- return React.createElement(context.Provider as any, {
- value: {
- fullRoute: fullRoute || route,
- route,
- parent,
- },
- children,
- });
- };
-};
-
-export default createRouter;
diff --git a/src/factory/createStateContext.ts b/src/factory/createStateContext.ts
deleted file mode 100644
index 34d0a84864..0000000000
--- a/src/factory/createStateContext.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { createContext, createElement, useContext, useState } from 'react';
-
-const createStateContext = (defaultInitialValue: T) => {
- const context =
- createContext<[T, React.Dispatch>] | undefined>(undefined);
- const providerFactory = (props, children) => createElement(context.Provider, props, children);
-
- const StateProvider = ({
- children,
- initialValue,
- }: {
- children?: React.ReactNode;
- initialValue?: T;
- }) => {
- const state = useState(initialValue !== undefined ? initialValue : defaultInitialValue);
- return providerFactory({ value: state }, children);
- };
-
- const useStateContext = () => {
- const state = useContext(context);
- if (state == null) {
- throw new Error(`useStateContext must be used inside a StateProvider.`);
- }
- return state;
- };
-
- return [useStateContext, StateProvider, context] as const;
-};
-
-export default createStateContext;
diff --git a/src/index.ts b/src/index.ts
deleted file mode 100644
index 62b69356b7..0000000000
--- a/src/index.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-export { default as createMemo } from './factory/createMemo';
-export { default as createReducerContext } from './factory/createReducerContext';
-export { default as createReducer } from './factory/createReducer';
-export { default as createStateContext } from './factory/createStateContext';
-export { default as useAsync } from './useAsync';
-export { default as useAsyncFn } from './useAsyncFn';
-export { default as useAsyncRetry } from './useAsyncRetry';
-export { default as useAudio } from './useAudio';
-export { default as useBattery } from './useBattery';
-export { default as useBeforeUnload } from './useBeforeUnload';
-export { default as useBoolean } from './useBoolean';
-export { default as useClickAway } from './useClickAway';
-export { default as useCookie } from './useCookie';
-export { default as useCopyToClipboard } from './useCopyToClipboard';
-export { default as useCounter } from './useCounter';
-export { default as useCss } from './useCss';
-export { default as useCustomCompareEffect } from './useCustomCompareEffect';
-export { default as useDebounce } from './useDebounce';
-export { default as useDeepCompareEffect } from './useDeepCompareEffect';
-export { default as useDefault } from './useDefault';
-export { default as useDrop } from './useDrop';
-export { default as useDropArea } from './useDropArea';
-export { default as useEffectOnce } from './useEffectOnce';
-export { default as useEnsuredForwardedRef, ensuredForwardRef } from './useEnsuredForwardedRef';
-export { default as useEvent } from './useEvent';
-export { default as useError } from './useError';
-export { default as useFavicon } from './useFavicon';
-export { default as useFullscreen } from './useFullscreen';
-export { default as useGeolocation } from './useGeolocation';
-export { default as useGetSet } from './useGetSet';
-export { default as useGetSetState } from './useGetSetState';
-export { default as useHarmonicIntervalFn } from './useHarmonicIntervalFn';
-export { default as useHover } from './useHover';
-export { default as useHoverDirty } from './useHoverDirty';
-export { default as useIdle } from './useIdle';
-export { default as useIntersection } from './useIntersection';
-export { default as useInterval } from './useInterval';
-export { default as useIsomorphicLayoutEffect } from './useIsomorphicLayoutEffect';
-export { default as useKey } from './useKey';
-export { default as createBreakpoint } from './factory/createBreakpoint';
-// not exported because of peer dependency
-// export { default as useKeyboardJs } from './useKeyboardJs';
-export { default as useKeyPress } from './useKeyPress';
-export { default as useKeyPressEvent } from './useKeyPressEvent';
-export { default as useLatest } from './useLatest';
-export { default as useLifecycles } from './useLifecycles';
-export { default as useList } from './useList';
-export { default as useLocalStorage } from './useLocalStorage';
-export { default as useLocation } from './useLocation';
-export { default as useLockBodyScroll } from './useLockBodyScroll';
-export { default as useLogger } from './useLogger';
-export { default as useLongPress } from './useLongPress';
-export { default as useMap } from './useMap';
-export { default as useMedia } from './useMedia';
-export { default as useMediaDevices } from './useMediaDevices';
-export { useMediatedState } from './useMediatedState';
-export { default as useMethods } from './useMethods';
-export { default as useMotion } from './useMotion';
-export { default as useMount } from './useMount';
-export { default as useMountedState } from './useMountedState';
-export { default as useMouse } from './useMouse';
-export { default as useMouseHovered } from './useMouseHovered';
-export { default as useMouseWheel } from './useMouseWheel';
-export { default as useNetworkState } from './useNetworkState';
-export { default as useNumber } from './useNumber';
-export { default as useObservable } from './useObservable';
-export { default as useOrientation } from './useOrientation';
-export { default as usePageLeave } from './usePageLeave';
-export { default as usePermission } from './usePermission';
-export { default as usePrevious } from './usePrevious';
-export { default as usePreviousDistinct } from './usePreviousDistinct';
-export { default as usePromise } from './usePromise';
-export { default as useQueue } from './useQueue';
-export { default as useRaf } from './useRaf';
-export { default as useRafLoop } from './useRafLoop';
-export { default as useRafState } from './useRafState';
-export { default as useSearchParam } from './useSearchParam';
-export { default as useScratch } from './useScratch';
-export { default as useScroll } from './useScroll';
-export { default as useScrolling } from './useScrolling';
-export { default as useSessionStorage } from './useSessionStorage';
-export { default as useSetState } from './useSetState';
-export { default as useShallowCompareEffect } from './useShallowCompareEffect';
-export { default as useSize } from './useSize';
-export { default as useSlider } from './useSlider';
-export { default as useSpeech } from './useSpeech';
-// not exported because of peer dependency
-// export { default as useSpring } from './useSpring';
-export { default as useStartTyping } from './useStartTyping';
-export { useStateWithHistory } from './useStateWithHistory';
-export { default as useStateList } from './useStateList';
-export { default as useThrottle } from './useThrottle';
-export { default as useThrottleFn } from './useThrottleFn';
-export { default as useTimeout } from './useTimeout';
-export { default as useTimeoutFn } from './useTimeoutFn';
-export { default as useTitle } from './useTitle';
-export { default as useToggle } from './useToggle';
-export { default as useTween } from './useTween';
-export { default as useUnmount } from './useUnmount';
-export { default as useUnmountPromise } from './useUnmountPromise';
-export { default as useUpdate } from './useUpdate';
-export { default as useUpdateEffect } from './useUpdateEffect';
-export { default as useUpsert } from './useUpsert';
-export { default as useVibrate } from './useVibrate';
-export { default as useVideo } from './useVideo';
-export { default as useStateValidator } from './useStateValidator';
-export { useScrollbarWidth } from './useScrollbarWidth';
-export { useMultiStateValidator } from './useMultiStateValidator';
-export { default as useWindowScroll } from './useWindowScroll';
-export { default as useWindowSize } from './useWindowSize';
-export { default as useMeasure } from './useMeasure';
-export { default as usePinchZoom } from './usePinchZoom';
-export { useRendersCount } from './useRendersCount';
-export { useFirstMountState } from './useFirstMountState';
-export { default as useSet } from './useSet';
-export { createGlobalState } from './factory/createGlobalState';
-export { useHash } from './useHash';
diff --git a/src/misc/hookState.ts b/src/misc/hookState.ts
deleted file mode 100644
index 8d163e683f..0000000000
--- a/src/misc/hookState.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-export type IHookStateInitialSetter = () => S;
-export type IHookStateInitAction = S | IHookStateInitialSetter;
-
-export type IHookStateSetter = ((prevState: S) => S) | (() => S);
-export type IHookStateSetAction = S | IHookStateSetter;
-
-export type IHookStateResolvable = S | IHookStateInitialSetter | IHookStateSetter;
-
-export function resolveHookState(nextState: IHookStateInitAction): S;
-export function resolveHookState(
- nextState: IHookStateSetAction,
- currentState?: C
-): S;
-export function resolveHookState(
- nextState: IHookStateResolvable,
- currentState?: C
-): S;
-export function resolveHookState(
- nextState: IHookStateResolvable,
- currentState?: C
-): S {
- if (typeof nextState === 'function') {
- return nextState.length ? (nextState as Function)(currentState) : (nextState as Function)();
- }
-
- return nextState;
-}
diff --git a/src/misc/isDeepEqual.ts b/src/misc/isDeepEqual.ts
deleted file mode 100644
index 2cff67378a..0000000000
--- a/src/misc/isDeepEqual.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import isDeepEqualReact from 'fast-deep-equal/react';
-
-export default isDeepEqualReact;
diff --git a/src/misc/parseTimeRanges.ts b/src/misc/parseTimeRanges.ts
deleted file mode 100644
index 266479be28..0000000000
--- a/src/misc/parseTimeRanges.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-export default function parseTimeRanges(ranges) {
- const result: { start: number; end: number }[] = [];
-
- for (let i = 0; i < ranges.length; i++) {
- result.push({
- start: ranges.start(i),
- end: ranges.end(i),
- });
- }
-
- return result;
-}
diff --git a/src/misc/types.ts b/src/misc/types.ts
deleted file mode 100644
index 5c7aa70874..0000000000
--- a/src/misc/types.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export type PromiseType > = P extends Promise ? T : never;
-
-export type FunctionReturningPromise = (...args: any[]) => Promise;
diff --git a/src/misc/util.ts b/src/misc/util.ts
deleted file mode 100644
index 34fa42c206..0000000000
--- a/src/misc/util.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-export const noop = () => {};
-
-export function on(
- obj: T | null,
- ...args: Parameters | [string, Function | null, ...any]
-): void {
- if (obj && obj.addEventListener) {
- obj.addEventListener(...(args as Parameters));
- }
-}
-
-export function off(
- obj: T | null,
- ...args: Parameters | [string, Function | null, ...any]
-): void {
- if (obj && obj.removeEventListener) {
- obj.removeEventListener(...(args as Parameters));
- }
-}
-
-export const isBrowser = typeof window !== 'undefined';
-
-export const isNavigator = typeof navigator !== 'undefined';
diff --git a/src/useAsync.ts b/src/useAsync.ts
deleted file mode 100644
index f30c85caa9..0000000000
--- a/src/useAsync.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { DependencyList, useEffect } from 'react';
-import useAsyncFn from './useAsyncFn';
-import { FunctionReturningPromise } from './misc/types';
-
-export { AsyncState, AsyncFnReturn } from './useAsyncFn';
-
-export default function useAsync(
- fn: T,
- deps: DependencyList = []
-) {
- const [state, callback] = useAsyncFn(fn, deps, {
- loading: true,
- });
-
- useEffect(() => {
- callback();
- }, [callback]);
-
- return state;
-}
diff --git a/src/useAsyncFn.ts b/src/useAsyncFn.ts
deleted file mode 100644
index d330ffbadc..0000000000
--- a/src/useAsyncFn.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { DependencyList, useCallback, useRef, useState } from 'react';
-import useMountedState from './useMountedState';
-import { FunctionReturningPromise, PromiseType } from './misc/types';
-
-export type AsyncState =
- | {
- loading: boolean;
- error?: undefined;
- value?: undefined;
- }
- | {
- loading: true;
- error?: Error | undefined;
- value?: T;
- }
- | {
- loading: false;
- error: Error;
- value?: undefined;
- }
- | {
- loading: false;
- error?: undefined;
- value: T;
- };
-
-type StateFromFunctionReturningPromise = AsyncState<
- PromiseType>
->;
-
-export type AsyncFnReturn = [
- StateFromFunctionReturningPromise,
- T
-];
-
-export default function useAsyncFn(
- fn: T,
- deps: DependencyList = [],
- initialState: StateFromFunctionReturningPromise = { loading: false }
-): AsyncFnReturn {
- const lastCallId = useRef(0);
- const isMounted = useMountedState();
- const [state, set] = useState>(initialState);
-
- const callback = useCallback((...args: Parameters): ReturnType => {
- const callId = ++lastCallId.current;
-
- if (!state.loading) {
- set((prevState) => ({ ...prevState, loading: true }));
- }
-
- return fn(...args).then(
- (value) => {
- isMounted() && callId === lastCallId.current && set({ value, loading: false });
-
- return value;
- },
- (error) => {
- isMounted() && callId === lastCallId.current && set({ error, loading: false });
-
- return error;
- }
- ) as ReturnType;
- }, deps);
-
- return [state, callback as unknown as T];
-}
diff --git a/src/useAsyncRetry.ts b/src/useAsyncRetry.ts
deleted file mode 100644
index 04119d957f..0000000000
--- a/src/useAsyncRetry.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { DependencyList, useCallback, useState } from 'react';
-import useAsync, { AsyncState } from './useAsync';
-
-export type AsyncStateRetry = AsyncState & {
- retry(): void;
-};
-
-const useAsyncRetry = (fn: () => Promise, deps: DependencyList = []) => {
- const [attempt, setAttempt] = useState(0);
- const state = useAsync(fn, [...deps, attempt]);
-
- const stateLoading = state.loading;
- const retry = useCallback(() => {
- if (stateLoading) {
- if (process.env.NODE_ENV === 'development') {
- console.log(
- 'You are calling useAsyncRetry hook retry() method while loading in progress, this is a no-op.'
- );
- }
-
- return;
- }
-
- setAttempt((currentAttempt) => currentAttempt + 1);
- }, [...deps, stateLoading]);
-
- return { ...state, retry };
-};
-
-export default useAsyncRetry;
diff --git a/src/useAudio.ts b/src/useAudio.ts
deleted file mode 100644
index 8861d93933..0000000000
--- a/src/useAudio.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import createHTMLMediaHook from './factory/createHTMLMediaHook';
-
-const useAudio = createHTMLMediaHook('audio');
-export default useAudio;
diff --git a/src/useBattery.ts b/src/useBattery.ts
deleted file mode 100644
index 80d118ac74..0000000000
--- a/src/useBattery.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import { useEffect, useState } from 'react';
-import { isNavigator, off, on } from './misc/util';
-import isDeepEqual from './misc/isDeepEqual';
-
-export interface BatteryState {
- charging: boolean;
- chargingTime: number;
- dischargingTime: number;
- level: number;
-}
-
-interface BatteryManager extends Readonly, EventTarget {
- onchargingchange: () => void;
- onchargingtimechange: () => void;
- ondischargingtimechange: () => void;
- onlevelchange: () => void;
-}
-
-interface NavigatorWithPossibleBattery extends Navigator {
- getBattery?: () => Promise;
-}
-
-type UseBatteryState =
- | { isSupported: false } // Battery API is not supported
- | { isSupported: true; fetched: false } // battery API supported but not fetched yet
- | (BatteryState & { isSupported: true; fetched: true }); // battery API supported and fetched
-
-const nav: NavigatorWithPossibleBattery | undefined = isNavigator ? navigator : undefined;
-const isBatteryApiSupported = nav && typeof nav.getBattery === 'function';
-
-function useBatteryMock(): UseBatteryState {
- return { isSupported: false };
-}
-
-function useBattery(): UseBatteryState {
- const [state, setState] = useState({ isSupported: true, fetched: false });
-
- useEffect(() => {
- let isMounted = true;
- let battery: BatteryManager | null = null;
-
- const handleChange = () => {
- if (!isMounted || !battery) {
- return;
- }
- const newState: UseBatteryState = {
- isSupported: true,
- fetched: true,
- level: battery.level,
- charging: battery.charging,
- dischargingTime: battery.dischargingTime,
- chargingTime: battery.chargingTime,
- };
- !isDeepEqual(state, newState) && setState(newState);
- };
-
- nav!.getBattery!().then((bat: BatteryManager) => {
- if (!isMounted) {
- return;
- }
- battery = bat;
- on(battery, 'chargingchange', handleChange);
- on(battery, 'chargingtimechange', handleChange);
- on(battery, 'dischargingtimechange', handleChange);
- on(battery, 'levelchange', handleChange);
- handleChange();
- });
-
- return () => {
- isMounted = false;
- if (battery) {
- off(battery, 'chargingchange', handleChange);
- off(battery, 'chargingtimechange', handleChange);
- off(battery, 'dischargingtimechange', handleChange);
- off(battery, 'levelchange', handleChange);
- }
- };
- }, []);
-
- return state;
-}
-
-export default isBatteryApiSupported ? useBattery : useBatteryMock;
diff --git a/src/useBeforeUnload.ts b/src/useBeforeUnload.ts
deleted file mode 100644
index 4d12e77aa6..0000000000
--- a/src/useBeforeUnload.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import { useCallback, useEffect } from 'react';
-import { off, on } from './misc/util';
-
-const useBeforeUnload = (enabled: boolean | (() => boolean) = true, message?: string) => {
- const handler = useCallback(
- (event: BeforeUnloadEvent) => {
- const finalEnabled = typeof enabled === 'function' ? enabled() : true;
-
- if (!finalEnabled) {
- return;
- }
-
- event.preventDefault();
-
- if (message) {
- event.returnValue = message;
- }
-
- return message;
- },
- [enabled, message]
- );
-
- useEffect(() => {
- if (!enabled) {
- return;
- }
-
- on(window, 'beforeunload', handler);
-
- return () => off(window, 'beforeunload', handler);
- }, [enabled, handler]);
-};
-
-export default useBeforeUnload;
diff --git a/src/useBoolean.ts b/src/useBoolean.ts
deleted file mode 100644
index 39edec07e5..0000000000
--- a/src/useBoolean.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import useBoolean from './useToggle';
-
-export default useBoolean;
diff --git a/src/useClickAway.ts b/src/useClickAway.ts
deleted file mode 100644
index e5367d0f8d..0000000000
--- a/src/useClickAway.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-import { RefObject, useEffect, useRef } from 'react';
-import { off, on } from './misc/util';
-
-const defaultEvents = ['mousedown', 'touchstart'];
-
-const useClickAway = (
- ref: RefObject,
- onClickAway: (event: E) => void,
- events: string[] = defaultEvents
-) => {
- const savedCallback = useRef(onClickAway);
- useEffect(() => {
- savedCallback.current = onClickAway;
- }, [onClickAway]);
- useEffect(() => {
- const handler = (event) => {
- const { current: el } = ref;
- el && !el.contains(event.target) && savedCallback.current(event);
- };
- for (const eventName of events) {
- on(document, eventName, handler);
- }
- return () => {
- for (const eventName of events) {
- off(document, eventName, handler);
- }
- };
- }, [events, ref]);
-};
-
-export default useClickAway;
diff --git a/src/useCookie.ts b/src/useCookie.ts
deleted file mode 100644
index 4bdd6c96de..0000000000
--- a/src/useCookie.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useCallback, useState } from 'react';
-import Cookies from 'js-cookie';
-
-const useCookie = (
- cookieName: string
-): [string | null, (newValue: string, options?: Cookies.CookieAttributes) => void, () => void] => {
- const [value, setValue] = useState(() => Cookies.get(cookieName) || null);
-
- const updateCookie = useCallback(
- (newValue: string, options?: Cookies.CookieAttributes) => {
- Cookies.set(cookieName, newValue, options);
- setValue(newValue);
- },
- [cookieName]
- );
-
- const deleteCookie = useCallback(() => {
- Cookies.remove(cookieName);
- setValue(null);
- }, [cookieName]);
-
- return [value, updateCookie, deleteCookie];
-};
-
-export default useCookie;
diff --git a/src/useCopyToClipboard.ts b/src/useCopyToClipboard.ts
deleted file mode 100644
index 9656d9efd7..0000000000
--- a/src/useCopyToClipboard.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-import writeText from 'copy-to-clipboard';
-import { useCallback } from 'react';
-import useMountedState from './useMountedState';
-import useSetState from './useSetState';
-
-export interface CopyToClipboardState {
- value?: string;
- noUserInteraction: boolean;
- error?: Error;
-}
-
-const useCopyToClipboard = (): [CopyToClipboardState, (value: string) => void] => {
- const isMounted = useMountedState();
- const [state, setState] = useSetState({
- value: undefined,
- error: undefined,
- noUserInteraction: true,
- });
-
- const copyToClipboard = useCallback((value) => {
- if (!isMounted()) {
- return;
- }
- let noUserInteraction;
- let normalizedValue;
- try {
- // only strings and numbers casted to strings can be copied to clipboard
- if (typeof value !== 'string' && typeof value !== 'number') {
- const error = new Error(
- `Cannot copy typeof ${typeof value} to clipboard, must be a string`
- );
- if (process.env.NODE_ENV === 'development') console.error(error);
- setState({
- value,
- error,
- noUserInteraction: true,
- });
- return;
- }
- // empty strings are also considered invalid
- else if (value === '') {
- const error = new Error(`Cannot copy empty string to clipboard.`);
- if (process.env.NODE_ENV === 'development') console.error(error);
- setState({
- value,
- error,
- noUserInteraction: true,
- });
- return;
- }
- normalizedValue = value.toString();
- noUserInteraction = writeText(normalizedValue);
- setState({
- value: normalizedValue,
- error: undefined,
- noUserInteraction,
- });
- } catch (error) {
- setState({
- value: normalizedValue,
- error,
- noUserInteraction,
- });
- }
- }, []);
-
- return [state, copyToClipboard];
-};
-
-export default useCopyToClipboard;
diff --git a/src/useCounter.ts b/src/useCounter.ts
deleted file mode 100644
index cb4a3b830a..0000000000
--- a/src/useCounter.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-import { useMemo } from 'react';
-import useGetSet from './useGetSet';
-import { IHookStateInitAction, IHookStateSetAction, resolveHookState } from './misc/hookState';
-
-export interface CounterActions {
- inc: (delta?: number) => void;
- dec: (delta?: number) => void;
- get: () => number;
- set: (value: IHookStateSetAction) => void;
- reset: (value?: IHookStateSetAction) => void;
-}
-
-export default function useCounter(
- initialValue: IHookStateInitAction = 0,
- max: number | null = null,
- min: number | null = null
-): [number, CounterActions] {
- let init = resolveHookState(initialValue);
-
- typeof init !== 'number' &&
- console.error('initialValue has to be a number, got ' + typeof initialValue);
-
- if (typeof min === 'number') {
- init = Math.max(init, min);
- } else if (min !== null) {
- console.error('min has to be a number, got ' + typeof min);
- }
-
- if (typeof max === 'number') {
- init = Math.min(init, max);
- } else if (max !== null) {
- console.error('max has to be a number, got ' + typeof max);
- }
-
- const [get, setInternal] = useGetSet(init);
-
- return [
- get(),
- useMemo(() => {
- const set = (newState: IHookStateSetAction) => {
- const prevState = get();
- let rState = resolveHookState(newState, prevState);
-
- if (prevState !== rState) {
- if (typeof min === 'number') {
- rState = Math.max(rState, min);
- }
- if (typeof max === 'number') {
- rState = Math.min(rState, max);
- }
-
- prevState !== rState && setInternal(rState);
- }
- };
-
- return {
- get,
- set,
- inc: (delta: IHookStateSetAction = 1) => {
- const rDelta = resolveHookState(delta, get());
-
- if (typeof rDelta !== 'number') {
- console.error(
- 'delta has to be a number or function returning a number, got ' + typeof rDelta
- );
- }
-
- set((num: number) => num + rDelta);
- },
- dec: (delta: IHookStateSetAction = 1) => {
- const rDelta = resolveHookState(delta, get());
-
- if (typeof rDelta !== 'number') {
- console.error(
- 'delta has to be a number or function returning a number, got ' + typeof rDelta
- );
- }
-
- set((num: number) => num - rDelta);
- },
- reset: (value: IHookStateSetAction = init) => {
- const rValue = resolveHookState(value, get());
-
- if (typeof rValue !== 'number') {
- console.error(
- 'value has to be a number or function returning a number, got ' + typeof rValue
- );
- }
-
- // eslint-disable-next-line react-hooks/exhaustive-deps
- init = rValue;
- set(rValue);
- },
- };
- }, [init, min, max]),
- ];
-}
diff --git a/src/useCss.ts b/src/useCss.ts
deleted file mode 100644
index 5617fe3f97..0000000000
--- a/src/useCss.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { create, NanoRenderer } from 'nano-css';
-import { addon as addonCSSOM, CSSOMAddon } from 'nano-css/addon/cssom';
-import { addon as addonVCSSOM, VCSSOMAddon } from 'nano-css/addon/vcssom';
-import { cssToTree } from 'nano-css/addon/vcssom/cssToTree';
-import { useMemo } from 'react';
-import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';
-
-type Nano = NanoRenderer & CSSOMAddon & VCSSOMAddon;
-const nano = create() as Nano;
-addonCSSOM(nano);
-addonVCSSOM(nano);
-
-let counter = 0;
-
-const useCss = (css: object): string => {
- const className = useMemo(() => 'react-use-css-' + (counter++).toString(36), []);
- const sheet = useMemo(() => new nano.VSheet(), []);
-
- useIsomorphicLayoutEffect(() => {
- const tree = {};
- cssToTree(tree, css, '.' + className, '');
- sheet.diff(tree);
-
- return () => {
- sheet.diff({});
- };
- });
-
- return className;
-};
-
-export default useCss;
diff --git a/src/useCustomCompareEffect.ts b/src/useCustomCompareEffect.ts
deleted file mode 100644
index 0ac38bb1c4..0000000000
--- a/src/useCustomCompareEffect.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { DependencyList, EffectCallback, useEffect, useRef } from 'react';
-
-const isPrimitive = (val: any) => val !== Object(val);
-
-type DepsEqualFnType = (prevDeps: TDeps, nextDeps: TDeps) => boolean;
-
-const useCustomCompareEffect = (
- effect: EffectCallback,
- deps: TDeps,
- depsEqual: DepsEqualFnType
-) => {
- if (process.env.NODE_ENV !== 'production') {
- if (!(deps instanceof Array) || !deps.length) {
- console.warn(
- '`useCustomCompareEffect` should not be used with no dependencies. Use React.useEffect instead.'
- );
- }
-
- if (deps.every(isPrimitive)) {
- console.warn(
- '`useCustomCompareEffect` should not be used with dependencies that are all primitive values. Use React.useEffect instead.'
- );
- }
-
- if (typeof depsEqual !== 'function') {
- console.warn(
- '`useCustomCompareEffect` should be used with depsEqual callback for comparing deps list'
- );
- }
- }
-
- const ref = useRef(undefined);
-
- if (!ref.current || !depsEqual(deps, ref.current)) {
- ref.current = deps;
- }
-
- useEffect(effect, ref.current);
-};
-
-export default useCustomCompareEffect;
diff --git a/src/useDebounce.ts b/src/useDebounce.ts
deleted file mode 100644
index 70956d82a1..0000000000
--- a/src/useDebounce.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { DependencyList, useEffect } from 'react';
-import useTimeoutFn from './useTimeoutFn';
-
-export type UseDebounceReturn = [() => boolean | null, () => void];
-
-export default function useDebounce(
- fn: Function,
- ms: number = 0,
- deps: DependencyList = []
-): UseDebounceReturn {
- const [isReady, cancel, reset] = useTimeoutFn(fn, ms);
-
- useEffect(reset, deps);
-
- return [isReady, cancel];
-}
diff --git a/src/useDeepCompareEffect.ts b/src/useDeepCompareEffect.ts
deleted file mode 100644
index 14c08c4ff0..0000000000
--- a/src/useDeepCompareEffect.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { DependencyList, EffectCallback } from 'react';
-import useCustomCompareEffect from './useCustomCompareEffect';
-import isDeepEqual from './misc/isDeepEqual';
-
-const isPrimitive = (val: any) => val !== Object(val);
-
-const useDeepCompareEffect = (effect: EffectCallback, deps: DependencyList) => {
- if (process.env.NODE_ENV !== 'production') {
- if (!(deps instanceof Array) || !deps.length) {
- console.warn(
- '`useDeepCompareEffect` should not be used with no dependencies. Use React.useEffect instead.'
- );
- }
-
- if (deps.every(isPrimitive)) {
- console.warn(
- '`useDeepCompareEffect` should not be used with dependencies that are all primitive values. Use React.useEffect instead.'
- );
- }
- }
-
- useCustomCompareEffect(effect, deps, isDeepEqual);
-};
-
-export default useDeepCompareEffect;
diff --git a/src/useDefault.ts b/src/useDefault.ts
deleted file mode 100644
index 3234e2c4e9..0000000000
--- a/src/useDefault.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useState } from 'react';
-
-const useDefault = (
- defaultValue: TStateType,
- initialValue: TStateType | (() => TStateType)
-) => {
- const [value, setValue] = useState(initialValue);
-
- if (value === undefined || value === null) {
- return [defaultValue, setValue] as const;
- }
-
- return [value, setValue] as const;
-};
-
-export default useDefault;
diff --git a/src/useDrop.ts b/src/useDrop.ts
deleted file mode 100644
index c4c353a9f1..0000000000
--- a/src/useDrop.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { useCallback, useEffect, useMemo, useState } from 'react';
-import { noop, off, on } from './misc/util';
-
-export interface DropAreaState {
- over: boolean;
-}
-
-export interface DropAreaBond {
- onDragOver: React.DragEventHandler;
- onDragEnter: React.DragEventHandler;
- onDragLeave: React.DragEventHandler;
- onDrop: React.DragEventHandler;
- onPaste: React.ClipboardEventHandler;
-}
-
-export interface DropAreaOptions {
- onFiles?: (files: File[], event?) => void;
- onText?: (text: string, event?) => void;
- onUri?: (url: string, event?) => void;
-}
-
-const createProcess = (options: DropAreaOptions) => (dataTransfer: DataTransfer, event) => {
- const uri = dataTransfer.getData('text/uri-list');
-
- if (uri) {
- (options.onUri || noop)(uri, event);
- return;
- }
-
- if (dataTransfer.files && dataTransfer.files.length) {
- (options.onFiles || noop)(Array.from(dataTransfer.files), event);
- return;
- }
-
- if (event.clipboardData) {
- const text = event.clipboardData.getData('text');
- (options.onText || noop)(text, event);
- return;
- }
-};
-
-const useDrop = (options: DropAreaOptions = {}, args = []): DropAreaState => {
- const { onFiles, onText, onUri } = options;
- const [over, setOverRaw] = useState(false);
- const setOver = useCallback(setOverRaw, []);
- const process = useMemo(() => createProcess(options), [onFiles, onText, onUri]);
-
- useEffect(() => {
- const onDragOver = (event) => {
- event.preventDefault();
- setOver(true);
- };
-
- const onDragEnter = (event) => {
- event.preventDefault();
- setOver(true);
- };
-
- const onDragLeave = () => {
- setOver(false);
- };
-
- const onDragExit = () => {
- setOver(false);
- };
-
- const onDrop = (event) => {
- event.preventDefault();
- setOver(false);
- process(event.dataTransfer, event);
- };
-
- const onPaste = (event) => {
- process(event.clipboardData, event);
- };
-
- on(document, 'dragover', onDragOver);
- on(document, 'dragenter', onDragEnter);
- on(document, 'dragleave', onDragLeave);
- on(document, 'dragexit', onDragExit);
- on(document, 'drop', onDrop);
- if (onText) {
- on(document, 'paste', onPaste);
- }
-
- return () => {
- off(document, 'dragover', onDragOver);
- off(document, 'dragenter', onDragEnter);
- off(document, 'dragleave', onDragLeave);
- off(document, 'dragexit', onDragExit);
- off(document, 'drop', onDrop);
- off(document, 'paste', onPaste);
- };
- }, [process, ...args]);
-
- return { over };
-};
-
-export default useDrop;
diff --git a/src/useDropArea.ts b/src/useDropArea.ts
deleted file mode 100644
index 52ca8fae62..0000000000
--- a/src/useDropArea.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import { useMemo, useState } from 'react';
-import useMountedState from './useMountedState';
-import { noop } from './misc/util';
-
-export interface DropAreaState {
- over: boolean;
-}
-
-export interface DropAreaBond {
- onDragOver: React.DragEventHandler;
- onDragEnter: React.DragEventHandler;
- onDragLeave: React.DragEventHandler;
- onDrop: React.DragEventHandler;
- onPaste: React.ClipboardEventHandler;
-}
-
-export interface DropAreaOptions {
- onFiles?: (files: File[], event?) => void;
- onText?: (text: string, event?) => void;
- onUri?: (url: string, event?) => void;
-}
-
-/*
-const defaultState: DropAreaState = {
- over: false,
-};
-*/
-
-const createProcess =
- (options: DropAreaOptions, mounted: boolean) => (dataTransfer: DataTransfer, event) => {
- const uri = dataTransfer.getData('text/uri-list');
-
- if (uri) {
- (options.onUri || noop)(uri, event);
- return;
- }
-
- if (dataTransfer.files && dataTransfer.files.length) {
- (options.onFiles || noop)(Array.from(dataTransfer.files), event);
- return;
- }
-
- if (dataTransfer.items && dataTransfer.items.length) {
- dataTransfer.items[0].getAsString((text) => {
- if (mounted) {
- (options.onText || noop)(text, event);
- }
- });
- }
- };
-
-const createBond = (process, setOver): DropAreaBond => ({
- onDragOver: (event) => {
- event.preventDefault();
- },
- onDragEnter: (event) => {
- event.preventDefault();
- setOver(true);
- },
- onDragLeave: () => {
- setOver(false);
- },
- onDrop: (event) => {
- event.preventDefault();
- event.persist();
- setOver(false);
- process(event.dataTransfer, event);
- },
- onPaste: (event) => {
- event.persist();
- process(event.clipboardData, event);
- },
-});
-
-const useDropArea = (options: DropAreaOptions = {}): [DropAreaBond, DropAreaState] => {
- const { onFiles, onText, onUri } = options;
- const isMounted = useMountedState();
- const [over, setOver] = useState(false);
- const process = useMemo(() => createProcess(options, isMounted()), [onFiles, onText, onUri]);
- const bond: DropAreaBond = useMemo(() => createBond(process, setOver), [process, setOver]);
-
- return [bond, { over }];
-};
-
-export default useDropArea;
diff --git a/src/useEffectOnce.ts b/src/useEffectOnce.ts
deleted file mode 100644
index e0e9ee31fa..0000000000
--- a/src/useEffectOnce.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-import { EffectCallback, useEffect } from 'react';
-
-const useEffectOnce = (effect: EffectCallback) => {
- useEffect(effect, []);
-};
-
-export default useEffectOnce;
diff --git a/src/useEnsuredForwardedRef.ts b/src/useEnsuredForwardedRef.ts
deleted file mode 100644
index ad26fd1a72..0000000000
--- a/src/useEnsuredForwardedRef.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-import {
- forwardRef,
- ForwardRefExoticComponent,
- MutableRefObject,
- PropsWithChildren,
- PropsWithoutRef,
- RefAttributes,
- RefForwardingComponent,
- useEffect,
- useRef,
-} from 'react';
-
-export default function useEnsuredForwardedRef(
- forwardedRef: MutableRefObject
-): MutableRefObject {
- const ensuredRef = useRef(forwardedRef && forwardedRef.current);
-
- useEffect(() => {
- if (!forwardedRef) {
- return;
- }
- forwardedRef.current = ensuredRef.current;
- }, [forwardedRef]);
-
- return ensuredRef;
-}
-
-export function ensuredForwardRef(
- Component: RefForwardingComponent
-): ForwardRefExoticComponent & RefAttributes> {
- return forwardRef((props: PropsWithChildren, ref) => {
- const ensuredRef = useEnsuredForwardedRef(ref as MutableRefObject);
- return Component(props, ensuredRef);
- });
-}
diff --git a/src/useError.ts b/src/useError.ts
deleted file mode 100644
index 506549da77..0000000000
--- a/src/useError.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { useCallback, useEffect, useState } from 'react';
-
-const useError = (): ((err: Error) => void) => {
- const [error, setError] = useState(null);
-
- useEffect(() => {
- if (error) {
- throw error;
- }
- }, [error]);
-
- const dispatchError = useCallback((err: Error) => {
- setError(err);
- }, []);
-
- return dispatchError;
-};
-
-export default useError;
diff --git a/src/useEvent.ts b/src/useEvent.ts
deleted file mode 100644
index c0a1673051..0000000000
--- a/src/useEvent.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import { useEffect } from 'react';
-import { isBrowser, off, on } from './misc/util';
-
-export interface ListenerType1 {
- addEventListener(name: string, handler: (event?: any) => void, ...args: any[]);
-
- removeEventListener(name: string, handler: (event?: any) => void, ...args: any[]);
-}
-
-export interface ListenerType2 {
- on(name: string, handler: (event?: any) => void, ...args: any[]);
-
- off(name: string, handler: (event?: any) => void, ...args: any[]);
-}
-
-export type UseEventTarget = ListenerType1 | ListenerType2;
-
-const defaultTarget = isBrowser ? window : null;
-
-const isListenerType1 = (target: any): target is ListenerType1 => {
- return !!target.addEventListener;
-};
-const isListenerType2 = (target: any): target is ListenerType2 => {
- return !!target.on;
-};
-
-type AddEventListener = T extends ListenerType1
- ? T['addEventListener']
- : T extends ListenerType2
- ? T['on']
- : never;
-
-export type UseEventOptions = Parameters>[2];
-
-const useEvent = (
- name: Parameters>[0],
- handler?: null | undefined | Parameters>[1],
- target: null | T | Window = defaultTarget,
- options?: UseEventOptions
-) => {
- useEffect(() => {
- if (!handler) {
- return;
- }
- if (!target) {
- return;
- }
- if (isListenerType1(target)) {
- on(target, name, handler, options);
- } else if (isListenerType2(target)) {
- target.on(name, handler, options);
- }
- return () => {
- if (isListenerType1(target)) {
- off(target, name, handler, options);
- } else if (isListenerType2(target)) {
- target.off(name, handler, options);
- }
- };
- }, [name, handler, target, JSON.stringify(options)]);
-};
-
-export default useEvent;
diff --git a/src/useFavicon.ts b/src/useFavicon.ts
deleted file mode 100644
index b470cf223e..0000000000
--- a/src/useFavicon.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useEffect } from 'react';
-
-const useFavicon = (href: string) => {
- useEffect(() => {
- const link: HTMLLinkElement =
- document.querySelector("link[rel*='icon']") || document.createElement('link');
- link.type = 'image/x-icon';
- link.rel = 'shortcut icon';
- link.href = href;
- document.getElementsByTagName('head')[0].appendChild(link);
- }, [href]);
-};
-
-export default useFavicon;
diff --git a/src/useFirstMountState.ts b/src/useFirstMountState.ts
deleted file mode 100644
index cf210622a2..0000000000
--- a/src/useFirstMountState.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-import { useRef } from 'react';
-
-export function useFirstMountState(): boolean {
- const isFirst = useRef(true);
-
- if (isFirst.current) {
- isFirst.current = false;
-
- return true;
- }
-
- return isFirst.current;
-}
diff --git a/src/useFullscreen.ts b/src/useFullscreen.ts
deleted file mode 100644
index f795bb3b14..0000000000
--- a/src/useFullscreen.ts
+++ /dev/null
@@ -1,81 +0,0 @@
-import { RefObject, useState } from 'react';
-import screenfull from 'screenfull';
-import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';
-import { noop, off, on } from './misc/util';
-
-export interface FullScreenOptions {
- video?: RefObject<
- HTMLVideoElement & { webkitEnterFullscreen?: () => void; webkitExitFullscreen?: () => void }
- >;
- onClose?: (error?: Error) => void;
-}
-
-const useFullscreen = (
- ref: RefObject,
- enabled: boolean,
- options: FullScreenOptions = {}
-): boolean => {
- const { video, onClose = noop } = options;
- const [isFullscreen, setIsFullscreen] = useState(enabled);
-
- useIsomorphicLayoutEffect(() => {
- if (!enabled) {
- return;
- }
- if (!ref.current) {
- return;
- }
-
- const onWebkitEndFullscreen = () => {
- if (video?.current) {
- off(video.current, 'webkitendfullscreen', onWebkitEndFullscreen);
- }
- onClose();
- };
-
- const onChange = () => {
- if (screenfull.isEnabled) {
- const isScreenfullFullscreen = screenfull.isFullscreen;
- setIsFullscreen(isScreenfullFullscreen);
- if (!isScreenfullFullscreen) {
- onClose();
- }
- }
- };
-
- if (screenfull.isEnabled) {
- try {
- screenfull.request(ref.current);
- setIsFullscreen(true);
- } catch (error) {
- onClose(error);
- setIsFullscreen(false);
- }
- screenfull.on('change', onChange);
- } else if (video && video.current && video.current.webkitEnterFullscreen) {
- video.current.webkitEnterFullscreen();
- on(video.current, 'webkitendfullscreen', onWebkitEndFullscreen);
- setIsFullscreen(true);
- } else {
- onClose();
- setIsFullscreen(false);
- }
-
- return () => {
- setIsFullscreen(false);
- if (screenfull.isEnabled) {
- try {
- screenfull.off('change', onChange);
- screenfull.exit();
- } catch {}
- } else if (video && video.current && video.current.webkitExitFullscreen) {
- off(video.current, 'webkitendfullscreen', onWebkitEndFullscreen);
- video.current.webkitExitFullscreen();
- }
- };
- }, [enabled, video, ref]);
-
- return isFullscreen;
-};
-
-export default useFullscreen;
diff --git a/src/useGeolocation.ts b/src/useGeolocation.ts
deleted file mode 100644
index 5c3f64c770..0000000000
--- a/src/useGeolocation.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { useEffect, useState } from 'react';
-
-/**
- * @desc Made compatible with {GeolocationPositionError} and {PositionError} cause
- * PositionError been renamed to GeolocationPositionError in typescript 4.1.x and making
- * own compatible interface is most easiest way to avoid errors.
- */
-export interface IGeolocationPositionError {
- readonly code: number;
- readonly message: string;
- readonly PERMISSION_DENIED: number;
- readonly POSITION_UNAVAILABLE: number;
- readonly TIMEOUT: number;
-}
-
-export interface GeoLocationSensorState {
- loading: boolean;
- accuracy: number | null;
- altitude: number | null;
- altitudeAccuracy: number | null;
- heading: number | null;
- latitude: number | null;
- longitude: number | null;
- speed: number | null;
- timestamp: number | null;
- error?: Error | IGeolocationPositionError;
-}
-
-const useGeolocation = (options?: PositionOptions): GeoLocationSensorState => {
- const [state, setState] = useState({
- loading: true,
- accuracy: null,
- altitude: null,
- altitudeAccuracy: null,
- heading: null,
- latitude: null,
- longitude: null,
- speed: null,
- timestamp: Date.now(),
- });
- let mounted = true;
- let watchId: any;
-
- const onEvent = (event: any) => {
- if (mounted) {
- setState({
- loading: false,
- accuracy: event.coords.accuracy,
- altitude: event.coords.altitude,
- altitudeAccuracy: event.coords.altitudeAccuracy,
- heading: event.coords.heading,
- latitude: event.coords.latitude,
- longitude: event.coords.longitude,
- speed: event.coords.speed,
- timestamp: event.timestamp,
- });
- }
- };
- const onEventError = (error: IGeolocationPositionError) =>
- mounted && setState((oldState) => ({ ...oldState, loading: false, error }));
-
- useEffect(() => {
- navigator.geolocation.getCurrentPosition(onEvent, onEventError, options);
- watchId = navigator.geolocation.watchPosition(onEvent, onEventError, options);
-
- return () => {
- mounted = false;
- navigator.geolocation.clearWatch(watchId);
- };
- }, []);
-
- return state;
-};
-
-export default useGeolocation;
diff --git a/src/useGetSet.ts b/src/useGetSet.ts
deleted file mode 100644
index 56a6b99af1..0000000000
--- a/src/useGetSet.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { Dispatch, useMemo, useRef } from 'react';
-import useUpdate from './useUpdate';
-import { IHookStateInitAction, IHookStateSetAction, resolveHookState } from './misc/hookState';
-
-export default function useGetSet(
- initialState: IHookStateInitAction
-): [get: () => S, set: Dispatch>] {
- const state = useRef(resolveHookState(initialState));
- const update = useUpdate();
-
- return useMemo(
- () => [
- () => state.current as S,
- (newState: IHookStateSetAction) => {
- state.current = resolveHookState(newState, state.current);
- update();
- },
- ],
- []
- );
-}
diff --git a/src/useGetSetState.ts b/src/useGetSetState.ts
deleted file mode 100644
index 061c178b7e..0000000000
--- a/src/useGetSetState.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import { useCallback, useRef } from 'react';
-import useUpdate from './useUpdate';
-
-const useGetSetState = (
- initialState: T = {} as T
-): [() => T, (patch: Partial) => void] => {
- if (process.env.NODE_ENV !== 'production') {
- if (typeof initialState !== 'object') {
- console.error('useGetSetState initial state must be an object.');
- }
- }
-
- const update = useUpdate();
- const state = useRef({ ...(initialState as object) } as T);
- const get = useCallback(() => state.current, []);
- const set = useCallback((patch: Partial) => {
- if (!patch) {
- return;
- }
- if (process.env.NODE_ENV !== 'production') {
- if (typeof patch !== 'object') {
- console.error('useGetSetState setter patch must be an object.');
- }
- }
- Object.assign(state.current, patch);
- update();
- }, []);
-
- return [get, set];
-};
-
-export default useGetSetState;
diff --git a/src/useHarmonicIntervalFn.ts b/src/useHarmonicIntervalFn.ts
deleted file mode 100644
index b95a9b6c3b..0000000000
--- a/src/useHarmonicIntervalFn.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { useEffect, useRef } from 'react';
-import { clearHarmonicInterval, setHarmonicInterval } from 'set-harmonic-interval';
-
-const useHarmonicIntervalFn = (fn: Function, delay: number | null = 0) => {
- const latestCallback = useRef(() => {});
-
- useEffect(() => {
- latestCallback.current = fn;
- });
-
- useEffect(() => {
- if (delay !== null) {
- const interval = setHarmonicInterval(() => latestCallback.current(), delay);
- return () => clearHarmonicInterval(interval);
- }
- return undefined;
- }, [delay]);
-};
-
-export default useHarmonicIntervalFn;
diff --git a/src/useHash.ts b/src/useHash.ts
deleted file mode 100644
index 6d936d333a..0000000000
--- a/src/useHash.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { useCallback, useState } from 'react';
-import useLifecycles from './useLifecycles';
-import { off, on } from './misc/util';
-
-/**
- * read and write url hash, response to url hash change
- */
-export const useHash = () => {
- const [hash, setHash] = useState(() => window.location.hash);
-
- const onHashChange = useCallback(() => {
- setHash(window.location.hash);
- }, []);
-
- useLifecycles(
- () => {
- on(window, 'hashchange', onHashChange);
- },
- () => {
- off(window, 'hashchange', onHashChange);
- }
- );
-
- const _setHash = useCallback(
- (newHash: string) => {
- if (newHash !== hash) {
- window.location.hash = newHash;
- }
- },
- [hash]
- );
-
- return [hash, _setHash] as const;
-};
diff --git a/src/useHover.ts b/src/useHover.ts
deleted file mode 100644
index 98b5908a8d..0000000000
--- a/src/useHover.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import * as React from 'react';
-import { noop } from './misc/util';
-
-const { useState } = React;
-
-export type Element = ((state: boolean) => React.ReactElement) | React.ReactElement;
-
-const useHover = (element: Element): [React.ReactElement, boolean] => {
- const [state, setState] = useState(false);
-
- const onMouseEnter = (originalOnMouseEnter?: any) => (event: any) => {
- (originalOnMouseEnter || noop)(event);
- setState(true);
- };
- const onMouseLeave = (originalOnMouseLeave?: any) => (event: any) => {
- (originalOnMouseLeave || noop)(event);
- setState(false);
- };
-
- if (typeof element === 'function') {
- element = element(state);
- }
-
- const el = React.cloneElement(element, {
- onMouseEnter: onMouseEnter(element.props.onMouseEnter),
- onMouseLeave: onMouseLeave(element.props.onMouseLeave),
- });
-
- return [el, state];
-};
-
-export default useHover;
diff --git a/src/useHoverDirty.ts b/src/useHoverDirty.ts
deleted file mode 100644
index 4f983a489a..0000000000
--- a/src/useHoverDirty.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { RefObject, useEffect, useState } from 'react';
-import { off, on } from './misc/util';
-
-// kudos: https://usehooks.com/
-const useHoverDirty = (ref: RefObject, enabled: boolean = true) => {
- if (process.env.NODE_ENV === 'development') {
- if (typeof ref !== 'object' || typeof ref.current === 'undefined') {
- console.error('useHoverDirty expects a single ref argument.');
- }
- }
-
- const [value, setValue] = useState(false);
-
- useEffect(() => {
- const onMouseOver = () => setValue(true);
- const onMouseOut = () => setValue(false);
-
- if (enabled && ref && ref.current) {
- on(ref.current, 'mouseover', onMouseOver);
- on(ref.current, 'mouseout', onMouseOut);
- }
-
- // fixes react-hooks/exhaustive-deps warning about stale ref elements
- const { current } = ref;
-
- return () => {
- if (enabled && current) {
- off(current, 'mouseover', onMouseOver);
- off(current, 'mouseout', onMouseOut);
- }
- };
- }, [enabled, ref]);
-
- return value;
-};
-
-export default useHoverDirty;
diff --git a/src/useIdle.ts b/src/useIdle.ts
deleted file mode 100644
index e5eb9a152f..0000000000
--- a/src/useIdle.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import { useEffect, useState } from 'react';
-import { throttle } from 'throttle-debounce';
-import { off, on } from './misc/util';
-
-const defaultEvents = ['mousemove', 'mousedown', 'resize', 'keydown', 'touchstart', 'wheel'];
-const oneMinute = 60e3;
-
-const useIdle = (
- ms: number = oneMinute,
- initialState: boolean = false,
- events: string[] = defaultEvents
-): boolean => {
- const [state, setState] = useState(initialState);
-
- useEffect(() => {
- let mounted = true;
- let timeout: any;
- let localState: boolean = state;
- const set = (newState: boolean) => {
- if (mounted) {
- localState = newState;
- setState(newState);
- }
- };
-
- const onEvent = throttle(50, () => {
- if (localState) {
- set(false);
- }
-
- clearTimeout(timeout);
- timeout = setTimeout(() => set(true), ms);
- });
- const onVisibility = () => {
- if (!document.hidden) {
- onEvent();
- }
- };
-
- for (let i = 0; i < events.length; i++) {
- on(window, events[i], onEvent);
- }
- on(document, 'visibilitychange', onVisibility);
-
- timeout = setTimeout(() => set(true), ms);
-
- return () => {
- mounted = false;
-
- for (let i = 0; i < events.length; i++) {
- off(window, events[i], onEvent);
- }
- off(document, 'visibilitychange', onVisibility);
- };
- }, [ms, events]);
-
- return state;
-};
-
-export default useIdle;
diff --git a/src/useIntersection.ts b/src/useIntersection.ts
deleted file mode 100644
index f5b833649d..0000000000
--- a/src/useIntersection.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { RefObject, useEffect, useState } from 'react';
-
-const useIntersection = (
- ref: RefObject,
- options: IntersectionObserverInit
-): IntersectionObserverEntry | null => {
- const [intersectionObserverEntry, setIntersectionObserverEntry] =
- useState(null);
-
- useEffect(() => {
- if (ref.current && typeof IntersectionObserver === 'function') {
- const handler = (entries: IntersectionObserverEntry[]) => {
- setIntersectionObserverEntry(entries[0]);
- };
-
- const observer = new IntersectionObserver(handler, options);
- observer.observe(ref.current);
-
- return () => {
- setIntersectionObserverEntry(null);
- observer.disconnect();
- };
- }
- return () => {};
- }, [ref.current, options.threshold, options.root, options.rootMargin]);
-
- return intersectionObserverEntry;
-};
-
-export default useIntersection;
diff --git a/src/useInterval.ts b/src/useInterval.ts
deleted file mode 100644
index 4613d5e9ef..0000000000
--- a/src/useInterval.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { useEffect, useRef } from 'react';
-
-const useInterval = (callback: Function, delay?: number | null) => {
- const savedCallback = useRef(() => {});
-
- useEffect(() => {
- savedCallback.current = callback;
- });
-
- useEffect(() => {
- if (delay !== null) {
- const interval = setInterval(() => savedCallback.current(), delay || 0);
- return () => clearInterval(interval);
- }
-
- return undefined;
- }, [delay]);
-};
-
-export default useInterval;
diff --git a/src/useIsomorphicLayoutEffect.ts b/src/useIsomorphicLayoutEffect.ts
deleted file mode 100644
index 71f7c3423a..0000000000
--- a/src/useIsomorphicLayoutEffect.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { useEffect, useLayoutEffect } from 'react';
-import { isBrowser } from './misc/util';
-
-const useIsomorphicLayoutEffect = isBrowser ? useLayoutEffect : useEffect;
-
-export default useIsomorphicLayoutEffect;
diff --git a/src/useKey.ts b/src/useKey.ts
deleted file mode 100644
index 03f403bf24..0000000000
--- a/src/useKey.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { DependencyList, useMemo } from 'react';
-import useEvent, { UseEventOptions, UseEventTarget } from './useEvent';
-import { noop } from './misc/util';
-
-export type KeyPredicate = (event: KeyboardEvent) => boolean;
-export type KeyFilter = null | undefined | string | ((event: KeyboardEvent) => boolean);
-export type Handler = (event: KeyboardEvent) => void;
-
-export interface UseKeyOptions {
- event?: 'keydown' | 'keypress' | 'keyup';
- target?: T | null;
- options?: UseEventOptions;
-}
-
-const createKeyPredicate = (keyFilter: KeyFilter): KeyPredicate =>
- typeof keyFilter === 'function'
- ? keyFilter
- : typeof keyFilter === 'string'
- ? (event: KeyboardEvent) => event.key === keyFilter
- : keyFilter
- ? () => true
- : () => false;
-
-const useKey = (
- key: KeyFilter,
- fn: Handler = noop,
- opts: UseKeyOptions = {},
- deps: DependencyList = [key]
-) => {
- const { event = 'keydown', target, options } = opts;
- const useMemoHandler = useMemo(() => {
- const predicate: KeyPredicate = createKeyPredicate(key);
- const handler: Handler = (handlerEvent) => {
- if (predicate(handlerEvent)) {
- return fn(handlerEvent);
- }
- };
- return handler;
- }, deps);
- useEvent(event, useMemoHandler, target, options);
-};
-
-export default useKey;
diff --git a/src/useKeyPress.ts b/src/useKeyPress.ts
deleted file mode 100644
index 2f48e0fb31..0000000000
--- a/src/useKeyPress.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { useState } from 'react';
-import useKey, { KeyFilter } from './useKey';
-
-const useKeyPress = (keyFilter: KeyFilter) => {
- const [state, set] = useState<[boolean, null | KeyboardEvent]>([false, null]);
- useKey(keyFilter, (event) => set([true, event]), { event: 'keydown' }, [state]);
- useKey(keyFilter, (event) => set([false, event]), { event: 'keyup' }, [state]);
- return state;
-};
-
-export default useKeyPress;
diff --git a/src/useKeyPressEvent.ts b/src/useKeyPressEvent.ts
deleted file mode 100644
index 9b694b6077..0000000000
--- a/src/useKeyPressEvent.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-import { Handler, KeyFilter } from './useKey';
-import useKeyPressDefault from './useKeyPress';
-import useUpdateEffect from './useUpdateEffect';
-
-const useKeyPressEvent = (
- key: string | KeyFilter,
- keydown?: Handler | null | undefined,
- keyup?: Handler | null | undefined,
- useKeyPress = useKeyPressDefault
-) => {
- const [pressed, event] = useKeyPress(key);
- useUpdateEffect(() => {
- if (!pressed && keyup) {
- keyup(event!);
- } else if (pressed && keydown) {
- keydown(event!);
- }
- }, [pressed]);
-};
-
-export default useKeyPressEvent;
diff --git a/src/useKeyboardJs.ts b/src/useKeyboardJs.ts
deleted file mode 100644
index bdf13564e0..0000000000
--- a/src/useKeyboardJs.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-import { useEffect, useState } from 'react';
-import useMount from './useMount';
-
-const useKeyboardJs = (combination: string | string[]) => {
- const [state, set] = useState<[boolean, null | KeyboardEvent]>([false, null]);
- const [keyboardJs, setKeyboardJs] = useState(null);
-
- useMount(() => {
- import('keyboardjs').then((k) => setKeyboardJs(k.default || k));
- });
-
- useEffect(() => {
- if (!keyboardJs) {
- return;
- }
-
- const down = (event) => set([true, event]);
- const up = (event) => set([false, event]);
- keyboardJs.bind(combination, down, up, true);
-
- return () => {
- keyboardJs.unbind(combination, down, up);
- };
- }, [combination, keyboardJs]);
-
- return state;
-};
-
-export default useKeyboardJs;
diff --git a/src/useLatest.ts b/src/useLatest.ts
deleted file mode 100644
index cd4230d25c..0000000000
--- a/src/useLatest.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { useRef } from 'react';
-
-const useLatest = (value: T): { readonly current: T } => {
- const ref = useRef(value);
- ref.current = value;
- return ref;
-};
-
-export default useLatest;
diff --git a/src/useLifecycles.ts b/src/useLifecycles.ts
deleted file mode 100644
index 45a994298a..0000000000
--- a/src/useLifecycles.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useEffect } from 'react';
-
-const useLifecycles = (mount, unmount?) => {
- useEffect(() => {
- if (mount) {
- mount();
- }
- return () => {
- if (unmount) {
- unmount();
- }
- };
- }, []);
-};
-
-export default useLifecycles;
diff --git a/src/useList.ts b/src/useList.ts
deleted file mode 100644
index dd592df30d..0000000000
--- a/src/useList.ts
+++ /dev/null
@@ -1,157 +0,0 @@
-import { useMemo, useRef } from 'react';
-import useUpdate from './useUpdate';
-import { IHookStateInitAction, IHookStateSetAction, resolveHookState } from './misc/hookState';
-
-export interface ListActions {
- /**
- * @description Set new list instead old one
- */
- set: (newList: IHookStateSetAction) => void;
- /**
- * @description Add item(s) at the end of list
- */
- push: (...items: T[]) => void;
-
- /**
- * @description Replace item at given position. If item at given position not exists it will be set.
- */
- updateAt: (index: number, item: T) => void;
- /**
- * @description Insert item at given position, all items to the right will be shifted.
- */
- insertAt: (index: number, item: T) => void;
-
- /**
- * @description Replace all items that matches predicate with given one.
- */
- update: (predicate: (a: T, b: T) => boolean, newItem: T) => void;
- /**
- * @description Replace first item matching predicate with given one.
- */
- updateFirst: (predicate: (a: T, b: T) => boolean, newItem: T) => void;
- /**
- * @description Like `updateFirst` bit in case of predicate miss - pushes item to the list
- */
- upsert: (predicate: (a: T, b: T) => boolean, newItem: T) => void;
-
- /**
- * @description Sort list with given sorting function
- */
- sort: (compareFn?: (a: T, b: T) => number) => void;
- /**
- * @description Same as native Array's method
- */
- filter: (callbackFn: (value: T, index?: number, array?: T[]) => boolean, thisArg?: any) => void;
-
- /**
- * @description Removes item at given position. All items to the right from removed will be shifted.
- */
- removeAt: (index: number) => void;
- /**
- * @deprecated Use removeAt method instead
- */
- remove: (index: number) => void;
-
- /**
- * @description Make the list empty
- */
- clear: () => void;
- /**
- * @description Reset list to initial value
- */
- reset: () => void;
-}
-
-function useList(initialList: IHookStateInitAction = []): [T[], ListActions] {
- const list = useRef(resolveHookState(initialList));
- const update = useUpdate();
-
- const actions = useMemo>(() => {
- const a = {
- set: (newList: IHookStateSetAction) => {
- list.current = resolveHookState(newList, list.current);
- update();
- },
-
- push: (...items: T[]) => {
- items.length && actions.set((curr: T[]) => curr.concat(items));
- },
-
- updateAt: (index: number, item: T) => {
- actions.set((curr: T[]) => {
- const arr = curr.slice();
-
- arr[index] = item;
-
- return arr;
- });
- },
-
- insertAt: (index: number, item: T) => {
- actions.set((curr: T[]) => {
- const arr = curr.slice();
-
- index > arr.length ? (arr[index] = item) : arr.splice(index, 0, item);
-
- return arr;
- });
- },
-
- update: (predicate: (a: T, b: T) => boolean, newItem: T) => {
- actions.set((curr: T[]) => curr.map((item) => (predicate(item, newItem) ? newItem : item)));
- },
-
- updateFirst: (predicate: (a: T, b: T) => boolean, newItem: T) => {
- const index = list.current.findIndex((item) => predicate(item, newItem));
-
- index >= 0 && actions.updateAt(index, newItem);
- },
-
- upsert: (predicate: (a: T, b: T) => boolean, newItem: T) => {
- const index = list.current.findIndex((item) => predicate(item, newItem));
-
- index >= 0 ? actions.updateAt(index, newItem) : actions.push(newItem);
- },
-
- sort: (compareFn?: (a: T, b: T) => number) => {
- actions.set((curr: T[]) => curr.slice().sort(compareFn));
- },
-
- filter: (
- callbackFn: (value: T, index: number, array: T[]) => value is S,
- thisArg?: any
- ) => {
- actions.set((curr: T[]) => curr.slice().filter(callbackFn, thisArg));
- },
-
- removeAt: (index: number) => {
- actions.set((curr: T[]) => {
- const arr = curr.slice();
-
- arr.splice(index, 1);
-
- return arr;
- });
- },
-
- clear: () => {
- actions.set([]);
- },
-
- reset: () => {
- actions.set(resolveHookState(initialList).slice());
- },
- };
-
- /**
- * @deprecated Use removeAt method instead
- */
- (a as ListActions).remove = a.removeAt;
-
- return a as ListActions;
- }, []);
-
- return [list.current, actions];
-}
-
-export default useList;
diff --git a/src/useLocalStorage.ts b/src/useLocalStorage.ts
deleted file mode 100644
index def6ad804a..0000000000
--- a/src/useLocalStorage.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-import { Dispatch, SetStateAction, useCallback, useState, useRef, useLayoutEffect } from 'react';
-import { isBrowser, noop } from './misc/util';
-
-type parserOptions =
- | {
- raw: true;
- }
- | {
- raw: false;
- serializer: (value: T) => string;
- deserializer: (value: string) => T;
- };
-
-const useLocalStorage = (
- key: string,
- initialValue?: T,
- options?: parserOptions
-): [T | undefined, Dispatch>, () => void] => {
- if (!isBrowser) {
- return [initialValue as T, noop, noop];
- }
- if (!key) {
- throw new Error('useLocalStorage key may not be falsy');
- }
-
- const deserializer = options
- ? options.raw
- ? (value) => value
- : options.deserializer
- : JSON.parse;
-
- // eslint-disable-next-line react-hooks/rules-of-hooks
- const initializer = useRef((key: string) => {
- try {
- const serializer = options ? (options.raw ? String : options.serializer) : JSON.stringify;
-
- const localStorageValue = localStorage.getItem(key);
- if (localStorageValue !== null) {
- return deserializer(localStorageValue);
- } else {
- initialValue && localStorage.setItem(key, serializer(initialValue));
- return initialValue;
- }
- } catch {
- // If user is in private mode or has storage restriction
- // localStorage can throw. JSON.parse and JSON.stringify
- // can throw, too.
- return initialValue;
- }
- });
-
- // eslint-disable-next-line react-hooks/rules-of-hooks
- const [state, setState] = useState(() => initializer.current(key));
-
- // eslint-disable-next-line react-hooks/rules-of-hooks
- useLayoutEffect(() => setState(initializer.current(key)), [key]);
-
- // eslint-disable-next-line react-hooks/rules-of-hooks
- const set: Dispatch> = useCallback(
- (valOrFunc) => {
- try {
- const newState =
- typeof valOrFunc === 'function' ? (valOrFunc as Function)(state) : valOrFunc;
- if (typeof newState === 'undefined') return;
- let value: string;
-
- if (options)
- if (options.raw)
- if (typeof newState === 'string') value = newState;
- else value = JSON.stringify(newState);
- else if (options.serializer) value = options.serializer(newState);
- else value = JSON.stringify(newState);
- else value = JSON.stringify(newState);
-
- localStorage.setItem(key, value);
- setState(deserializer(value));
- } catch {
- // If user is in private mode or has storage restriction
- // localStorage can throw. Also JSON.stringify can throw.
- }
- },
- [key, setState]
- );
-
- // eslint-disable-next-line react-hooks/rules-of-hooks
- const remove = useCallback(() => {
- try {
- localStorage.removeItem(key);
- setState(undefined);
- } catch {
- // If user is in private mode or has storage restriction
- // localStorage can throw.
- }
- }, [key, setState]);
-
- return [state, set, remove];
-};
-
-export default useLocalStorage;
diff --git a/src/useLocation.ts b/src/useLocation.ts
deleted file mode 100644
index bffdca20b0..0000000000
--- a/src/useLocation.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-import { useEffect, useState } from 'react';
-import { isBrowser, off, on } from './misc/util';
-
-const patchHistoryMethod = (method) => {
- const history = window.history;
- const original = history[method];
-
- history[method] = function (state) {
- const result = original.apply(this, arguments);
- const event = new Event(method.toLowerCase());
-
- (event as any).state = state;
-
- window.dispatchEvent(event);
-
- return result;
- };
-};
-
-if (isBrowser) {
- patchHistoryMethod('pushState');
- patchHistoryMethod('replaceState');
-}
-
-export interface LocationSensorState {
- trigger: string;
- state?: any;
- length?: number;
- hash?: string;
- host?: string;
- hostname?: string;
- href?: string;
- origin?: string;
- pathname?: string;
- port?: string;
- protocol?: string;
- search?: string;
-}
-
-const useLocationServer = (): LocationSensorState => ({
- trigger: 'load',
- length: 1,
-});
-
-const buildState = (trigger: string) => {
- const { state, length } = window.history;
-
- const { hash, host, hostname, href, origin, pathname, port, protocol, search } = window.location;
-
- return {
- trigger,
- state,
- length,
- hash,
- host,
- hostname,
- href,
- origin,
- pathname,
- port,
- protocol,
- search,
- };
-};
-
-const useLocationBrowser = (): LocationSensorState => {
- const [state, setState] = useState(buildState('load'));
-
- useEffect(() => {
- const onPopstate = () => setState(buildState('popstate'));
- const onPushstate = () => setState(buildState('pushstate'));
- const onReplacestate = () => setState(buildState('replacestate'));
-
- on(window, 'popstate', onPopstate);
- on(window, 'pushstate', onPushstate);
- on(window, 'replacestate', onReplacestate);
-
- return () => {
- off(window, 'popstate', onPopstate);
- off(window, 'pushstate', onPushstate);
- off(window, 'replacestate', onReplacestate);
- };
- }, []);
-
- return state;
-};
-
-const hasEventConstructor = typeof Event === 'function';
-
-export default isBrowser && hasEventConstructor ? useLocationBrowser : useLocationServer;
diff --git a/src/useLockBodyScroll.ts b/src/useLockBodyScroll.ts
deleted file mode 100644
index fd48658917..0000000000
--- a/src/useLockBodyScroll.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-import { RefObject, useEffect, useRef } from 'react';
-import { isBrowser, off, on } from './misc/util';
-
-export function getClosestBody(
- el: Element | HTMLElement | HTMLIFrameElement | null
-): HTMLElement | null {
- if (!el) {
- return null;
- } else if (el.tagName === 'BODY') {
- return el as HTMLElement;
- } else if (el.tagName === 'IFRAME') {
- const document = (el as HTMLIFrameElement).contentDocument;
- return document ? document.body : null;
- } else if (!(el as HTMLElement).offsetParent) {
- return null;
- }
-
- return getClosestBody((el as HTMLElement).offsetParent!);
-}
-
-function preventDefault(rawEvent: TouchEvent): boolean {
- const e = rawEvent || window.event;
- // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).
- if (e.touches.length > 1) return true;
-
- if (e.preventDefault) e.preventDefault();
-
- return false;
-}
-
-export interface BodyInfoItem {
- counter: number;
- initialOverflow: CSSStyleDeclaration['overflow'];
-}
-
-const isIosDevice =
- isBrowser &&
- window.navigator &&
- window.navigator.platform &&
- /iP(ad|hone|od)/.test(window.navigator.platform);
-
-const bodies: Map = new Map();
-
-const doc: Document | undefined = typeof document === 'object' ? document : undefined;
-
-let documentListenerAdded = false;
-
-export default !doc
- ? function useLockBodyMock(_locked: boolean = true, _elementRef?: RefObject) {}
- : function useLockBody(locked: boolean = true, elementRef?: RefObject) {
- const bodyRef = useRef(doc!.body);
- elementRef = elementRef || bodyRef;
-
- const lock = (body) => {
- const bodyInfo = bodies.get(body);
- if (!bodyInfo) {
- bodies.set(body, { counter: 1, initialOverflow: body.style.overflow });
- if (isIosDevice) {
- if (!documentListenerAdded) {
- on(document, 'touchmove', preventDefault, { passive: false });
-
- documentListenerAdded = true;
- }
- } else {
- body.style.overflow = 'hidden';
- }
- } else {
- bodies.set(body, {
- counter: bodyInfo.counter + 1,
- initialOverflow: bodyInfo.initialOverflow,
- });
- }
- };
-
- const unlock = (body) => {
- const bodyInfo = bodies.get(body);
- if (bodyInfo) {
- if (bodyInfo.counter === 1) {
- bodies.delete(body);
- if (isIosDevice) {
- body.ontouchmove = null;
-
- if (documentListenerAdded) {
- off(document, 'touchmove', preventDefault);
- documentListenerAdded = false;
- }
- } else {
- body.style.overflow = bodyInfo.initialOverflow;
- }
- } else {
- bodies.set(body, {
- counter: bodyInfo.counter - 1,
- initialOverflow: bodyInfo.initialOverflow,
- });
- }
- }
- };
-
- useEffect(() => {
- const body = getClosestBody(elementRef!.current);
- if (!body) {
- return;
- }
- if (locked) {
- lock(body);
- } else {
- unlock(body);
- }
- }, [locked, elementRef.current]);
-
- // clean up, on un-mount
- useEffect(() => {
- const body = getClosestBody(elementRef!.current);
- if (!body) {
- return;
- }
- return () => {
- unlock(body);
- };
- }, []);
- };
diff --git a/src/useLogger.ts b/src/useLogger.ts
deleted file mode 100644
index 6ae5a8c5f8..0000000000
--- a/src/useLogger.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import useEffectOnce from './useEffectOnce';
-import useUpdateEffect from './useUpdateEffect';
-
-const useLogger = (componentName: string, ...rest) => {
- useEffectOnce(() => {
- console.log(`${componentName} mounted`, ...rest);
- return () => console.log(`${componentName} unmounted`);
- });
-
- useUpdateEffect(() => {
- console.log(`${componentName} updated`, ...rest);
- });
-};
-
-export default useLogger;
diff --git a/src/useLongPress.ts b/src/useLongPress.ts
deleted file mode 100644
index a885e091f5..0000000000
--- a/src/useLongPress.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-import { useCallback, useRef } from 'react';
-import { off, on } from './misc/util';
-
-interface Options {
- isPreventDefault?: boolean;
- delay?: number;
-}
-
-const isTouchEvent = (ev: Event): ev is TouchEvent => {
- return 'touches' in ev;
-};
-
-const preventDefault = (ev: Event) => {
- if (!isTouchEvent(ev)) return;
-
- if (ev.touches.length < 2 && ev.preventDefault) {
- ev.preventDefault();
- }
-};
-
-const useLongPress = (
- callback: (e: TouchEvent | MouseEvent) => void,
- { isPreventDefault = true, delay = 300 }: Options = {}
-) => {
- const timeout = useRef>();
- const target = useRef();
-
- const start = useCallback(
- (event: TouchEvent | MouseEvent) => {
- // prevent ghost click on mobile devices
- if (isPreventDefault && event.target) {
- on(event.target, 'touchend', preventDefault, { passive: false });
- target.current = event.target;
- }
- timeout.current = setTimeout(() => callback(event), delay);
- },
- [callback, delay, isPreventDefault]
- );
-
- const clear = useCallback(() => {
- // clearTimeout and removeEventListener
- timeout.current && clearTimeout(timeout.current);
-
- if (isPreventDefault && target.current) {
- off(target.current, 'touchend', preventDefault);
- }
- }, [isPreventDefault]);
-
- return {
- onMouseDown: (e: any) => start(e),
- onTouchStart: (e: any) => start(e),
- onMouseUp: clear,
- onMouseLeave: clear,
- onTouchEnd: clear,
- } as const;
-};
-
-export default useLongPress;
diff --git a/src/useMap.ts b/src/useMap.ts
deleted file mode 100644
index ded74ed239..0000000000
--- a/src/useMap.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { useCallback, useMemo, useState } from 'react';
-
-export interface StableActions {
- set: (key: K, value: T[K]) => void;
- setAll: (newMap: T) => void;
- remove: (key: K) => void;
- reset: () => void;
-}
-
-export interface Actions extends StableActions {
- get: (key: K) => T[K];
-}
-
-const useMap = (initialMap: T = {} as T): [T, Actions] => {
- const [map, set] = useState(initialMap);
-
- const stableActions = useMemo>(
- () => ({
- set: (key, entry) => {
- set((prevMap) => ({
- ...prevMap,
- [key]: entry,
- }));
- },
- setAll: (newMap: T) => {
- set(newMap);
- },
- remove: (key) => {
- set((prevMap) => {
- const { [key]: omit, ...rest } = prevMap;
- return rest as T;
- });
- },
- reset: () => set(initialMap),
- }),
- [set]
- );
-
- const utils = {
- get: useCallback((key) => map[key], [map]),
- ...stableActions,
- } as Actions;
-
- return [map, utils];
-};
-
-export default useMap;
diff --git a/src/useMeasure.ts b/src/useMeasure.ts
deleted file mode 100644
index e14f217f1c..0000000000
--- a/src/useMeasure.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { useMemo, useState } from 'react';
-import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';
-import { isBrowser, noop } from './misc/util';
-
-export type UseMeasureRect = Pick<
- DOMRectReadOnly,
- 'x' | 'y' | 'top' | 'left' | 'right' | 'bottom' | 'height' | 'width'
->;
-export type UseMeasureRef = (element: E) => void;
-export type UseMeasureResult = [UseMeasureRef, UseMeasureRect];
-
-const defaultState: UseMeasureRect = {
- x: 0,
- y: 0,
- width: 0,
- height: 0,
- top: 0,
- left: 0,
- bottom: 0,
- right: 0,
-};
-
-function useMeasure(): UseMeasureResult {
- const [element, ref] = useState(null);
- const [rect, setRect] = useState(defaultState);
-
- const observer = useMemo(
- () =>
- new (window as any).ResizeObserver((entries) => {
- if (entries[0]) {
- const { x, y, width, height, top, left, bottom, right } = entries[0].contentRect;
- setRect({ x, y, width, height, top, left, bottom, right });
- }
- }),
- []
- );
-
- useIsomorphicLayoutEffect(() => {
- if (!element) return;
- observer.observe(element);
- return () => {
- observer.disconnect();
- };
- }, [element]);
-
- return [ref, rect];
-}
-
-export default isBrowser && typeof (window as any).ResizeObserver !== 'undefined'
- ? useMeasure
- : ((() => [noop, defaultState]) as typeof useMeasure);
diff --git a/src/useMeasureDirty.ts b/src/useMeasureDirty.ts
deleted file mode 100644
index 4d5ca794ec..0000000000
--- a/src/useMeasureDirty.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { RefObject, useEffect, useRef, useState } from 'react';
-import ResizeObserver from 'resize-observer-polyfill';
-
-export interface ContentRect {
- width: number;
- height: number;
- top: number;
- right: number;
- left: number;
- bottom: number;
-}
-
-const useMeasureDirty = (ref: RefObject): ContentRect => {
- const frame = useRef(0);
- const [rect, set] = useState({
- width: 0,
- height: 0,
- top: 0,
- left: 0,
- bottom: 0,
- right: 0,
- });
-
- const [observer] = useState(
- () =>
- new ResizeObserver((entries) => {
- const entry = entries[0];
-
- if (entry) {
- cancelAnimationFrame(frame.current);
-
- frame.current = requestAnimationFrame(() => {
- if (ref.current) {
- set(entry.contentRect);
- }
- });
- }
- })
- );
-
- useEffect(() => {
- observer.disconnect();
-
- if (ref.current) {
- observer.observe(ref.current);
- }
- }, [ref]);
-
- return rect;
-};
-
-export default useMeasureDirty;
diff --git a/src/useMedia.ts b/src/useMedia.ts
deleted file mode 100644
index c0f3d96281..0000000000
--- a/src/useMedia.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { useEffect, useState } from 'react';
-import { isBrowser } from './misc/util';
-
-const getInitialState = (query: string, defaultState?: boolean) => {
- // Prevent a React hydration mismatch when a default value is provided by not defaulting to window.matchMedia(query).matches.
- if (defaultState !== undefined) {
- return defaultState;
- }
-
- if (isBrowser) {
- return window.matchMedia(query).matches;
- }
-
- // A default value has not been provided, and you are rendering on the server, warn of a possible hydration mismatch when defaulting to false.
- if (process.env.NODE_ENV !== 'production') {
- console.warn(
- '`useMedia` When server side rendering, defaultState should be defined to prevent a hydration mismatches.'
- );
- }
-
- return false;
-};
-
-const useMedia = (query: string, defaultState?: boolean) => {
- const [state, setState] = useState(getInitialState(query, defaultState));
-
- useEffect(() => {
- let mounted = true;
- const mql = window.matchMedia(query);
- const onChange = () => {
- if (!mounted) {
- return;
- }
- setState(!!mql.matches);
- };
-
- mql.addEventListener('change', onChange);
- setState(mql.matches);
-
- return () => {
- mounted = false;
- mql.removeEventListener('change', onChange);
- };
- }, [query]);
-
- return state;
-};
-
-export default useMedia;
diff --git a/src/useMediaDevices.ts b/src/useMediaDevices.ts
deleted file mode 100644
index 50dc53b297..0000000000
--- a/src/useMediaDevices.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import { useEffect, useState } from 'react';
-import { isNavigator, noop, off, on } from './misc/util';
-
-const useMediaDevices = () => {
- const [state, setState] = useState({});
-
- useEffect(() => {
- let mounted = true;
-
- const onChange = () => {
- navigator.mediaDevices
- .enumerateDevices()
- .then((devices) => {
- if (mounted) {
- setState({
- devices: devices.map(({ deviceId, groupId, kind, label }) => ({
- deviceId,
- groupId,
- kind,
- label,
- })),
- });
- }
- })
- .catch(noop);
- };
-
- on(navigator.mediaDevices, 'devicechange', onChange);
- onChange();
-
- return () => {
- mounted = false;
- off(navigator.mediaDevices, 'devicechange', onChange);
- };
- }, []);
-
- return state;
-};
-
-const useMediaDevicesMock = () => ({});
-
-export default isNavigator && !!navigator.mediaDevices ? useMediaDevices : useMediaDevicesMock;
diff --git a/src/useMediatedState.ts b/src/useMediatedState.ts
deleted file mode 100644
index 6dbb7a4cb1..0000000000
--- a/src/useMediatedState.ts
+++ /dev/null
@@ -1,38 +0,0 @@
-import { Dispatch, SetStateAction, useCallback, useRef, useState } from 'react';
-
-export interface StateMediator {
- (newState: any): S;
-
- (newState: any, dispatch: Dispatch>): void;
-}
-
-export type UseMediatedStateReturn = [S, Dispatch>];
-
-export function useMediatedState(
- mediator: StateMediator
-): UseMediatedStateReturn;
-export function useMediatedState(
- mediator: StateMediator,
- initialState: S
-): UseMediatedStateReturn;
-
-export function useMediatedState(
- mediator: StateMediator,
- initialState?: S
-): UseMediatedStateReturn {
- const mediatorFn = useRef(mediator);
-
- const [state, setMediatedState] = useState(initialState!);
- const setState = useCallback(
- (newState: any) => {
- if (mediatorFn.current.length === 2) {
- mediatorFn.current(newState, setMediatedState);
- } else {
- setMediatedState(mediatorFn.current(newState));
- }
- },
- [state]
- );
-
- return [state, setState];
-}
diff --git a/src/useMethods.ts b/src/useMethods.ts
deleted file mode 100644
index db3cacb618..0000000000
--- a/src/useMethods.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { Reducer, useMemo, useReducer } from 'react';
-
-type Action = {
- type: string;
- payload?: any;
-};
-
-type CreateMethods = (state: T) => {
- [P in keyof M]: (payload?: any) => T;
-};
-
-type WrappedMethods = {
- [P in keyof M]: (...payload: any) => void;
-};
-
-const useMethods = (
- createMethods: CreateMethods,
- initialState: T
-): [T, WrappedMethods] => {
- const reducer = useMemo>(
- () => (reducerState: T, action: Action) => {
- return createMethods(reducerState)[action.type](...action.payload);
- },
- [createMethods]
- );
-
- const [state, dispatch] = useReducer>(reducer, initialState);
-
- const wrappedMethods: WrappedMethods = useMemo(() => {
- const actionTypes = Object.keys(createMethods(initialState));
-
- return actionTypes.reduce((acc, type) => {
- acc[type] = (...payload) => dispatch({ type, payload });
- return acc;
- }, {} as WrappedMethods);
- }, [createMethods, initialState]);
-
- return [state, wrappedMethods];
-};
-
-export default useMethods;
diff --git a/src/useMotion.ts b/src/useMotion.ts
deleted file mode 100644
index cb3d867c44..0000000000
--- a/src/useMotion.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import { useEffect, useState } from 'react';
-import { off, on } from './misc/util';
-
-export interface MotionSensorState {
- acceleration: {
- x: number | null;
- y: number | null;
- z: number | null;
- };
- accelerationIncludingGravity: {
- x: number | null;
- y: number | null;
- z: number | null;
- };
- rotationRate: {
- alpha: number | null;
- beta: number | null;
- gamma: number | null;
- };
- interval: number | null;
-}
-
-const defaultState: MotionSensorState = {
- acceleration: {
- x: null,
- y: null,
- z: null,
- },
- accelerationIncludingGravity: {
- x: null,
- y: null,
- z: null,
- },
- rotationRate: {
- alpha: null,
- beta: null,
- gamma: null,
- },
- interval: 16,
-};
-
-const useMotion = (initialState: MotionSensorState = defaultState) => {
- const [state, setState] = useState(initialState);
-
- useEffect(() => {
- const handler = (event) => {
- const { acceleration, accelerationIncludingGravity, rotationRate, interval } = event;
-
- setState({
- acceleration: {
- x: acceleration.x,
- y: acceleration.y,
- z: acceleration.z,
- },
- accelerationIncludingGravity: {
- x: accelerationIncludingGravity.x,
- y: accelerationIncludingGravity.y,
- z: accelerationIncludingGravity.z,
- },
- rotationRate: {
- alpha: rotationRate.alpha,
- beta: rotationRate.beta,
- gamma: rotationRate.gamma,
- },
- interval,
- });
- };
-
- on(window, 'devicemotion', handler);
-
- return () => {
- off(window, 'devicemotion', handler);
- };
- }, []);
-
- return state;
-};
-
-export default useMotion;
diff --git a/src/useMount.ts b/src/useMount.ts
deleted file mode 100644
index 90d09011cf..0000000000
--- a/src/useMount.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import useEffectOnce from './useEffectOnce';
-
-const useMount = (fn: () => void) => {
- useEffectOnce(() => {
- fn();
- });
-};
-
-export default useMount;
diff --git a/src/useMountedState.ts b/src/useMountedState.ts
deleted file mode 100644
index 3bdabe8685..0000000000
--- a/src/useMountedState.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { useCallback, useEffect, useRef } from 'react';
-
-export default function useMountedState(): () => boolean {
- const mountedRef = useRef(false);
- const get = useCallback(() => mountedRef.current, []);
-
- useEffect(() => {
- mountedRef.current = true;
-
- return () => {
- mountedRef.current = false;
- };
- }, []);
-
- return get;
-}
diff --git a/src/useMouse.ts b/src/useMouse.ts
deleted file mode 100644
index cbebbba4ef..0000000000
--- a/src/useMouse.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import { RefObject, useEffect } from 'react';
-
-import useRafState from './useRafState';
-import { off, on } from './misc/util';
-
-export interface State {
- docX: number;
- docY: number;
- posX: number;
- posY: number;
- elX: number;
- elY: number;
- elH: number;
- elW: number;
-}
-
-const useMouse = (ref: RefObject): State => {
- if (process.env.NODE_ENV === 'development') {
- if (typeof ref !== 'object' || typeof ref.current === 'undefined') {
- console.error('useMouse expects a single ref argument.');
- }
- }
-
- const [state, setState] = useRafState({
- docX: 0,
- docY: 0,
- posX: 0,
- posY: 0,
- elX: 0,
- elY: 0,
- elH: 0,
- elW: 0,
- });
-
- useEffect(() => {
- const moveHandler = (event: MouseEvent) => {
- if (ref && ref.current) {
- const { left, top, width: elW, height: elH } = ref.current.getBoundingClientRect();
- const posX = left + window.pageXOffset;
- const posY = top + window.pageYOffset;
- const elX = event.pageX - posX;
- const elY = event.pageY - posY;
-
- setState({
- docX: event.pageX,
- docY: event.pageY,
- posX,
- posY,
- elX,
- elY,
- elH,
- elW,
- });
- }
- };
-
- on(document, 'mousemove', moveHandler);
-
- return () => {
- off(document, 'mousemove', moveHandler);
- };
- }, [ref]);
-
- return state;
-};
-
-export default useMouse;
diff --git a/src/useMouseHovered.ts b/src/useMouseHovered.ts
deleted file mode 100644
index de736afa85..0000000000
--- a/src/useMouseHovered.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { RefObject } from 'react';
-import useHoverDirty from './useHoverDirty';
-import useMouse, { State } from './useMouse';
-
-export interface UseMouseHoveredOptions {
- whenHovered?: boolean;
- bound?: boolean;
-}
-
-const nullRef = { current: null };
-
-const useMouseHovered = (ref: RefObject, options: UseMouseHoveredOptions = {}): State => {
- const whenHovered = !!options.whenHovered;
- const bound = !!options.bound;
-
- const isHovered = useHoverDirty(ref, whenHovered);
- const state = useMouse(whenHovered && !isHovered ? nullRef : ref);
-
- if (bound) {
- state.elX = Math.max(0, Math.min(state.elX, state.elW));
- state.elY = Math.max(0, Math.min(state.elY, state.elH));
- }
-
- return state;
-};
-
-export default useMouseHovered;
diff --git a/src/useMouseWheel.ts b/src/useMouseWheel.ts
deleted file mode 100644
index 31638f392f..0000000000
--- a/src/useMouseWheel.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { useEffect, useState } from 'react';
-import { off, on } from './misc/util';
-
-export default () => {
- const [mouseWheelScrolled, setMouseWheelScrolled] = useState(0);
- useEffect(() => {
- const updateScroll = (e: MouseWheelEvent) => {
- setMouseWheelScrolled(e.deltaY + mouseWheelScrolled);
- };
- on(window, 'wheel', updateScroll, false);
- return () => off(window, 'wheel', updateScroll);
- });
- return mouseWheelScrolled;
-};
diff --git a/src/useMultiStateValidator.ts b/src/useMultiStateValidator.ts
deleted file mode 100644
index 5b01768686..0000000000
--- a/src/useMultiStateValidator.ts
+++ /dev/null
@@ -1,41 +0,0 @@
-import { useCallback, useEffect, useRef, useState } from 'react';
-import { StateValidator, UseStateValidatorReturn, ValidityState } from './useStateValidator';
-
-export type MultiStateValidatorStates = any[] | { [p: string]: any } | { [p: number]: any };
-export type MultiStateValidator =
- StateValidator;
-
-export function useMultiStateValidator<
- V extends ValidityState,
- S extends MultiStateValidatorStates
->(
- states: S,
- validator: MultiStateValidator,
- initialValidity: V = [undefined] as V
-): UseStateValidatorReturn {
- if (typeof states !== 'object') {
- throw new Error('states expected to be an object or array, got ' + typeof states);
- }
-
- const validatorInner = useRef(validator);
- const statesInner = useRef(states);
-
- validatorInner.current = validator;
- statesInner.current = states;
-
- const [validity, setValidity] = useState(initialValidity as V);
-
- const validate = useCallback(() => {
- if (validatorInner.current.length >= 2) {
- validatorInner.current(statesInner.current, setValidity);
- } else {
- setValidity(validatorInner.current(statesInner.current));
- }
- }, [setValidity]);
-
- useEffect(() => {
- validate();
- }, Object.values(states));
-
- return [validity, validate];
-}
diff --git a/src/useNetworkState.ts b/src/useNetworkState.ts
deleted file mode 100644
index 0d48439d19..0000000000
--- a/src/useNetworkState.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-import { useEffect, useState } from 'react';
-import { isNavigator, off, on } from './misc/util';
-import { IHookStateInitAction } from './misc/hookState';
-
-export interface INetworkInformation extends EventTarget {
- readonly downlink: number;
- readonly downlinkMax: number;
- readonly effectiveType: 'slow-2g' | '2g' | '3g' | '4g';
- readonly rtt: number;
- readonly saveData: boolean;
- readonly type:
- | 'bluetooth'
- | 'cellular'
- | 'ethernet'
- | 'none'
- | 'wifi'
- | 'wimax'
- | 'other'
- | 'unknown';
-
- onChange: (event: Event) => void;
-}
-
-export interface IUseNetworkState {
- /**
- * @desc Whether browser connected to the network or not.
- */
- online: boolean | undefined;
- /**
- * @desc Previous value of `online` property. Helps to identify if browser
- * just connected or lost connection.
- */
- previous: boolean | undefined;
- /**
- * @desc The {Date} object pointing to the moment when state change occurred.
- */
- since: Date | undefined;
- /**
- * @desc Effective bandwidth estimate in megabits per second, rounded to the
- * nearest multiple of 25 kilobits per seconds.
- */
- downlink: INetworkInformation['downlink'] | undefined;
- /**
- * @desc Maximum downlink speed, in megabits per second (Mbps), for the
- * underlying connection technology
- */
- downlinkMax: INetworkInformation['downlinkMax'] | undefined;
- /**
- * @desc Effective type of the connection meaning one of 'slow-2g', '2g', '3g', or '4g'.
- * This value is determined using a combination of recently observed round-trip time
- * and downlink values.
- */
- effectiveType: INetworkInformation['effectiveType'] | undefined;
- /**
- * @desc Estimated effective round-trip time of the current connection, rounded
- * to the nearest multiple of 25 milliseconds
- */
- rtt: INetworkInformation['rtt'] | undefined;
- /**
- * @desc {true} if the user has set a reduced data usage option on the user agent.
- */
- saveData: INetworkInformation['saveData'] | undefined;
- /**
- * @desc The type of connection a device is using to communicate with the network.
- * It will be one of the following values:
- * - bluetooth
- * - cellular
- * - ethernet
- * - none
- * - wifi
- * - wimax
- * - other
- * - unknown
- */
- type: INetworkInformation['type'] | undefined;
-}
-
-const nav:
- | (Navigator &
- Partial>)
- | undefined = isNavigator ? navigator : undefined;
-const conn: INetworkInformation | undefined =
- nav && (nav.connection || nav.mozConnection || nav.webkitConnection);
-
-function getConnectionState(previousState?: IUseNetworkState): IUseNetworkState {
- const online = nav?.onLine;
- const previousOnline = previousState?.online;
-
- return {
- online,
- previous: previousOnline,
- since: online !== previousOnline ? new Date() : previousState?.since,
- downlink: conn?.downlink,
- downlinkMax: conn?.downlinkMax,
- effectiveType: conn?.effectiveType,
- rtt: conn?.rtt,
- saveData: conn?.saveData,
- type: conn?.type,
- };
-}
-
-export default function useNetworkState(
- initialState?: IHookStateInitAction
-): IUseNetworkState {
- const [state, setState] = useState(initialState ?? getConnectionState);
-
- useEffect(() => {
- const handleStateChange = () => {
- setState(getConnectionState);
- };
-
- on(window, 'online', handleStateChange, { passive: true });
- on(window, 'offline', handleStateChange, { passive: true });
-
- if (conn) {
- on(conn, 'change', handleStateChange, { passive: true });
- }
-
- return () => {
- off(window, 'online', handleStateChange);
- off(window, 'offline', handleStateChange);
-
- if (conn) {
- off(conn, 'change', handleStateChange);
- }
- };
- }, []);
-
- return state;
-}
diff --git a/src/useNumber.ts b/src/useNumber.ts
deleted file mode 100644
index 79393d5f83..0000000000
--- a/src/useNumber.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import useNumber from './useCounter';
-
-export default useNumber;
diff --git a/src/useObservable.ts b/src/useObservable.ts
deleted file mode 100644
index dfe64d67dc..0000000000
--- a/src/useObservable.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useState } from 'react';
-import useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect';
-
-export interface Observable {
- subscribe: (listener: (value: T) => void) => {
- unsubscribe: () => void;
- };
-}
-
-function useObservable(observable$: Observable): T | undefined;
-function useObservable(observable$: Observable, initialValue: T): T;
-function useObservable(observable$: Observable, initialValue?: T): T | undefined {
- const [value, update] = useState(initialValue);
-
- useIsomorphicLayoutEffect(() => {
- const s = observable$.subscribe(update);
- return () => s.unsubscribe();
- }, [observable$]);
-
- return value;
-}
-
-export default useObservable;
diff --git a/src/useOrientation.ts b/src/useOrientation.ts
deleted file mode 100644
index b5365af90f..0000000000
--- a/src/useOrientation.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { useEffect, useState } from 'react';
-import { off, on } from './misc/util';
-
-export interface OrientationState {
- angle: number;
- type: string;
-}
-
-const defaultState: OrientationState = {
- angle: 0,
- type: 'landscape-primary',
-};
-
-const useOrientation = (initialState: OrientationState = defaultState) => {
- const [state, setState] = useState(initialState);
-
- useEffect(() => {
- const screen = window.screen;
- let mounted = true;
-
- const onChange = () => {
- if (mounted) {
- const { orientation } = screen as any;
-
- if (orientation) {
- const { angle, type } = orientation;
- setState({ angle, type });
- } else if (window.orientation !== undefined) {
- setState({
- angle: typeof window.orientation === 'number' ? window.orientation : 0,
- type: '',
- });
- } else {
- setState(initialState);
- }
- }
- };
-
- on(window, 'orientationchange', onChange);
- onChange();
-
- return () => {
- mounted = false;
- off(window, 'orientationchange', onChange);
- };
- }, []);
-
- return state;
-};
-
-export default useOrientation;
diff --git a/src/usePageLeave.ts b/src/usePageLeave.ts
deleted file mode 100644
index 5a41e92ebc..0000000000
--- a/src/usePageLeave.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { useEffect } from 'react';
-import { off, on } from './misc/util';
-
-const usePageLeave = (onPageLeave, args = []) => {
- useEffect(() => {
- if (!onPageLeave) {
- return;
- }
-
- const handler = (event) => {
- event = event ? event : (window.event as any);
- const from = event.relatedTarget || event.toElement;
- if (!from || (from as any).nodeName === 'HTML') {
- onPageLeave();
- }
- };
-
- on(document, 'mouseout', handler);
- return () => {
- off(document, 'mouseout', handler);
- };
- }, args);
-};
-
-export default usePageLeave;
diff --git a/src/usePermission.ts b/src/usePermission.ts
deleted file mode 100644
index 0aae85f55c..0000000000
--- a/src/usePermission.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-import { useEffect, useState } from 'react';
-import { noop, off, on } from './misc/util';
-
-export type IState = PermissionState | '';
-
-interface IPushPermissionDescriptor extends PermissionDescriptor {
- name: 'push';
- userVisibleOnly?: boolean;
-}
-
-interface IMidiPermissionDescriptor extends PermissionDescriptor {
- name: 'midi';
- sysex?: boolean;
-}
-
-interface IDevicePermissionDescriptor extends PermissionDescriptor {
- name: 'camera' | 'microphone' | 'speaker';
- deviceId?: string;
-}
-
-export type IPermissionDescriptor =
- | PermissionDescriptor
- | IPushPermissionDescriptor
- | IMidiPermissionDescriptor
- | IDevicePermissionDescriptor;
-
-// const usePermission = (permissionDesc: T): IState => {
-const usePermission = (permissionDesc: IPermissionDescriptor): IState => {
- const [state, setState] = useState('');
-
- useEffect(() => {
- let mounted = true;
- let permissionStatus: PermissionStatus | null = null;
-
- const onChange = () => {
- if (!mounted) {
- return;
- }
- setState(() => permissionStatus?.state ?? '');
- };
-
- navigator.permissions
- .query(permissionDesc)
- .then((status) => {
- permissionStatus = status;
- on(permissionStatus, 'change', onChange);
- onChange();
- })
- .catch(noop);
-
- return () => {
- permissionStatus && off(permissionStatus, 'change', onChange);
- mounted = false;
- permissionStatus = null;
- };
- }, [permissionDesc]);
-
- return state;
-};
-
-export default usePermission;
diff --git a/src/usePinchZoom.ts b/src/usePinchZoom.ts
deleted file mode 100644
index 330c2052d5..0000000000
--- a/src/usePinchZoom.ts
+++ /dev/null
@@ -1,109 +0,0 @@
-import { RefObject, useEffect, useMemo, useState } from 'react';
-
-export type CacheRef = {
- prevDiff: number;
- evCache: Array;
-};
-
-export enum ZoomState {
- 'ZOOMING_IN' = 'ZOOMING_IN',
- 'ZOOMING_OUT' = 'ZOOMING_OUT',
-}
-
-export type ZoomStateType = ZoomState.ZOOMING_IN | ZoomState.ZOOMING_OUT;
-
-const usePinchZoom = (ref: RefObject