├── .gitignore ├── bsconfig.json ├── lib └── bs │ ├── .bsdeps │ ├── .ninja_log │ └── src │ ├── Hooks-ReasonReactHooks.cmi │ └── Hooks-ReasonReactHooks.cmt ├── package.json ├── readme.md ├── src ├── Hooks.re ├── hooks │ ├── UseDebounce.re │ ├── UseDidMount.re │ ├── UseMousePosition.re │ ├── UseVisible.re │ ├── UseWindowSize.re │ └── useHover.re └── utils │ ├── Utils.re │ └── UtilsDom.re └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .merlin 3 | .bsb.lock 4 | lib/** 5 | npm-debug.log 6 | /node_modules/ 7 | **/*.bs.js -------------------------------------------------------------------------------- /bsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reason-react-hooks", 3 | "sources": [ 4 | { 5 | "dir": "src", 6 | "public": ["Hooks"], 7 | "subdirs": true 8 | } 9 | ], 10 | "namespace": true, 11 | "bs-dependencies": ["reason-react", "bs-intersection-observer"], 12 | "refmt": 3 13 | } 14 | -------------------------------------------------------------------------------- /lib/bs/.bsdeps: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulesGuesnon/Reason-react-hooks/35fb450d246532ee519702767f8da2bf33950435/lib/bs/.bsdeps -------------------------------------------------------------------------------- /lib/bs/.ninja_log: -------------------------------------------------------------------------------- 1 | # ninja log v5 2 | 23 35 1567542164012144045 src/hooks/UseMousePosition-ReasonReactHooks.cmi 692b301e858ad92a 3 | 23 35 1567542164012144045 src/hooks/UseMousePosition-ReasonReactHooks.cmj 692b301e858ad92a 4 | 18 23 1567542164012144045 src/hooks/UseMousePosition.d ea5f0411a2533de1 5 | 1 18 1567542164012144045 src/hooks/UseMousePosition.mlast 50f14c980a4fbd38 6 | 92 110 1567533438865127756 src/Hooks-ReasonReactHooks.cmi 5343001a55a8c7d3 7 | 92 110 1567533438865127756 src/Hooks-ReasonReactHooks.cmj 5343001a55a8c7d3 8 | 66 92 1567533438839966243 src/hooks/UseVisible-ReasonReactHooks.cmj 3d579a4adf7aab31 9 | 65 88 1567533438839966243 src/hooks/useHover-ReasonReactHooks.cmi caa6be5dc2e84f96 10 | 65 88 1567533438839966243 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/hooks/useHover.js caa6be5dc2e84f96 11 | 65 88 1567533438839966243 src/hooks/useHover-ReasonReactHooks.cmj caa6be5dc2e84f96 12 | 66 81 1567533438839966243 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/hooks/UseWindowSize.js cd23caf886cbbc41 13 | 66 81 1567533438839966243 src/hooks/UseWindowSize-ReasonReactHooks.cmj cd23caf886cbbc41 14 | 121 136 1567534447945303884 src/utils/Utils-ReasonReactHooks.cmi ec1d1bd8271432b5 15 | 121 136 1567534447945303884 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/utils/Utils.js ec1d1bd8271432b5 16 | 93 102 1567525174089528668 src/hooks/UseWindowSize.d 33b13e229f9d7126 17 | 19 51 1567533438793514193 src/hooks/UseDidMount-ReasonReactHooks.cmi a7d0731e42a82aa4 18 | 19 51 1567533438793514193 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/hooks/UseDidMount.js a7d0731e42a82aa4 19 | 66 81 1567533438839966243 src/hooks/UseWindowSize-ReasonReactHooks.cmi cd23caf886cbbc41 20 | 19 51 1567533438793514193 src/hooks/UseDidMount-ReasonReactHooks.cmj a7d0731e42a82aa4 21 | 19 42 1567533438793514193 src/hooks/UseDebounce-ReasonReactHooks.cmi 4d2bab1482a52f7e 22 | 66 92 1567533438839966243 src/hooks/UseVisible-ReasonReactHooks.cmi 3d579a4adf7aab31 23 | 19 42 1567533438793514193 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/hooks/UseDebounce.js 4d2bab1482a52f7e 24 | 19 42 1567533438793514193 src/hooks/UseDebounce-ReasonReactHooks.cmj 4d2bab1482a52f7e 25 | 105 121 1567534447884830915 src/utils/UtilsDom-ReasonReactHooks.cmi bb7e96279bc01da2 26 | 92 110 1567533438865127756 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/Hooks.js 5343001a55a8c7d3 27 | 105 121 1567534447884830915 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/utils/UtilsDom.js bb7e96279bc01da2 28 | 105 121 1567534447884830915 src/utils/UtilsDom-ReasonReactHooks.cmj bb7e96279bc01da2 29 | 59 93 1567525174077617420 src/hooks/UseWindowSize.mlast 1d0d2844d579bf28 30 | 60 91 1567525174077438282 src/Hooks.mlast 8f81bee54d28a52c 31 | 4 19 1567533438793514193 ReasonReactHooks.cmi f426ed14d99bd137 32 | 57 67 1567525174054308616 src/hooks/UseDebounce.d dbe59bff43d8a6f2 33 | 92 101 1567525174088268739 src/Hooks.d e37d41bced7b1db 34 | 54 66 1567525174053060725 src/hooks/UseDidMount.d 6c789277c33a6dd8 35 | 52 64 1567525174050403296 src/hooks/UseVisible.d c8ce7efe69651e78 36 | 48 62 1567525174048383428 src/hooks/useHover.d ccc973842fdd8553 37 | 46 60 1567525174045961141 src/utils/Utils.d f0704f9792fc05d7 38 | 121 136 1567534447945303884 src/utils/Utils-ReasonReactHooks.cmj ec1d1bd8271432b5 39 | 59 105 1567534447884830915 src/utils/UtilsDom.d b6151200a2834ac3 40 | 6 57 1567525174041165220 src/hooks/UseDebounce.mlast 5c98a6fc3f0bda40 41 | 8 54 1567525174038656063 src/hooks/UseDidMount.mlast 320f02d1cfd95426 42 | 66 92 1567533438839966243 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/hooks/UseVisible.js 3d579a4adf7aab31 43 | 4 52 1567525174037430610 src/hooks/UseVisible.mlast 283eeb8179d12ed3 44 | 23 35 1567542164012144045 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/hooks/UseMousePosition.js 692b301e858ad92a 45 | 3 47 1567525174033152065 src/hooks/useHover.mlast 16d5e00ddf5f1cfb 46 | 0 45 1567525174031753404 src/utils/Utils.mlast f0e4c4968941ec05 47 | 2 59 1567534447884830915 src/utils/UtilsDom.mlast 1c33b0c809b64475 48 | 1 53 1567542313780814521 src/hooks/UseMousePosition.mlast 50f14c980a4fbd38 49 | 53 75 1567542313780814521 src/hooks/UseMousePosition.d ea5f0411a2533de1 50 | 0 21 1567542347220150148 src/hooks/UseMousePosition.mlast 50f14c980a4fbd38 51 | 21 26 1567542347220150148 src/hooks/UseMousePosition.d ea5f0411a2533de1 52 | 0 20 1567542361921756467 src/utils/UtilsDom.mlast 1c33b0c809b64475 53 | 20 29 1567542361921756467 src/utils/UtilsDom.d b6151200a2834ac3 54 | 29 45 1567542361921756467 src/utils/UtilsDom-ReasonReactHooks.cmj bb7e96279bc01da2 55 | 29 45 1567542361921756467 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/utils/UtilsDom.js bb7e96279bc01da2 56 | 29 45 1567542361921756467 src/utils/UtilsDom-ReasonReactHooks.cmi bb7e96279bc01da2 57 | 45 60 1567542361943784763 src/utils/Utils-ReasonReactHooks.cmj ec1d1bd8271432b5 58 | 45 60 1567542361943784763 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/utils/Utils.js ec1d1bd8271432b5 59 | 45 60 1567542361943784763 src/utils/Utils-ReasonReactHooks.cmi ec1d1bd8271432b5 60 | 2 47 1567542384298445810 src/hooks/UseMousePosition.mlast 50f14c980a4fbd38 61 | 47 62 1567542384298445810 src/hooks/UseMousePosition.d ea5f0411a2533de1 62 | 0 18 1567542392447174094 src/hooks/UseMousePosition.mlast 50f14c980a4fbd38 63 | 18 23 1567542392447174094 src/hooks/UseMousePosition.d ea5f0411a2533de1 64 | 23 37 1567542392447174094 src/hooks/UseMousePosition-ReasonReactHooks.cmj 692b301e858ad92a 65 | 23 37 1567542392447174094 /Users/julesguesnon/Dev/open/reason-react-hooks/lib/js/src/hooks/UseMousePosition.js 692b301e858ad92a 66 | 23 37 1567542392447174094 src/hooks/UseMousePosition-ReasonReactHooks.cmi 692b301e858ad92a 67 | -------------------------------------------------------------------------------- /lib/bs/src/Hooks-ReasonReactHooks.cmi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulesGuesnon/Reason-react-hooks/35fb450d246532ee519702767f8da2bf33950435/lib/bs/src/Hooks-ReasonReactHooks.cmi -------------------------------------------------------------------------------- /lib/bs/src/Hooks-ReasonReactHooks.cmt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JulesGuesnon/Reason-react-hooks/35fb450d246532ee519702767f8da2bf33950435/lib/bs/src/Hooks-ReasonReactHooks.cmt -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reason-react-hooks", 3 | "version": "0.4.2", 4 | "main": "lib/js/src/Hooks.js", 5 | "description": "Some hooks in ReasonML for reason-react that can be useful.", 6 | "repository": { 7 | "url": "https://github.com/JulesGuesnon/reason-react-hooks" 8 | }, 9 | "scripts": { 10 | "prepublish": "bsb -make-world", 11 | "build": "bsb -make-world", 12 | "start": "bsb -make-world -w", 13 | "clean": "bsb -clean-world", 14 | "test": "echo \"Error: no test specified\" && exit 1" 15 | }, 16 | "keywords": [ 17 | "BuckleScript", 18 | "ReasonReact", 19 | "ReasonML", 20 | "Reason", 21 | "Hooks", 22 | "React" 23 | ], 24 | "author": "Jules Guesnon ", 25 | "license": "MIT", 26 | "dependencies": { 27 | "bs-intersection-observer": "^0.1.2", 28 | "react": "^16.8.1", 29 | "react-dom": "^16.8.1", 30 | "reason-react": ">=0.7.1" 31 | }, 32 | "peerDependencies": { 33 | "bs-platform": "^5 || ^7 || ^8" 34 | }, 35 | "devDependencies": { 36 | "bs-platform": "^7" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Reason-react-hooks 2 | 3 | this package is a group of various hooks for reason-react that you may want to use. 4 | 5 | ## How to install ? 6 | 7 | ```bash 8 | npm install reason-react-hooks --save 9 | ``` 10 | 11 | ```bash 12 | yarn add reason-react-hooks 13 | ``` 14 | 15 | Then add the dependency to you `bsconfig.json` 16 | 17 | ```json 18 | "bs-dependencies": [ 19 | "reason-react-hooks" 20 | ], 21 | ``` 22 | 23 | ## How to use it ? 24 | 25 | ### What the package contains ? 26 | 27 | All the hooks are located under `ReasonReactHooks.Hooks` 28 | 29 | ## Examples 30 | 31 | ### useVisible 32 | 33 | This hook allow you to detect when an element appear on the screen. 34 | **It will trigger every time the element enter the window**, which mean if the element is visible, then not, and visible again, the callback will trigger **2 times**. 35 | 36 | ```reason 37 | [@react.component] 38 | let make = () => { 39 | let (ref, isVisible) = ReasonReactHooks.Hooks.useVisible(); 40 | 41 |
42 | { 43 | isVisible ? "Hello !" : "I'm hidden"; 44 | } 45 | ->ReasonReact.string 46 |
; 47 | }; 48 | ``` 49 | 50 | ### useHover 51 | 52 | This hook allow you to know when an element is hovered. 53 | 54 | ```reason 55 | [@react.component] 56 | let make = () => { 57 | let (ref, isHover) = ReasonReactHooks.Hooks.useHover(); 58 | 59 |
60 | { 61 | isHover ? "You're on me !" : "You're not on me !"; 62 | } 63 | ->ReasonReact.string 64 |
; 65 | }; 66 | ``` 67 | 68 | ### useDidMount 69 | 70 | This hook allow you to do same that with classes and trigger a callback once the component is mounted 71 | 72 | ```reason 73 | [@react.component] 74 | let make = () => { 75 | ReasonReactHooks.Hooks.useDidMount(~cb=() => Js.log("Component mounted")); 76 | 77 |
"Hello world"->ReasonReact.string
; 78 | }; 79 | ``` 80 | 81 | ### useDebounce 82 | 83 | This hook allow you to debounce a function. It's pretty useful to deal with input and for performances 84 | **You can only pass 1 parameter to you callback.** If you need more that 1 parameter, consider using an array, a record, a dict... 85 | 86 | ```reason 87 | [@react.component] 88 | let make = () => { 89 | let (_, setValue) = React.useState(_ => ""); 90 | let debouncedFunction = 91 | ReasonReactHooks.Hooks.useDebounce( 92 | ~cb= 93 | value => { 94 | setValue(_ => value); 95 | Js.log(value); 96 | }, 97 | ~delay=500, 98 | (), 99 | ); 100 |
101 | { 104 | let value = ReactEvent.Form.target(e)##value; 105 | debouncedFunction(value); 106 | }} 107 | /> 108 |
; 109 | }; 110 | ``` 111 | 112 | ### useWindowSize 113 | 114 | This hook allow you to get the window height and width. 115 | **It handle the window resize** 116 | 117 | ```reason 118 | [@react.component] 119 | let make = () => { 120 | let windowSize = ReasonReactHooks.Hooks.useWindowSize(); 121 | let height = windowSize.height; 122 | let width = windowSize.width; 123 |
124 | {j| The window is currently $width x $height|j}->ReasonReact.string 125 |
; 126 | }; 127 | ``` 128 | 129 | ### useMousePosition 130 | 131 | This hook allow you to get the x and y of the mouse. 132 | 133 | ```reason 134 | [@react.component] 135 | let make = () => { 136 | let mousePosition = ReasonReactHooks.Hooks.useMousePosition(); 137 | let y = mousePosition.y; 138 | let x = mousePosition.x; 139 |
140 | {j| The window is currently $x x $y|j}->ReasonReact.string 141 |
; 142 | }; 143 | ``` 144 | -------------------------------------------------------------------------------- /src/Hooks.re: -------------------------------------------------------------------------------- 1 | let useHover = UseHover.useHover; 2 | let useVisible = UseVisible.useVisible; 3 | let useDebounce = UseDebounce.useDebounce; 4 | let useWindowSize = UseWindowSize.useWindowSize; 5 | let useDidMount = UseDidMount.useDidMount; -------------------------------------------------------------------------------- /src/hooks/UseDebounce.re: -------------------------------------------------------------------------------- 1 | let useDebounce = (~cb, ~delay, ()) => { 2 | let prevTimeoutId = ref(None); 3 | 4 | param => { 5 | switch (prevTimeoutId^) { 6 | | Some(id) => id->Js.Global.clearTimeout 7 | | None => () 8 | }; 9 | 10 | prevTimeoutId := Some(Js.Global.setTimeout(() => cb(param), delay)); 11 | }; 12 | }; -------------------------------------------------------------------------------- /src/hooks/UseDidMount.re: -------------------------------------------------------------------------------- 1 | let useDidMount = (~cb: unit => unit) => { 2 | React.useEffect1( 3 | () => { 4 | cb(); 5 | None; 6 | }, 7 | [||], 8 | ); 9 | }; -------------------------------------------------------------------------------- /src/hooks/UseMousePosition.re: -------------------------------------------------------------------------------- 1 | open Utils.Dom; 2 | 3 | type mousePosition = { 4 | x: float, 5 | y: float, 6 | }; 7 | [@bs.val] external window: Dom.element = "window"; 8 | 9 | let useMousePositon = () => { 10 | let (mousePosition, setMousePosition) = 11 | React.useState(_ => {x: 0., y: 0.}); 12 | 13 | let handleMouseMove = e => 14 | setMousePosition(_ => {x: e##clientX, y: e##clientY}); 15 | 16 | React.useEffect1( 17 | _ => { 18 | window->addEventListener("mousemove", handleMouseMove); 19 | Some(() => window->removeEventListener("mousemove", handleMouseMove)); 20 | }, 21 | [||], 22 | ); 23 | 24 | mousePosition; 25 | }; -------------------------------------------------------------------------------- /src/hooks/UseVisible.re: -------------------------------------------------------------------------------- 1 | open BsIntersectionObserver; 2 | type t; 3 | 4 | [@bs.new] external intersectionObserver: unit => t = "IntersectionObserver"; 5 | 6 | let useVisible = () => { 7 | let ref = React.useRef(Js.Nullable.null); 8 | let (isVisible, setIsVisible) = React.useState(_ => false); 9 | let observer = 10 | Create.intersectionObserver( 11 | ~cb= 12 | (entries, _) => 13 | Belt.Array.map(entries, entry => 14 | if (entry.intersectionRatio > 0.) { 15 | setIsVisible(_ => true); 16 | } else { 17 | setIsVisible(_ => false); 18 | } 19 | ) 20 | ->ignore, 21 | ~options=None, 22 | ); 23 | 24 | React.useEffect1( 25 | () => { 26 | ref 27 | ->Utils.optionFromRef 28 | ->Belt.Option.map(ref => observer.observe(ref)) 29 | ->ignore; 30 | Some( 31 | () => 32 | ref 33 | ->Utils.optionFromRef 34 | ->Belt.Option.map(ref => { 35 | observer.unobserve(ref); 36 | (); 37 | }) 38 | ->ignore, 39 | ); 40 | }, 41 | [|ref->React.Ref.current|], 42 | ); 43 | 44 | (ReactDOMRe.Ref.domRef(ref), isVisible); 45 | }; -------------------------------------------------------------------------------- /src/hooks/UseWindowSize.re: -------------------------------------------------------------------------------- 1 | open Utils.Dom; 2 | 3 | type size = { 4 | width: float, 5 | height: float, 6 | }; 7 | 8 | [@bs.val] external window: Dom.element = "window"; 9 | [@bs.val] [@bs.scope "window"] external innerHeight: float = "innerHeight"; 10 | [@bs.val] [@bs.scope "window"] external innerWidth: float = "innerWidth"; 11 | 12 | let useWindowSize = () => { 13 | let (size, setSize) = 14 | React.useState(() => {width: innerWidth, height: innerHeight}); 15 | 16 | let handleResize = _ => 17 | setSize(_ => {width: innerWidth, height: innerHeight}); 18 | 19 | React.useEffect1( 20 | () => { 21 | window->addEventListener("resize", handleResize); 22 | 23 | Some(() => window->removeEventListener("resize", handleResize)); 24 | }, 25 | [||], 26 | ); 27 | size; 28 | }; -------------------------------------------------------------------------------- /src/hooks/useHover.re: -------------------------------------------------------------------------------- 1 | open Utils.Dom; 2 | 3 | let useHover = () => { 4 | let (isHovered, setIsHovered) = React.useState(() => false); 5 | let ref = React.useRef(Js.Nullable.null); 6 | 7 | let onMouseOver = _ => setIsHovered(_ => true); 8 | let onMouseOut = _ => setIsHovered(_ => false); 9 | 10 | React.useEffect1( 11 | () => { 12 | ref 13 | ->Utils.optionFromRef 14 | ->Belt.Option.map(ref => { 15 | let node = ref->findDOMNode; 16 | node->addEventListener("mouseenter", onMouseOver); 17 | node->addEventListener("mouseleave", onMouseOut); 18 | }) 19 | ->ignore; 20 | Some( 21 | () => 22 | ref 23 | ->Utils.optionFromRef 24 | ->Belt.Option.map(ref => { 25 | let node = ref->findDOMNode; 26 | node->removeEventListener("mouseenter", onMouseOver); 27 | node->removeEventListener("mouseleave", onMouseOut); 28 | }) 29 | ->ignore, 30 | ); 31 | }, 32 | [|ref->React.Ref.current|], 33 | ); 34 | 35 | (ReactDOMRe.Ref.domRef(ref), isHovered); 36 | }; 37 | -------------------------------------------------------------------------------- /src/utils/Utils.re: -------------------------------------------------------------------------------- 1 | module Dom = UtilsDom; 2 | 3 | let optionFromRef = ref => ref->React.Ref.current->Js.Nullable.toOption; -------------------------------------------------------------------------------- /src/utils/UtilsDom.re: -------------------------------------------------------------------------------- 1 | [@bs.module "react-dom"] 2 | external findDOMNode: 'a => Dom.element = "findDOMNode"; 3 | 4 | [@bs.send] 5 | external addEventListener: (Dom.element, string, Js.t('event) => unit) => unit = 6 | "addEventListener"; 7 | 8 | [@bs.send] 9 | external removeEventListener: 10 | (Dom.element, string, Js.t('event) => unit) => unit = 11 | "removeEventListener"; -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | bs-intersection-observer@^0.1.2: 6 | version "0.1.2" 7 | resolved "https://registry.yarnpkg.com/bs-intersection-observer/-/bs-intersection-observer-0.1.2.tgz#1e2eef58c16f3c65dedd5973142eb3f61d2fc129" 8 | integrity sha512-Ni30XY9Agly91ZohLDs0Y5I/M17orGUusOEUiEtGnDj623l3g2HmWxSSJ22mVPZAmtTWIzEUkPrw49RVZd7MZg== 9 | 10 | bs-platform@^7: 11 | version "7.3.2" 12 | resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-7.3.2.tgz#301f5c9b4e8cf5713cb60ca22e145e56e793affe" 13 | integrity sha512-seJL5g4anK9la4erv+B2o2sMHQCxDF6OCRl9en3hbaUos/S3JsusQ0sPp4ORsbx5eXfHLYBwPljwKXlgpXtsgQ== 14 | 15 | "js-tokens@^3.0.0 || ^4.0.0": 16 | version "4.0.0" 17 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 18 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 19 | 20 | loose-envify@^1.1.0, loose-envify@^1.4.0: 21 | version "1.4.0" 22 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 23 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 24 | dependencies: 25 | js-tokens "^3.0.0 || ^4.0.0" 26 | 27 | object-assign@^4.1.1: 28 | version "4.1.1" 29 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 30 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 31 | 32 | prop-types@^15.6.2: 33 | version "15.7.2" 34 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 35 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 36 | dependencies: 37 | loose-envify "^1.4.0" 38 | object-assign "^4.1.1" 39 | react-is "^16.8.1" 40 | 41 | react-dom@>=16.8.1, react-dom@^16.8.1: 42 | version "16.9.0" 43 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.9.0.tgz#5e65527a5e26f22ae3701131bcccaee9fb0d3962" 44 | integrity sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ== 45 | dependencies: 46 | loose-envify "^1.1.0" 47 | object-assign "^4.1.1" 48 | prop-types "^15.6.2" 49 | scheduler "^0.15.0" 50 | 51 | react-is@^16.8.1: 52 | version "16.9.0" 53 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" 54 | integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== 55 | 56 | react@>=16.8.1, react@^16.8.1: 57 | version "16.9.0" 58 | resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" 59 | integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== 60 | dependencies: 61 | loose-envify "^1.1.0" 62 | object-assign "^4.1.1" 63 | prop-types "^15.6.2" 64 | 65 | reason-react@>=0.7.0: 66 | version "0.7.0" 67 | resolved "https://registry.yarnpkg.com/reason-react/-/reason-react-0.7.0.tgz#46a975c321e81cd51310d7b1a02418ca7667b0d6" 68 | integrity sha512-czR/f0lY5iyLCki9gwftOFF5Zs40l7ZSFmpGK/Z6hx2jBVeFDmIiXB8bAQW/cO6IvtuEt97OmsYueiuOYG9XjQ== 69 | dependencies: 70 | react ">=16.8.1" 71 | react-dom ">=16.8.1" 72 | 73 | scheduler@^0.15.0: 74 | version "0.15.0" 75 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.15.0.tgz#6bfcf80ff850b280fed4aeecc6513bc0b4f17f8e" 76 | integrity sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg== 77 | dependencies: 78 | loose-envify "^1.1.0" 79 | object-assign "^4.1.1" 80 | --------------------------------------------------------------------------------