bluebird-react-native-keyboard-aware-scroll-view 0.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc ADDED
@@ -0,0 +1,261 @@
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
+ }
package/.flowconfig ADDED
@@ -0,0 +1,96 @@
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
package/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: node_js
2
+ node_js:
3
+ - 14
@@ -0,0 +1,46 @@
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/
package/LICENSE ADDED
@@ -0,0 +1,22 @@
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
+
package/README.md ADDED
@@ -0,0 +1,217 @@
1
+ # react-native-keyboard-aware-scroll-view
2
+
3
+ <p>
4
+ <img src="https://travis-ci.org/APSL/react-native-keyboard-aware-scroll-view.svg?branch=master" />
5
+ <img src="https://img.shields.io/npm/dm/react-native-keyboard-aware-scroll-view.svg" />
6
+ <img src="https://img.shields.io/npm/dt/react-native-keyboard-aware-scroll-view.svg" />
7
+ </p>
8
+
9
+ This is a maintained fork of react-native-keyboard-aware-scroll-view
10
+ with Android 15 touch event fixes. `TextInput`.
11
+
12
+ <p align="center">
13
+ <img src="https://raw.githubusercontent.com/wiki/APSL/react-native-keyboard-aware-scroll-view/kasv.gif" alt="Scroll demo" width="400">
14
+ </p>
15
+
16
+ ## Supported versions
17
+
18
+ - `v0.4.0` requires `RN>=0.48`
19
+ - `v0.2.0` requires `RN>=0.32.0`.
20
+ - `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.
21
+ - `v0.0.7` requires `react-native>=0.25.0`.
22
+ - Use `v0.0.6` for older RN versions.
23
+
24
+ ## Installation
25
+
26
+ Installation can be done through `npm` or `yarn`:
27
+
28
+ ```shell
29
+ npm i react-native-keyboard-aware-scroll-view --save
30
+ ```
31
+
32
+ ```shell
33
+ yarn add react-native-keyboard-aware-scroll-view
34
+ ```
35
+
36
+ ## Usage
37
+
38
+ You can use the `KeyboardAwareScrollView`, `KeyboardAwareSectionList` or the `KeyboardAwareFlatList`
39
+ components. They accept `ScrollView`, `SectionList` and `FlatList` default props respectively and
40
+ implement a custom high order component called `KeyboardAwareHOC` to handle keyboard appearance.
41
+ The high order component is also available if you want to use it in any other component.
42
+
43
+ Import `react-native-keyboard-aware-scroll-view` and wrap your content inside
44
+ it:
45
+
46
+ ```js
47
+ import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'
48
+ ```
49
+
50
+ ```jsx
51
+ <KeyboardAwareScrollView>
52
+ <View>
53
+ <TextInput />
54
+ </View>
55
+ </KeyboardAwareScrollView>
56
+ ```
57
+
58
+ ## Auto-scroll in `TextInput` fields
59
+
60
+ 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.
61
+
62
+ ### Programatically scroll to any `TextInput`
63
+
64
+ In order to scroll to any `TextInput` field, you can use the built-in method `scrollToFocusedInput`. Example:
65
+
66
+ ```js
67
+ _scrollToInput (reactNode: any) {
68
+ // Add a 'scroll' ref to your ScrollView
69
+ this.scroll.props.scrollToFocusedInput(reactNode)
70
+ }
71
+ ```
72
+
73
+ ```jsx
74
+ <KeyboardAwareScrollView
75
+ innerRef={ref => {
76
+ this.scroll = ref
77
+ }}>
78
+ <View>
79
+ <TextInput
80
+ onFocus={(event: Event) => {
81
+ // `bind` the function if you're using ES6 classes
82
+ this._scrollToInput(ReactNative.findNodeHandle(event.target))
83
+ }}
84
+ />
85
+ </View>
86
+ </KeyboardAwareScrollView>
87
+ ```
88
+
89
+ ### Programatically scroll to any position
90
+
91
+ There's another built-in function that lets you programatically scroll to any position of the scroll view:
92
+
93
+ ```js
94
+ this.scroll.props.scrollToPosition(0, 0)
95
+ ```
96
+
97
+ ## Register to keyboard events
98
+
99
+ You can register to `ScrollViewResponder` events `onKeyboardWillShow` and `onKeyboardWillHide`:
100
+
101
+ ```jsx
102
+ <KeyboardAwareScrollView
103
+ onKeyboardWillShow={(frames: Object) => {
104
+ console.log('Keyboard event', frames)
105
+ }}>
106
+ <View>
107
+ <TextInput />
108
+ </View>
109
+ </KeyboardAwareScrollView>
110
+ ```
111
+
112
+ ## Android Support
113
+
114
+ 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).
115
+
116
+ But if you want to use feature like `extraHeight`, you need to enable Android Support with the following steps:
117
+
118
+ - Make sure you are using react-native `0.46` or above.
119
+ - Set `windowSoftInputMode` to `adjustPan` in `AndroidManifest.xml`.
120
+ - Set `enableOnAndroid` property to `true`.
121
+
122
+ Android Support is not perfect, here is the supported list:
123
+
124
+ | **Prop** | **Android Support** |
125
+ | --------------------------- | ------------------- |
126
+ | `viewIsInsideTabBar` | Yes |
127
+ | `resetScrollToCoords` | Yes |
128
+ | `enableAutomaticScroll` | Yes |
129
+ | `extraHeight` | Yes |
130
+ | `extraScrollHeight` | Yes |
131
+ | `enableResetScrollToCoords` | Yes |
132
+ | `keyboardOpeningTime` | No |
133
+
134
+ ## API
135
+
136
+ ### Props
137
+
138
+ All the `ScrollView`/`FlatList` props will be passed.
139
+
140
+ | **Prop** | **Type** | **Description** |
141
+ | --------------------------- | -------------------------------- | ---------------------------------------------------------------------------------------------- |
142
+ | `innerRef` | `Function` | Catch the reference of the component. |
143
+ | `viewIsInsideTabBar` | `boolean` | Adds an extra offset that represents the `TabBarIOS` height. |
144
+ | `resetScrollToCoords` | `Object: {x: number, y: number}` | Coordinates that will be used to reset the scroll when the keyboard hides. |
145
+ | `enableAutomaticScroll` | `boolean` | When focus in `TextInput` will scroll the position, default is enabled. |
146
+ | `extraHeight` | `number` | Adds an extra offset when focusing the `TextInput`s. |
147
+ | `extraScrollHeight` | `number` | Adds an extra offset to the keyboard. Useful if you want to stick elements above the keyboard. |
148
+ | `enableResetScrollToCoords` | `boolean` | Lets the user enable or disable automatic resetScrollToCoords. |
149
+ | `keyboardOpeningTime` | `number` | Sets the delay time before scrolling to new position, default is 250 |
150
+ | `enableOnAndroid` | `boolean` | Enable Android Support |
151
+
152
+ ### Methods
153
+
154
+ Use `innerRef` to get the component reference and use `this.scrollRef.props` to access these methods.
155
+
156
+ | **Method** | **Parameter** | **Description** |
157
+ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
158
+ | `getScrollResponder` | `void` | Get `ScrollResponder` |
159
+ | `scrollToPosition` | `x: number, y: number, animated: bool = true` | Scroll to specific position with or without animation. |
160
+ | `scrollToEnd` | `animated?: bool = true` | Scroll to end with or without animation. |
161
+ | `scrollIntoView` | `element: React.Element<*>, options: { getScrollPosition: ?(parentLayout, childLayout, contentOffset) => { x: number, y: number, animated: boolean } }` | Scrolls an element inside a KeyboardAwareScrollView into view. |
162
+
163
+ ### Using high order component
164
+
165
+ Enabling any component to be keyboard-aware is very easy. Take a look at the code of `KeyboardAwareFlatList`:
166
+
167
+ ```js
168
+ /* @flow */
169
+
170
+ import { FlatList } from 'react-native'
171
+ import listenToKeyboardEvents from './KeyboardAwareHOC'
172
+
173
+ export default listenToKeyboardEvents(FlatList)
174
+ ```
175
+
176
+ 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.
177
+
178
+ ```js
179
+ /* @flow */
180
+
181
+ import { FlatList } from 'react-native'
182
+ import listenToKeyboardEvents from './KeyboardAwareHOC'
183
+
184
+ const config = {
185
+ enableOnAndroid: true,
186
+ enableAutomaticScroll: true
187
+ }
188
+
189
+ export default listenToKeyboardEvents(config)(FlatList)
190
+ ```
191
+
192
+ The available config options are:
193
+
194
+ ```js
195
+ {
196
+ enableOnAndroid: boolean,
197
+ contentContainerStyle: ?Object,
198
+ enableAutomaticScroll: boolean,
199
+ extraHeight: number,
200
+ extraScrollHeight: number,
201
+ enableResetScrollToCoords: boolean,
202
+ keyboardOpeningTime: number,
203
+ viewIsInsideTabBar: boolean,
204
+ refPropName: string,
205
+ extractNativeRef: Function
206
+ }
207
+ ```
208
+
209
+ ## License
210
+
211
+ MIT.
212
+
213
+ ## Author
214
+
215
+ Álvaro Medina Ballester `<amedina at apsl.net>`
216
+
217
+ Built with 💛 by [APSL](https://github.com/apsl).