diff --git a/iframe.html b/iframe.html new file mode 100644 index 00000000..52da5886 --- /dev/null +++ b/iframe.html @@ -0,0 +1,61 @@ +
Sorry, but you either have no stories or none are selected somehow.
If the problem persists, check the browser console, or the terminal you've run Storybook from.
useToggle\nReact state hook that tracks value of a boolean.
\nuseBoolean is an alias for useToggle.
import {useToggle, useBoolean} 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'},,,,,,,,,,,,function(module,exports){module.exports='useDrop and useDropAreaTriggers on file, link drop and copy-paste.
\nuseDrop tracks events for the whole page, useDropArea tracks drop events\nfor a specific element.
useDrop:
import {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:
import {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'},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0);exports.default=function(_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"},"opened in a new tab"),".")}},function(module,exports){module.exports='useHover and useHoverDirtyReact UI sensor hooks that track if some element is being hovered\nby a mouse.
\nuseHover accepts a React element or a function that returns one,\nuseHoverDirty accepts React ref.useHover sets react onMouseEnter and onMouseLeave events,\nuseHoverDirty sets DOM onmouseover and onmouseout events.import {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};\nconst [newReactElement, isHovering] = useHover(reactElement);\nconst [newReactElement, isHovering] = useHover((isHovering) => reactElement);\nconst isHovering = useHoverDirty(ref);\n'},function(module,exports){module.exports='useMouse and useMouseHoveredReact sensor hooks that re-render on mouse position changes. useMouse simply tracks\nmouse position; useMouseHovered allows you to specify extra options:
bound — to bind mouse coordinates within the elementwhenHovered — whether to attach mousemove event handler only when user hovers over the elementimport {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={element}>\n <div>Mouse position in document - x:{docX} y:{docY}</div>\n <div>Mouse position in element - x:{posX} y:{posY}</div>\n <div>Element position - x:{elX} y:{elY}</div>\n <div>Element dimensions - {elW}x{elH}</div>\n </div>\n );\n};\nuseMouse(ref);\nuseMouseHovered(ref, {bound: false, whenHovered: false});\n'},function(module,exports){module.exports='useThrottle and useThrottleFnReact hooks that throttle.
\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};\nuseThrottle(value, ms?: number);\nuseThrottleFn(fn, ms, args);\n'},,,function(module,exports,__webpack_require__){__webpack_require__(208),__webpack_require__(287),module.exports=__webpack_require__(288)},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(module,__webpack_exports__,__webpack_require__){"use strict";__webpack_require__.r(__webpack_exports__),function(module){__webpack_require__(19),__webpack_require__(20),__webpack_require__(18),__webpack_require__(29);var _storybook_react__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(2),_storybook_addon_options__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(206);Object(_storybook_addon_options__WEBPACK_IMPORTED_MODULE_5__.setOptions)({sortStoriesByKind:!1,showStoriesPanel:!0,showAddonPanel:!0,showSearchBox:!1,addonPanelInRight:!0,hierarchySeparator:/\//,hierarchyRootSeparator:/\|/,sidebarAnimations:!1});var req=__webpack_require__(354);Object(_storybook_react__WEBPACK_IMPORTED_MODULE_4__.configure)(function(){req.keys().forEach(function(filename){return req(filename)})},module)}.call(this,__webpack_require__(289)(module))},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(module,exports,__webpack_require__){var map={"./__stories__/createMemo.story.tsx":355,"./__stories__/useAsync.story.tsx":427,"./__stories__/useAsyncFn.story.tsx":429,"./__stories__/useAsyncRetry.story.tsx":431,"./__stories__/useAudio.story.tsx":433,"./__stories__/useBattery.story.tsx":435,"./__stories__/useBeforeUnload.story.tsx":437,"./__stories__/useBoolean.story.tsx":439,"./__stories__/useClickAway.story.tsx":440,"./__stories__/useCopyToClipboard.story.tsx":442,"./__stories__/useCounter.story.tsx":444,"./__stories__/useCss.story.tsx":446,"./__stories__/useDebounce.story.tsx":448,"./__stories__/useDeepCompareEffect.story.tsx":450,"./__stories__/useDrop.story.tsx":452,"./__stories__/useDropArea.story.tsx":522,"./__stories__/useEffectOnce.story.tsx":523,"./__stories__/useEvent.story.tsx":525,"./__stories__/useFavicon.story.tsx":527,"./__stories__/useFullscreen.story.tsx":529,"./__stories__/useGeolocation.story.tsx":531,"./__stories__/useGetSet.story.tsx":533,"./__stories__/useGetSetState.story.tsx":535,"./__stories__/useHover.story.tsx":537,"./__stories__/useHoverDirty.story.tsx":538,"./__stories__/useIdle.story.tsx":539,"./__stories__/useKey.story.tsx":541,"./__stories__/useKeyPress.story.tsx":543,"./__stories__/useKeyPressEvent.story.tsx":545,"./__stories__/useKeyboardJs.story.tsx":547,"./__stories__/useLifecycles.story.tsx":555,"./__stories__/useList.story.tsx":557,"./__stories__/useLocalStorage.story.tsx":559,"./__stories__/useLocation.story.tsx":561,"./__stories__/useLockBodyScroll.story.tsx":563,"./__stories__/useLogger.story.tsx":565,"./__stories__/useMap.story.tsx":567,"./__stories__/useMedia.story.tsx":569,"./__stories__/useMediaDevices.story.tsx":571,"./__stories__/useMotion.story.tsx":573,"./__stories__/useMount.story.tsx":575,"./__stories__/useMouse.story.tsx":577,"./__stories__/useMouseHovered.story.tsx":578,"./__stories__/useNetwork.story.tsx":579,"./__stories__/useObservable.story.tsx":581,"./__stories__/useOrientation.story.tsx":583,"./__stories__/usePageLeave.story.tsx":585,"./__stories__/usePromise.story.tsx":587,"./__stories__/useRaf.story.tsx":589,"./__stories__/useRefMounted.story.tsx":591,"./__stories__/useScroll.story.tsx":593,"./__stories__/useSessionStorage.story.tsx":595,"./__stories__/useSetState.story.tsx":597,"./__stories__/useSize.story.tsx":599,"./__stories__/useSpeech.story.tsx":601,"./__stories__/useSpring.story.tsx":603,"./__stories__/useStartTyping.story.tsx":605,"./__stories__/useThrottle.story.tsx":607,"./__stories__/useThrottleFn.story.tsx":608,"./__stories__/useTimeout.story.tsx":609,"./__stories__/useTitle.story.tsx":611,"./__stories__/useToggle.story.tsx":613,"./__stories__/useTween.story.tsx":614,"./__stories__/useUnmount.story.tsx":616,"./__stories__/useUpdate.story.tsx":618,"./__stories__/useUpdateEffect.story.tsx":620,"./__stories__/useVideo.story.tsx":622,"./__stories__/useWait.story.tsx":624,"./__stories__/useWindowScroll.story.tsx":626,"./__stories__/useWindowSize.story.tsx":628,"./comps/__stories__/UseKey.story.tsx":630};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=354},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),fibonacci=function(n){return 0===n?0:1===n?1:fibonacci(n-1)+fibonacci(n-2)},useMemoFibonacci=__1.createMemo(fibonacci),Demo=function(){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__(426)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(0);exports.default=function(fn){return function(){for(var args=[],_i=0;_icreateMemoHook 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.
\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};\nconst useMemoFn = createMemo(fn);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),fn=function(){return new Promise(function(resolve){setTimeout(function(){resolve("RESOLVED")},1e3)})},Demo=function(){var _a=__1.useAsync(fn),loading=_a.loading,error=_a.error,value=_a.value;return React.createElement("div",null,loading?React.createElement("div",null,"Loading..."):error?React.createElement("div",null,"Error: ",error.message):React.createElement("div",null,"Value: ",value))};react_1.storiesOf("Side effects|useAsync",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(428)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useAsyncReact hook that resolves an async function or a function that returns\na promise;
import {useAsync} from 'react-use';\n\n// Returns a Promise that resolves after one second.\nconst fn = () => new Promise((resolve) => {\n setTimeout(() => {\n resolve('RESOLVED');\n }, 1000);\n});\n\nconst Demo = () => {\n const state = useAsync(fn);\n\n return (\n <div>\n {state.loading?\n <div>Loading...</div>\n : state.error?\n <div>Error...</div>\n : <div>Value: {state.value}</div>\n }\n </div>\n );\n};\nuseAsync(fn, args?: any[]);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),fn=function(){return new Promise(function(resolve,reject){setTimeout(function(){Math.random()>.5?reject(new Error("Random error!")):resolve("RESOLVED")},1e3)})},Demo=function(){var _a=__1.useAsyncFn(fn),_b=_a[0],loading=_b.loading,error=_b.error,value=_b.value,callback=_a[1];return React.createElement("div",null,loading?React.createElement("div",null,"Loading..."):error?React.createElement("div",null,"Error: ",error.message):value&&React.createElement("div",null,"Value: ",value),React.createElement("button",{onClick:function(){return callback()}},"Start"))};react_1.storiesOf("Side effects|useAsyncFn",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(430)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useAsyncFnReact 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.
import {useAsyncFn} from 'react-use';\n\nconst Demo = (url) => {\n const [state, fetch] = 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 : state.value && <div>Value: {state.value}</div>\n }\n <button onClick={() => fetch()}>Start loading</button>\n </div>\n );\n};\nuseAsyncFn(fn, deps?: any[]);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),fnRetry=function(){return new Promise(function(resolve,reject){setTimeout(function(){Math.random()>.5?reject(new Error("Random error!")):resolve("RESOLVED")},1e3)})},DemoRetry=function(){var _a=__1.useAsyncRetry(fnRetry),loading=_a.loading,value=_a.value,error=_a.error,retry=_a.retry;return React.createElement("div",null,loading?React.createElement("div",null,"Loading..."):error?React.createElement("div",null,"Error: ",error.message):React.createElement("div",null,"Value: ",value),React.createElement("button",{onClick:function(){return retry()}},"Retry"))};react_1.storiesOf("Side effects|useAsyncRetry",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(432)})}).add("Demo",function(){return React.createElement(DemoRetry,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useAsyncRetryUses useAsync with an additional retry method to easily retry/refresh the async function;
import {useAsyncRetry} from 'react-use';\n\n// Returns a Promise that resolves after one second.\nconst fn = () => new Promise((resolve, reject) => {\n setTimeout(() => {\n if (Math.random() > 0.5) {\n reject(new Error('Random error!'));\n } else {\n resolve('RESOLVED');\n }\n }, 1000);\n});\n\nconst Demo = () => {\n const state = useAsyncRetry(fn);\n\n return (\n <div>\n {state.loading?\n <div>Loading...</div>\n : state.error?\n <div>Error...</div>\n : <div>Value: {state.value}</div>\n }\n {!state.loading?\n <a href='javascript:void 0' onClick={() => state.retry()}>Retry</a>\n : null\n }\n </div>\n );\n};\nuseAsyncRetry(fn, args?: any[]);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__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(){return controls.volume(.1)}},"Volume: 10%"),React.createElement("button",{onClick:function(){return controls.volume(.5)}},"Volume: 50%"),React.createElement("button",{onClick:function(){return controls.volume(1)}},"Volume: 100%"),React.createElement("br",null),React.createElement("button",{onClick:function(){return controls.seek(state.time-5)}},"-5 sec"),React.createElement("button",{onClick:function(){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__(434)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useAudioCreates <audio> element, tracks its state and exposes playback controls.
import {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};\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:
<div>{audio}</div>\nstate tracks the state of the audio and has the following shape:
{\n "buffered": [\n {\n "start": 0,\n "end": 425.952625\n }\n ],\n "time": 5.244996,\n "duration": 425.952625,\n "isPlaying": false,\n "muted": false,\n "volume": 1\n}\ncontrols is a list collection of methods that allow you to control the\nplayback of the audio, it has the following interface:
interface 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.
And finally, props — all props that <audio> accepts.
useBatteryReact sensor hook that tracks battery status.
\nimport {useBattery} from 'react-use';\n\nconst Demo = () => {\n const state = useBattery();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useToggle(!1),dirty=_a[0],toggleDirty=_a[1];return __1.useBeforeUnload(dirty,"You have unsaved changes, are you sure?"),React.createElement("div",null,dirty&&React.createElement("p",null,"Try to reload or close tab"),React.createElement("button",{onClick:function(){return toggleDirty()}},dirty?"Disable":"Enable"))};react_1.storiesOf("Side effects|useBeforeUnload",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(438)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useBeforeUnloadReact side-effect hook that shows browser alert when user try to reload or close the page.
\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};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__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(){return toggle()}},"Toggle"),React.createElement("button",{onClick:function(){return toggle(!0)}},"set ON"),React.createElement("button",{onClick:function(){return toggle(!1)}},"set OFF"))};react_1.storiesOf("State|useBoolean",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(188)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),react_2=__webpack_require__(0),ShowDocs_1=__webpack_require__(4),Demo=function(){var ref=react_2.useRef(null);return __1.useClickAway(ref,function(){alert("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__(441)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useClickAwayReact UI hook that triggers a callback when user\nclicks outside the target element.
\nimport {useClickAway} from 'react-use';\n\nconst Demo = () => {\n const ref = useRef(null);\n useClickAway(ref, () => {\n alert('OUTSIDE CLICKED');\n });\n\n return (\n <div ref={ref} style={{\n width: 200,\n height: 200,\n background: 'red',\n }} />\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),ShowDocs_1=__webpack_require__(4),__1=__webpack_require__(3),Demo=function(){var _a=React.useState(""),text=_a[0],setText=_a[1],_b=__1.useCopyToClipboard(),state=_b[0],copyToClipboard=_b[1];return React.createElement("div",null,React.createElement("input",{value:text,onChange:function(e){return setText(e.target.value)}}),React.createElement("button",{type:"button",onClick:function(){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__(443)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useCopyToClipboardCopy text to a user's clipboard.
\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\n const [text, setText] = React.useState('');\n const [copied, copyToClipboard] = useCopyToClipboard(text);\n\n return (\n <div>\n <input value={text} onChange={e => setText(e.target.value)} />\n <button type="button" onClick={copyToClipboard}>copy text</button>\n <div>Copied: {copied ? 'Yes' : 'No'}</div>\n </div>\n )\n}\nconst [state, copyToClipboard] = useCopyToClipboard();\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useCounter(5),value=_a[0],_b=_a[1],inc=_b.inc,dec=_b.dec,get=_b.get,set=_b.set,reset=_b.reset;return React.createElement("div",null,React.createElement("div",null,value," is ",get()),React.createElement("button",{onClick:function(){return inc()}},"Increment"),React.createElement("button",{onClick:function(){return dec()}},"Decrement"),React.createElement("button",{onClick:function(){return inc(5)}},"Increment (+5)"),React.createElement("button",{onClick:function(){return dec(5)}},"Decrement (-5)"),React.createElement("button",{onClick:function(){return set(100)}},"Set 100"),React.createElement("button",{onClick:function(){return reset()}},"Reset"),React.createElement("button",{onClick:function(){return reset(25)}},"Reset (25)"))};react_1.storiesOf("State|useCounter",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(445)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useCounterReact state hook that tracks a numeric value.
\nuseNumber is an alias for useCounter.
import {useCounter, useNumber} from 'react-use';\n\nconst Demo = () => {\n const [value, {inc, dec, get, set, reset}] = useCounter(5);\n\n return (\n <div>\n <div>{value} is {get()}</div>\n <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 </div>\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var className=__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__(447)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useCssReact 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.
\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};\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=React.useState("Typing stopped"),state=_a[0],setState=_a[1],_b=React.useState(""),val=_b[0],setVal=_b[1],_c=React.useState(""),debouncedValue=_c[0],setDebouncedValue=_c[1];return __1.useDebounce(function(){setState("Typing stopped"),setDebouncedValue(val)},2e3,[val]),React.createElement("div",null,React.createElement("input",{type:"text",value:val,placeholder:"Debounced input",onChange:function(_a){var currentTarget=_a.currentTarget;setState("Waiting for typing to stop..."),setVal(currentTarget.value)}}),React.createElement("div",null,state),React.createElement("div",null,"Debounced value: ",debouncedValue))};react_1.storiesOf("Side effects|useDebounce",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(449)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useDebounceReact 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.
\nimport React, { useState } from 'react';\nimport { useDebounce } from 'react-use';\n\nconst Demo = () => {\n const [state, setState] = React.useState('Typing stopped');\n const [val, setVal] = React.useState('');\n const [debouncedValue, setDebouncedValue] = React.useState('');\n\n 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>Debounced value: {debouncedValue}</div>\n </div>\n );\n};\nuseDebounce(fn, ms: number, args: any[]);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useCounter(0),countNormal=_a[0],incNormal=_a[1].inc,_b=__1.useCounter(0),countDeep=_b[0],incDeep=_b[1].inc,options={max:500};return React.useEffect(function(){countNormaluseDeepCompareEffect\nA modified useEffect hook that is using deep comparison on its dependencies instead of reference equality.
\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};\nuseDeepCompareEffect(effect: () => void | (() => void | undefined), deps: any[]);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var s,i=1,n=arguments.length;iuseEffectOnce\nReact lifecycle hook that runs an effect only once.
\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};\nuseEffectOnce(effect: EffectCallback);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),CenterStory_1=__webpack_require__(85),useCallback=React.useCallback,Demo=function(){var _a=__1.useList(),list=_a[0],_b=_a[1],push=_b.push,clear=_b.clear,onKeyDown=useCallback(function(_a){var key=_a.key;"r"===key&&clear(),push(key)},[]);return __1.useEvent("keydown",onKeyDown),React.createElement(CenterStory_1.CenterStory,null,React.createElement("p",null,"Press some keys on your keyboard, ",React.createElement("code",{style:{color:"tomato"}},"r")," key resets the list"),React.createElement("pre",null,JSON.stringify(list,null,4)))};react_1.storiesOf("Sensors|useEvent",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(526)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useEventReact sensor hook that subscribes a handler to events.
import useEvent from 'react-use/lib/useEvent';\nimport useList from 'react-use/lib/useList';\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};\nuseEvent('keydown', handler)\nuseEvent('scroll', handler, window, {capture: true})\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),NewTabStory_1=__webpack_require__(201),ShowDocs_1=__webpack_require__(4),Demo=function(){return __1.useFavicon("https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico"),React.createElement(NewTabStory_1.default,null,"Favicon should be the Stack Overflow logo")};react_1.storiesOf("Side effects|useFavicon",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(528)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useFaviconReact side-effect hook sets the favicon of the page.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useToggle(!1),show=_a[0],toggle=_a[1],ref=React.useRef(null),videoRef=React.useRef(null),isFullScreen=__1.useFullscreen(ref,show,{onClose:function(){return toggle(!1)},video:videoRef}),controls=React.createElement("div",{style:{background:"white",padding:"20px"}},React.createElement("div",null,isFullScreen?"is full screen":"not full screen"),React.createElement("button",{onClick:function(){return toggle()}},"Toggle"),React.createElement("button",{onClick:function(){return toggle(!0)}},"set ON"),React.createElement("button",{onClick:function(){return toggle(!1)}},"set OFF"));return React.createElement("div",null,React.createElement("div",{ref:ref,style:{backgroundColor:isFullScreen?"black":"grey",width:400,height:300,display:"flex",justifyContent:"center",alignItems:"center"}},React.createElement("video",{ref:videoRef,style:{width:"70%"},src:"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4",autoPlay:!0}),isFullScreen&&controls),React.createElement("br",null),React.createElement("br",null),!isFullScreen&&controls)};react_1.storiesOf("UI|useFullscreen",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(530)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useFullscreenDisplay an element full-screen, optional fallback for fullscreen video on iOS.
\nimport useFullscreen from 'react-use/lib/useFullscreen';\nimport useToggle from 'react-use/lib/useToggle';\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};\nuseFullscreen(ref, show, {onClose})\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var state=__1.useGeolocation();return React.createElement("pre",null,JSON.stringify(state,null,2))};react_1.storiesOf("Sensors|useGeolocation",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(532)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useGeolocationReact sensor hook that tracks user's geographic location.
\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};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),react_2=__webpack_require__(0),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useGetSet(0),get=_a[0],set=_a[1];return React.createElement("button",{onClick:function(){setTimeout(function(){set(get()+1)},1e3)}},"Clicked: ",get())},DemoWrong=function(){var _a=react_2.useState(0),cnt=_a[0],set=_a[1];return React.createElement("button",{onClick:function(){setTimeout(function(){set(cnt+1)},1e3)}},"Clicked: ",cnt)};react_1.storiesOf("State|useGetSet",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(534)})}).add("Demo, 1s delay",function(){return React.createElement(Demo,null)}).add("DemoWrong, 1s delay",function(){return React.createElement(DemoWrong,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useGetSetReact state hook that returns state getter function instead of\nraw state itself, this prevents subtle bugs when state is used\nin nested functions.
\nBelow example uses useGetSet to increment a number after 1 second\non each click.
import {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.
const 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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useGetSetState({cnt:0}),get=_a[0],setState=_a[1];return React.createElement("button",{onClick:function(){setTimeout(function(){setState({cnt:get().cnt+1})},1e3)}},"Clicked: ",get().cnt)};react_1.storiesOf("State|useGetSetState",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(536)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useGetSetStateA mix of useGetSet and useGetSetState.
import {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 }, 1_000);\n };\n\n return (\n <button onClick={onClick}>Clicked: {get().cnt}</button>\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useHover(function(hovered){return React.createElement("div",null,"Hover me! ",hovered&&"Thanks!")}),hoverable=_a[0],hovered=_a[1];return React.createElement("div",null,hoverable,React.createElement("div",null,hovered?"HOVERED":""))};react_1.storiesOf("Sensors|useHover",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(202)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),react_2=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var ref=react_2.useRef(null),isHovered=__1.useHoverDirty(ref);return React.createElement("div",{ref:ref},isHovered?"😁":"☹️")};react_1.storiesOf("Sensors|useHoverDirty",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(202)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var isIdle=__1.useIdle(3e3);return React.createElement("div",null,React.createElement("div",null,"User is idle: ",isIdle?"Yes":"No"))};react_1.storiesOf("Sensors|useIdle",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(540)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useIdleReact sensor hook that tracks if user on the page is idle.
\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};\nuseIdle(ms, initialState);\nms — time in milliseconds after which to consider use idle, defaults to 60e3 — one minute.initialState — whether to consider user initially idle, defaults to false.useKeyReact UI sensor hook that executes a handler when a keyboard key is used.
import useKey from 'react-use/lib/useKey';\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/comps/UseKey';\n\n<UseKey filter='a' fn={() => alert('"a" key pressed!')} />\nuseKey(filter, handler, options?, deps?)\nuseKey('a', () => alert('"a" pressed'));\n\nconst predicate = (event) => event.key === 'a'\nuseKey(predicate, handler, {event: 'keyup'});\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),CenterStory_1=__webpack_require__(85),keys=["1","2","3","4","5","6","7","8","9","0"],Demo=function(){for(var states=[],_i=0,keys_1=keys;_iuseKeyPress\nReact UI sensor hook that detects when the user is pressing a specific\nkey on their keyboard.
\nimport useKeyPress from 'react-use/lib/useKeyPress';\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};\nconst isPressed = useKeyPress('a');\n\nconst predicate = (event) => event.key === 'a';\nconst isPressed = useKeyPress(predicate);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=React.useState(0),count=_a[0],setCount=_a[1],decrement=function(){console.log("DECREMENT"),setCount(function(count){return--count})};return __1.useKeyPressEvent("]",function(){console.log("INCREMENT"),setCount(function(count){return++count})}),__1.useKeyPressEvent("[",decrement,decrement),__1.useKeyPressEvent("r",function(){return setCount(function(){return 0})}),React.createElement("div",null,React.createElement("style",{dangerouslySetInnerHTML:{__html:"code {color: red}"}}),React.createElement("p",null,"Try pressing ",React.createElement("code",null,"["),", ",React.createElement("code",null,"]"),", and ",React.createElement("code",null,"r")," to see the count incremented and decremented."),React.createElement("p",null,"Count: ",count))},DemoKeyboardJs=function(){var _a=React.useState(0),count=_a[0],setCount=_a[1],increment=function(){console.log("INCREMENT"),setCount(function(count){return++count})},decrement=function(){console.log("DECREMENT"),setCount(function(count){return--count})};return __1.useKeyPressEvent("q + ]",increment,increment,__1.useKeyboardJs),__1.useKeyPressEvent("q + [",decrement,decrement,__1.useKeyboardJs),__1.useKeyPressEvent("q + r",function(){return setCount(function(){return 0})},null,__1.useKeyboardJs),React.createElement("div",null,React.createElement("style",{dangerouslySetInnerHTML:{__html:"code {color: red}"}}),React.createElement("p",null,"Try pressing ",React.createElement("code",null,"q + ["),", ",React.createElement("code",null,"q + ]"),", and ",React.createElement("code",null,"q + r")," to see the count incremented and decremented."),React.createElement("p",null,"Count: ",count))};react_1.storiesOf("Sensors/useKeyPressEvent",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(546)})}).add("Demo",function(){return React.createElement(Demo,null)}).add("KeyboardJs",function(){return React.createElement(DemoKeyboardJs,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useKeyPressEventThis hook fires keydown and keyup calllbacks, 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.
import React, { useState } from React;\nimport useKeyPressEvent from 'react-use/lib/useKeyPressEvent';\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};\nuseKeyPressEvent('<key>', keydown);\nuseKeyPressEvent('<key>', keydown, keyup);\nuseKeyPressEvent('<key>', keydown, keyup, useKeyPress);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),addon_knobs_1=__webpack_require__(117),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),CenterStory_1=__webpack_require__(85),Demo=function(_a){var combo=_a.combo,pressed=__1.useKeyboardJs(combo)[0];return React.createElement(CenterStory_1.CenterStory,null,React.createElement("div",{style:{textAlign:"center"}},"Press ",React.createElement("code",{style:{color:"red",background:"#f6f6f6",padding:"3px 6px",borderRadius:"3px"}},combo)," combo",React.createElement("br",null),React.createElement("br",null),React.createElement("div",{style:{fontSize:"4em"}},pressed?"💋":"")))};react_1.storiesOf("Sensors|useKeyboardJs",module).addDecorator(addon_knobs_1.withKnobs).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(554)})}).add("Demo",function(){var combo=addon_knobs_1.text("Combo","i + l + u");return React.createElement(Demo,{combo:combo})})}).call(this,__webpack_require__(1)(module))},,,,,,,function(module,exports){module.exports='useKeyboardJsReact 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.
\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};\nInstall keyboardjs peer dependency:
npm add keyboardjs\n# or\nyarn add keyboardjs\nuseKeyboardJs(combination: string): [isPressed: boolean, event?: KeyboardEvent]\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){return __1.useLifecycles(function(){return console.log("MOUNTED")},function(){return console.log("UNMOUNTED")}),null};react_1.storiesOf("Lifecycle|useLifecycles",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(556)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useLifecyclesReact lifecycle hook that call mount and unmount callbacks, when\ncomponent is mounted and un-mounted, respectively.
import {useLifecycles} from 'react-use';\n\nconst Demo = () => {\n useLifecycles(() => console.log('MOUNTED'), () => console.log('UNMOUNTED'));\n return null;\n};\nuseLifecycles(mount, unmount);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useList(),list=_a[0],_b=_a[1],set=_b.set,push=_b.push;return React.createElement("div",null,React.createElement("div",null,list.join(",")),React.createElement("button",{onClick:function(){return set([])}},"Reset"),React.createElement("button",{onClick:function(){return push(Date.now())}},"Push"))};react_1.storiesOf("State|useList",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(558)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useListReact state hook that tracks a value of an array.
\nimport {useList} from 'react-use';\n\nconst Demo = () => {\n const [list, {set, push}] = useList();\n\n return (\n <div>\n <div>{list.join(',')}</div>\n <button onClick={() => set([])}>Reset</button>\n <button onClick={() => push(Date.now())}>Push</button>\n </div>\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useLocalStorage("hello-key","foo"),value=_a[0],setValue=_a[1];return React.createElement("div",null,React.createElement("div",null,"Value: ",value),React.createElement("button",{onClick:function(){return setValue("bar")}},"bar"),React.createElement("button",{onClick:function(){return setValue("baz")}},"baz"))};react_1.storiesOf("Side effects|useLocalStorage",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(560)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useLocalStorageReact side-effect hook that manages a single localStorage key.
import {useLocalStorage} from 'react-use';\n\nconst Demo = () => {\n const [value, setValue] = 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 </div>\n );\n};\nuseLocalStorage(key);\nuseLocalStorage(key, initialValue);\nuseLocalStorage(key, initialValue, raw);\nkey — 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.useLocationReact sensor hook that tracks brower's location.
\nFor Internet Explorer you need to install a polyfill.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useToggle(!1),locked=_a[0],toggleLocked=_a[1];return __1.useLockBodyScroll(locked),React.createElement("div",{style:{height:"200vh"}},React.createElement("button",{onClick:function(){return toggleLocked()},style:{position:"fixed",left:0}},locked?"Unlock":"Lock"))},AnotherComponent=function(){var _a=__1.useToggle(!1),locked=_a[0],toggleLocked=_a[1];return __1.useLockBodyScroll(locked),React.createElement("button",{onClick:function(){return toggleLocked()},style:{position:"fixed",left:0,top:40}},locked?"Unlock":"Lock")};react_1.storiesOf("Side effects|useLockBodyScroll",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(564)})}).add("Demo",function(){return React.createElement(Demo,null)}).add("Two hooks on page",function(){return React.createElement(React.Fragment,null,React.createElement(AnotherComponent,null),React.createElement(Demo,null))})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useLockBodyScrollReact side-effect hook that locks scrolling on the body element. Useful for modal and other overlay components.
\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};\nuseLockBodyScroll(enabled?: boolean = true);\nenabled — Hook will lock scrolling on the body element if true, defaults to trueuseLogger\nReact lifecycle hook that console logs parameters as component transitions through lifecycles.
\nimport {useLogger} from 'react-use';\n\nconst Demo = (props) => {\n useLogger('Demo', props);\n return null;\n};\nDemo mounted {}\nDemo updated {}\nDemo unmounteduseLogger(componentName: string, ...rest);\ncomponentName — component name....rest — parameters to log.useMapReact state hook that tracks a value of an object.
\nimport {useMap} from 'react-use';\n\nconst Demo = () => {\n const [map, {set, reset}] = useMap({\n hello: 'there',\n });\n\n return (\n <div>\n <pre>{JSON.stringify(map, null, 2)}</pre>\n <button onClick={() => set(String(Date.now()), (new Date()).toJSON())}>Add</button>\n <button onClick={() => reset()}>Reset</button>\n </div>\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var isWide=__1.useMedia("(min-width: 480px)");return React.createElement("div",null,"Screen is wide: ",isWide?"Yes":"No")};react_1.storiesOf("Sensors|useMedia",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(570)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useMediaReact sensor hook that tracks state of a CSS media query.
\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};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var state=__1.useMediaDevices();return React.createElement("pre",null,JSON.stringify(state,null,2))};react_1.storiesOf("Sensors|useMediaDevices",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(572)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useMediaDevicesReact sensor hook that tracks connected hardware devices.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var state=__1.useMotion();return React.createElement("pre",null,JSON.stringify(state,null,2))};react_1.storiesOf("Sensors|useMotion",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(574)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useMotionReact sensor hook that uses device's acceleration sensor to track its motions.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),ConsoleStory_1=__webpack_require__(116),Demo=function(){return __1.useMount(function(){return console.log("MOUNTED")}),React.createElement(ConsoleStory_1.default,null)};react_1.storiesOf("Lifecycle|useMount",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(576)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useMountReact lifecycle hook that calls a function after the component is mounted. Use useEffectOnce if you need both a mount and unmount function.
import {useMount} from 'react-use';\n\nconst Demo = () => {\n useMount(() => console.log('MOUNTED'));\n return null;\n};\nuseMount(fn: () => void);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var ref=React.useRef(null),state=__1.useMouse(ref);return React.createElement(React.Fragment,null,React.createElement("pre",null,JSON.stringify(state,null,2)),React.createElement("br",null),React.createElement("br",null),React.createElement("div",{ref:ref,style:{position:"relative",width:"400px",height:"400px",backgroundColor:"whitesmoke"}},React.createElement("span",{style:{position:"absolute",left:state.elX+"px",top:state.elY+"px",pointerEvents:"none",transform:"scale(4)"}},"🐭")))};react_1.storiesOf("Sensors|useMouse",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(203)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),addon_knobs_1=__webpack_require__(117),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(_a){var whenHovered=_a.whenHovered,bound=_a.bound,ref=React.useRef(null),state=__1.useMouseHovered(ref,{whenHovered:whenHovered,bound:bound});return React.createElement(React.Fragment,null,React.createElement("pre",null,JSON.stringify(state,null,2)),React.createElement("br",null),React.createElement("br",null),React.createElement("div",{ref:ref,style:{position:"relative",width:"400px",height:"400px",backgroundColor:"whitesmoke"}},React.createElement("span",{style:{position:"absolute",left:state.elX+"px",top:state.elY+"px",pointerEvents:"none",transform:"scale(4)"}},"🐭")))};react_1.storiesOf("Sensors|useMouseHovered",module).addDecorator(addon_knobs_1.withKnobs).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(203)})}).add("Demo",function(){var bound=addon_knobs_1.boolean("bound",!1),whenHovered=addon_knobs_1.boolean("whenHovered",!1);return React.createElement(Demo,{whenHovered:whenHovered,bound:bound})})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var state=__1.useNetwork();return React.createElement("pre",null,JSON.stringify(state,null,2))};react_1.storiesOf("Sensors|useNetwork",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(580)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useNetworkReact sensor hook that tracks connected hardware devices. Returns:
\n{\n "online": true,\n "since": "2018-10-27T08:59:05.562Z",\n "downlink": 10,\n "effectiveType": "4g",\n "rtt": 50\n}\nimport {useNetwork} from 'react-use';\n\nconst Demo = () => {\n const state = useNetwork();\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre>\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),counter$=new(__webpack_require__(633).BehaviorSubject)(0),Demo=function(){var value=__1.useObservable(counter$,0);return React.createElement("button",{onClick:function(){return counter$.next(value+1)}},"Clicked ",value," times")};react_1.storiesOf("State|useObservable",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(582)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useObservableReact state hook that tracks the latest value of an Observable.
import {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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var state=__1.useOrientation();return React.createElement("pre",null,JSON.stringify(state,null,2))};react_1.storiesOf("Sensors|useOrientation",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(584)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useOrientationReact 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}\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),addon_actions_1=__webpack_require__(112),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){return __1.usePageLeave(addon_actions_1.action("onPageLeave")),React.createElement("div",null,"Try leaving the page and see logs in ",React.createElement("code",null,"Actions")," tab.")};react_1.storiesOf("Sensors|usePageLeave",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(586)})}).add("Default",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='usePageLeaveReact sensor hook that fires a callback when mouse leaves the page.
\nimport {usePageLeave} from 'react-use';\n\nconst Demo = () => {\n usePageLeave(() => console.log('Page left...'));\n\n return null;\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),useState=React.useState,useEffect=React.useEffect,DemoInner=function(_a){var promise=_a.promise,safePromise=__1.usePromise(),_b=useState(-1),value=_b[0],setValue=_b[1];return useEffect(function(){safePromise(promise).then(setValue)},[promise]),React.createElement("div",null,-1===value?"Resolving value...":"Value: "+value)},Demo=function(){var _a=__1.useBoolean(!0),mounted=_a[0],toggleMounted=_a[1],_b=__1.useNumber(),num=_b[0],inc=_b[1].inc,promise=new Promise(function(r){return setTimeout(function(){return r(num)},1e3)});return React.createElement("div",null,React.createElement("p",null,"This demo provides a number in a promise that resolves in 1sec to a child component."),React.createElement("button",{onClick:function(){return toggleMounted()}},mounted?"Unmount":"Mount"),React.createElement("button",{onClick:function(){return inc()}},"Increment (",num,")"),React.createElement("br",null),mounted&&React.createElement(DemoInner,{promise:promise}))};react_1.storiesOf("Lifecycle|usePromise",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(588)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='usePromiseReact Lifecycle hook that returns a helper function for wrapping promises.\nPromises wrapped with this function will resolve only when component is mounted.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var frames=__1.useRaf(5e3,1e3);return React.createElement("div",null,"Elapsed: ",frames)};react_1.storiesOf("Animation|useRaf",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(590)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useRafReact animation hook that forces component to re-render on each requestAnimationFrame,\nreturns percentage of time elapsed.
import {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};\nuseRaf(ms?: number, delay?: number): number;\nms — 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.useRefMountedLifecycle hook that tracks if component is mounted. Returns a ref, which has a\nboolean .current property.
import {useRefMounted} from 'react-use';\n\nconst Demo = () => {\n const refMounted = useRefMounted();\n\n useEffect(() => {\n setTimeout(() => {\n if (refMounted.currrent) {\n // ...\n } else {\n // ...\n }\n }, 1000);\n });\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var scrollRef=React.useRef(null),_a=__1.useScroll(scrollRef),x=_a.x,y=_a.y;return React.createElement(React.Fragment,null,React.createElement("div",null,"x: ",x),React.createElement("div",null,"y: ",y),React.createElement("div",{ref:scrollRef,style:{width:"400px",height:"400px",backgroundColor:"whitesmoke",overflow:"scroll"}},React.createElement("div",{style:{width:"2000px",height:"2000px"}},"Scroll me")))};react_1.storiesOf("Sensors/useScroll",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(594)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useScrollReact sensor hook that re-renders when the scroll position in a DOM element changes.
\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};\nuseScroll(ref: RefObject<HTMLElement>);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useSessionStorage("hello-key","foo"),value=_a[0],setValue=_a[1];return React.createElement("div",null,React.createElement("div",null,"Value: ",value),React.createElement("button",{onClick:function(){return setValue("bar")}},"bar"),React.createElement("button",{onClick:function(){return setValue("baz")}},"baz"))};react_1.storiesOf("Side effects|useSessionStorage",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(596)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useSessionStorageReact side-effect hook that manages a single sessionStorage key.
import {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};\nuseSessionStorage(key);\nuseSessionStorage(key, initialValue);\nuseSessionStorage(key, initialValue, raw);\nkey — 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.useSetStateReact state hook that creates setState method which works similar to how\nthis.setState works in class components—it merges object changes into\ncurrent state.
import {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};\nconst [state, setState] = useSetState({cnt: 0});\n\nsetState({cnt: state.cnt + 1});\nsetState((prevState) => ({\n cnt: prevState + 1,\n}));\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__1.useSize(function(_a){var width=_a.width;return React.createElement("div",{style:{border:"1px solid red"}},"Size me up! (",width,"px)")}),sized=_a[0],_b=_a[1],width=_b.width,height=_b.height;return React.createElement("div",null,sized,React.createElement("div",null,"width: ",width),React.createElement("div",null,"height: ",height))};react_1.storiesOf("Sensors|useSize",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(600)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useSizeReact sensor hook that tracks size of an HTML element.
\nimport {useSize} from 'react-use';\n\nconst Demo = () => {\n const [sized, {width, height}] = useSize(\n ({width}) => <div style={{border: '1px solid red'}}>Size me up! ({width}px)</div>\n );\n\n return (\n <div>\n {sized}\n <div>width: {width}</div>\n <div>height: {height}</div>\n </div>\n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var state=__1.useSpeech("Hello world!");return React.createElement("pre",null,JSON.stringify(state,null,2))};react_1.storiesOf("UI|useSpeech",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(602)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useSpeechReact UI hook that synthesizes human voice that speaks a given string.
\nimport {useSpeech} from 'react-use';\n\nconst Demo = () => {\n const state = useSpeech('Hello world!');\n\n return (\n <pre>\n {JSON.stringify(state, null, 2)}\n </pre> \n );\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=React.useState(50),target=_a[0],setTarget=_a[1],value=__1.useSpring(target);return React.createElement("div",null,value,React.createElement("br",null),React.createElement("button",{onClick:function(){return setTarget(0)}},"Set 0"),React.createElement("button",{onClick:function(){return setTarget(100)}},"Set 100"))};react_1.storiesOf("Animation|useSpring",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(604)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useSpringReact animation hook that updates a single numeric value over time according\nto spring dynamics.
\nimport {useSpring} from 'react-use';\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};\nInstall rebound peer dependency:
npm add rebound\n# or\nyarn add rebound\nconst currentValue = useSpring(targetValue);\nconst currentValue = useSpring(targetValue, tension, friction);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var input=React.useRef(null);return __1.useStartTyping(function(){input.current&&input.current.focus()}),React.createElement("div",null,React.createElement("p",null,"Start typing, and below field will get focused."),React.createElement("input",{ref:input}),React.createElement("br",null),React.createElement("hr",null),React.createElement("p",null,"Try focusing below elements and see what happens."),React.createElement("button",null,"When button is focused, it will lose it."),React.createElement("br",null),React.createElement("br",null),React.createElement("input",null),React.createElement("br",null),React.createElement("br",null),React.createElement("textarea",null,"Editable textarea"),React.createElement("br",null),React.createElement("br",null),React.createElement("div",{contentEditable:!0},"Editable DIV"))};react_1.storiesOf("Sensors|useStartTyping",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(606)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useStartTypingReact sensor hook that fires a callback when user starts typing. Can be used\nto focus default input field on the page.
\nimport useStartTyping from 'react-use/lib/useStartTyping';\n\nconst Demo = () => {\n useStartTyping(() => alert('Started typing...'));\n\n return null;\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=React.useState(""),value=_a[0],setValue=_a[1],throttledValue=__1.useThrottle(value,2e3),_b=React.useState(throttledValue),lastThrottledValue=_b[0],setLastThrottledValue=_b[1],_c=__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(_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__(204)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=React.useState(""),value=_a[0],setValue=_a[1],throttledValue=__1.useThrottleFn(function(value){return value},2e3,[value]),_b=React.useState(throttledValue),lastThrottledValue=_b[0],setLastThrottledValue=_b[1],_c=__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(_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__(204)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var ready=__1.useTimeout(2e3);return React.createElement("div",null,"Ready: ",ready?"Yes":"No")};react_1.storiesOf("Animation|useTimeout",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(610)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useTimeoutReturns true after a specified number of milliseconds.
import { useTimeout } from 'react-use';\n\nconst Demo = () => {\n const ready = useTimeout(2000);\n\n return <div>Ready: {ready ? 'Yes' : 'No'}</div>;\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),NewTabStory_1=__webpack_require__(201),ShowDocs_1=__webpack_require__(4),Demo=function(){return __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__(612)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useTitleReact side-effect hook that sets title of the page.
\nimport {useTitle} from 'react-use';\n\nconst Demo = () => {\n useTitle('Hello world!');\n\n return null;\n};\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__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:function(){return toggle()}},"Toggle"),React.createElement("button",{onClick:function(){return toggle(!0)}},"set ON"),React.createElement("button",{onClick:function(){return toggle(!1)}},"set OFF"))};react_1.storiesOf("State|useToggle",module).add("Docs",function(){return React.createElement(ShowDocs_1.default,{md:__webpack_require__(188)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var t=__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__(615)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useTweenReact animation hook that tweens a number between 0 and 1.
\nimport {useTween} from 'react-use';\n\nconst Demo = () => {\n const t = useTween();\n\n return (\n <div>\n Tween: {t}\n </div>\n );\n};\nuseTween(easing?: string, ms?: number, delay?: number): number\nReturns a number that begins with 0 and ends with 1 when animation ends.
\neasing — one of the valid easing names, 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.useUnmountReact lifecycle hook that calls a function when the component will unmount. Use useEffectOnce if you need both a mount and unmount function.
import {useUnmount} from 'react-use';\n\nconst Demo = () => {\n useUnmount(() => console.log('UNMOUNTED'));\n return null;\n};\nuseUnmount(fn: () => void | undefined);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var update=__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__(619)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useUpdateReact utility hook that returns a function that forces component\nto re-render when called.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=React.useState(0),count=_a[0],setCount=_a[1],_b=React.useState(!1),didUpdate=_b[0],setDidUpdate=_b[1];return __1.useUpdateEffect(function(){setDidUpdate(!0)},[count]),React.createElement("div",null,React.createElement("button",{onClick:function(){return setCount(function(count){return count+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__(621)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useUpdateEffectReact effect hook that ignores the first invocation (e.g. on mount). The signature is exactly the same as the useEffect hook.
import 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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__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(){return controls.volume(.1)}},"Volume: 10%"),React.createElement("button",{onClick:function(){return controls.volume(.5)}},"Volume: 50%"),React.createElement("button",{onClick:function(){return controls.volume(1)}},"Volume: 100%"),React.createElement("br",null),React.createElement("button",{onClick:function(){return controls.seek(state.time-5)}},"-5 sec"),React.createElement("button",{onClick:function(){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__(623)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useVideoCreates <video> element, tracks its state and exposes playback controls.
import {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};\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:
<div>{video}</div>\nstate tracks the state of the video and has the following shape:
{\n "buffered": [\n {\n "start": 0,\n "end": 425.952625\n }\n ],\n "time": 5.244996,\n "duration": 425.952625,\n "isPlaying": 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:
interface 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.
And finally, props — all props that <video> accepts.
useWaituseWait is a React Hook helps to manage multiple loading states on the page without any conflict. It's based on a very simple idea that manages an Array of multiple loading states. The built-in Wait component listens its registered loader and immediately become loading state.
import { useWait } from 'react-use'\n\nfunction UserCreateButton() {\n const { startWaiting, endWaiting, isWaiting, Wait } = useWait();\n\n return (\n <button\n onClick={() => startWaiting("creating user")}\n disabled={isWaiting("creating user")}\n >\n <Wait on="creating user" fallback={<div>Creating user!</div>}>\n Create User\n </Wait>\n </button>\n );\n}\nAnd you should wrap your App with Waiter component. It's actually a Context.Provider that provides a loading context to the component tree.
const rootElement = document.getElementById("root");\nReactDOM.render(\n <useWait.Waiter>\n <App />\n </useWait.Waiter>,\n rootElement\n);\n'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__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__(627)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useWindowScrollReact sensor hook that re-renders on window scroll.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var React=__webpack_require__(0),react_1=__webpack_require__(2),__1=__webpack_require__(3),ShowDocs_1=__webpack_require__(4),Demo=function(){var _a=__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__(629)})}).add("Demo",function(){return React.createElement(Demo,null)})}).call(this,__webpack_require__(1)(module))},function(module,exports){module.exports='useWindowSizeReact sensor hook that tracks dimensions of the browser window.
\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'},function(module,exports,__webpack_require__){"use strict";(function(module){Object.defineProperty(exports,"__esModule",{value:!0});var react_1=__webpack_require__(2),React=__webpack_require__(0),UseKey_1=__webpack_require__(631);react_1.storiesOf("Components|