├── .editorconfig ├── .gitignore ├── .npmignore ├── README.md ├── package.json ├── src └── index.ts ├── tsconfig.json ├── tslint.json └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | es 4 | yarn-error.log 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | src 2 | .editorconfig 3 | tsconfig.json 4 | tslint.json 5 | yarn.lock 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # react-hooks-responsive 2 | 3 | A react hooks approach to responsive layout. 4 | 5 | ## Install 6 | 7 | ``` 8 | yarn add react-hooks-responsive 9 | ``` 10 | 11 | or 12 | 13 | ``` 14 | npm install react-hooks-responsive 15 | ``` 16 | 17 | ## Usage Example 18 | 19 | ```tsx 20 | import React from 'react' 21 | import { useResponsive } from 'react-hooks-responsive' 22 | 23 | // smallest breakpoint must be 0 24 | // any number of breakpoints with any names can be given 25 | const breakpoints = { xs: 0, sm: 480, md: 1024 } 26 | 27 | const App: React.StatelessComponent = () => { 28 | const { size, orientation, screenIsAtLeast, screenIsAtMost } = useResponsive(breakpoints) 29 | 30 | return ( 31 |
32 |

33 | The screen is currently {size} in {orientation}.{' '} 34 |

35 |

is the screen at least sm? {screenIsAtLeast('sm') ? 'yes' : 'no'}.

36 |

is the screen at most sm and portrait? {screenIsAtMost('sm', 'portrait') ? 'yes' : 'no'}.

37 |
38 | ) 39 | } 40 | 41 | export default App 42 | ``` 43 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-hooks-responsive", 3 | "version": "0.2.1", 4 | "description": "A react hooks approach to responsive layout", 5 | "repository": "https://github.com/garth/react-hooks-responsive.git", 6 | "author": "Garth Williams", 7 | "license": "MIT", 8 | "keywords": [ 9 | "react", 10 | "responsive", 11 | "hooks" 12 | ], 13 | "main": "lib/index.js", 14 | "module": "es/index.js", 15 | "types": "lib/index.d.ts", 16 | "scripts": { 17 | "prebuild": "rimraf lib && rimraf es", 18 | "build:lib": "tsc --outDir lib --target es5 --preserveWatchOutput --downlevelIteration", 19 | "build:es": "tsc --outDir es --module es2015 --preserveWatchOutput", 20 | "build": "npm run build:lib & npm run build:es", 21 | "lint": "tslint -c tslint.json -t verbose 'src/**/*.{ts,tsx}'", 22 | "prettier": "prettier --write \"src/**/*.{js,json,ts,tsx,scss,html}\"" 23 | }, 24 | "prettier": { 25 | "printWidth": 120, 26 | "tabWidth": 2, 27 | "semi": false, 28 | "singleQuote": true, 29 | "jsxBracketSameLine": true 30 | }, 31 | "devDependencies": { 32 | "@types/react": "^16.9.2", 33 | "prettier": "^1.18.2", 34 | "react": "^16.9.0", 35 | "rimraf": "^3.0.0", 36 | "tslint": "^5.19.0", 37 | "tslint-config-prettier": "^1.18.0", 38 | "tslint-react": "^4.0.0", 39 | "typescript": "^3.6.2" 40 | }, 41 | "dependencies": { 42 | "tslib": "^1.10.0" 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from 'react' 2 | 3 | export type Orientation = 'landscape' | 'portrait' 4 | 5 | export interface Screen { 6 | size: keyof T 7 | orientation: Orientation 8 | screenIsAtLeast(breakpoint: keyof T, andOrientation?: Orientation): boolean 9 | screenIsAtMost(breakpoint: keyof T, andOrientation?: Orientation): boolean 10 | } 11 | 12 | export const useResponsive = (breakpoints: T): Screen => { 13 | const sizes = Object.entries(breakpoints).sort(([a, aSize], [b, bSize]) => bSize - aSize) 14 | if (sizes[sizes.length - 1][1] !== 0) { 15 | console.warn('fixing', sizes[sizes.length - 1][0], 'size which should be 0') 16 | sizes[sizes.length - 1][1] = 0 17 | } 18 | 19 | const getScreen = (): Screen => { 20 | const width = window.innerWidth 21 | const size = sizes.find(([_, size]) => size < width)[0] 22 | const orientation = width > window.innerHeight ? 'landscape' : 'portrait' 23 | return { 24 | size, 25 | orientation, 26 | screenIsAtLeast(breakpoint, andOrientation) { 27 | return width >= breakpoints[breakpoint] && (!andOrientation || andOrientation === orientation) 28 | }, 29 | screenIsAtMost(breakpoint, andOrientation) { 30 | return width <= breakpoints[breakpoint] && (!andOrientation || andOrientation === orientation) 31 | } 32 | } 33 | } 34 | 35 | const [screen, setScreen] = useState(getScreen()) 36 | 37 | useEffect( 38 | () => { 39 | const onResize = () => { 40 | const current = getScreen() 41 | 42 | if (current.size !== screen.size || current.orientation !== screen.orientation) { 43 | setScreen(current) 44 | } 45 | } 46 | 47 | window.addEventListener('resize', onResize) 48 | 49 | return () => { 50 | window.removeEventListener('resize', onResize) 51 | } 52 | }, 53 | [screen, setScreen, getScreen] 54 | ) 55 | 56 | return screen 57 | } 58 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "esModuleInterop": true, 4 | "target": "es6", 5 | "module": "commonjs", 6 | "jsx": "react", 7 | "rootDir": "src", 8 | "outDir": ".code", 9 | "newLine": "LF", 10 | "lib": ["dom", "es2017"], 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "declaration": true, 14 | "pretty": true, 15 | "sourceMap": true, 16 | "inlineSources": true 17 | }, 18 | "exclude": ["node_modules", "es", "lib"] 19 | } 20 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultSeverity": "error", 3 | "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"], 4 | "jsRules": {}, 5 | "rules": { 6 | "ordered-imports": false, 7 | "object-literal-sort-keys": false, 8 | "no-string-literal": false, 9 | "interface-name": false, 10 | "no-shadowed-variable": false, 11 | "jsx-no-lambda": false, 12 | "no-console": false, 13 | "member-ordering": false 14 | }, 15 | "rulesDirectory": [] 16 | } 17 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.5.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" 8 | integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/highlight@^7.0.0": 13 | version "7.5.0" 14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" 15 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== 16 | dependencies: 17 | chalk "^2.0.0" 18 | esutils "^2.0.2" 19 | js-tokens "^4.0.0" 20 | 21 | "@types/prop-types@*": 22 | version "15.7.1" 23 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6" 24 | integrity sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg== 25 | 26 | "@types/react@^16.9.2": 27 | version "16.9.2" 28 | resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.2.tgz#6d1765431a1ad1877979013906731aae373de268" 29 | integrity sha512-jYP2LWwlh+FTqGd9v7ynUKZzjj98T8x7Yclz479QdRhHfuW9yQ+0jjnD31eXSXutmBpppj5PYNLYLRfnZJvcfg== 30 | dependencies: 31 | "@types/prop-types" "*" 32 | csstype "^2.2.0" 33 | 34 | ansi-styles@^3.2.1: 35 | version "3.2.1" 36 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 37 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 38 | dependencies: 39 | color-convert "^1.9.0" 40 | 41 | argparse@^1.0.7: 42 | version "1.0.10" 43 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 44 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 45 | dependencies: 46 | sprintf-js "~1.0.2" 47 | 48 | balanced-match@^1.0.0: 49 | version "1.0.0" 50 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 51 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 52 | 53 | brace-expansion@^1.1.7: 54 | version "1.1.11" 55 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 56 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 57 | dependencies: 58 | balanced-match "^1.0.0" 59 | concat-map "0.0.1" 60 | 61 | builtin-modules@^1.1.1: 62 | version "1.1.1" 63 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" 64 | integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= 65 | 66 | chalk@^2.0.0, chalk@^2.3.0: 67 | version "2.4.2" 68 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 69 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 70 | dependencies: 71 | ansi-styles "^3.2.1" 72 | escape-string-regexp "^1.0.5" 73 | supports-color "^5.3.0" 74 | 75 | color-convert@^1.9.0: 76 | version "1.9.3" 77 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 78 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 79 | dependencies: 80 | color-name "1.1.3" 81 | 82 | color-name@1.1.3: 83 | version "1.1.3" 84 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 85 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 86 | 87 | commander@^2.12.1: 88 | version "2.20.0" 89 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" 90 | integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== 91 | 92 | concat-map@0.0.1: 93 | version "0.0.1" 94 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 95 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 96 | 97 | csstype@^2.2.0: 98 | version "2.6.6" 99 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.6.tgz#c34f8226a94bbb10c32cc0d714afdf942291fc41" 100 | integrity sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg== 101 | 102 | diff@^3.2.0: 103 | version "3.5.0" 104 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 105 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 106 | 107 | escape-string-regexp@^1.0.5: 108 | version "1.0.5" 109 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 110 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 111 | 112 | esprima@^4.0.0: 113 | version "4.0.1" 114 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 115 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 116 | 117 | esutils@^2.0.2: 118 | version "2.0.3" 119 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 120 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 121 | 122 | fs.realpath@^1.0.0: 123 | version "1.0.0" 124 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 125 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 126 | 127 | glob@^7.1.1, glob@^7.1.3: 128 | version "7.1.4" 129 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 130 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 131 | dependencies: 132 | fs.realpath "^1.0.0" 133 | inflight "^1.0.4" 134 | inherits "2" 135 | minimatch "^3.0.4" 136 | once "^1.3.0" 137 | path-is-absolute "^1.0.0" 138 | 139 | has-flag@^3.0.0: 140 | version "3.0.0" 141 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 142 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 143 | 144 | inflight@^1.0.4: 145 | version "1.0.6" 146 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 147 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 148 | dependencies: 149 | once "^1.3.0" 150 | wrappy "1" 151 | 152 | inherits@2: 153 | version "2.0.4" 154 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 155 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 156 | 157 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: 158 | version "4.0.0" 159 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 160 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 161 | 162 | js-yaml@^3.13.1: 163 | version "3.13.1" 164 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 165 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 166 | dependencies: 167 | argparse "^1.0.7" 168 | esprima "^4.0.0" 169 | 170 | loose-envify@^1.1.0, loose-envify@^1.4.0: 171 | version "1.4.0" 172 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 173 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== 174 | dependencies: 175 | js-tokens "^3.0.0 || ^4.0.0" 176 | 177 | minimatch@^3.0.4: 178 | version "3.0.4" 179 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 180 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 181 | dependencies: 182 | brace-expansion "^1.1.7" 183 | 184 | minimist@0.0.8: 185 | version "0.0.8" 186 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 187 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 188 | 189 | mkdirp@^0.5.1: 190 | version "0.5.1" 191 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 192 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 193 | dependencies: 194 | minimist "0.0.8" 195 | 196 | object-assign@^4.1.1: 197 | version "4.1.1" 198 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 199 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 200 | 201 | once@^1.3.0: 202 | version "1.4.0" 203 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 204 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 205 | dependencies: 206 | wrappy "1" 207 | 208 | path-is-absolute@^1.0.0: 209 | version "1.0.1" 210 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 211 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 212 | 213 | path-parse@^1.0.6: 214 | version "1.0.6" 215 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 216 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 217 | 218 | prettier@^1.18.2: 219 | version "1.18.2" 220 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" 221 | integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== 222 | 223 | prop-types@^15.6.2: 224 | version "15.7.2" 225 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" 226 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== 227 | dependencies: 228 | loose-envify "^1.4.0" 229 | object-assign "^4.1.1" 230 | react-is "^16.8.1" 231 | 232 | react-is@^16.8.1: 233 | version "16.9.0" 234 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb" 235 | integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw== 236 | 237 | react@^16.9.0: 238 | version "16.9.0" 239 | resolved "https://registry.yarnpkg.com/react/-/react-16.9.0.tgz#40ba2f9af13bc1a38d75dbf2f4359a5185c4f7aa" 240 | integrity sha512-+7LQnFBwkiw+BobzOF6N//BdoNw0ouwmSJTEm9cglOOmsg/TMiFHZLe2sEoN5M7LgJTj9oHH0gxklfnQe66S1w== 241 | dependencies: 242 | loose-envify "^1.1.0" 243 | object-assign "^4.1.1" 244 | prop-types "^15.6.2" 245 | 246 | resolve@^1.3.2: 247 | version "1.12.0" 248 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" 249 | integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== 250 | dependencies: 251 | path-parse "^1.0.6" 252 | 253 | rimraf@^3.0.0: 254 | version "3.0.0" 255 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" 256 | integrity sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg== 257 | dependencies: 258 | glob "^7.1.3" 259 | 260 | semver@^5.3.0: 261 | version "5.7.1" 262 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 263 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 264 | 265 | sprintf-js@~1.0.2: 266 | version "1.0.3" 267 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 268 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 269 | 270 | supports-color@^5.3.0: 271 | version "5.5.0" 272 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 273 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 274 | dependencies: 275 | has-flag "^3.0.0" 276 | 277 | tslib@^1.10.0, tslib@^1.8.0, tslib@^1.8.1: 278 | version "1.10.0" 279 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 280 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 281 | 282 | tslint-config-prettier@^1.18.0: 283 | version "1.18.0" 284 | resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" 285 | integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== 286 | 287 | tslint-react@^4.0.0: 288 | version "4.0.0" 289 | resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-4.0.0.tgz#b4bb4c01c32448cb14d23f143a2f5e4989bb961e" 290 | integrity sha512-9fNE0fm9zNDx1+b6hgy8rgDN2WsQLRiIrn3+fbqm0tazBVF6jiaCFAITxmU+WSFWYE03Xhp1joCircXOe1WVAQ== 291 | dependencies: 292 | tsutils "^3.9.1" 293 | 294 | tslint@^5.19.0: 295 | version "5.19.0" 296 | resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.19.0.tgz#a2cbd4a7699386da823f6b499b8394d6c47bb968" 297 | integrity sha512-1LwwtBxfRJZnUvoS9c0uj8XQtAnyhWr9KlNvDIdB+oXyT+VpsOAaEhEgKi1HrZ8rq0ki/AAnbGSv4KM6/AfVZw== 298 | dependencies: 299 | "@babel/code-frame" "^7.0.0" 300 | builtin-modules "^1.1.1" 301 | chalk "^2.3.0" 302 | commander "^2.12.1" 303 | diff "^3.2.0" 304 | glob "^7.1.1" 305 | js-yaml "^3.13.1" 306 | minimatch "^3.0.4" 307 | mkdirp "^0.5.1" 308 | resolve "^1.3.2" 309 | semver "^5.3.0" 310 | tslib "^1.8.0" 311 | tsutils "^2.29.0" 312 | 313 | tsutils@^2.29.0: 314 | version "2.29.0" 315 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" 316 | integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== 317 | dependencies: 318 | tslib "^1.8.1" 319 | 320 | tsutils@^3.9.1: 321 | version "3.17.1" 322 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" 323 | integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== 324 | dependencies: 325 | tslib "^1.8.1" 326 | 327 | typescript@^3.6.2: 328 | version "3.6.2" 329 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.2.tgz#105b0f1934119dde543ac8eb71af3a91009efe54" 330 | integrity sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw== 331 | 332 | wrappy@1: 333 | version "1.0.2" 334 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 335 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 336 | --------------------------------------------------------------------------------