├── .eslintrc
├── .flowconfig
├── .gitignore
├── .travis.yml
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── index.d.ts
├── index.js
├── jsconfig.json
├── lib
├── KeyboardAwareFlatList.js
├── KeyboardAwareHOC.js
├── KeyboardAwareInterface.js
├── KeyboardAwareScrollView.js
└── KeyboardAwareSectionList.js
├── package.json
└── yarn.lock
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "parser": "babel-eslint",
3 | "parserOptions": {
4 | "ecmaFeatures": {
5 | "jsx": true
6 | }
7 | },
8 | "env": {
9 | "es6": true,
10 | "jasmine": true
11 | },
12 | "plugins": ["react", "react-native", "flowtype"],
13 | // Map from global var to bool specifying if it can be redefined
14 | "globals": {
15 | "__DEV__": true,
16 | "__dirname": false,
17 | "__fbBatchedBridgeConfig": false,
18 | "alert": false,
19 | "cancelAnimationFrame": false,
20 | "cancelIdleCallback": false,
21 | "clearImmediate": true,
22 | "clearInterval": false,
23 | "clearTimeout": false,
24 | "console": false,
25 | "document": false,
26 | "escape": false,
27 | "Event": false,
28 | "EventTarget": false,
29 | "exports": false,
30 | "fetch": false,
31 | "FormData": false,
32 | "global": false,
33 | "Generator": true,
34 | "jest": false,
35 | "Map": true,
36 | "module": false,
37 | "navigator": false,
38 | "process": false,
39 | "Promise": true,
40 | "requestAnimationFrame": true,
41 | "requestIdleCallback": true,
42 | "require": false,
43 | "Set": true,
44 | "setImmediate": true,
45 | "setInterval": false,
46 | "setTimeout": false,
47 | "window": false,
48 | "XMLHttpRequest": false,
49 | "pit": false,
50 | "test": true,
51 | // Flow global types.
52 | "ReactComponent": false,
53 | "ReactClass": false,
54 | "ReactElement": false,
55 | "ReactPropsCheckType": false,
56 | "ReactPropsChainableTypeChecker": false,
57 | "ReactPropTypes": false,
58 | "SyntheticEvent": false,
59 | "$Either": false,
60 | "$All": false,
61 | "$ArrayBufferView": false,
62 | "$Tuple": false,
63 | "$Supertype": false,
64 | "$Subtype": false,
65 | "$Shape": false,
66 | "$Diff": false,
67 | "$Keys": false,
68 | "$Enum": false,
69 | "$Exports": false,
70 | "$FlowIssue": false,
71 | "$FlowFixMe": false,
72 | "$FixMe": false
73 | },
74 | "rules": {
75 | "comma-dangle": 0, // disallow trailing commas in object literals
76 | "no-cond-assign": 1, // disallow assignment in conditional expressions
77 | "no-console": 0, // disallow use of console (off by default in the node environment)
78 | "no-const-assign": 2, // disallow assignment to const-declared variables
79 | "no-constant-condition": 0, // disallow use of constant expressions in conditions
80 | "no-control-regex": 1, // disallow control characters in regular expressions
81 | "no-debugger": 0, // disallow use of debugger
82 | "no-dupe-keys": 1, // disallow duplicate keys when creating object literals
83 | "no-empty": 0, // disallow empty statements
84 | "no-ex-assign": 1, // disallow assigning to the exception in a catch block
85 | "no-extra-boolean-cast": 1, // disallow double-negation boolean casts in a boolean context
86 | "no-extra-parens": 0, // disallow unnecessary parentheses (off by default)
87 | "no-extra-semi": 1, // disallow unnecessary semicolons
88 | "no-func-assign": 1, // disallow overwriting functions written as function declarations
89 | "no-inner-declarations": 0, // disallow function or variable declarations in nested blocks
90 | "no-invalid-regexp": 1, // disallow invalid regular expression strings in the RegExp constructor
91 | "no-negated-in-lhs": 1, // disallow negation of the left operand of an in expression
92 | "no-obj-calls": 1, // disallow the use of object properties of the global object (Math and JSON) as functions
93 | "no-regex-spaces": 1, // disallow multiple spaces in a regular expression literal
94 | "no-reserved-keys": 0, // disallow reserved words being used as object literal keys (off by default)
95 | "no-sparse-arrays": 1, // disallow sparse arrays
96 | "no-unreachable": 1, // disallow unreachable statements after a return, throw, continue, or break statement
97 | "use-isnan": 1, // disallow comparisons with the value NaN
98 | "valid-jsdoc": 0, // Ensure JSDoc comments are valid (off by default)
99 | "valid-typeof": 1, // Ensure that the results of typeof are compared against a valid string
100 | // Best Practices
101 | // These are rules designed to prevent you from making mistakes. They either prescribe a better way of doing something or help you avoid footguns.
102 | "block-scoped-var": 0, // treat var statements as if they were block scoped (off by default)
103 | "complexity": 0, // specify the maximum cyclomatic complexity allowed in a program (off by default)
104 | "consistent-return": 0, // require return statements to either always or never specify values
105 | "curly": 1, // specify curly brace conventions for all control statements
106 | "default-case": 0, // require default case in switch statements (off by default)
107 | "dot-notation": 1, // encourages use of dot notation whenever possible
108 | "eqeqeq": [1, "allow-null"], // require the use of === and !==
109 | "guard-for-in": 0, // make sure for-in loops have an if statement (off by default)
110 | "no-alert": 1, // disallow the use of alert, confirm, and prompt
111 | "no-caller": 1, // disallow use of arguments.caller or arguments.callee
112 | "no-div-regex": 1, // disallow division operators explicitly at beginning of regular expression (off by default)
113 | "no-else-return": 0, // disallow else after a return in an if (off by default)
114 | "no-eq-null": 0, // disallow comparisons to null without a type-checking operator (off by default)
115 | "no-eval": 1, // disallow use of eval()
116 | "no-extend-native": 1, // disallow adding to native types
117 | "no-extra-bind": 1, // disallow unnecessary function binding
118 | "no-fallthrough": 1, // disallow fallthrough of case statements
119 | "no-floating-decimal": 1, // disallow the use of leading or trailing decimal points in numeric literals (off by default)
120 | "no-implied-eval": 1, // disallow use of eval()-like methods
121 | "no-labels": 1, // disallow use of labeled statements
122 | "no-iterator": 1, // disallow usage of __iterator__ property
123 | "no-lone-blocks": 1, // disallow unnecessary nested blocks
124 | "no-loop-func": 0, // disallow creation of functions within loops
125 | "no-multi-str": 0, // disallow use of multiline strings
126 | "no-native-reassign": 0, // disallow reassignments of native objects
127 | "no-new": 1, // disallow use of new operator when not part of the assignment or comparison
128 | "no-new-func": 1, // disallow use of new operator for Function object
129 | "no-new-wrappers": 1, // disallows creating new instances of String,Number, and Boolean
130 | "no-octal": 1, // disallow use of octal literals
131 | "no-octal-escape": 1, // disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251";
132 | "no-proto": 1, // disallow usage of __proto__ property
133 | "no-redeclare": 0, // disallow declaring the same variable more then once
134 | "no-return-assign": 1, // disallow use of assignment in return statement
135 | "no-script-url": 1, // disallow use of javascript: urls.
136 | "no-self-compare": 1, // disallow comparisons where both sides are exactly the same (off by default)
137 | "no-sequences": 1, // disallow use of comma operator
138 | "no-unused-expressions": 0, // disallow usage of expressions in statement position
139 | "no-void": 1, // disallow use of void operator (off by default)
140 | "no-warning-comments": 0, // disallow usage of configurable warning terms in comments": 1, // e.g. TODO or FIXME (off by default)
141 | "no-with": 1, // disallow use of the with statement
142 | "radix": 1, // require use of the second argument for parseInt() (off by default)
143 | "semi-spacing": 1, // require a space after a semi-colon
144 | "vars-on-top": 0, // requires to declare all vars on top of their containing scope (off by default)
145 | "wrap-iife": 0, // require immediate function invocation to be wrapped in parentheses (off by default)
146 | "yoda": 1, // require or disallow Yoda conditions
147 | // Variables
148 | // These rules have to do with variable declarations.
149 | "no-catch-shadow": 1, // disallow the catch clause parameter name being the same as a variable in the outer scope (off by default in the node environment)
150 | "no-delete-var": 1, // disallow deletion of variables
151 | "no-label-var": 1, // disallow labels that share a name with a variable
152 | "no-shadow": 1, // disallow declaration of variables already declared in the outer scope
153 | "no-shadow-restricted-names": 1, // disallow shadowing of names such as arguments
154 | "no-undef": 2, // disallow use of undeclared variables unless mentioned in a /*global */ block
155 | "no-undefined": 0, // disallow use of undefined variable (off by default)
156 | "no-undef-init": 1, // disallow use of undefined when initializing variables
157 | "no-unused-vars": [
158 | 1,
159 | {
160 | "vars": "all",
161 | "args": "none"
162 | }
163 | ], // disallow declaration of variables that are not used in the code
164 | "no-use-before-define": 0, // disallow use of variables before they are defined
165 | // Node.js
166 | // These rules are specific to JavaScript running on Node.js.
167 | "handle-callback-err": 1, // enforces error handling in callbacks (off by default) (on by default in the node environment)
168 | "no-mixed-requires": 1, // disallow mixing regular variable and require declarations (off by default) (on by default in the node environment)
169 | "no-new-require": 1, // disallow use of new operator with the require function (off by default) (on by default in the node environment)
170 | "no-path-concat": 1, // disallow string concatenation with __dirname and __filename (off by default) (on by default in the node environment)
171 | "no-process-exit": 0, // disallow process.exit() (on by default in the node environment)
172 | "no-restricted-modules": 1, // restrict usage of specified node modules (off by default)
173 | "no-sync": 0, // disallow use of synchronous methods (off by default)
174 | // Stylistic Issues
175 | // These rules are purely matters of style and are quite subjective.
176 | "key-spacing": 0,
177 | "keyword-spacing": 1, // enforce spacing before and after keywords
178 | "jsx-quotes": [1, "prefer-single"],
179 | "comma-spacing": 0,
180 | "no-multi-spaces": 0,
181 | "brace-style": 0, // enforce one true brace style (off by default)
182 | "camelcase": 0, // require camel case names
183 | "consistent-this": [1, "self"], // enforces consistent naming when capturing the current execution context (off by default)
184 | "eol-last": 1, // enforce newline at the end of file, with no multiple empty lines
185 | "func-names": 0, // require function expressions to have a name (off by default)
186 | "func-style": 0, // enforces use of function declarations or expressions (off by default)
187 | "new-cap": 0, // require a capital letter for constructors
188 | "new-parens": 1, // disallow the omission of parentheses when invoking a constructor with no arguments
189 | "no-nested-ternary": 0, // disallow nested ternary expressions (off by default)
190 | "no-array-constructor": 1, // disallow use of the Array constructor
191 | "no-lonely-if": 0, // disallow if as the only statement in an else block (off by default)
192 | "no-new-object": 1, // disallow use of the Object constructor
193 | "no-spaced-func": 1, // disallow space between function identifier and application
194 | "no-ternary": 0, // disallow the use of ternary operators (off by default)
195 | "no-trailing-spaces": 1, // disallow trailing whitespace at the end of lines
196 | "no-underscore-dangle": 0, // disallow dangling underscores in identifiers
197 | "no-mixed-spaces-and-tabs": 1, // disallow mixed spaces and tabs for indentation
198 | "quotes": [1, "single", "avoid-escape"], // specify whether double or single quotes should be used
199 | "quote-props": 0, // require quotes around object literal property names (off by default)
200 | "semi": ["error", "never"], // require or disallow use of semicolons instead of ASI
201 | "sort-vars": 0, // sort variables within the same declaration block (off by default)
202 | "space-in-brackets": 0, // require or disallow spaces inside brackets (off by default)
203 | "space-in-parens": 0, // require or disallow spaces inside parentheses (off by default)
204 | "space-infix-ops": 1, // require spaces around operators
205 | "space-unary-ops": [
206 | 1,
207 | {
208 | "words": true,
209 | "nonwords": false
210 | }
211 | ], // require or disallow spaces before/after unary operators (words on by default, nonwords off by default)
212 | "max-nested-callbacks": 0, // specify the maximum depth callbacks can be nested (off by default)
213 | "one-var": 0, // allow just one var statement per function (off by default)
214 | "wrap-regex": 0, // require regex literals to be wrapped in parentheses (off by default)
215 | // Legacy
216 | // The following rules are included for compatibility with JSHint and JSLint. While the names of the rules may not match up with the JSHint/JSLint counterpart, the functionality is the same.
217 | "max-depth": 0, // specify the maximum depth that blocks can be nested (off by default)
218 | "max-len": 0, // specify the maximum length of a line in your program (off by default)
219 | "max-params": 0, // limits the number of parameters that can be used in the function declaration. (off by default)
220 | "max-statements": 0, // specify the maximum number of statement allowed in a function (off by default)
221 | "no-bitwise": 1, // disallow use of bitwise operators (off by default)
222 | "no-plusplus": 0, // disallow use of unary operators, ++ and -- (off by default)
223 | // React Plugin
224 | // The following rules are made available via `eslint-plugin-react`.
225 | "react/display-name": 0,
226 | "react/jsx-boolean-value": 0,
227 | "react/jsx-no-duplicate-props": 2,
228 | "react/jsx-no-undef": 1,
229 | "react/jsx-sort-props": 0,
230 | "react/jsx-uses-react": 1,
231 | "react/jsx-uses-vars": 1,
232 | "react/no-did-mount-set-state": 1,
233 | "react/no-did-update-set-state": 1,
234 | "react/no-multi-comp": 0,
235 | "react/no-string-refs": 1,
236 | "react/no-unknown-property": 0,
237 | "react/prop-types": 0,
238 | "react/react-in-jsx-scope": 1,
239 | "react/self-closing-comp": 1,
240 | "react/wrap-multilines": 0,
241 | // Flowtype Plugin
242 | "flowtype/boolean-style": [2, "boolean"],
243 | "flowtype/define-flow-type": 1,
244 | "flowtype/delimiter-dangle": [2, "never"],
245 | "flowtype/generic-spacing": [2, "never"],
246 | "flowtype/no-primitive-constructor-types": 2,
247 | "flowtype/no-weak-types": 0,
248 | "flowtype/object-type-delimiter": [2, "comma"],
249 | "flowtype/require-parameter-type": 2,
250 | "flowtype/require-return-type": 0,
251 | "flowtype/require-valid-file-annotation": 2,
252 | "flowtype/semi": [2, "never"],
253 | "flowtype/space-after-type-colon": [2, "always"],
254 | "flowtype/space-before-generic-bracket": [2, "never"],
255 | "flowtype/space-before-type-colon": [2, "never"],
256 | "flowtype/type-id-match": 0,
257 | "flowtype/union-intersection-spacing": [2, "always"],
258 | "flowtype/use-flow-type": 1,
259 | "flowtype/valid-syntax": 1
260 | }
261 | }
262 |
--------------------------------------------------------------------------------
/.flowconfig:
--------------------------------------------------------------------------------
1 | [ignore]
2 |
3 | # We fork some components by platform.
4 | .*/*.web.js
5 | .*/*.android.js
6 |
7 | # Some modules have their own node_modules with overlap
8 | .*/node_modules/node-haste/.*
9 |
10 | # Ugh
11 | .*/node_modules/babel.*
12 | .*/node_modules/babylon.*
13 | .*/node_modules/invariant.*
14 |
15 | # Ignore react and fbjs where there are overlaps, but don't ignore
16 | # anything that react-native relies on
17 | .*/node_modules/fbjs/lib/Map.js
18 | .*/node_modules/fbjs/lib/fetch.js
19 | .*/node_modules/fbjs/lib/ExecutionEnvironment.js
20 | .*/node_modules/fbjs/lib/ErrorUtils.js
21 |
22 | # Flow has a built-in definition for the 'react' module which we prefer to use
23 | # over the currently-untyped source
24 | .*/node_modules/react/react.js
25 | .*/node_modules/react/lib/React.js
26 | .*/node_modules/react/lib/ReactDOM.js
27 |
28 | .*/__mocks__/.*
29 | .*/__tests__/.*
30 |
31 | .*/commoner/test/source/widget/share.js
32 |
33 | # Ignore commoner tests
34 | .*/node_modules/commoner/test/.*
35 |
36 | # See https://github.com/facebook/flow/issues/442
37 | .*/react-tools/node_modules/commoner/lib/reader.js
38 |
39 | # Ignore jest
40 | .*/node_modules/jest-cli/.*
41 |
42 | # Ignore Website
43 | .*/website/.*
44 |
45 | # Ignore generators
46 | .*/local-cli/generator.*
47 |
48 | # Ignore BUCK generated folders
49 | .*\.buckd/
50 |
51 | .*/node_modules/is-my-json-valid/test/.*\.json
52 | .*/node_modules/iconv-lite/encodings/tables/.*\.json
53 | .*/node_modules/y18n/test/.*\.json
54 | .*/node_modules/spdx-license-ids/spdx-license-ids.json
55 | .*/node_modules/spdx-exceptions/index.json
56 | .*/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json
57 | .*/node_modules/resolve/lib/core.json
58 | .*/node_modules/jsonparse/samplejson/.*\.json
59 | .*/node_modules/json5/test/.*\.json
60 | .*/node_modules/ua-parser-js/test/.*\.json
61 | .*/node_modules/builtin-modules/builtin-modules.json
62 | .*/node_modules/binary-extensions/binary-extensions.json
63 | .*/node_modules/url-regex/tlds.json
64 | .*/node_modules/joi/.*\.json
65 | .*/node_modules/isemail/.*\.json
66 | .*/node_modules/tr46/.*\.json
67 |
68 |
69 | [include]
70 |
71 | [libs]
72 | node_modules/react-native/Libraries/react-native/react-native-interface.js
73 | node_modules/react-native/flow
74 | flow/
75 |
76 | [options]
77 | module.system=haste
78 |
79 | esproposal.class_static_fields=enable
80 | esproposal.class_instance_fields=enable
81 |
82 | munge_underscores=true
83 |
84 | module.name_mapper='^image![a-zA-Z0-9$_-]+$' -> 'GlobalImageStub'
85 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\)$' -> 'RelativeImageStub'
86 |
87 | suppress_type=$FlowIssue
88 | suppress_type=$FlowFixMe
89 | suppress_type=$FixMe
90 |
91 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(2[0-3]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)
92 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(2[0-3]\\|1[0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+
93 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
94 |
95 | [version]
96 | >=0.47.0
97 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.log
2 | node_modules
3 | AwesomeProject.xcodeproj
4 | AwesomeProjectTests
5 | index.ios.js
6 | iOS
7 |
8 | .idea/
9 | .vscode/
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - 14
4 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | * Using welcoming and inclusive language
12 | * Being respectful of differing viewpoints and experiences
13 | * Gracefully accepting constructive criticism
14 | * Focusing on what is best for the community
15 | * Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | * Trolling, insulting/derogatory comments, and personal or political attacks
21 | * Public or private harassment
22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | * Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28 |
29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | ## Scope
32 |
33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34 |
35 | ## Enforcement
36 |
37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at amedina@apsl.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38 |
39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40 |
41 | ## Attribution
42 |
43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44 |
45 | [homepage]: http://contributor-covenant.org
46 | [version]: http://contributor-covenant.org/version/1/4/
47 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 APSL
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # react-native-keyboard-aware-scroll-view
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | A ScrollView component that handles keyboard appearance and automatically scrolls to focused `TextInput`.
10 |
11 |
12 |
13 |
14 |
15 | ## Supported versions
16 |
17 | - `v0.4.0` requires `RN>=0.48`
18 | - `v0.2.0` requires `RN>=0.32.0`.
19 | - `v0.1.2` requires `RN>=0.27.2` but you should use `0.2.0` in order to make it work with multiple scroll views.
20 | - `v0.0.7` requires `react-native>=0.25.0`.
21 | - Use `v0.0.6` for older RN versions.
22 |
23 | ## Installation
24 |
25 | Installation can be done through `npm` or `yarn`:
26 |
27 | ```shell
28 | npm i react-native-keyboard-aware-scroll-view --save
29 | ```
30 |
31 | ```shell
32 | yarn add react-native-keyboard-aware-scroll-view
33 | ```
34 |
35 | ## Usage
36 |
37 | You can use the `KeyboardAwareScrollView`, `KeyboardAwareSectionList` or the `KeyboardAwareFlatList`
38 | components. They accept `ScrollView`, `SectionList` and `FlatList` default props respectively and
39 | implement a custom high order component called `KeyboardAwareHOC` to handle keyboard appearance.
40 | The high order component is also available if you want to use it in any other component.
41 |
42 | Import `react-native-keyboard-aware-scroll-view` and wrap your content inside
43 | it:
44 |
45 | ```js
46 | import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'
47 | ```
48 |
49 | ```jsx
50 |
51 |
52 |
53 |
54 |
55 | ```
56 |
57 | ## Auto-scroll in `TextInput` fields
58 |
59 | As of `v0.1.0`, the component auto scrolls to the focused `TextInput` 😎. For versions `v0.0.7` and older you can do the following.
60 |
61 | ### Programatically scroll to any `TextInput`
62 |
63 | In order to scroll to any `TextInput` field, you can use the built-in method `scrollToFocusedInput`. Example:
64 |
65 | ```js
66 | _scrollToInput (reactNode: any) {
67 | // Add a 'scroll' ref to your ScrollView
68 | this.scroll.props.scrollToFocusedInput(reactNode)
69 | }
70 | ```
71 |
72 | ```jsx
73 | {
75 | this.scroll = ref
76 | }}>
77 |
78 | {
80 | // `bind` the function if you're using ES6 classes
81 | this._scrollToInput(ReactNative.findNodeHandle(event.target))
82 | }}
83 | />
84 |
85 |
86 | ```
87 |
88 | ### Programatically scroll to any position
89 |
90 | There's another built-in function that lets you programatically scroll to any position of the scroll view:
91 |
92 | ```js
93 | this.scroll.props.scrollToPosition(0, 0)
94 | ```
95 |
96 | ## Register to keyboard events
97 |
98 | You can register to `ScrollViewResponder` events `onKeyboardWillShow` and `onKeyboardWillHide`:
99 |
100 | ```jsx
101 | {
103 | console.log('Keyboard event', frames)
104 | }}>
105 |
106 |
107 |
108 |
109 | ```
110 |
111 | ## Android Support
112 |
113 | First, Android natively has this feature, you can easily enable it by setting `windowSoftInputMode` in `AndroidManifest.xml`. Check [here](https://developer.android.com/guide/topics/manifest/activity-element.html#wsoft).
114 |
115 | But if you want to use feature like `extraHeight`, you need to enable Android Support with the following steps:
116 |
117 | - Make sure you are using react-native `0.46` or above.
118 | - Set `windowSoftInputMode` to `adjustPan` in `AndroidManifest.xml`.
119 | - Set `enableOnAndroid` property to `true`.
120 |
121 | Android Support is not perfect, here is the supported list:
122 |
123 | | **Prop** | **Android Support** |
124 | | --------------------------- | ------------------- |
125 | | `viewIsInsideTabBar` | Yes |
126 | | `resetScrollToCoords` | Yes |
127 | | `enableAutomaticScroll` | Yes |
128 | | `extraHeight` | Yes |
129 | | `extraScrollHeight` | Yes |
130 | | `enableResetScrollToCoords` | Yes |
131 | | `keyboardOpeningTime` | No |
132 |
133 | ## API
134 |
135 | ### Props
136 |
137 | All the `ScrollView`/`FlatList` props will be passed.
138 |
139 | | **Prop** | **Type** | **Description** |
140 | | --------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------- |
141 | | `innerRef` | `Function` | Catch the reference of the component. |
142 | | `viewIsInsideTabBar` | `boolean` | Adds an extra offset that represents the `TabBarIOS` height. |
143 | | `resetScrollToCoords` | `Object: {x: number, y: number}` | Coordinates that will be used to reset the scroll when the keyboard hides. |
144 | | `enableAutomaticScroll` | `boolean` | When focus in `TextInput` will scroll the position, default is enabled. |
145 | | `extraHeight` | `number` | Adds an extra offset when focusing the `TextInput`s. |
146 | | `extraScrollHeight` | `number` | Adds an extra offset to the keyboard. Useful if you want to stick elements above the keyboard. |
147 | | `enableResetScrollToCoords` | `boolean` | Lets the user enable or disable automatic resetScrollToCoords. |
148 | | `keyboardOpeningTime` | `number` | Sets the delay time before scrolling to new position, default is 250 |
149 | | `enableOnAndroid` | `boolean` | Enable Android Support |
150 |
151 | ### Methods
152 |
153 | Use `innerRef` to get the component reference and use `this.scrollRef.props` to access these methods.
154 |
155 | | **Method** | **Parameter** | **Description** |
156 | | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
157 | | `getScrollResponder` | `void` | Get `ScrollResponder` |
158 | | `scrollToPosition` | `x: number, y: number, animated: bool = true` | Scroll to specific position with or without animation. |
159 | | `scrollToEnd` | `animated?: bool = true` | Scroll to end with or without animation. |
160 | | `scrollIntoView` | `element: React.Element<*>, options: { getScrollPosition: ?(parentLayout, childLayout, contentOffset) => { x: number, y: number, animated: boolean } }` | Scrolls an element inside a KeyboardAwareScrollView into view. |
161 |
162 | ### Using high order component
163 |
164 | Enabling any component to be keyboard-aware is very easy. Take a look at the code of `KeyboardAwareFlatList`:
165 |
166 | ```js
167 | /* @flow */
168 |
169 | import { FlatList } from 'react-native'
170 | import listenToKeyboardEvents from './KeyboardAwareHOC'
171 |
172 | export default listenToKeyboardEvents(FlatList)
173 | ```
174 |
175 | The HOC can also be configured. Sometimes it's more convenient to provide a static config than configuring the behavior with props. This HOC config can be overriden with props.
176 |
177 | ```js
178 | /* @flow */
179 |
180 | import { FlatList } from 'react-native'
181 | import listenToKeyboardEvents from './KeyboardAwareHOC'
182 |
183 | const config = {
184 | enableOnAndroid: true,
185 | enableAutomaticScroll: true
186 | }
187 |
188 | export default listenToKeyboardEvents(config)(FlatList)
189 | ```
190 |
191 | The available config options are:
192 |
193 | ```js
194 | {
195 | enableOnAndroid: boolean,
196 | contentContainerStyle: ?Object,
197 | enableAutomaticScroll: boolean,
198 | extraHeight: number,
199 | extraScrollHeight: number,
200 | enableResetScrollToCoords: boolean,
201 | keyboardOpeningTime: number,
202 | viewIsInsideTabBar: boolean,
203 | refPropName: string,
204 | extractNativeRef: Function
205 | }
206 | ```
207 |
208 | ## License
209 |
210 | MIT.
211 |
212 | ## Author
213 |
214 | Álvaro Medina Ballester ``
215 |
216 | Built with 💛 by [APSL](https://github.com/apsl).
217 |
--------------------------------------------------------------------------------
/index.d.ts:
--------------------------------------------------------------------------------
1 | // Type definitions for react-native-keyboard-aware-scroll-view
2 | // Project: https://github.com/APSL/react-native-keyboard-aware-scroll-view
3 | // Definitions by: Kyle Roach
4 | // TypeScript Version: 2.3.2
5 |
6 | import * as React from 'react'
7 | import {
8 | ScrollViewProps,
9 | FlatListProps,
10 | SectionListProps
11 | } from 'react-native'
12 |
13 | interface KeyboardAwareProps {
14 | /**
15 | * Catches the reference of the component.
16 | *
17 | *
18 | * @type {function}
19 | * @memberof KeyboardAwareProps
20 | */
21 | innerRef?: (ref: JSX.Element) => void
22 | /**
23 | * Adds an extra offset that represents the TabBarIOS height.
24 | *
25 | * Default is false
26 | * @type {boolean}
27 | * @memberof KeyboardAwareProps
28 | */
29 | viewIsInsideTabBar?: boolean
30 |
31 | /**
32 | * Coordinates that will be used to reset the scroll when the keyboard hides.
33 | *
34 | * @type {{
35 | * x: number,
36 | * y: number
37 | * }}
38 | * @memberof KeyboardAwareProps
39 | */
40 | resetScrollToCoords?: {
41 | x: number
42 | y: number
43 | }
44 |
45 | /**
46 | * Lets the user enable or disable automatic resetScrollToCoords
47 | *
48 | * @type {boolean}
49 | * @memberof KeyboardAwareProps
50 | */
51 | enableResetScrollToCoords?: boolean
52 |
53 | /**
54 | * When focus in TextInput will scroll the position
55 | *
56 | * Default is true
57 | *
58 | * @type {boolean}
59 | * @memberof KeyboardAwareProps
60 | */
61 |
62 | enableAutomaticScroll?: boolean
63 | /**
64 | * Enables keyboard aware settings for Android
65 | *
66 | * Default is false
67 | *
68 | * @type {boolean}
69 | * @memberof KeyboardAwareProps
70 | */
71 | enableOnAndroid?: boolean
72 |
73 | /**
74 | * Adds an extra offset when focusing the TextInputs.
75 | *
76 | * Default is 75
77 | * @type {number}
78 | * @memberof KeyboardAwareProps
79 | */
80 | extraHeight?: number
81 |
82 | /**
83 | * Adds an extra offset to the keyboard.
84 | * Useful if you want to stick elements above the keyboard.
85 | *
86 | * Default is 0
87 | *
88 | * @type {number}
89 | * @memberof KeyboardAwareProps
90 | */
91 | extraScrollHeight?: number
92 |
93 | /**
94 | * Sets the delay time before scrolling to new position
95 | *
96 | * Default is 250
97 | *
98 | * @type {number}
99 | * @memberof KeyboardAwareProps
100 | */
101 | keyboardOpeningTime?: number
102 |
103 | /**
104 | * Callback when the keyboard will show.
105 | *
106 | * @param frames Information about the keyboard frame and animation.
107 | */
108 | onKeyboardWillShow?: (frames: Object) => void
109 |
110 | /**
111 | * Callback when the keyboard did show.
112 | *
113 | * @param frames Information about the keyboard frame and animation.
114 | */
115 | onKeyboardDidShow?: (frames: Object) => void
116 |
117 | /**
118 | * Callback when the keyboard will hide.
119 | *
120 | * @param frames Information about the keyboard frame and animation.
121 | */
122 | onKeyboardWillHide?: (frames: Object) => void
123 |
124 | /**
125 | * Callback when the keyboard did hide.
126 | *
127 | * @param frames Information about the keyboard frame and animation.
128 | */
129 | onKeyboardDidHide?: (frames: Object) => void
130 |
131 | /**
132 | * Callback when the keyboard frame will change.
133 | *
134 | * @param frames Information about the keyboard frame and animation.
135 | */
136 | onKeyboardWillChangeFrame?: (frames: Object) => void
137 |
138 | /**
139 | * Callback when the keyboard frame did change.
140 | *
141 | * @param frames Information about the keyboard frame and animation.
142 | */
143 | onKeyboardDidChangeFrame?: (frames: Object) => void
144 | }
145 |
146 | interface KeyboardAwareScrollViewProps
147 | extends KeyboardAwareProps,
148 | ScrollViewProps {}
149 | interface KeyboardAwareFlatListProps
150 | extends KeyboardAwareProps,
151 | FlatListProps {}
152 | interface KeyboardAwareSectionListProps
153 | extends KeyboardAwareProps,
154 | SectionListProps {}
155 |
156 | interface KeyboardAwareState {
157 | keyboardSpace: number
158 | }
159 |
160 | declare class ScrollableComponent extends React.Component
{
161 | getScrollResponder: () => void
162 | scrollToPosition: (x: number, y: number, animated?: boolean) => void
163 | scrollToEnd: (animated?: boolean) => void
164 | scrollForExtraHeightOnAndroid: (extraHeight: number) => void
165 | scrollToFocusedInput: (
166 | reactNode: Object,
167 | extraHeight?: number,
168 | keyboardOpeningTime?: number
169 | ) => void
170 | }
171 |
172 | export class KeyboardAwareMixin {}
173 | export class KeyboardAwareScrollView extends ScrollableComponent<
174 | KeyboardAwareScrollViewProps,
175 | KeyboardAwareState
176 | > {}
177 | export class KeyboardAwareFlatList extends ScrollableComponent<
178 | KeyboardAwareFlatListProps,
179 | KeyboardAwareState
180 | > {}
181 | export class KeyboardAwareSectionList extends ScrollableComponent<
182 | KeyboardAwareSectionListProps,
183 | KeyboardAwareState
184 | > {}
185 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | /* @flow */
2 |
3 | import listenToKeyboardEvents from './lib/KeyboardAwareHOC'
4 | import KeyboardAwareScrollView from './lib/KeyboardAwareScrollView'
5 | import KeyboardAwareFlatList from './lib/KeyboardAwareFlatList'
6 | import KeyboardAwareSectionList from './lib/KeyboardAwareSectionList'
7 |
8 | export {
9 | listenToKeyboardEvents,
10 | KeyboardAwareFlatList,
11 | KeyboardAwareSectionList,
12 | KeyboardAwareScrollView
13 | }
14 |
--------------------------------------------------------------------------------
/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowJs": true,
4 | "allowSyntheticDefaultImports": true
5 | },
6 | "exclude": [
7 | "node_modules"
8 | ]
9 | }
--------------------------------------------------------------------------------
/lib/KeyboardAwareFlatList.js:
--------------------------------------------------------------------------------
1 | /* @flow */
2 |
3 | import { FlatList } from 'react-native'
4 | import listenToKeyboardEvents from './KeyboardAwareHOC'
5 |
6 | export default listenToKeyboardEvents(FlatList)
7 |
--------------------------------------------------------------------------------
/lib/KeyboardAwareHOC.js:
--------------------------------------------------------------------------------
1 | /* @flow */
2 |
3 | import React from 'react'
4 | import PropTypes from 'prop-types'
5 | import {
6 | Keyboard,
7 | Platform,
8 | UIManager,
9 | TextInput,
10 | findNodeHandle,
11 | Animated
12 | } from 'react-native'
13 | import { isIphoneX } from 'react-native-iphone-x-helper'
14 | import type { KeyboardAwareInterface } from './KeyboardAwareInterface'
15 |
16 | const _KAM_DEFAULT_TAB_BAR_HEIGHT: number = isIphoneX() ? 83 : 49
17 | const _KAM_KEYBOARD_OPENING_TIME: number = 250
18 | const _KAM_EXTRA_HEIGHT: number = 75
19 |
20 | const supportedKeyboardEvents = [
21 | 'keyboardWillShow',
22 | 'keyboardDidShow',
23 | 'keyboardWillHide',
24 | 'keyboardDidHide',
25 | 'keyboardWillChangeFrame',
26 | 'keyboardDidChangeFrame'
27 | ]
28 | const keyboardEventToCallbackName = (eventName: string) =>
29 | 'on' + eventName[0].toUpperCase() + eventName.substring(1)
30 | const keyboardEventPropTypes = supportedKeyboardEvents.reduce(
31 | (acc: Object, eventName: string) => ({
32 | ...acc,
33 | [keyboardEventToCallbackName(eventName)]: PropTypes.func
34 | }),
35 | {}
36 | )
37 | const keyboardAwareHOCTypeEvents = supportedKeyboardEvents.reduce(
38 | (acc: Object, eventName: string) => ({
39 | ...acc,
40 | [keyboardEventToCallbackName(eventName)]: Function
41 | }),
42 | {}
43 | )
44 |
45 | export type KeyboardAwareHOCProps = {
46 | viewIsInsideTabBar?: boolean,
47 | resetScrollToCoords?: {
48 | x: number,
49 | y: number
50 | },
51 | enableResetScrollToCoords?: boolean,
52 | enableAutomaticScroll?: boolean,
53 | extraHeight?: number,
54 | extraScrollHeight?: number,
55 | keyboardOpeningTime?: number,
56 | onScroll?: Function,
57 | update?: Function,
58 | contentContainerStyle?: any,
59 | enableOnAndroid?: boolean,
60 | innerRef?: Function,
61 | ...keyboardAwareHOCTypeEvents
62 | }
63 | export type KeyboardAwareHOCState = {
64 | keyboardSpace: number
65 | }
66 |
67 | export type ElementLayout = {
68 | x: number,
69 | y: number,
70 | width: number,
71 | height: number
72 | }
73 |
74 | export type ContentOffset = {
75 | x: number,
76 | y: number
77 | }
78 |
79 | export type ScrollPosition = {
80 | x: number,
81 | y: number,
82 | animated: boolean
83 | }
84 |
85 | export type ScrollIntoViewOptions = ?{
86 | getScrollPosition?: (
87 | parentLayout: ElementLayout,
88 | childLayout: ElementLayout,
89 | contentOffset: ContentOffset
90 | ) => ScrollPosition
91 | }
92 |
93 | export type KeyboardAwareHOCOptions = ?{
94 | enableOnAndroid: boolean,
95 | contentContainerStyle: ?Object,
96 | enableAutomaticScroll: boolean,
97 | extraHeight: number,
98 | extraScrollHeight: number,
99 | enableResetScrollToCoords: boolean,
100 | keyboardOpeningTime: number,
101 | viewIsInsideTabBar: boolean,
102 | refPropName: string,
103 | extractNativeRef: Function
104 | }
105 |
106 | function getDisplayName(WrappedComponent: React$Component) {
107 | return (
108 | (WrappedComponent &&
109 | (WrappedComponent.displayName || WrappedComponent.name)) ||
110 | 'Component'
111 | )
112 | }
113 |
114 | const ScrollIntoViewDefaultOptions: KeyboardAwareHOCOptions = {
115 | enableOnAndroid: false,
116 | contentContainerStyle: undefined,
117 | enableAutomaticScroll: true,
118 | extraHeight: _KAM_EXTRA_HEIGHT,
119 | extraScrollHeight: 0,
120 | enableResetScrollToCoords: true,
121 | keyboardOpeningTime: _KAM_KEYBOARD_OPENING_TIME,
122 | viewIsInsideTabBar: false,
123 |
124 | // The ref prop name that will be passed to the wrapped component to obtain a ref
125 | // If your ScrollView is already wrapped, maybe the wrapper permit to get a ref
126 | // For example, with glamorous-native ScrollView, you should use "innerRef"
127 | refPropName: 'ref',
128 | // Sometimes the ref you get is a ref to a wrapped view (ex: Animated.ScrollView)
129 | // We need access to the imperative API of a real native ScrollView so we need extraction logic
130 | extractNativeRef: (ref: Object) => {
131 | // getNode() permit to support Animated.ScrollView automatically, but is deprecated since RN 0.62
132 | // see https://github.com/facebook/react-native/issues/19650
133 | // see https://stackoverflow.com/questions/42051368/scrollto-is-undefined-on-animated-scrollview/48786374
134 | // see https://github.com/facebook/react-native/commit/66e72bb4e00aafbcb9f450ed5db261d98f99f82a
135 | const shouldCallGetNode = !Platform.constants || (Platform.constants.reactNativeVersion.major === 0 && Platform.constants.reactNativeVersion.minor < 62)
136 | if (ref.getNode && shouldCallGetNode) {
137 | return ref.getNode()
138 | } else {
139 | return ref
140 | }
141 | }
142 | }
143 |
144 | function KeyboardAwareHOC(
145 | ScrollableComponent: React$Component,
146 | userOptions: KeyboardAwareHOCOptions = {}
147 | ) {
148 | const hocOptions: KeyboardAwareHOCOptions = {
149 | ...ScrollIntoViewDefaultOptions,
150 | ...userOptions
151 | }
152 |
153 | return class
154 | extends React.Component
155 | implements KeyboardAwareInterface {
156 | _rnkasv_keyboardView: any
157 | keyboardWillShowEvent: ?Function
158 | keyboardWillHideEvent: ?Function
159 | position: ContentOffset
160 | defaultResetScrollToCoords: ?{ x: number, y: number }
161 | mountedComponent: boolean
162 | handleOnScroll: Function
163 | state: KeyboardAwareHOCState
164 | static displayName = `KeyboardAware${getDisplayName(ScrollableComponent)}`
165 |
166 | static propTypes = {
167 | viewIsInsideTabBar: PropTypes.bool,
168 | resetScrollToCoords: PropTypes.shape({
169 | x: PropTypes.number.isRequired,
170 | y: PropTypes.number.isRequired
171 | }),
172 | enableResetScrollToCoords: PropTypes.bool,
173 | enableAutomaticScroll: PropTypes.bool,
174 | extraHeight: PropTypes.number,
175 | extraScrollHeight: PropTypes.number,
176 | keyboardOpeningTime: PropTypes.number,
177 | onScroll: PropTypes.oneOfType([
178 | PropTypes.func, // Normal listener
179 | PropTypes.object // Animated.event listener
180 | ]),
181 | update: PropTypes.func,
182 | contentContainerStyle: PropTypes.any,
183 | enableOnAndroid: PropTypes.bool,
184 | innerRef: PropTypes.func,
185 | ...keyboardEventPropTypes
186 | }
187 |
188 | // HOC options are used to init default props, so that these options can be overriden with component props
189 | static defaultProps = {
190 | enableAutomaticScroll: hocOptions.enableAutomaticScroll,
191 | extraHeight: hocOptions.extraHeight,
192 | extraScrollHeight: hocOptions.extraScrollHeight,
193 | enableResetScrollToCoords: hocOptions.enableResetScrollToCoords,
194 | keyboardOpeningTime: hocOptions.keyboardOpeningTime,
195 | viewIsInsideTabBar: hocOptions.viewIsInsideTabBar,
196 | enableOnAndroid: hocOptions.enableOnAndroid
197 | }
198 |
199 | constructor(props: KeyboardAwareHOCProps) {
200 | super(props)
201 | this.keyboardWillShowEvent = undefined
202 | this.keyboardWillHideEvent = undefined
203 | this.callbacks = {}
204 | this.position = { x: 0, y: 0 }
205 | this.defaultResetScrollToCoords = null
206 | const keyboardSpace: number = props.viewIsInsideTabBar
207 | ? _KAM_DEFAULT_TAB_BAR_HEIGHT
208 | : 0
209 | this.state = { keyboardSpace }
210 | }
211 |
212 | componentDidMount() {
213 | this.mountedComponent = true
214 | // Keyboard events
215 | if (Platform.OS === 'ios') {
216 | this.keyboardWillShowEvent = Keyboard.addListener(
217 | 'keyboardWillShow',
218 | this._updateKeyboardSpace
219 | )
220 | this.keyboardWillHideEvent = Keyboard.addListener(
221 | 'keyboardWillHide',
222 | this._resetKeyboardSpace
223 | )
224 | } else if (Platform.OS === 'android' && this.props.enableOnAndroid) {
225 | this.keyboardWillShowEvent = Keyboard.addListener(
226 | 'keyboardDidShow',
227 | this._updateKeyboardSpace
228 | )
229 | this.keyboardWillHideEvent = Keyboard.addListener(
230 | 'keyboardDidHide',
231 | this._resetKeyboardSpace
232 | )
233 | }
234 |
235 | supportedKeyboardEvents.forEach((eventName: string) => {
236 | const callbackName = keyboardEventToCallbackName(eventName)
237 | if (this.props[callbackName]) {
238 | this.callbacks[eventName] = Keyboard.addListener(
239 | eventName,
240 | this.props[callbackName]
241 | )
242 | }
243 | })
244 | }
245 |
246 | componentDidUpdate(prevProps: KeyboardAwareHOCProps) {
247 | if (this.props.viewIsInsideTabBar !== prevProps.viewIsInsideTabBar) {
248 | const keyboardSpace: number = this.props.viewIsInsideTabBar
249 | ? _KAM_DEFAULT_TAB_BAR_HEIGHT
250 | : 0
251 | if (this.state.keyboardSpace !== keyboardSpace) {
252 | this.setState({ keyboardSpace })
253 | }
254 | }
255 | }
256 |
257 | componentWillUnmount() {
258 | this.mountedComponent = false
259 | this.keyboardWillShowEvent && this.keyboardWillShowEvent.remove()
260 | this.keyboardWillHideEvent && this.keyboardWillHideEvent.remove()
261 | Object.values(this.callbacks).forEach((callback: Object) =>
262 | callback.remove()
263 | )
264 | }
265 |
266 | getScrollResponder = () => {
267 | return (
268 | this._rnkasv_keyboardView &&
269 | this._rnkasv_keyboardView.getScrollResponder &&
270 | this._rnkasv_keyboardView.getScrollResponder()
271 | )
272 | }
273 |
274 | scrollToPosition = (x: number, y: number, animated: boolean = true) => {
275 | const responder = this.getScrollResponder()
276 | if (!responder) {
277 | return
278 | }
279 | if (responder.scrollResponderScrollTo) {
280 | // React Native < 0.65
281 | responder.scrollResponderScrollTo({ x, y, animated })
282 | } else if (responder.scrollTo) {
283 | // React Native >= 0.65
284 | responder.scrollTo({ x, y, animated })
285 | }
286 | }
287 |
288 | scrollToEnd = (animated?: boolean = true) => {
289 | const responder = this.getScrollResponder()
290 | if (!responder) {
291 | return
292 | }
293 | if (responder.scrollResponderScrollToEnd) {
294 | // React Native < 0.65
295 | responder.scrollResponderScrollToEnd({ animated })
296 | } else if (responder.scrollToEnd) {
297 | // React Native >= 0.65
298 | responder.scrollToEnd({ animated })
299 | }
300 | }
301 |
302 | scrollForExtraHeightOnAndroid = (extraHeight: number) => {
303 | this.scrollToPosition(0, this.position.y + extraHeight, true)
304 | }
305 |
306 | /**
307 | * @param keyboardOpeningTime: takes a different keyboardOpeningTime in consideration.
308 | * @param extraHeight: takes an extra height in consideration.
309 | */
310 | scrollToFocusedInput = (
311 | reactNode: any,
312 | extraHeight?: number,
313 | keyboardOpeningTime?: number
314 | ) => {
315 | if (extraHeight === undefined) {
316 | extraHeight = this.props.extraHeight || 0
317 | }
318 | if (keyboardOpeningTime === undefined) {
319 | keyboardOpeningTime = this.props.keyboardOpeningTime || 0
320 | }
321 | setTimeout(() => {
322 | if (!this.mountedComponent) {
323 | return
324 | }
325 | const responder = this.getScrollResponder()
326 | responder &&
327 | responder.scrollResponderScrollNativeHandleToKeyboard(
328 | reactNode,
329 | extraHeight,
330 | true
331 | )
332 | }, keyboardOpeningTime)
333 | }
334 |
335 | scrollIntoView = async (
336 | element: React.Element<*>,
337 | options: ScrollIntoViewOptions = {}
338 | ) => {
339 | if (!this._rnkasv_keyboardView || !element) {
340 | return
341 | }
342 |
343 | const [parentLayout, childLayout] = await Promise.all([
344 | this._measureElement(this._rnkasv_keyboardView),
345 | this._measureElement(element)
346 | ])
347 |
348 | const getScrollPosition =
349 | options.getScrollPosition || this._defaultGetScrollPosition
350 | const { x, y, animated } = getScrollPosition(
351 | parentLayout,
352 | childLayout,
353 | this.position
354 | )
355 | this.scrollToPosition(x, y, animated)
356 | }
357 |
358 | _defaultGetScrollPosition = (
359 | parentLayout: ElementLayout,
360 | childLayout: ElementLayout,
361 | contentOffset: ContentOffset
362 | ): ScrollPosition => {
363 | return {
364 | x: 0,
365 | y: Math.max(0, childLayout.y - parentLayout.y + contentOffset.y),
366 | animated: true
367 | }
368 | }
369 |
370 | _measureElement = (element: React.Element<*>): Promise => {
371 | const node = findNodeHandle(element)
372 | return new Promise((resolve: ElementLayout => void) => {
373 | UIManager.measureInWindow(
374 | node,
375 | (x: number, y: number, width: number, height: number) => {
376 | resolve({ x, y, width, height })
377 | }
378 | )
379 | })
380 | }
381 |
382 | // Keyboard actions
383 | _updateKeyboardSpace = (frames: Object) => {
384 | // Automatically scroll to focused TextInput
385 | if (this.props.enableAutomaticScroll) {
386 | let keyboardSpace: number =
387 | frames.endCoordinates.height + this.props.extraScrollHeight
388 | if (this.props.viewIsInsideTabBar) {
389 | keyboardSpace -= _KAM_DEFAULT_TAB_BAR_HEIGHT
390 | }
391 | this.setState({ keyboardSpace })
392 | const currentlyFocusedField = TextInput.State.currentlyFocusedInput ? findNodeHandle(TextInput.State.currentlyFocusedInput()) : TextInput.State.currentlyFocusedField()
393 | const responder = this.getScrollResponder()
394 | if (!currentlyFocusedField || !responder) {
395 | return
396 | }
397 | UIManager.viewIsDescendantOf(
398 | currentlyFocusedField,
399 | responder.getInnerViewNode(),
400 | (isAncestor: boolean) => {
401 | if (isAncestor) {
402 | // Check if the TextInput will be hidden by the keyboard
403 | UIManager.measureInWindow(
404 | currentlyFocusedField,
405 | (x: number, y: number, width: number, height: number) => {
406 | const textInputBottomPosition = y + height
407 | const keyboardPosition = frames.endCoordinates.screenY
408 | const totalExtraHeight =
409 | this.props.extraScrollHeight + this.props.extraHeight
410 | if (Platform.OS === 'ios') {
411 | if (
412 | textInputBottomPosition >
413 | keyboardPosition - totalExtraHeight
414 | ) {
415 | this._scrollToFocusedInputWithNodeHandle(
416 | currentlyFocusedField
417 | )
418 | }
419 | } else {
420 | // On android, the system would scroll the text input just
421 | // above the keyboard so we just neet to scroll the extra
422 | // height part
423 | if (textInputBottomPosition > keyboardPosition) {
424 | // Since the system already scrolled the whole view up
425 | // we should reduce that amount
426 | keyboardSpace =
427 | keyboardSpace -
428 | (textInputBottomPosition - keyboardPosition)
429 | this.setState({ keyboardSpace })
430 | this.scrollForExtraHeightOnAndroid(totalExtraHeight)
431 | } else if (
432 | textInputBottomPosition >
433 | keyboardPosition - totalExtraHeight
434 | ) {
435 | this.scrollForExtraHeightOnAndroid(
436 | totalExtraHeight -
437 | (keyboardPosition - textInputBottomPosition)
438 | )
439 | }
440 | }
441 | }
442 | )
443 | }
444 | }
445 | )
446 | }
447 | if (!this.props.resetScrollToCoords) {
448 | if (!this.defaultResetScrollToCoords) {
449 | this.defaultResetScrollToCoords = this.position
450 | }
451 | }
452 | }
453 |
454 | _resetKeyboardSpace = () => {
455 | const keyboardSpace: number = this.props.viewIsInsideTabBar
456 | ? _KAM_DEFAULT_TAB_BAR_HEIGHT
457 | : 0
458 | this.setState({ keyboardSpace })
459 | // Reset scroll position after keyboard dismissal
460 | if (this.props.enableResetScrollToCoords === false) {
461 | this.defaultResetScrollToCoords = null
462 | return
463 | } else if (this.props.resetScrollToCoords) {
464 | this.scrollToPosition(
465 | this.props.resetScrollToCoords.x,
466 | this.props.resetScrollToCoords.y,
467 | true
468 | )
469 | } else {
470 | if (this.defaultResetScrollToCoords) {
471 | this.scrollToPosition(
472 | this.defaultResetScrollToCoords.x,
473 | this.defaultResetScrollToCoords.y,
474 | true
475 | )
476 | this.defaultResetScrollToCoords = null
477 | } else {
478 | this.scrollToPosition(0, 0, true)
479 | }
480 | }
481 | }
482 |
483 | _scrollToFocusedInputWithNodeHandle = (
484 | nodeID: number,
485 | extraHeight?: number,
486 | keyboardOpeningTime?: number
487 | ) => {
488 | if (extraHeight === undefined) {
489 | extraHeight = this.props.extraHeight
490 | }
491 | const reactNode = findNodeHandle(nodeID)
492 | this.scrollToFocusedInput(
493 | reactNode,
494 | extraHeight + this.props.extraScrollHeight,
495 | keyboardOpeningTime !== undefined
496 | ? keyboardOpeningTime
497 | : this.props.keyboardOpeningTime || 0
498 | )
499 | }
500 |
501 | _handleOnScroll = (
502 | e: SyntheticEvent<*> & { nativeEvent: { contentOffset: number } }
503 | ) => {
504 | this.position = e.nativeEvent.contentOffset
505 | }
506 |
507 | _handleRef = (ref: React.Component<*>) => {
508 | this._rnkasv_keyboardView = ref ? hocOptions.extractNativeRef(ref) : ref
509 | if (this.props.innerRef) {
510 | this.props.innerRef(this._rnkasv_keyboardView)
511 | }
512 | }
513 |
514 | update = () => {
515 | const currentlyFocusedField = TextInput.State.currentlyFocusedInput ? findNodeHandle(TextInput.State.currentlyFocusedInput()) : TextInput.State.currentlyFocusedField()
516 | const responder = this.getScrollResponder()
517 |
518 | if (!currentlyFocusedField || !responder) {
519 | return
520 | }
521 |
522 | this._scrollToFocusedInputWithNodeHandle(currentlyFocusedField)
523 | }
524 |
525 | render() {
526 | const { enableOnAndroid, contentContainerStyle, onScroll } = this.props
527 | let newContentContainerStyle
528 | if (Platform.OS === 'android' && enableOnAndroid) {
529 | newContentContainerStyle = [].concat(contentContainerStyle).concat({
530 | paddingBottom:
531 | ((contentContainerStyle || {}).paddingBottom || 0) +
532 | this.state.keyboardSpace
533 | })
534 | }
535 | const refProps = { [hocOptions.refPropName]: this._handleRef }
536 | return (
537 |
560 | )
561 | }
562 | }
563 | }
564 |
565 | // Allow to pass options, without breaking change, and curried for composition
566 | // listenToKeyboardEvents(ScrollView);
567 | // listenToKeyboardEvents(options)(Comp);
568 | const listenToKeyboardEvents = (configOrComp: any) => {
569 | if (typeof configOrComp === 'object' && !configOrComp.displayName) {
570 | return (Comp: Function) => KeyboardAwareHOC(Comp, configOrComp)
571 | } else {
572 | return KeyboardAwareHOC(configOrComp)
573 | }
574 | }
575 |
576 | export default listenToKeyboardEvents
577 |
--------------------------------------------------------------------------------
/lib/KeyboardAwareInterface.js:
--------------------------------------------------------------------------------
1 | /* @flow */
2 |
3 | export interface KeyboardAwareInterface {
4 | getScrollResponder: () => void,
5 | scrollToPosition: (x: number, y: number, animated?: boolean) => void,
6 | scrollToEnd: (animated?: boolean) => void,
7 | scrollForExtraHeightOnAndroid: (extraHeight: number) => void,
8 | scrollToFocusedInput: (
9 | reactNode: Object,
10 | extraHeight: number,
11 | keyboardOpeningTime: number
12 | ) => void
13 | }
14 |
--------------------------------------------------------------------------------
/lib/KeyboardAwareScrollView.js:
--------------------------------------------------------------------------------
1 | /* @flow */
2 |
3 | import { ScrollView } from 'react-native'
4 | import listenToKeyboardEvents from './KeyboardAwareHOC'
5 |
6 | export default listenToKeyboardEvents(ScrollView)
7 |
--------------------------------------------------------------------------------
/lib/KeyboardAwareSectionList.js:
--------------------------------------------------------------------------------
1 | /* @flow */
2 |
3 | import { SectionList } from 'react-native'
4 | import listenToKeyboardEvents from './KeyboardAwareHOC'
5 |
6 | export default listenToKeyboardEvents(SectionList)
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-native-keyboard-aware-scroll-view",
3 | "version": "0.9.5",
4 | "description": "A React Native ScrollView component that resizes when the keyboard appears.",
5 | "main": "index.js",
6 | "types": "index.d.ts",
7 | "scripts": {
8 | "lint": "eslint lib",
9 | "test": "npm run lint",
10 | "flow": "flow check"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/APSL/react-native-keyboard-aware-scroll-view.git"
15 | },
16 | "tags": [
17 | "react",
18 | "react-native",
19 | "react-component",
20 | "ios",
21 | "android"
22 | ],
23 | "keywords": [
24 | "react",
25 | "react-native",
26 | "scrollview",
27 | "keyboard",
28 | "ios",
29 | "android",
30 | "react-component"
31 | ],
32 | "author": "Alvaro Medina Ballester ",
33 | "license": "MIT",
34 | "bugs": {
35 | "url": "https://github.com/APSL/react-native-keyboard-aware-scroll-view/issues"
36 | },
37 | "homepage": "https://github.com/APSL/react-native-keyboard-aware-scroll-view#readme",
38 | "dependencies": {
39 | "prop-types": "^15.6.2",
40 | "react-native-iphone-x-helper": "^1.0.3"
41 | },
42 | "peerDependencies": {
43 | "react-native": ">=0.48.4"
44 | },
45 | "devDependencies": {
46 | "babel-eslint": "^10.0.2",
47 | "eslint": "^6.1.0",
48 | "eslint-plugin-flowtype": "^4.2.0",
49 | "eslint-plugin-react": "^7.14.3",
50 | "eslint-plugin-react-native": "^3.7.0",
51 | "flow-bin": "^0.105.2"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/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", "@babel/code-frame@^7.5.5":
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/generator@^7.5.5":
13 | version "7.5.5"
14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.5.tgz#873a7f936a3c89491b43536d12245b626664e3cf"
15 | integrity sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==
16 | dependencies:
17 | "@babel/types" "^7.5.5"
18 | jsesc "^2.5.1"
19 | lodash "^4.17.13"
20 | source-map "^0.5.0"
21 | trim-right "^1.0.1"
22 |
23 | "@babel/helper-function-name@^7.1.0":
24 | version "7.1.0"
25 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53"
26 | integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==
27 | dependencies:
28 | "@babel/helper-get-function-arity" "^7.0.0"
29 | "@babel/template" "^7.1.0"
30 | "@babel/types" "^7.0.0"
31 |
32 | "@babel/helper-get-function-arity@^7.0.0":
33 | version "7.0.0"
34 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
35 | integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==
36 | dependencies:
37 | "@babel/types" "^7.0.0"
38 |
39 | "@babel/helper-split-export-declaration@^7.4.4":
40 | version "7.4.4"
41 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
42 | integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==
43 | dependencies:
44 | "@babel/types" "^7.4.4"
45 |
46 | "@babel/highlight@^7.0.0":
47 | version "7.5.0"
48 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
49 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==
50 | dependencies:
51 | chalk "^2.0.0"
52 | esutils "^2.0.2"
53 | js-tokens "^4.0.0"
54 |
55 | "@babel/parser@^7.0.0", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
56 | version "7.5.5"
57 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
58 | integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
59 |
60 | "@babel/template@^7.1.0":
61 | version "7.4.4"
62 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237"
63 | integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==
64 | dependencies:
65 | "@babel/code-frame" "^7.0.0"
66 | "@babel/parser" "^7.4.4"
67 | "@babel/types" "^7.4.4"
68 |
69 | "@babel/traverse@^7.0.0":
70 | version "7.5.5"
71 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
72 | integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
73 | dependencies:
74 | "@babel/code-frame" "^7.5.5"
75 | "@babel/generator" "^7.5.5"
76 | "@babel/helper-function-name" "^7.1.0"
77 | "@babel/helper-split-export-declaration" "^7.4.4"
78 | "@babel/parser" "^7.5.5"
79 | "@babel/types" "^7.5.5"
80 | debug "^4.1.0"
81 | globals "^11.1.0"
82 | lodash "^4.17.13"
83 |
84 | "@babel/types@^7.0.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5":
85 | version "7.5.5"
86 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.5.tgz#97b9f728e182785909aa4ab56264f090a028d18a"
87 | integrity sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==
88 | dependencies:
89 | esutils "^2.0.2"
90 | lodash "^4.17.13"
91 | to-fast-properties "^2.0.0"
92 |
93 | acorn-jsx@^5.0.0:
94 | version "5.0.1"
95 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
96 | integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
97 |
98 | acorn@^6.0.7:
99 | version "6.3.0"
100 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e"
101 | integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==
102 |
103 | ajv@^6.10.0, ajv@^6.10.2:
104 | version "6.10.2"
105 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52"
106 | integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==
107 | dependencies:
108 | fast-deep-equal "^2.0.1"
109 | fast-json-stable-stringify "^2.0.0"
110 | json-schema-traverse "^0.4.1"
111 | uri-js "^4.2.2"
112 |
113 | ansi-escapes@^4.2.1:
114 | version "4.2.1"
115 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.2.1.tgz#4dccdb846c3eee10f6d64dea66273eab90c37228"
116 | integrity sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==
117 | dependencies:
118 | type-fest "^0.5.2"
119 |
120 | ansi-regex@^4.1.0:
121 | version "4.1.0"
122 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
123 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
124 |
125 | ansi-styles@^3.1.0:
126 | version "3.2.0"
127 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
128 | dependencies:
129 | color-convert "^1.9.0"
130 |
131 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
132 | version "3.2.1"
133 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
134 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
135 | dependencies:
136 | color-convert "^1.9.0"
137 |
138 | argparse@^1.0.7:
139 | version "1.0.9"
140 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
141 | dependencies:
142 | sprintf-js "~1.0.2"
143 |
144 | array-includes@^3.0.3:
145 | version "3.0.3"
146 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
147 | dependencies:
148 | define-properties "^1.1.2"
149 | es-abstract "^1.7.0"
150 |
151 | astral-regex@^1.0.0:
152 | version "1.0.0"
153 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
154 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
155 |
156 | babel-eslint@^10.0.2:
157 | version "10.0.2"
158 | resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.2.tgz#182d5ac204579ff0881684b040560fdcc1558456"
159 | integrity sha512-UdsurWPtgiPgpJ06ryUnuaSXC2s0WoSZnQmEpbAH65XZSdwowgN5MvyP7e88nW07FYXv72erVtpBkxyDVKhH1Q==
160 | dependencies:
161 | "@babel/code-frame" "^7.0.0"
162 | "@babel/parser" "^7.0.0"
163 | "@babel/traverse" "^7.0.0"
164 | "@babel/types" "^7.0.0"
165 | eslint-scope "3.7.1"
166 | eslint-visitor-keys "^1.0.0"
167 |
168 | balanced-match@^1.0.0:
169 | version "1.0.0"
170 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
171 |
172 | brace-expansion@^1.1.7:
173 | version "1.1.8"
174 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
175 | dependencies:
176 | balanced-match "^1.0.0"
177 | concat-map "0.0.1"
178 |
179 | callsites@^3.0.0:
180 | version "3.1.0"
181 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
182 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
183 |
184 | chalk@^2.0.0, chalk@^2.1.0:
185 | version "2.1.0"
186 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e"
187 | dependencies:
188 | ansi-styles "^3.1.0"
189 | escape-string-regexp "^1.0.5"
190 | supports-color "^4.0.0"
191 |
192 | chalk@^2.4.2:
193 | version "2.4.2"
194 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
195 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
196 | dependencies:
197 | ansi-styles "^3.2.1"
198 | escape-string-regexp "^1.0.5"
199 | supports-color "^5.3.0"
200 |
201 | chardet@^0.7.0:
202 | version "0.7.0"
203 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
204 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
205 |
206 | cli-cursor@^3.1.0:
207 | version "3.1.0"
208 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
209 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
210 | dependencies:
211 | restore-cursor "^3.1.0"
212 |
213 | cli-width@^2.0.0:
214 | version "2.1.0"
215 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
216 |
217 | color-convert@^1.9.0:
218 | version "1.9.0"
219 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
220 | dependencies:
221 | color-name "^1.1.1"
222 |
223 | color-name@^1.1.1:
224 | version "1.1.3"
225 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
226 |
227 | concat-map@0.0.1:
228 | version "0.0.1"
229 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
230 |
231 | cross-spawn@^6.0.5:
232 | version "6.0.5"
233 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
234 | dependencies:
235 | nice-try "^1.0.4"
236 | path-key "^2.0.1"
237 | semver "^5.5.0"
238 | shebang-command "^1.2.0"
239 | which "^1.2.9"
240 |
241 | debug@^4.0.1, debug@^4.1.0:
242 | version "4.1.1"
243 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
244 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
245 | dependencies:
246 | ms "^2.1.1"
247 |
248 | deep-is@~0.1.3:
249 | version "0.1.3"
250 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
251 |
252 | define-properties@^1.1.2:
253 | version "1.1.2"
254 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
255 | dependencies:
256 | foreach "^2.0.5"
257 | object-keys "^1.0.8"
258 |
259 | define-properties@^1.1.3:
260 | version "1.1.3"
261 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
262 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
263 | dependencies:
264 | object-keys "^1.0.12"
265 |
266 | doctrine@^2.1.0:
267 | version "2.1.0"
268 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
269 | dependencies:
270 | esutils "^2.0.2"
271 |
272 | doctrine@^3.0.0:
273 | version "3.0.0"
274 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
275 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
276 | dependencies:
277 | esutils "^2.0.2"
278 |
279 | emoji-regex@^7.0.1:
280 | version "7.0.3"
281 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
282 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
283 |
284 | emoji-regex@^8.0.0:
285 | version "8.0.0"
286 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
287 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
288 |
289 | es-abstract@^1.11.0, es-abstract@^1.12.0:
290 | version "1.13.0"
291 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
292 | integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
293 | dependencies:
294 | es-to-primitive "^1.2.0"
295 | function-bind "^1.1.1"
296 | has "^1.0.3"
297 | is-callable "^1.1.4"
298 | is-regex "^1.0.4"
299 | object-keys "^1.0.12"
300 |
301 | es-abstract@^1.7.0:
302 | version "1.7.0"
303 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c"
304 | dependencies:
305 | es-to-primitive "^1.1.1"
306 | function-bind "^1.1.0"
307 | is-callable "^1.1.3"
308 | is-regex "^1.0.3"
309 |
310 | es-to-primitive@^1.1.1:
311 | version "1.1.1"
312 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
313 | dependencies:
314 | is-callable "^1.1.1"
315 | is-date-object "^1.0.1"
316 | is-symbol "^1.0.1"
317 |
318 | es-to-primitive@^1.2.0:
319 | version "1.2.0"
320 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
321 | integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
322 | dependencies:
323 | is-callable "^1.1.4"
324 | is-date-object "^1.0.1"
325 | is-symbol "^1.0.2"
326 |
327 | escape-string-regexp@^1.0.5:
328 | version "1.0.5"
329 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
330 |
331 | eslint-plugin-flowtype@^4.2.0:
332 | version "4.2.0"
333 | resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-4.2.0.tgz#a89ac991eef6753226eb8871261e266645aca4b9"
334 | integrity sha512-mqf6AbQCP6N8Bk+ryXYwxt6sj3RT7i3kt8JOOx7WOQNlZtsLxqvnkXRRrToFHcN52E5W9c/p3UfNxCMsfENIJA==
335 | dependencies:
336 | lodash "^4.17.15"
337 |
338 | eslint-plugin-react-native-globals@^0.1.1:
339 | version "0.1.2"
340 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz#ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2"
341 |
342 | eslint-plugin-react-native@^3.7.0:
343 | version "3.7.0"
344 | resolved "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.7.0.tgz#7e2cc1f3cf24919c4c0ea7fac13301e7444e105f"
345 | integrity sha512-krLtQmGih/uJDPxF8DBpnU8J3kRUsDm/Dey5yEhOO8LN1I3Wesbk4PGCg8Zah57azKFU+9YtGooFjJcDJWUs+g==
346 | dependencies:
347 | eslint-plugin-react-native-globals "^0.1.1"
348 |
349 | eslint-plugin-react@^7.14.3:
350 | version "7.14.3"
351 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz#911030dd7e98ba49e1b2208599571846a66bdf13"
352 | integrity sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==
353 | dependencies:
354 | array-includes "^3.0.3"
355 | doctrine "^2.1.0"
356 | has "^1.0.3"
357 | jsx-ast-utils "^2.1.0"
358 | object.entries "^1.1.0"
359 | object.fromentries "^2.0.0"
360 | object.values "^1.1.0"
361 | prop-types "^15.7.2"
362 | resolve "^1.10.1"
363 |
364 | eslint-scope@3.7.1:
365 | version "3.7.1"
366 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
367 | dependencies:
368 | esrecurse "^4.1.0"
369 | estraverse "^4.1.1"
370 |
371 | eslint-scope@^5.0.0:
372 | version "5.0.0"
373 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9"
374 | integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==
375 | dependencies:
376 | esrecurse "^4.1.0"
377 | estraverse "^4.1.1"
378 |
379 | eslint-utils@^1.3.1:
380 | version "1.3.1"
381 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
382 |
383 | eslint-visitor-keys@^1.0.0:
384 | version "1.0.0"
385 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
386 |
387 | eslint@^6.1.0:
388 | version "6.1.0"
389 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.1.0.tgz#06438a4a278b1d84fb107d24eaaa35471986e646"
390 | integrity sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==
391 | dependencies:
392 | "@babel/code-frame" "^7.0.0"
393 | ajv "^6.10.0"
394 | chalk "^2.1.0"
395 | cross-spawn "^6.0.5"
396 | debug "^4.0.1"
397 | doctrine "^3.0.0"
398 | eslint-scope "^5.0.0"
399 | eslint-utils "^1.3.1"
400 | eslint-visitor-keys "^1.0.0"
401 | espree "^6.0.0"
402 | esquery "^1.0.1"
403 | esutils "^2.0.2"
404 | file-entry-cache "^5.0.1"
405 | functional-red-black-tree "^1.0.1"
406 | glob-parent "^5.0.0"
407 | globals "^11.7.0"
408 | ignore "^4.0.6"
409 | import-fresh "^3.0.0"
410 | imurmurhash "^0.1.4"
411 | inquirer "^6.4.1"
412 | is-glob "^4.0.0"
413 | js-yaml "^3.13.1"
414 | json-stable-stringify-without-jsonify "^1.0.1"
415 | levn "^0.3.0"
416 | lodash "^4.17.14"
417 | minimatch "^3.0.4"
418 | mkdirp "^0.5.1"
419 | natural-compare "^1.4.0"
420 | optionator "^0.8.2"
421 | progress "^2.0.0"
422 | regexpp "^2.0.1"
423 | semver "^6.1.2"
424 | strip-ansi "^5.2.0"
425 | strip-json-comments "^3.0.1"
426 | table "^5.2.3"
427 | text-table "^0.2.0"
428 | v8-compile-cache "^2.0.3"
429 |
430 | espree@^6.0.0:
431 | version "6.0.0"
432 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.0.0.tgz#716fc1f5a245ef5b9a7fdb1d7b0d3f02322e75f6"
433 | integrity sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==
434 | dependencies:
435 | acorn "^6.0.7"
436 | acorn-jsx "^5.0.0"
437 | eslint-visitor-keys "^1.0.0"
438 |
439 | esprima@^4.0.0:
440 | version "4.0.0"
441 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
442 |
443 | esquery@^1.0.1:
444 | version "1.0.1"
445 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
446 | dependencies:
447 | estraverse "^4.0.0"
448 |
449 | esrecurse@^4.1.0:
450 | version "4.2.0"
451 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
452 | dependencies:
453 | estraverse "^4.1.0"
454 | object-assign "^4.0.1"
455 |
456 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
457 | version "4.2.0"
458 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
459 |
460 | esutils@^2.0.2:
461 | version "2.0.2"
462 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
463 |
464 | external-editor@^3.0.3:
465 | version "3.1.0"
466 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
467 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
468 | dependencies:
469 | chardet "^0.7.0"
470 | iconv-lite "^0.4.24"
471 | tmp "^0.0.33"
472 |
473 | fast-deep-equal@^2.0.1:
474 | version "2.0.1"
475 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
476 |
477 | fast-json-stable-stringify@^2.0.0:
478 | version "2.0.0"
479 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
480 |
481 | fast-levenshtein@~2.0.4:
482 | version "2.0.6"
483 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
484 |
485 | figures@^3.0.0:
486 | version "3.0.0"
487 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.0.0.tgz#756275c964646163cc6f9197c7a0295dbfd04de9"
488 | integrity sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==
489 | dependencies:
490 | escape-string-regexp "^1.0.5"
491 |
492 | file-entry-cache@^5.0.1:
493 | version "5.0.1"
494 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
495 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
496 | dependencies:
497 | flat-cache "^2.0.1"
498 |
499 | flat-cache@^2.0.1:
500 | version "2.0.1"
501 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
502 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
503 | dependencies:
504 | flatted "^2.0.0"
505 | rimraf "2.6.3"
506 | write "1.0.3"
507 |
508 | flatted@^2.0.0:
509 | version "2.0.1"
510 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08"
511 | integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==
512 |
513 | flow-bin@^0.105.2:
514 | version "0.105.2"
515 | resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.105.2.tgz#9d03d5ae3e1d011e311f309cb8786b3b3695fec2"
516 | integrity sha512-VCHt0SCjFPviv/Ze/W7AgkcE0uH4TocypSFA8wR3ZH1P7BSjny4l3uhHyOjzU3Qo1i0jO4NyaU6q3Y5IaQ6xng==
517 |
518 | foreach@^2.0.5:
519 | version "2.0.5"
520 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
521 |
522 | fs.realpath@^1.0.0:
523 | version "1.0.0"
524 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
525 |
526 | function-bind@^1.0.2, function-bind@^1.1.0:
527 | version "1.1.0"
528 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
529 |
530 | function-bind@^1.1.1:
531 | version "1.1.1"
532 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
533 |
534 | functional-red-black-tree@^1.0.1:
535 | version "1.0.1"
536 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
537 |
538 | glob-parent@^5.0.0:
539 | version "5.0.0"
540 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.0.0.tgz#1dc99f0f39b006d3e92c2c284068382f0c20e954"
541 | integrity sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==
542 | dependencies:
543 | is-glob "^4.0.1"
544 |
545 | glob@^7.1.3:
546 | version "7.1.4"
547 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
548 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
549 | dependencies:
550 | fs.realpath "^1.0.0"
551 | inflight "^1.0.4"
552 | inherits "2"
553 | minimatch "^3.0.4"
554 | once "^1.3.0"
555 | path-is-absolute "^1.0.0"
556 |
557 | globals@^11.1.0, globals@^11.7.0:
558 | version "11.7.0"
559 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673"
560 |
561 | has-flag@^2.0.0:
562 | version "2.0.0"
563 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
564 |
565 | has-flag@^3.0.0:
566 | version "3.0.0"
567 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
568 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
569 |
570 | has-symbols@^1.0.0:
571 | version "1.0.0"
572 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
573 | integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
574 |
575 | has@^1.0.1:
576 | version "1.0.1"
577 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
578 | dependencies:
579 | function-bind "^1.0.2"
580 |
581 | has@^1.0.3:
582 | version "1.0.3"
583 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
584 | dependencies:
585 | function-bind "^1.1.1"
586 |
587 | iconv-lite@^0.4.24:
588 | version "0.4.24"
589 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
590 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
591 | dependencies:
592 | safer-buffer ">= 2.1.2 < 3"
593 |
594 | ignore@^4.0.6:
595 | version "4.0.6"
596 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
597 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
598 |
599 | import-fresh@^3.0.0:
600 | version "3.1.0"
601 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118"
602 | integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==
603 | dependencies:
604 | parent-module "^1.0.0"
605 | resolve-from "^4.0.0"
606 |
607 | imurmurhash@^0.1.4:
608 | version "0.1.4"
609 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
610 |
611 | inflight@^1.0.4:
612 | version "1.0.6"
613 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
614 | dependencies:
615 | once "^1.3.0"
616 | wrappy "1"
617 |
618 | inherits@2:
619 | version "2.0.3"
620 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
621 |
622 | inquirer@^6.4.1:
623 | version "6.5.1"
624 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.1.tgz#8bfb7a5ac02dac6ff641ac4c5ff17da112fcdb42"
625 | integrity sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==
626 | dependencies:
627 | ansi-escapes "^4.2.1"
628 | chalk "^2.4.2"
629 | cli-cursor "^3.1.0"
630 | cli-width "^2.0.0"
631 | external-editor "^3.0.3"
632 | figures "^3.0.0"
633 | lodash "^4.17.15"
634 | mute-stream "0.0.8"
635 | run-async "^2.2.0"
636 | rxjs "^6.4.0"
637 | string-width "^4.1.0"
638 | strip-ansi "^5.1.0"
639 | through "^2.3.6"
640 |
641 | is-callable@^1.1.1, is-callable@^1.1.3:
642 | version "1.1.3"
643 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
644 |
645 | is-callable@^1.1.4:
646 | version "1.1.4"
647 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
648 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
649 |
650 | is-date-object@^1.0.1:
651 | version "1.0.1"
652 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
653 |
654 | is-extglob@^2.1.1:
655 | version "2.1.1"
656 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
657 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
658 |
659 | is-fullwidth-code-point@^2.0.0:
660 | version "2.0.0"
661 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
662 |
663 | is-fullwidth-code-point@^3.0.0:
664 | version "3.0.0"
665 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
666 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
667 |
668 | is-glob@^4.0.0, is-glob@^4.0.1:
669 | version "4.0.1"
670 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
671 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
672 | dependencies:
673 | is-extglob "^2.1.1"
674 |
675 | is-promise@^2.1.0:
676 | version "2.1.0"
677 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
678 |
679 | is-regex@^1.0.3, is-regex@^1.0.4:
680 | version "1.0.4"
681 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
682 | dependencies:
683 | has "^1.0.1"
684 |
685 | is-symbol@^1.0.1:
686 | version "1.0.1"
687 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
688 |
689 | is-symbol@^1.0.2:
690 | version "1.0.2"
691 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
692 | integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
693 | dependencies:
694 | has-symbols "^1.0.0"
695 |
696 | isexe@^2.0.0:
697 | version "2.0.0"
698 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
699 |
700 | "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0:
701 | version "4.0.0"
702 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
703 |
704 | js-yaml@^3.13.1:
705 | version "3.13.1"
706 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847"
707 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==
708 | dependencies:
709 | argparse "^1.0.7"
710 | esprima "^4.0.0"
711 |
712 | jsesc@^2.5.1:
713 | version "2.5.1"
714 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe"
715 |
716 | json-schema-traverse@^0.4.1:
717 | version "0.4.1"
718 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
719 |
720 | json-stable-stringify-without-jsonify@^1.0.1:
721 | version "1.0.1"
722 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
723 |
724 | jsx-ast-utils@^2.1.0:
725 | version "2.2.1"
726 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb"
727 | integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==
728 | dependencies:
729 | array-includes "^3.0.3"
730 | object.assign "^4.1.0"
731 |
732 | levn@^0.3.0, levn@~0.3.0:
733 | version "0.3.0"
734 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
735 | dependencies:
736 | prelude-ls "~1.1.2"
737 | type-check "~0.3.2"
738 |
739 | lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15:
740 | version "4.17.19"
741 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
742 | integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
743 |
744 | loose-envify@^1.3.1, loose-envify@^1.4.0:
745 | version "1.4.0"
746 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
747 | dependencies:
748 | js-tokens "^3.0.0 || ^4.0.0"
749 |
750 | mimic-fn@^2.1.0:
751 | version "2.1.0"
752 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
753 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
754 |
755 | minimatch@^3.0.4:
756 | version "3.0.4"
757 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
758 | dependencies:
759 | brace-expansion "^1.1.7"
760 |
761 | minimist@0.0.8:
762 | version "0.0.8"
763 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
764 |
765 | mkdirp@^0.5.1:
766 | version "0.5.1"
767 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
768 | dependencies:
769 | minimist "0.0.8"
770 |
771 | ms@^2.1.1:
772 | version "2.1.2"
773 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
774 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
775 |
776 | mute-stream@0.0.8:
777 | version "0.0.8"
778 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
779 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
780 |
781 | natural-compare@^1.4.0:
782 | version "1.4.0"
783 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
784 |
785 | nice-try@^1.0.4:
786 | version "1.0.4"
787 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4"
788 |
789 | object-assign@^4.0.1, object-assign@^4.1.1:
790 | version "4.1.1"
791 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
792 |
793 | object-keys@^1.0.11, object-keys@^1.0.12:
794 | version "1.1.1"
795 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
796 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
797 |
798 | object-keys@^1.0.8:
799 | version "1.0.11"
800 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
801 |
802 | object.assign@^4.1.0:
803 | version "4.1.0"
804 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da"
805 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==
806 | dependencies:
807 | define-properties "^1.1.2"
808 | function-bind "^1.1.1"
809 | has-symbols "^1.0.0"
810 | object-keys "^1.0.11"
811 |
812 | object.entries@^1.1.0:
813 | version "1.1.0"
814 | resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519"
815 | integrity sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==
816 | dependencies:
817 | define-properties "^1.1.3"
818 | es-abstract "^1.12.0"
819 | function-bind "^1.1.1"
820 | has "^1.0.3"
821 |
822 | object.fromentries@^2.0.0:
823 | version "2.0.0"
824 | resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab"
825 | integrity sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==
826 | dependencies:
827 | define-properties "^1.1.2"
828 | es-abstract "^1.11.0"
829 | function-bind "^1.1.1"
830 | has "^1.0.1"
831 |
832 | object.values@^1.1.0:
833 | version "1.1.0"
834 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9"
835 | integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==
836 | dependencies:
837 | define-properties "^1.1.3"
838 | es-abstract "^1.12.0"
839 | function-bind "^1.1.1"
840 | has "^1.0.3"
841 |
842 | once@^1.3.0:
843 | version "1.4.0"
844 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
845 | dependencies:
846 | wrappy "1"
847 |
848 | onetime@^5.1.0:
849 | version "5.1.0"
850 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5"
851 | integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==
852 | dependencies:
853 | mimic-fn "^2.1.0"
854 |
855 | optionator@^0.8.2:
856 | version "0.8.2"
857 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
858 | dependencies:
859 | deep-is "~0.1.3"
860 | fast-levenshtein "~2.0.4"
861 | levn "~0.3.0"
862 | prelude-ls "~1.1.2"
863 | type-check "~0.3.2"
864 | wordwrap "~1.0.0"
865 |
866 | os-tmpdir@~1.0.2:
867 | version "1.0.2"
868 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
869 |
870 | parent-module@^1.0.0:
871 | version "1.0.1"
872 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
873 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
874 | dependencies:
875 | callsites "^3.0.0"
876 |
877 | path-is-absolute@^1.0.0:
878 | version "1.0.1"
879 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
880 |
881 | path-key@^2.0.1:
882 | version "2.0.1"
883 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
884 |
885 | path-parse@^1.0.6:
886 | version "1.0.6"
887 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
888 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
889 |
890 | prelude-ls@~1.1.2:
891 | version "1.1.2"
892 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
893 |
894 | progress@^2.0.0:
895 | version "2.0.0"
896 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
897 |
898 | prop-types@^15.6.2:
899 | version "15.6.2"
900 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
901 | dependencies:
902 | loose-envify "^1.3.1"
903 | object-assign "^4.1.1"
904 |
905 | prop-types@^15.7.2:
906 | version "15.7.2"
907 | resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5"
908 | integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==
909 | dependencies:
910 | loose-envify "^1.4.0"
911 | object-assign "^4.1.1"
912 | react-is "^16.8.1"
913 |
914 | punycode@^2.1.0:
915 | version "2.1.1"
916 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
917 |
918 | react-is@^16.8.1:
919 | version "16.9.0"
920 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.9.0.tgz#21ca9561399aad0ff1a7701c01683e8ca981edcb"
921 | integrity sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==
922 |
923 | react-native-iphone-x-helper@^1.0.3:
924 | version "1.0.3"
925 | resolved "https://registry.yarnpkg.com/react-native-iphone-x-helper/-/react-native-iphone-x-helper-1.0.3.tgz#7a2f1e0574e899a0f1d426e6167fd98990083214"
926 |
927 | regexpp@^2.0.1:
928 | version "2.0.1"
929 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
930 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
931 |
932 | resolve-from@^4.0.0:
933 | version "4.0.0"
934 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
935 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
936 |
937 | resolve@^1.10.1:
938 | version "1.12.0"
939 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
940 | integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
941 | dependencies:
942 | path-parse "^1.0.6"
943 |
944 | restore-cursor@^3.1.0:
945 | version "3.1.0"
946 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
947 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
948 | dependencies:
949 | onetime "^5.1.0"
950 | signal-exit "^3.0.2"
951 |
952 | rimraf@2.6.3:
953 | version "2.6.3"
954 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
955 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
956 | dependencies:
957 | glob "^7.1.3"
958 |
959 | run-async@^2.2.0:
960 | version "2.3.0"
961 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
962 | dependencies:
963 | is-promise "^2.1.0"
964 |
965 | rxjs@^6.4.0:
966 | version "6.5.2"
967 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7"
968 | integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==
969 | dependencies:
970 | tslib "^1.9.0"
971 |
972 | "safer-buffer@>= 2.1.2 < 3":
973 | version "2.1.2"
974 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
975 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
976 |
977 | semver@^5.5.0:
978 | version "5.5.1"
979 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
980 |
981 | semver@^6.1.2:
982 | version "6.3.0"
983 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
984 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
985 |
986 | shebang-command@^1.2.0:
987 | version "1.2.0"
988 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
989 | dependencies:
990 | shebang-regex "^1.0.0"
991 |
992 | shebang-regex@^1.0.0:
993 | version "1.0.0"
994 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
995 |
996 | signal-exit@^3.0.2:
997 | version "3.0.2"
998 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
999 |
1000 | slice-ansi@^2.1.0:
1001 | version "2.1.0"
1002 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
1003 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
1004 | dependencies:
1005 | ansi-styles "^3.2.0"
1006 | astral-regex "^1.0.0"
1007 | is-fullwidth-code-point "^2.0.0"
1008 |
1009 | source-map@^0.5.0:
1010 | version "0.5.7"
1011 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
1012 |
1013 | sprintf-js@~1.0.2:
1014 | version "1.0.3"
1015 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
1016 |
1017 | string-width@^3.0.0:
1018 | version "3.1.0"
1019 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961"
1020 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==
1021 | dependencies:
1022 | emoji-regex "^7.0.1"
1023 | is-fullwidth-code-point "^2.0.0"
1024 | strip-ansi "^5.1.0"
1025 |
1026 | string-width@^4.1.0:
1027 | version "4.1.0"
1028 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff"
1029 | integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==
1030 | dependencies:
1031 | emoji-regex "^8.0.0"
1032 | is-fullwidth-code-point "^3.0.0"
1033 | strip-ansi "^5.2.0"
1034 |
1035 | strip-ansi@^5.1.0, strip-ansi@^5.2.0:
1036 | version "5.2.0"
1037 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae"
1038 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==
1039 | dependencies:
1040 | ansi-regex "^4.1.0"
1041 |
1042 | strip-json-comments@^3.0.1:
1043 | version "3.0.1"
1044 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7"
1045 | integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==
1046 |
1047 | supports-color@^4.0.0:
1048 | version "4.4.0"
1049 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
1050 | dependencies:
1051 | has-flag "^2.0.0"
1052 |
1053 | supports-color@^5.3.0:
1054 | version "5.5.0"
1055 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1056 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1057 | dependencies:
1058 | has-flag "^3.0.0"
1059 |
1060 | table@^5.2.3:
1061 | version "5.4.5"
1062 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.5.tgz#c8f4ea2d8fee08c0027fac27b0ec0a4fe01dfa42"
1063 | integrity sha512-oGa2Hl7CQjfoaogtrOHEJroOcYILTx7BZWLGsJIlzoWmB2zmguhNfPJZsWPKYek/MgCxfco54gEi31d1uN2hFA==
1064 | dependencies:
1065 | ajv "^6.10.2"
1066 | lodash "^4.17.14"
1067 | slice-ansi "^2.1.0"
1068 | string-width "^3.0.0"
1069 |
1070 | text-table@^0.2.0:
1071 | version "0.2.0"
1072 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
1073 |
1074 | through@^2.3.6:
1075 | version "2.3.8"
1076 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1077 |
1078 | tmp@^0.0.33:
1079 | version "0.0.33"
1080 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
1081 | dependencies:
1082 | os-tmpdir "~1.0.2"
1083 |
1084 | to-fast-properties@^2.0.0:
1085 | version "2.0.0"
1086 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
1087 |
1088 | trim-right@^1.0.1:
1089 | version "1.0.1"
1090 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
1091 |
1092 | tslib@^1.9.0:
1093 | version "1.10.0"
1094 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
1095 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==
1096 |
1097 | type-check@~0.3.2:
1098 | version "0.3.2"
1099 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
1100 | dependencies:
1101 | prelude-ls "~1.1.2"
1102 |
1103 | type-fest@^0.5.2:
1104 | version "0.5.2"
1105 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.5.2.tgz#d6ef42a0356c6cd45f49485c3b6281fc148e48a2"
1106 | integrity sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==
1107 |
1108 | uri-js@^4.2.2:
1109 | version "4.2.2"
1110 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
1111 | dependencies:
1112 | punycode "^2.1.0"
1113 |
1114 | v8-compile-cache@^2.0.3:
1115 | version "2.1.0"
1116 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
1117 | integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
1118 |
1119 | which@^1.2.9:
1120 | version "1.3.0"
1121 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
1122 | dependencies:
1123 | isexe "^2.0.0"
1124 |
1125 | wordwrap@~1.0.0:
1126 | version "1.0.0"
1127 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1128 |
1129 | wrappy@1:
1130 | version "1.0.2"
1131 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1132 |
1133 | write@1.0.3:
1134 | version "1.0.3"
1135 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
1136 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
1137 | dependencies:
1138 | mkdirp "^0.5.1"
1139 |
--------------------------------------------------------------------------------