├── local.properties
├── .gradle
├── 6.3
│ ├── gc.properties
│ ├── fileChanges
│ │ └── last-build.bin
│ ├── fileHashes
│ │ ├── fileHashes.bin
│ │ └── fileHashes.lock
│ └── executionHistory
│ │ ├── executionHistory.bin
│ │ └── executionHistory.lock
├── 6.5.1
│ ├── gc.properties
│ ├── fileChanges
│ │ └── last-build.bin
│ ├── fileHashes
│ │ ├── fileHashes.bin
│ │ └── fileHashes.lock
│ └── executionHistory
│ │ ├── executionHistory.bin
│ │ └── executionHistory.lock
├── vcs-1
│ └── gc.properties
├── buildOutputCleanup
│ ├── cache.properties
│ ├── outputFiles.bin
│ └── buildOutputCleanup.lock
└── checksums
│ ├── checksums.lock
│ ├── md5-checksums.bin
│ ├── sha1-checksums.bin
│ ├── sha256-checksums.bin
│ └── sha512-checksums.bin
├── settings.gradle.kts
├── gradle.properties
├── .idea
├── .gitignore
├── vcs.xml
├── misc.xml
├── artifacts
│ ├── ojaynico_kotlin_react_native_js_1_0.xml
│ ├── ojaynico_kotlin_react_native_js_1_0_1.xml
│ ├── ojaynico_kotlin_react_native_jvm_1_0.xml
│ ├── ojaynico_kotlin_react_native_jvm_1_0_1.xml
│ └── ojaynico_kotlin_react_native_1_0_1.xml
├── kotlinScripting.xml
├── compiler.xml
├── gradle.xml
├── modules
│ ├── ojaynico-kotlin-react-native.nativeMain.iml
│ ├── ojaynico-kotlin-react-native.nativeTest.iml
│ ├── ojaynico-kotlin-react-native.main.iml
│ ├── ojaynico-kotlin-react-native.test.iml
│ ├── ojaynico-kotlin-react-native.commonMain.iml
│ ├── ojaynico-kotlin-react-native.commonTest.iml
│ ├── ojaynico-kotlin-react-native.jsTest.iml
│ ├── ojaynico-kotlin-react-native.jvmMain.iml
│ └── ojaynico-kotlin-react-native.jvmTest.iml
└── jarRepositories.xml
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── src
└── main
│ └── kotlin
│ └── ojaynico
│ └── kotlin
│ └── react
│ ├── NavigatorBuilder.kt
│ ├── Extensions.kt
│ ├── NativeBuilder.kt
│ ├── navigator
│ └── Navigator.kt
│ ├── native
│ ├── api
│ │ └── Api.kt
│ └── component
│ │ └── Components.kt
│ └── Style.kt
├── LICENSE
├── gradlew.bat
├── gradlew
└── README.md
/local.properties:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/6.3/gc.properties:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/6.5.1/gc.properties:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/vcs-1/gc.properties:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/6.3/fileChanges/last-build.bin:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/6.5.1/fileChanges/last-build.bin:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 |
2 | rootProject.name = "ojaynico-kotlin-react-native"
3 |
4 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | kotlin.code.style=official
2 | kotlin.js.generate.executable.default=false
3 |
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/cache.properties:
--------------------------------------------------------------------------------
1 | #Tue Nov 17 13:34:25 EAT 2020
2 | gradle.version=6.7
3 |
--------------------------------------------------------------------------------
/.gradle/checksums/checksums.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/checksums/checksums.lock
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 | # Editor-based HTTP Client requests
5 | /httpRequests/
6 |
--------------------------------------------------------------------------------
/.gradle/checksums/md5-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/checksums/md5-checksums.bin
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/.gradle/6.3/fileHashes/fileHashes.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.3/fileHashes/fileHashes.bin
--------------------------------------------------------------------------------
/.gradle/checksums/sha1-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/checksums/sha1-checksums.bin
--------------------------------------------------------------------------------
/.gradle/6.3/fileHashes/fileHashes.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.3/fileHashes/fileHashes.lock
--------------------------------------------------------------------------------
/.gradle/6.5.1/fileHashes/fileHashes.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.5.1/fileHashes/fileHashes.bin
--------------------------------------------------------------------------------
/.gradle/6.5.1/fileHashes/fileHashes.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.5.1/fileHashes/fileHashes.lock
--------------------------------------------------------------------------------
/.gradle/checksums/sha256-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/checksums/sha256-checksums.bin
--------------------------------------------------------------------------------
/.gradle/checksums/sha512-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/checksums/sha512-checksums.bin
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/outputFiles.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/buildOutputCleanup/outputFiles.bin
--------------------------------------------------------------------------------
/.gradle/6.3/executionHistory/executionHistory.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.3/executionHistory/executionHistory.bin
--------------------------------------------------------------------------------
/.gradle/6.3/executionHistory/executionHistory.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.3/executionHistory/executionHistory.lock
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/buildOutputCleanup.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/buildOutputCleanup/buildOutputCleanup.lock
--------------------------------------------------------------------------------
/.gradle/6.5.1/executionHistory/executionHistory.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.5.1/executionHistory/executionHistory.bin
--------------------------------------------------------------------------------
/.gradle/6.5.1/executionHistory/executionHistory.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ojaynico/ojaynico-kotlin-react-native/HEAD/.gradle/6.5.1/executionHistory/executionHistory.lock
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/artifacts/ojaynico_kotlin_react_native_js_1_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | $PROJECT_DIR$/build/libs
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/artifacts/ojaynico_kotlin_react_native_js_1_0_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | $PROJECT_DIR$/build/libs
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/artifacts/ojaynico_kotlin_react_native_jvm_1_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | $PROJECT_DIR$/build/libs
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/artifacts/ojaynico_kotlin_react_native_jvm_1_0_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | $PROJECT_DIR$/build/libs
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/artifacts/ojaynico_kotlin_react_native_1_0_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | $PROJECT_DIR$/build/libs
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/kotlinScripting.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 2147483647
6 | true
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/main/kotlin/ojaynico/kotlin/react/NavigatorBuilder.kt:
--------------------------------------------------------------------------------
1 | package ojaynico.kotlin.react
2 |
3 | /*
4 | fun RBuilder.navigator(handler: RElementBuilder.() -> Unit) = child(Navigator::class) {
5 | handler()
6 | }
7 |
8 | fun RBuilder.route(handler: RElementBuilder.() -> Unit) = child(Route) {
9 | handler()
10 | }
11 |
12 | fun ChildrenBuilder.nico(handler: NavigatorProps) = child(Navigator::class) {
13 | handler
14 | }*/
15 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/main/kotlin/ojaynico/kotlin/react/Extensions.kt:
--------------------------------------------------------------------------------
1 | @file:Suppress("unused")
2 |
3 | package ojaynico.kotlin.react
4 |
5 | import ojaynico.kotlin.react.native.api.AppRegistry
6 | import react.Component
7 |
8 | // Components
9 |
10 | inline fun > AppRegistry.registerComponent(name: String) {
11 | registerComponent(name) { T::class.js }
12 | }
13 |
14 | // JS
15 |
16 | inline fun json(init: dynamic.() -> Unit): dynamic {
17 | val o = json()
18 | init(o)
19 | return o
20 | }
21 |
22 | @Suppress("NOTHING_TO_INLINE")
23 | inline fun json(): dynamic = js("{}")
24 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Nicodemus Ojwee
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 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.nativeMain.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ojaynico-kotlin-react-native:commonMain
7 |
8 | ojaynico-kotlin-react-native.commonMain
9 |
10 | COMPILATION_AND_SOURCE_SET_HOLDER
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.nativeTest.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ojaynico-kotlin-react-native:commonTest
7 |
8 | ojaynico-kotlin-react-native.nativeMain
9 | ojaynico-kotlin-react-native.commonMain
10 | ojaynico-kotlin-react-native.commonTest
11 |
12 | COMPILATION_AND_SOURCE_SET_HOLDER
13 |
14 | nativeTest|ojaynico-kotlin-react-native:nativeTest|native
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.main.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | COMPILATION_AND_SOURCE_SET_HOLDER
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.test.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | ojaynico-kotlin-react-native.main
8 |
9 | COMPILATION_AND_SOURCE_SET_HOLDER
10 |
11 | nodeTest|ojaynico-kotlin-react-native:test|js
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.commonMain.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SOURCE_SET_HOLDER
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.commonTest.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | SOURCE_SET_HOLDER
7 |
8 | jsNodeTest|ojaynico-kotlin-react-native:jsTest|js
9 | jsBrowserTest|ojaynico-kotlin-react-native:jsTest|js
10 | jvmTest|ojaynico-kotlin-react-native:jvmTest|jvm
11 | nativeTest|ojaynico-kotlin-react-native:nativeTest|native
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%" == "" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%" == "" set DIRNAME=.
29 | set APP_BASE_NAME=%~n0
30 | set APP_HOME=%DIRNAME%
31 |
32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
34 |
35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
37 |
38 | @rem Find java.exe
39 | if defined JAVA_HOME goto findJavaFromJavaHome
40 |
41 | set JAVA_EXE=java.exe
42 | %JAVA_EXE% -version >NUL 2>&1
43 | if "%ERRORLEVEL%" == "0" goto init
44 |
45 | echo.
46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47 | echo.
48 | echo Please set the JAVA_HOME variable in your environment to match the
49 | echo location of your Java installation.
50 |
51 | goto fail
52 |
53 | :findJavaFromJavaHome
54 | set JAVA_HOME=%JAVA_HOME:"=%
55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
56 |
57 | if exist "%JAVA_EXE%" goto init
58 |
59 | echo.
60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61 | echo.
62 | echo Please set the JAVA_HOME variable in your environment to match the
63 | echo location of your Java installation.
64 |
65 | goto fail
66 |
67 | :init
68 | @rem Get command-line arguments, handling Windows variants
69 |
70 | if not "%OS%" == "Windows_NT" goto win9xME_args
71 |
72 | :win9xME_args
73 | @rem Slurp the command line arguments.
74 | set CMD_LINE_ARGS=
75 | set _SKIP=2
76 |
77 | :win9xME_args_slurp
78 | if "x%~1" == "x" goto execute
79 |
80 | set CMD_LINE_ARGS=%*
81 |
82 | :execute
83 | @rem Setup the command line
84 |
85 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
86 |
87 | @rem Execute Gradle
88 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
89 |
90 | :end
91 | @rem End local scope for the variables with windows NT shell
92 | if "%ERRORLEVEL%"=="0" goto mainEnd
93 |
94 | :fail
95 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
96 | rem the _cmd.exe /c_ return code!
97 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
98 | exit /b 1
99 |
100 | :mainEnd
101 | if "%OS%"=="Windows_NT" endlocal
102 |
103 | :omega
104 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.jsTest.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ojaynico-kotlin-react-native:commonTest
7 |
8 | ojaynico-kotlin-react-native.jsMain
9 | ojaynico-kotlin-react-native.commonMain
10 | ojaynico-kotlin-react-native.commonTest
11 |
12 | COMPILATION_AND_SOURCE_SET_HOLDER
13 |
14 | jsNodeTest|ojaynico-kotlin-react-native:jsTest|js
15 | jsBrowserTest|ojaynico-kotlin-react-native:jsTest|js
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.jvmMain.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ojaynico-kotlin-react-native:commonMain
7 |
8 | ojaynico-kotlin-react-native.commonMain
9 |
10 | COMPILATION_AND_SOURCE_SET_HOLDER
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/src/main/kotlin/ojaynico/kotlin/react/NativeBuilder.kt:
--------------------------------------------------------------------------------
1 | package ojaynico.kotlin.react
2 |
3 | import ojaynico.kotlin.react.native.*
4 | import react.ReactNode
5 |
6 | /*fun RBuilder.view(handler: RElementBuilder.() -> Unit) = child(View::class) {
7 | handler()
8 | }
9 |
10 | fun RBuilder.animatedView(handler: RElementBuilder.() -> Unit) = child(Animated.View::class) {
11 | handler()
12 | }
13 |
14 | fun RBuilder.text(text: String, handler: RElementBuilder.() -> Unit) = child(Text::class) {
15 | this.childList.add(ReactNode(text))
16 | handler()
17 | }
18 |
19 | fun RBuilder.animatedText(text: String, handler: RElementBuilder.() -> Unit) = child(Animated.Text::class) {
20 | this.childList.add(ReactNode(text))
21 | handler()
22 | }
23 |
24 | fun RBuilder.button(handler: ButtonProps.() -> Unit) = child(Button::class) {
25 | attrs(handler)
26 | }
27 |
28 | fun RBuilder.image(handler: ImageProps.() -> Unit) = child(Image::class) {
29 | attrs(handler)
30 | }
31 |
32 | fun RBuilder.animatedImage(handler: ImageProps.() -> Unit) = child(Animated.Image::class) {
33 | attrs(handler)
34 | }
35 |
36 | fun RBuilder.imageBackground(handler: RElementBuilder.() -> Unit) = child(ImageBackground::class) {
37 | handler()
38 | }
39 |
40 | fun RBuilder.textInput(handler: TextInputProps.() -> Unit) = child(TextInput::class) {
41 | attrs(handler)
42 | }
43 |
44 | fun RBuilder.switch(handler: SwitchProps.() -> Unit) = child(Switch::class) {
45 | attrs(handler)
46 | }
47 |
48 | fun RBuilder.flatList(handler: FlatListProps.() -> Unit) = child(FlatList::class) {
49 | attrs(handler)
50 | }
51 |
52 | fun RBuilder.animatedFlatList(handler: FlatListProps.() -> Unit) = child(Animated.FlatList::class) {
53 | attrs(handler)
54 | }
55 |
56 | fun RBuilder.sectionList(handler: SectionListProps.() -> Unit) = child(SectionList::class) {
57 | attrs(handler)
58 | }
59 |
60 | fun RBuilder.animatedSectionList(handler: SectionListProps.() -> Unit) = child(Animated.SectionList::class) {
61 | attrs(handler)
62 | }
63 |
64 | fun RBuilder.scrollView(handler: RElementBuilder.() -> Unit) = child(ScrollView::class) {
65 | handler()
66 | }
67 |
68 | fun RBuilder.animatedScrollView(handler: RElementBuilder.() -> Unit) = child(Animated.ScrollView::class) {
69 | handler()
70 | }
71 |
72 | fun RBuilder.safeAreaView(handler: RElementBuilder.() -> Unit) = child(SafeAreaView::class) {
73 | handler()
74 | }
75 |
76 | fun RBuilder.activityIndicator(handler: ActivityIndicatorProps.() -> Unit) = child(ActivityIndicator::class) {
77 | attrs(handler)
78 | }
79 |
80 | fun RBuilder.keyboardAvoidingView(handler: KeyboardAvoidingViewProps.() -> Unit) = child(KeyboardAvoidingView::class) {
81 | attrs(handler)
82 | }
83 |
84 | fun RBuilder.modal(handler: ModalProps.() -> Unit) = child(Modal::class) {
85 | attrs(handler)
86 | }
87 |
88 | fun RBuilder.pressable(handler: RElementBuilder.() -> Unit) = child(Pressable::class) {
89 | handler()
90 | }
91 |
92 | fun RBuilder.refreshControl(handler: RefreshControlProps.() -> Unit) = child(RefreshControl::class) {
93 | attrs(handler)
94 | }
95 |
96 | fun RBuilder.statusBar(handler: StatusBarProps.() -> Unit) = child(StatusBar::class) {
97 | attrs(handler)
98 | }
99 |
100 | fun RBuilder.touchableHighlight(handler: TouchableHighlightProps.() -> Unit) = child(TouchableHighlight::class) {
101 | attrs(handler)
102 | }
103 |
104 | fun RBuilder.touchableOpacity(handler: RElementBuilder.() -> Unit) = child(TouchableOpacity::class) {
105 | handler()
106 | }
107 |
108 | fun RBuilder.touchableWithoutFeedback(handler: TouchableWithoutFeedbackProps.() -> Unit) = child(TouchableWithoutFeedback::class) {
109 | attrs(handler)
110 | }
111 |
112 | fun RBuilder.virtualizedList(handler: VirtualizedListProps.() -> Unit) = child(VirtualizedList::class) {
113 | attrs(handler)
114 | }
115 |
116 | fun RBuilder.drawerLayoutAndroid(handler: DrawerLayoutAndroidProps.() -> Unit) = child(DrawerLayoutAndroid::class) {
117 | attrs(handler)
118 | }
119 |
120 | fun RBuilder.touchableNativeFeedback(handler: TouchableNativeFeedbackProps.() -> Unit) = child(TouchableNativeFeedback::class) {
121 | attrs(handler)
122 | }
123 |
124 | fun RBuilder.inputAccessoryView(handler: InputAccessoryViewProps.() -> Unit) = child(InputAccessoryView::class) {
125 | attrs(handler)
126 | }*/
127 |
128 | typealias ComponentProvider = () -> dynamic
129 |
--------------------------------------------------------------------------------
/.idea/modules/ojaynico-kotlin-react-native.jvmTest.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ojaynico-kotlin-react-native:commonTest
7 |
8 | ojaynico-kotlin-react-native.jvmMain
9 | ojaynico-kotlin-react-native.commonMain
10 | ojaynico-kotlin-react-native.commonTest
11 |
12 | COMPILATION_AND_SOURCE_SET_HOLDER
13 |
14 | jvmTest|ojaynico-kotlin-react-native:jvmTest|jvm
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | #
4 | # Copyright 2015 the original author or authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | ##
21 | ## Gradle start up script for UN*X
22 | ##
23 | ##############################################################################
24 |
25 | # Attempt to set APP_HOME
26 | # Resolve links: $0 may be a link
27 | PRG="$0"
28 | # Need this for relative symlinks.
29 | while [ -h "$PRG" ] ; do
30 | ls=`ls -ld "$PRG"`
31 | link=`expr "$ls" : '.*-> \(.*\)$'`
32 | if expr "$link" : '/.*' > /dev/null; then
33 | PRG="$link"
34 | else
35 | PRG=`dirname "$PRG"`"/$link"
36 | fi
37 | done
38 | SAVED="`pwd`"
39 | cd "`dirname \"$PRG\"`/" >/dev/null
40 | APP_HOME="`pwd -P`"
41 | cd "$SAVED" >/dev/null
42 |
43 | APP_NAME="Gradle"
44 | APP_BASE_NAME=`basename "$0"`
45 |
46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
48 |
49 | # Use the maximum available, or set MAX_FD != -1 to use that value.
50 | MAX_FD="maximum"
51 |
52 | warn () {
53 | echo "$*"
54 | }
55 |
56 | die () {
57 | echo
58 | echo "$*"
59 | echo
60 | exit 1
61 | }
62 |
63 | # OS specific support (must be 'true' or 'false').
64 | cygwin=false
65 | msys=false
66 | darwin=false
67 | nonstop=false
68 | case "`uname`" in
69 | CYGWIN* )
70 | cygwin=true
71 | ;;
72 | Darwin* )
73 | darwin=true
74 | ;;
75 | MINGW* )
76 | msys=true
77 | ;;
78 | NONSTOP* )
79 | nonstop=true
80 | ;;
81 | esac
82 |
83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
84 |
85 | # Determine the Java command to use to start the JVM.
86 | if [ -n "$JAVA_HOME" ] ; then
87 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
88 | # IBM's JDK on AIX uses strange locations for the executables
89 | JAVACMD="$JAVA_HOME/jre/sh/java"
90 | else
91 | JAVACMD="$JAVA_HOME/bin/java"
92 | fi
93 | if [ ! -x "$JAVACMD" ] ; then
94 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
95 |
96 | Please set the JAVA_HOME variable in your environment to match the
97 | location of your Java installation."
98 | fi
99 | else
100 | JAVACMD="java"
101 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
102 |
103 | Please set the JAVA_HOME variable in your environment to match the
104 | location of your Java installation."
105 | fi
106 |
107 | # Increase the maximum file descriptors if we can.
108 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
109 | MAX_FD_LIMIT=`ulimit -H -n`
110 | if [ $? -eq 0 ] ; then
111 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
112 | MAX_FD="$MAX_FD_LIMIT"
113 | fi
114 | ulimit -n $MAX_FD
115 | if [ $? -ne 0 ] ; then
116 | warn "Could not set maximum file descriptor limit: $MAX_FD"
117 | fi
118 | else
119 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
120 | fi
121 | fi
122 |
123 | # For Darwin, add options to specify how the application appears in the dock
124 | if $darwin; then
125 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
126 | fi
127 |
128 | # For Cygwin or MSYS, switch paths to Windows format before running java
129 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
130 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
131 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
132 | JAVACMD=`cygpath --unix "$JAVACMD"`
133 |
134 | # We build the pattern for arguments to be converted via cygpath
135 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
136 | SEP=""
137 | for dir in $ROOTDIRSRAW ; do
138 | ROOTDIRS="$ROOTDIRS$SEP$dir"
139 | SEP="|"
140 | done
141 | OURCYGPATTERN="(^($ROOTDIRS))"
142 | # Add a user-defined pattern to the cygpath arguments
143 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
144 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
145 | fi
146 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
147 | i=0
148 | for arg in "$@" ; do
149 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
150 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
151 |
152 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
153 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
154 | else
155 | eval `echo args$i`="\"$arg\""
156 | fi
157 | i=`expr $i + 1`
158 | done
159 | case $i in
160 | 0) set -- ;;
161 | 1) set -- "$args0" ;;
162 | 2) set -- "$args0" "$args1" ;;
163 | 3) set -- "$args0" "$args1" "$args2" ;;
164 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
165 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
166 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
167 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
168 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
169 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
170 | esac
171 | fi
172 |
173 | # Escape application args
174 | save () {
175 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
176 | echo " "
177 | }
178 | APP_ARGS=`save "$@"`
179 |
180 | # Collect all arguments for the java command, following the shell quoting and substitution rules
181 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
182 |
183 | exec "$JAVACMD" "$@"
184 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ojaynico-kotlin-react-native
2 | [](https://search.maven.org/artifact/com.github.ojaynico/ojaynico-kotlin-react-native/1.2.0/pom)
3 | [](http://kotlinlang.org)
4 | [](https://www.npmjs.com/package/react)
5 | [](https://www.npmjs.com/package/react-native)
6 | [](https://kotl.in/jsirsupported)
7 |
8 | Kotlin Wrappers for React Native Components and APIs
9 |
10 | Available components: All react native components are available in this wrapper. Check them out using the URL below:
11 |
12 | https://reactnative.dev/docs/components-and-apis
13 |
14 | Available APIs: All react native APIs are available in this wrapper. Check them out using the URL below:
15 |
16 | https://reactnative.dev/docs/accessibilityinfo
17 |
18 | ## `How to use the wrapper?`
19 |
20 | Use the cli tool below to generate a new Kotlin React Native application.
21 |
22 | https://github.com/ojaynico/create-ojaynico-krn
23 |
24 | Proceed to the next step after generating the project.
25 |
26 | In your react native application shared module (a kotlin gradle project), update your gradle file to include the following in the respective blocks.
27 |
28 | ```kotlin
29 | repositories {
30 | mavenCentral()
31 | jcenter()
32 | }
33 |
34 | dependencies {
35 | implementation("com.github.ojaynico:ojaynico-kotlin-react-native:1.2.0")
36 | }
37 | ```
38 |
39 | ### `Example of a react native app using the above wrapper`
40 |
41 | ```kotlin
42 | import ojaynico.kotlin.react.native.api.AppRegistry
43 | import ojaynico.kotlin.react.native.api.Platform
44 | import ojaynico.kotlin.react.native.component.ScrollView
45 | import ojaynico.kotlin.react.native.component.StyleSheet
46 | import ojaynico.kotlin.react.native.component.Text
47 | import ojaynico.kotlin.react.native.component.View
48 | import react.FC
49 | import react.Props
50 |
51 | val styles = StyleSheet.create(object {
52 | val body = object {
53 | val backgroundColor = "#FFF"
54 | }
55 | val text = object {
56 | val fontSize = 24
57 | val fontWeight = "600"
58 | val color = "#000"
59 | }
60 | })
61 |
62 | val App = FC {
63 | ScrollView {
64 | contentInsetAdjustmentBehavior = "automatic"
65 |
66 | View {
67 | style = styles.body
68 |
69 | Text {
70 | style = styles.text
71 | +"Welcome to Kotlin React Native"
72 | }
73 | }
74 | }
75 | }
76 |
77 | fun main() {
78 | // For class components
79 | //AppRegistry.registerComponent("MyApp") { App::class.js }
80 | // For functional components (Assume App is the functional component)
81 | AppRegistry.registerComponent("MyApp") { App }
82 |
83 | // Code below will work if you have added react native web dependency to your project.
84 | // Visit how to set up react native web in your project for a detailed instruction.
85 | // An example project using react native web is in the link at the end of this document.
86 | if (Platform.OS == "web") {
87 | AppRegistry.runApplication("MyApp", json {
88 | rootTag = document.getElementById("root")
89 | })
90 | }
91 | }
92 | ```
93 |
94 | ## `NOTE: STILL UNDER DEVELOPMENT. USE ALTERNATIVE NAVIGATION`
95 | ### `Example using Navigation`
96 |
97 | ```kotlin
98 | import ojaynico.kotlin.react.*
99 | import ojaynico.kotlin.react.native.AppRegistry
100 | import ojaynico.kotlin.react.native.Platform
101 | import kotlinx.browser.document
102 | import react.*
103 |
104 | val Menu = functionComponent { props ->
105 | view {
106 | this.attrs.style = json {
107 | flex = 1
108 | backgroundColor = "white"
109 | marginRight = "90%"
110 | }
111 |
112 | button {
113 | title = "Screen Two"
114 | onPress = {
115 | // props being passed through a json object
116 | // NOTE: An interface with the props below have to be defined and used by ScreenTwo component
117 | props.navigator.push("ScreenTwo", json {
118 | name = "Nicodemus Ojwee"
119 | age = 25
120 | school = "Namilyango College"
121 | })
122 | }
123 | }
124 | button {
125 | title = "Screen Three"
126 | onPress = {
127 | props.navigator.push("ScreenThree", json { })
128 | }
129 | }
130 |
131 | }
132 | }
133 |
134 | val App = functionComponent {
135 | navigator {
136 | this.attrs {
137 | // Side Menu (from above) is passed as functional component prop
138 | // Using asDynamic() for now till the next update
139 | asDynamic().sideMenu = Menu
140 | asDynamic().menuPosition = "left"
141 | }
142 | route {
143 | this.attrs {
144 | name = "ScreenOne"
145 | component = ScreenOne
146 | }
147 | }
148 | // pathVariables has to be defined as below if you plan to pass props in react native web
149 | // pathVariables names are supposed to be similar and in the order in which you have defined your props interface in ScreenTwoProps
150 | route {
151 | this.attrs {
152 | name = "ScreenTwo"
153 | component = ScreenTwo
154 | pathVariables = "name/age/school"
155 | }
156 | }
157 | route {
158 | this.attrs {
159 | name = "ScreenThree"
160 | component = ScreenThree
161 | }
162 | }
163 | }
164 | }
165 |
166 | val ScreenOne = functionComponent { props ->
167 | view {
168 | this.attrs.style = json {
169 | backgroundColor = "#59C9A5"
170 | flex = 1
171 | }
172 |
173 | button {
174 | title = "Menu"
175 | onPress = {
176 | props.navigator.showMenu()
177 | }
178 | }
179 |
180 | button {
181 | title = "Screen Two"
182 | onPress = {
183 | // props being passed through a json object
184 | // NOTE: An interface with the props below have to be defined and used by ScreenTwo component
185 | props.navigator.push("ScreenTwo", json {
186 | name = "Nicodemus Ojwee"
187 | age = 25
188 | school = "Namilyango College"
189 | })
190 | }
191 | }
192 |
193 | button {
194 | title = "Pop"
195 | onPress = {
196 | props.navigator.pop()
197 | }
198 | }
199 | }
200 | }
201 |
202 | // If using web, the props defined in the interface below have to be defined as pathVariables
203 | // in the route {} function above in App component and they have to follow the order.
204 | external interface ScreenTwoProps : NavigationProps {
205 | var name: String
206 | var age: Int
207 | var school: String
208 | }
209 |
210 | val ScreenTwo = functionComponent { props ->
211 | view {
212 | this.attrs.style = json {
213 | backgroundColor = "#23395B"
214 | flex = 1
215 | alignItems = "center"
216 | justifyContent = "center"
217 | }
218 |
219 | button {
220 | title = "Screen Three"
221 | onPress = {
222 | props.navigator.push("ScreenThree", json { })
223 | }
224 | }
225 |
226 | button {
227 | title = "Pop"
228 | onPress = {
229 | props.navigator.pop()
230 | }
231 | }
232 |
233 | text("Name is " + props.name) {
234 | this.attrs {
235 | style = json {
236 | color = "white"
237 | }
238 | }
239 | }
240 |
241 | text("Age is " + props.age) {
242 | this.attrs {
243 | style = json {
244 | color = "white"
245 | }
246 | }
247 | }
248 |
249 | text("School is " + props.school) {
250 | this.attrs {
251 | style = json {
252 | color = "white"
253 | }
254 | }
255 | }
256 | }
257 | }
258 |
259 | val ScreenThree = functionComponent { props ->
260 | view {
261 | this.attrs.style = json {
262 | backgroundColor = "#B9E3C6"
263 | flex = 1
264 | alignItems = "center"
265 | justifyContent = "center"
266 | }
267 |
268 | button {
269 | title = "Pop"
270 | onPress = {
271 | props.navigator.pop()
272 | }
273 | }
274 | }
275 | }
276 |
277 | fun main() {
278 | AppRegistry.registerComponent("MyApp") { App }
279 |
280 | // Code below will work if you have added react native web dependency to your project.
281 | // Visit how to set up react native web in your project for a detailed instruction.
282 | // An example project using react native web is in the link at the end of this document.
283 | if (Platform.OS == "web") {
284 | AppRegistry.runApplication("MyApp", json {
285 | rootTag = document.getElementById("root")
286 | })
287 | }
288 | }
289 |
290 | ```
291 |
292 | **NOTE:** In the main function, MyApp should be the same as the name of the app directory
293 |
294 | **A fully set up and working example can be found in the repository below.**
295 |
296 | https://github.com/ojaynico/KotlinReactNativeApp
297 |
298 | [](https://www.buymeacoffee.com/ojaynico)
299 |
--------------------------------------------------------------------------------
/src/main/kotlin/ojaynico/kotlin/react/navigator/Navigator.kt:
--------------------------------------------------------------------------------
1 | package ojaynico.kotlin.react.navigator
2 |
3 | import csstype.HtmlAttributes
4 | import kotlinext.js.getOwnPropertyNames
5 | import kotlinx.browser.window
6 | import ojaynico.kotlin.react.json
7 | import ojaynico.kotlin.react.native.*
8 | import ojaynico.kotlin.react.native.api.*
9 | import ojaynico.kotlin.react.native.component.StyleSheet
10 | import ojaynico.kotlin.react.native.component.View
11 | import react.*
12 | import kotlin.js.Json
13 |
14 | external interface RouteProps : Props {
15 | var name: String
16 | var component: dynamic
17 | var pathVariables: String
18 | }
19 |
20 | val Route = FC { }
21 |
22 | fun buildSceneConfig(children: Array, sideMenu: FC<*>): Json {
23 | val config = json { }
24 |
25 | children.forEach { child ->
26 | config[child.asDynamic().props.name] = json {
27 | key = child.asDynamic().props.name
28 | component = child.asDynamic().props.component
29 | pathVariables = child.asDynamic().props.pathVariables
30 | }
31 | }
32 |
33 |
34 | if (sideMenu != undefined) {
35 | config["krnMenu"] = json {
36 | key = "krnMenu"
37 | component = sideMenu
38 | }
39 | }
40 |
41 | return config.unsafeCast()
42 | }
43 |
44 | external interface NavigatorFunctions {
45 | var pop: () -> Unit
46 | val push: (routeName: String, props: dynamic) -> Unit
47 | var showMenu: () -> Unit
48 | }
49 |
50 | external interface NavigationProps : Props {
51 | var navigator: NavigatorFunctions
52 | }
53 |
54 | val screenWidth = Dimensions.get("window").width
55 |
56 | /*external interface NavigatorState : State {
57 | var initialSceneName: String
58 | var stack: List
59 | var sceneConfig: Json
60 | var showSideMenu: Boolean
61 | var touchX: dynamic
62 | var browserHistory: List
63 | }*/
64 |
65 | external interface NavigatorProps : Props {
66 | var sideMenu: FC<*>
67 | var menuPosition: String
68 | var disableMenuGesture: Boolean
69 | }
70 |
71 | fun getSceneNameFromUrl(): String {
72 | val href = window.location.href
73 | return href.substringAfter("/#/").substringBefore("/")
74 | }
75 |
76 | val Navigator = FC { props ->
77 |
78 | var initialSceneName: String by useState("")
79 | var stack: List by useState>(emptyList())
80 | var sceneConfig: Json by useState(json { })
81 | var showSideMenu: Boolean by useState(false)
82 | var touchX: dynamic by useState("")
83 | var browserHistory: List by useState>(emptyList())
84 | var firstTimeRender = useRef(true)
85 |
86 | val onBrowserHashChange = {
87 | window.location.reload()
88 |
89 | /*setState {
90 | val sceneName: String = getSceneNameFromUrl().ifEmpty { props.asDynamic().children[0].props.name as String }
91 |
92 | val pathVariables = sceneConfig[sceneName].unsafeCast()["pathVariables"]
93 |
94 | if (state.browserHistory.last() == sceneName) {
95 | handlePop()
96 | } else {
97 | handlePush(sceneName, getSceneProps(sceneName,
98 | pathVariables as String
99 | ))
100 | }
101 | }*/
102 | }
103 |
104 | val _animatedValue = Animated.Value(0)
105 |
106 | val handlePop = {
107 | Animated.asDynamic().timing(_animatedValue, json {
108 | toValue = if (state.showSideMenu && props.menuPosition == "left") -screenWidth else screenWidth
109 | duration = 250
110 | useNativeDriver = true
111 | }).start {
112 |
113 | if (showSideMenu) {
114 | if (props.menuPosition == "left") {
115 | _animatedValue.setValue(screenWidth)
116 | } else {
117 | _animatedValue.setValue(-screenWidth)
118 | }
119 |
120 | showSideMenu = false
121 | } else {
122 | _animatedValue.setValue(0)
123 | }
124 |
125 | if (stack.size > 1) {
126 | stack = stack.slice(0 until stack.size - 1)
127 |
128 | if (Platform.OS == "web") {
129 | browserHistory = browserHistory.slice(0 until browserHistory.size - 1)
130 | }
131 |
132 | if (Platform.OS == "web") {
133 | window.history.back()
134 | }
135 | }
136 | }
137 | }
138 |
139 | val backAction = {
140 | if (stack.size == 1 && !showSideMenu) {
141 | BackHandler.exitApp()
142 | } else {
143 | handlePop()
144 | }
145 |
146 | true
147 | }
148 |
149 | val getSceneProps: dynamic = { sceneName: String, pathVariables: String ->
150 | val path = if (sceneName.isEmpty()) window.location.protocol + "://" + window.location.host + "/#/"
151 | else
152 | window.location.protocol + "://" + window.location.host + "/#/" + sceneName + "/"
153 |
154 | val filterParam = window.location.href.substring(path.length - 1)
155 | val values = filterParam.split("/")
156 | val variables = pathVariables.split("/")
157 | val urlProps = json { }
158 |
159 | variables.forEachIndexed { index, s ->
160 | urlProps[s] = values[index]
161 | }
162 |
163 | urlProps
164 | }
165 |
166 | useEffect(dependencies = emptyArray()) {
167 |
168 | firstTimeRender.current = false
169 |
170 | if (Platform.OS == "web" && !window.location.href.contains("/#/")) {
171 | window.history.pushState("", "", "/#/")
172 | }
173 |
174 | initialSceneName = if (Platform.OS == "web" && getSceneNameFromUrl().isNotEmpty()) getSceneNameFromUrl() else props.asDynamic().children[0].props.name
175 | sceneConfig = buildSceneConfig(props.asDynamic().children, props.sideMenu)
176 |
177 | if (Platform.OS == "web") {
178 | browserHistory = listOf(initialSceneName)
179 | val pathVariables = sceneConfig[initialSceneName].unsafeCast()["pathVariables"]
180 |
181 | if (pathVariables != undefined) {
182 | sceneConfig[initialSceneName].unsafeCast()["props"] = getSceneProps(initialSceneName,
183 | pathVariables as String
184 | )
185 | }
186 | }
187 |
188 | stack = listOf(sceneConfig[initialSceneName].unsafeCast())
189 | showSideMenu = false
190 |
191 | if (Platform.OS == "web") {
192 | window.onhashchange = { hashChangeEvent ->
193 | onBrowserHashChange()
194 | }
195 | }
196 |
197 | BackHandler.addEventListener(
198 | "hardwareBackPress",
199 | backAction()
200 | )
201 | }
202 |
203 | useEffect(dependencies = emptyArray()) {
204 | return@useEffect BackHandler.removeEventListener(
205 | "hardwareBackPress",
206 | backAction()
207 | )
208 | }
209 |
210 | val onSwipeLeft = {
211 | if (showSideMenu) {
212 | handlePop()
213 |
214 | showSideMenu = !showSideMenu
215 | }
216 | }
217 |
218 | val onSwipeRight = {
219 | if (showSideMenu) {
220 | handlePop()
221 |
222 | showSideMenu = !showSideMenu
223 | }
224 | }
225 |
226 | val changeUrl = { urlata: String, sceneName: String ->
227 | if (sceneName != "krnMenu") {
228 | if (Platform.OS == "web") {
229 | if (initialSceneName == sceneName) {
230 | if (urlata.isNotEmpty())
231 | window.history.pushState("", "", "/#${HtmlAttributes.data}")
232 | else
233 | window.history.pushState("", "", "/#/")
234 | } else {
235 | if (urlata.isNotEmpty())
236 | window.history.pushState("", "", "/#/$sceneName${HtmlAttributes.data}")
237 | else
238 | window.history.pushState("", "", "/#/$sceneName")
239 | }
240 | }
241 | }
242 | /*val path = if (state.initialSceneName == sceneName) window.location.protocol + "://" + window.location.host + "/#/"
243 | else
244 | window.location.protocol + "://" + window.location.host + "/#/" + sceneName + "/"
245 |
246 | val filterParam = window.location.href.substring(path.length - 1)
247 | return filterParam.split("/")*/
248 | }
249 |
250 | useEffect(dependencies = arrayOf(stack)) {
251 | if (!firstTimeRender.current!!) {
252 | if (stack.last()["key"].toString() == "krnMenu") {
253 | if (props.menuPosition == "left") {
254 | _animatedValue.setValue(-screenWidth)
255 | } else {
256 | _animatedValue.setValue(screenWidth)
257 | }
258 | } else {
259 | _animatedValue.setValue(screenWidth)
260 | }
261 |
262 | Animated.asDynamic().timing(_animatedValue, json {
263 | toValue = 0
264 | duration = 250
265 | useNativeDriver = true
266 | }).start()
267 | }
268 | }
269 |
270 | val handlePush = { sceneName: String, childProps: dynamic ->
271 | showSideMenu = sceneName == "krnMenu"
272 |
273 | if (childProps != undefined && childProps != "") {
274 | var propsParams = ""
275 | val props_tmp = childProps.unsafeCast()
276 | val childPropsNames = props_tmp.getOwnPropertyNames()
277 |
278 | for (propName in childPropsNames) {
279 | propsParams += "/" + childProps[propName]
280 | }
281 |
282 | changeUrl(propsParams, sceneName)
283 | }
284 |
285 | sceneConfig[sceneName].unsafeCast()["props"] = childProps
286 |
287 | if (Platform.OS == "web") {
288 | browserHistory = browserHistory + listOf(sceneName)
289 | }
290 |
291 | stack = if (stack.last()["key"].toString() == "krnMenu") {
292 | stack.slice(0 until stack.size - 1) + listOf(sceneConfig[sceneName].unsafeCast())
293 | } else {
294 | stack + listOf(
295 | sceneConfig[sceneName].unsafeCast()
296 | )
297 | }
298 | }
299 |
300 |
301 |
302 | val handleShowMenu = {
303 | handlePush("krnMenu") {}
304 | }
305 |
306 | View {
307 | style = json {
308 | asDynamic().flex = 1
309 | flexDirection = "row"
310 | }
311 | asDynamic().onTouchStart = { e: dynamic ->
312 | if (props.disableMenuGesture == undefined || !props.disableMenuGesture) {
313 | val pageX = e.nativeEvent.pageX
314 | touchX = pageX
315 | }
316 | }
317 | asDynamic().onTouchEnd = { e: dynamic ->
318 | if (props.disableMenuGesture == undefined || !props.disableMenuGesture) {
319 | val positionX = e.nativeEvent.pageX
320 | val range = screenWidth / 6
321 |
322 | if (positionX - touchX > range) {
323 | onSwipeRight()
324 | } else if (touchX - positionX > range) {
325 | onSwipeLeft()
326 | }
327 | }
328 | }
329 |
330 | if (!stack.isNullOrEmpty()) {
331 | stack.forEachIndexed { index, json ->
332 | val sceneStyles = StyleSheet.compose(
333 | json {
334 | asDynamic().flex = 1
335 | },
336 | StyleSheet.asDynamic().absoluteFillObject
337 | )
338 |
339 | if (index == stack.size - 1 && index > 0) {
340 | sceneStyles.push(json {
341 | transform = arrayOf(
342 | json {
343 | translateX = _animatedValue
344 | }
345 | )
346 | })
347 | }
348 |
349 | // Fragments
350 | AnimatedView {
351 | style = sceneStyles
352 | asDynamic().key = json["key"].toString()
353 |
354 | /*json.asDynamic().component.unsafeCast> {
355 | asDynamic().navigator = object : NavigatorFunctions {
356 | override var pop = handlePop
357 | override val push = handlePush
358 | override var showMenu = handleShowMenu
359 | }
360 |
361 | if (json["props"] != undefined) {
362 | val childProps = json["props"].unsafeCast()
363 | val childPropsNames = childProps.getOwnPropertyNames()
364 | for (propName in childPropsNames) {
365 | asDynamic()[propName] = window.asDynamic().decodeURI(json["props"].asDynamic()[propName])
366 | }
367 | }
368 |
369 | }*/
370 |
371 | /*child(json.asDynamic().component.unsafeCast>()) {
372 | if (json["props"] != undefined) {
373 | val childProps = json["props"].unsafeCast()
374 | val childPropsNames = childProps.getOwnPropertyNames()
375 | for (propName in childPropsNames) {
376 | this.attrs.asDynamic()[propName] = window.asDynamic().decodeURI(json["props"].asDynamic()[propName])
377 | }
378 | }
379 |
380 | this.attrs {
381 | asDynamic().navigator = object : NavigatorFunctions {
382 | override var pop = handlePop
383 | override val push = handlePush
384 | override var showMenu = handleShowMenu
385 | }
386 | }
387 | }*/
388 | }
389 | }
390 | }
391 |
392 | }
393 | }
394 |
--------------------------------------------------------------------------------
/src/main/kotlin/ojaynico/kotlin/react/native/api/Api.kt:
--------------------------------------------------------------------------------
1 | @file:JsModule("react-native")
2 | @file:Suppress("unused")
3 |
4 | package ojaynico.kotlin.react.native.api
5 |
6 | import ojaynico.kotlin.react.ComponentProvider
7 | import ojaynico.kotlin.react.native.component.*
8 | import react.Component
9 | import react.FC
10 | import react.Props
11 | import react.State
12 | import kotlin.js.Promise
13 |
14 | // Alert Component
15 | external class Alert: Component {
16 | override fun render(): dynamic = definedExternally
17 |
18 | class Buttons(text: String, onPress: () -> Unit, style: String = definedExternally)
19 |
20 | companion object {
21 | fun alert(title: String,
22 | message: String,
23 | buttons: Array = definedExternally,
24 | options : dynamic = definedExternally
25 | )
26 | }
27 | }
28 |
29 | external val AnimatedView : FC
30 |
31 | external class Animated : Component {
32 |
33 | class View : Component {
34 | override fun render(): dynamic = definedExternally
35 | }
36 |
37 | class Text : Component {
38 | override fun render(): dynamic = definedExternally
39 | }
40 |
41 | class Image : Component {
42 | override fun render(): dynamic = definedExternally
43 | }
44 |
45 | class ScrollView : Component {
46 | override fun render(): dynamic = definedExternally
47 | }
48 |
49 | class FlatList : Component {
50 | override fun render(): dynamic = definedExternally
51 | }
52 |
53 | class SectionList : Component {
54 | override fun render(): dynamic = definedExternally
55 | }
56 |
57 | class Value(value: dynamic) {
58 | fun setValue(value: Number)
59 | fun setOffset(offset: Number)
60 | fun flattenOffset()
61 | fun extractOffset()
62 | fun addListener(callback: (dynamic) -> Unit)
63 | fun removeListener(id: String)
64 | fun removeAllListeners()
65 | fun stopAnimation(callback: (dynamic) -> Unit)
66 | fun resetAnimation(callback: (dynamic) -> Unit)
67 | fun interpolate(config: dynamic)
68 | fun animate(animations: dynamic, callback: (dynamic) -> Unit)
69 | fun stopTracking()
70 | fun track(tracking: dynamic)
71 | }
72 |
73 | class ValueXY {
74 | fun setValue(value: Number)
75 | fun setOffset(offset: Number)
76 | fun flattenOffset()
77 | fun extractOffset()
78 | fun addListener(callback: (dynamic) -> Unit)
79 | fun removeListener(id: String)
80 | fun removeAllListeners()
81 | fun stopAnimation(callback: (dynamic) -> Unit)
82 | fun resetAnimation(callback: (dynamic) -> Unit)
83 | fun getLayout()
84 | fun getTranslateTransform()
85 | }
86 |
87 | companion object {
88 | fun decay(value: dynamic, config: dynamic)
89 | fun timing(value: dynamic, config: dynamic)
90 | fun spring(value: dynamic, config: dynamic)
91 | fun add(a: dynamic, b: dynamic)
92 | fun subtract(a: dynamic, b: dynamic)
93 | fun divide(a: dynamic, b: dynamic)
94 | fun multiply(a: dynamic, b: dynamic)
95 | fun modulo(a: dynamic, modulus: dynamic)
96 | fun diffClamp(a: dynamic, min: dynamic, mac: dynamic)
97 | fun delay(time: dynamic)
98 | fun sequence(animations: dynamic)
99 | fun parallel(animations: dynamic, config: dynamic)
100 | fun stagger(time: dynamic, animations: dynamic)
101 | fun loop(animation: dynamic, config: dynamic)
102 | fun event(argMapping: dynamic, config: dynamic)
103 | fun forkEvent(event: dynamic, listener: dynamic)
104 | fun unforkEvent(event: dynamic, listener: dynamic)
105 | fun start(callback: (dynamic) -> Unit)
106 | fun stop()
107 | fun reset()
108 | }
109 |
110 | override fun render(): dynamic = definedExternally
111 | }
112 |
113 | external object Appearance {
114 | fun getColorScheme(): dynamic
115 | fun addChangeListener(listener: dynamic)
116 | fun removeChangeListener(listener: dynamic)
117 | }
118 |
119 | external object AppRegistry {
120 | fun registerComponent(appKey: String, getComponentFunc: ComponentProvider): String
121 | fun setWrapperComponentProvider(componentProvider: () -> JsClass)
122 | fun enableArchitectureIndicator(enabled: Boolean)
123 | fun registerConfig(config: dynamic)
124 | fun registerComponent(appKey: String, getComponentFunc: ComponentProvider, section: Boolean)
125 | fun registerRunnable(appKey: String, run: () -> Unit)
126 | fun registerSection(appKey: String, componentProvider: ComponentProvider)
127 | fun getAppKeys()
128 | fun getSectionKeys()
129 | fun getSections()
130 | fun getRunnable(appKey: String)
131 | fun getRegistry()
132 | fun setComponentProviderInstrumentationHook(hook: (componentProvider: ComponentProvider, scopedPerformanceLogger: dynamic) -> Unit)
133 | fun runApplication(appKey: String, appParameters: dynamic)
134 | fun unmountApplicationComponentAtRootTag(rootTag: Number)
135 | fun registerHeadlessTask(taskKey: String, taskProvider: dynamic)
136 | fun registerCancellableHeadlessTask(taskKey: String, taskProvider: dynamic, taskCancelProvider: dynamic)
137 | fun startHeadlessTask(taskId: Number, taskKey: String, data: dynamic)
138 | fun cancelHeadlessTask(taskId: Number, taskKey: String)
139 | }
140 |
141 | external class AppState {
142 | companion object {
143 | val currentState: dynamic
144 | fun addEventListener(type: dynamic, handler: dynamic)
145 | fun removeEventListener(type: dynamic, handler: dynamic)
146 | }
147 | }
148 |
149 | external class DevSettings {
150 | companion object {
151 | fun addMenuItem(title: String, handler: () -> Unit)
152 | fun reload()
153 | }
154 | }
155 |
156 | external class Dimensions {
157 | companion object {
158 | fun addEventListener(type: dynamic, handler: dynamic)
159 | fun get(dim: dynamic): dynamic
160 | fun removeEventListener(type: dynamic, handler: dynamic)
161 | fun set(dims: dynamic)
162 | }
163 | }
164 |
165 | external class Easing {
166 | companion object {
167 | fun step0(n: dynamic): dynamic
168 | fun step1(n: dynamic): dynamic
169 | fun linear(t: dynamic)
170 | fun ease(t: dynamic)
171 | fun quad(t: dynamic)
172 | fun cubic(t: dynamic)
173 | fun poly(n: dynamic)
174 | fun sin(t: dynamic)
175 | fun circle(t: dynamic)
176 | fun exp(t: dynamic)
177 | fun elastic(bounciness: dynamic)
178 | fun back(s: dynamic)
179 | fun bounce(t: dynamic)
180 | fun bezier(x1: dynamic, y1: dynamic, x2: dynamic, y2: dynamic)
181 | fun `in`()
182 | fun out()
183 | fun inOut()
184 | }
185 | }
186 |
187 | external object InteractionManager {
188 | fun runAfterInteractions(task: dynamic): dynamic
189 | fun createInteractionHandle()
190 | fun clearInteractionHandle(handle: dynamic)
191 | fun setDeadline(deadline: dynamic)
192 | }
193 |
194 | external object Keyboard{
195 | fun addListener(eventName: dynamic, callback: () -> Unit): dynamic
196 | fun removeListener(eventName: dynamic, callback: () -> Unit)
197 | fun removeAllListeners(eventName: String)
198 | fun dismiss()
199 | fun scheduleLayoutAnimation(event: dynamic)
200 | }
201 |
202 | external object LayoutAnimation {
203 | fun configureNext(config: dynamic, onAnimationDidEnd: () -> Unit)
204 | fun create(duration: dynamic, type: dynamic, creationProp: dynamic): dynamic
205 |
206 | object Types {
207 | val spring: dynamic
208 | val linear: dynamic
209 | val easeInEaseOut: dynamic
210 | val easeIn: dynamic
211 | val easeOut: dynamic
212 | val keyboard: dynamic
213 | }
214 |
215 | object Properties {
216 | val opacity: dynamic
217 | val scaleX: dynamic
218 | val scaleY: dynamic
219 | val scaleXY: dynamic
220 | }
221 |
222 | object Presets {
223 | val easeInEaseOut: dynamic
224 | val linear: dynamic
225 | val spring: dynamic
226 | }
227 | }
228 |
229 | external class Linking {
230 | companion object {
231 | suspend fun addEventListener(type: dynamic, handler: dynamic)
232 | suspend fun removeEventListener(type: dynamic, handler: dynamic)
233 | suspend fun openURL(url: dynamic)
234 | suspend fun canOpenURL(url: dynamic): dynamic
235 | suspend fun openSettings()
236 | suspend fun getInitialURL(): dynamic
237 | suspend fun sendIntent(action: String, extras: dynamic)
238 | }
239 | }
240 |
241 | external object PanResponder {
242 | fun create(config: dynamic)
243 | }
244 |
245 | external class PixelRatio {
246 | companion object {
247 | fun get(): dynamic
248 | fun getFontScale(): Number
249 | fun getPixelSizeForLayoutSize(layoutSize: Number): Number
250 | fun roundToNearestPixel(layoutSize: Number): Number
251 | }
252 | }
253 |
254 | external fun PlatformColor(vararg colors: dynamic): dynamic
255 |
256 | external class Share {
257 | companion object {
258 | suspend fun share(content: dynamic, options: dynamic): dynamic
259 | val sharedAction: dynamic
260 | val dismissedAction: dynamic
261 | }
262 | }
263 |
264 | external object Systrace {
265 | fun installReactHook(useFiber: dynamic)
266 | fun setEnabled(enabled: dynamic)
267 | fun isEnabled(): dynamic
268 | fun beginEvent(profileName: dynamic, args: dynamic)
269 | fun endEvent()
270 | fun beginAsyncEvent(profileName: dynamic)
271 | fun endAsyncEvent(profileName: dynamic, cookie: dynamic)
272 | fun counterEvent(profileName: dynamic, value: dynamic)
273 | }
274 |
275 | external object Vibration {
276 | fun vibrate()
277 | fun vibrate(pattern: dynamic, repeat: dynamic)
278 | fun cancel()
279 | }
280 |
281 | external object BackHandler {
282 | fun addEventListener(eventName: dynamic, handler: dynamic)
283 | fun exitApp()
284 | fun removeEventListener(eventName: dynamic, handler: dynamic)
285 | }
286 |
287 | external class PermissionsAndroid {
288 | companion object {
289 | suspend fun check(permission: String): dynamic
290 | suspend fun request(permission: String, rationale: dynamic): dynamic
291 | fun requestMultiple(permissions: Array): dynamic
292 | }
293 | }
294 |
295 | external object ToastAndroid {
296 | val SHORT: dynamic
297 | val LONG: dynamic
298 | val TOP: dynamic
299 | val BOTTOM: dynamic
300 | val CENTER: dynamic
301 |
302 | fun show(message: dynamic, duration: dynamic)
303 | fun showWithGravity(message: dynamic, duration: dynamic, gravity: dynamic)
304 | fun showWithGravityAndOffset(message: dynamic, duration: dynamic, gravity: dynamic, xOffset: dynamic, yOffset: dynamic)
305 | }
306 |
307 | external object ActionSheetIOS {
308 | fun showActionSheetWithOptions(options: dynamic, callback: (index: dynamic) -> Unit)
309 | fun showShareActionSheetWithOptions(options: dynamic, failureCallback: (error: dynamic) -> Unit, successCallback: (status: Boolean, method: String) -> Unit)
310 | }
311 |
312 | external fun DynamicColorIOS(arg: dynamic): dynamic
313 |
314 | external object Settings {
315 | fun clearWatch(watchId: Number)
316 | fun get(key: String): dynamic
317 | fun set(settings: dynamic)
318 | fun watchKeys(keys: dynamic, callback: () -> Unit): Number
319 | }
320 |
321 | external var Platform: dynamic = definedExternally
322 |
323 | external object AccessibilityInfo {
324 | fun isBoldTextEnabled(): Promise
325 | fun isGrayscaleEnabled(): Promise
326 | fun isInvertColorsEnabled(): Promise
327 | fun isReduceMotionEnabled(): Promise
328 | fun isReduceTransparencyEnabled(): Promise
329 | fun isScreenReaderEnabled(): Promise
330 | fun setAccessibilityFocus(reactTag: Number)
331 | fun sendAccessibilityEvent_unstable(handle: dynamic, eventType: dynamic)
332 | fun announceForAccessibility(announcement: String)
333 | fun getRecommendedTimeoutMillis(originalTimeout: Number): Promise
334 | fun addEventListener(eventName: String, handler: (args: dynamic) -> Unit): dynamic
335 | fun removeEventListener(eventName: String, handler: (args: dynamic) -> Unit)
336 | }
337 |
338 | external object Image {
339 | fun getSize(uri: String, success: () -> Unit, failure: () -> Unit): dynamic
340 | fun getSizeWithHeaders(uri: String, headers: dynamic, success: () -> Unit, failure: () -> Unit): dynamic
341 | fun prefetch(uri: String): dynamic
342 | fun abortPrefetch(requestId: Number): dynamic
343 | fun queryCache(vararg urls: String): dynamic
344 | fun resolveAssetSource(source: dynamic): dynamic
345 | }
346 |
347 | external object TextInput {
348 | fun focus()
349 | fun blur()
350 | fun clear()
351 | fun isFocused(): dynamic
352 | }
353 |
354 | external object FlatList {
355 | fun scrollToEnd(params: dynamic)
356 | fun scrollToIndex(params: dynamic)
357 | fun scrollToItem(params: dynamic)
358 | fun scrollToOffset(params: dynamic)
359 | fun recordInteraction()
360 | fun flashScrollIndicators()
361 | fun getNativeScrollRef()
362 | fun getScrollResponder()
363 | fun getScrollableNode()
364 | }
365 |
366 | external object ScrollView {
367 | fun flashScrollIndicators()
368 | fun scrollTo(vararg options: dynamic)
369 | fun scrollToEnd(vararg options: dynamic)
370 | fun scrollWithoutAnimationTo(y: dynamic, x: dynamic)
371 | }
372 |
373 | external object SectionList {
374 | fun scrollToLocation(params: dynamic)
375 | fun recordInteraction()
376 | fun flashScrollIndicators()
377 | }
378 |
379 | external object StatusBar {
380 | fun popStackEntry(entry: dynamic): dynamic
381 | fun pushStackEntry(entry: dynamic): dynamic
382 | fun replaceStackEntry(entry: dynamic, props: dynamic): dynamic
383 | fun setBackgroundColor(color: String, animated: Boolean)
384 | fun setBarStyle(style: dynamic, animated: Boolean)
385 | fun setHidden(hidden: Boolean, animation: dynamic)
386 | fun setNetworkActivityIndicatorVisible(visible: Boolean)
387 | fun setTranslucent(translucent: Boolean)
388 | }
389 |
390 | external object TouchableOpacity {
391 | fun setOpacityTo(value: Number, duration: Number)
392 | }
393 |
394 | external object VirtualizedList {
395 | fun scrollToEnd(params: dynamic)
396 | fun scrollToIndex(params: dynamic)
397 | fun scrollToItem(params: dynamic)
398 | fun scrollToOffset(params: dynamic)
399 | fun recordInteraction()
400 | fun flashScrollIndicators()
401 | fun getScrollRef()
402 | fun getScrollResponder()
403 | fun getScrollableNode()
404 | fun setNativeProps(params: dynamic)
405 | fun getChildContext() : dynamic
406 | fun hasMore(): Boolean
407 | }
408 |
409 | external object DrawerLayoutAndroid {
410 | fun closeDrawer()
411 | fun openDrawer()
412 | }
413 |
414 | external object TouchableNativeFeedback {
415 | fun SelectableBackground(rippleRadius: Number)
416 | fun SelectableBackgroundBorderless(rippleRadius: Number)
417 | fun Ripple(color: String, borderless: Boolean, rippleRadius: Number)
418 | fun canUseNativeForeground()
419 | }
420 |
--------------------------------------------------------------------------------
/src/main/kotlin/ojaynico/kotlin/react/Style.kt:
--------------------------------------------------------------------------------
1 | package ojaynico.kotlin.react
2 |
3 | interface LayoutStyle {
4 | val alignContent: dynamic
5 | val alignItems: dynamic
6 | val alignSelf: dynamic
7 | val aspectRatio: Number?
8 | val backgroundColor: String?
9 | val borderBottomWidth: Number?
10 | val borderEndWidth: dynamic
11 | val borderLeftWidth: Number?
12 | val borderRightWidth: Number?
13 | val borderStartWidth: dynamic
14 | val borderTopWidth: Number?
15 | val borderWidth: Number?
16 | var borderColor: dynamic
17 | val bottom: dynamic
18 | val direction: dynamic
19 | val display: dynamic
20 | val end: dynamic
21 | val flex: Number?
22 | val flexBasis: dynamic
23 | val flexDirection: dynamic
24 | val flexGrow: Number?
25 | val flexShrink: Number?
26 | val flexWrap: dynamic
27 | val height: dynamic
28 | val justifyContent: dynamic
29 | val left: dynamic
30 | val margin: dynamic
31 | val marginBottom: dynamic
32 | val marginEnd: dynamic
33 | val marginHorizontal: dynamic
34 | val marginLeft: dynamic
35 | val marginRight: dynamic
36 | val marginStart: dynamic
37 | val marginTop: dynamic
38 | val marginVertical: dynamic
39 | val maxHeight: dynamic
40 | val maxWidth: dynamic
41 | val minHeight: dynamic
42 | val minWidth: dynamic
43 | val overflow: dynamic
44 | val padding: dynamic
45 | val paddingBottom: dynamic
46 | val paddingEnd: dynamic
47 | val paddingHorizontal: dynamic
48 | val paddingLeft: dynamic
49 | val paddingRight: dynamic
50 | val paddingStart: dynamic
51 | val paddingTop: dynamic
52 | val paddingVertical: dynamic
53 | val position: dynamic
54 | val right: dynamic
55 | val start: dynamic
56 | val top: dynamic
57 | val width: dynamic
58 | val zIndex: Number?
59 | }
60 |
61 | class LayoutStyleC(
62 | val alignContent: dynamic = undefined,
63 | val alignItems: dynamic = undefined,
64 | val alignSelf: dynamic = undefined,
65 | val aspectRatio: Number? = undefined,
66 | val borderBottomWidth: Number? = undefined,
67 | val borderEndWidth: dynamic = undefined,
68 | val borderLeftWidth: Number? = undefined,
69 | val borderRightWidth: Number? = undefined,
70 | val borderStartWidth: dynamic = undefined,
71 | val borderTopWidth: Number? = undefined,
72 | val borderWidth: Number? = undefined,
73 | var borderColor: dynamic = undefined,
74 | val bottom: dynamic = undefined,
75 | val direction: dynamic = undefined,
76 | val display: dynamic = undefined,
77 | val end: dynamic = undefined,
78 | val flex: Number? = undefined,
79 | val flexBasis: dynamic = undefined,
80 | val flexDirection: dynamic = undefined,
81 | val flexGrow: Number? = undefined,
82 | val flexShrink: Number? = undefined,
83 | val flexWrap: dynamic = undefined,
84 | val height: dynamic = undefined,
85 | val justifyContent: dynamic = undefined,
86 | val left: dynamic = undefined,
87 | val margin: dynamic = undefined,
88 | val marginBottom: dynamic = undefined,
89 | val marginEnd: dynamic = undefined,
90 | val marginHorizontal: dynamic = undefined,
91 | val marginLeft: dynamic = undefined,
92 | val marginRight: dynamic = undefined,
93 | val marginStart: dynamic = undefined,
94 | val marginTop: dynamic = undefined,
95 | val marginVertical: dynamic = undefined,
96 | val maxHeight: dynamic = undefined,
97 | val maxWidth: dynamic = undefined,
98 | val minHeight: dynamic = undefined,
99 | val minWidth: dynamic = undefined,
100 | val overflow: dynamic = undefined,
101 | val padding: dynamic = undefined,
102 | val paddingBottom: dynamic = undefined,
103 | val paddingEnd: dynamic = undefined,
104 | val paddingHorizontal: dynamic = undefined,
105 | val paddingLeft: dynamic = undefined,
106 | val paddingRight: dynamic = undefined,
107 | val paddingStart: dynamic = undefined,
108 | val paddingTop: dynamic = undefined,
109 | val paddingVertical: dynamic = undefined,
110 | val position: dynamic = undefined,
111 | val right: dynamic = undefined,
112 | val start: dynamic = undefined,
113 | val top: dynamic = undefined,
114 | val width: dynamic = undefined,
115 | val zIndex: Number? = undefined,
116 | )
117 |
118 | open class ViewStyle(
119 | val borderRightColor: String? = undefined,
120 | val backfaceVisibility: String? = undefined,
121 | val borderBottomColor: String? = undefined,
122 | val borderBottomEndRadius: Number? = undefined,
123 | val borderBottomLeftRadius: Number? = undefined,
124 | val borderBottomRightRadius: Number? = undefined,
125 | val borderBottomStartRadius: Number? = undefined,
126 | override val borderBottomWidth: Number? = undefined,
127 | override var borderColor: String? = undefined,
128 | val borderEndColor: String? = undefined,
129 | val borderLeftColor: String? = undefined,
130 | override val borderLeftWidth: Number? = undefined,
131 | val borderRadius: Number? = undefined,
132 | override val backgroundColor: String? = undefined,
133 | override val borderRightWidth: Number? = undefined,
134 | val borderStartColor: String? = undefined,
135 | val borderStyle: Number? = undefined,
136 | val borderTopColor: Number? = undefined,
137 | val borderTopEndRadius: Number? = undefined,
138 | val borderTopLeftRadius: Number? = undefined,
139 | val borderTopRightRadius: Number? = undefined,
140 | val borderTopStartRadius: Number? = undefined,
141 | override val borderTopWidth: Number? = undefined,
142 | override val borderWidth: Number? = undefined,
143 | val opacity: Number? = undefined,
144 | val elevation: Number? = undefined,
145 | override val alignItems: dynamic = undefined,
146 |
147 | override val alignSelf: dynamic = undefined,
148 |
149 | override val aspectRatio: Number? = undefined,
150 |
151 | override val borderEndWidth: dynamic = undefined,
152 |
153 | override val borderStartWidth: dynamic = undefined,
154 |
155 | override val bottom: dynamic = undefined,
156 |
157 | override val direction: dynamic = undefined,
158 |
159 | override val display: dynamic = undefined,
160 |
161 | override val end: dynamic = undefined,
162 |
163 | override val flex: Number? = undefined,
164 |
165 | override val flexBasis: dynamic = undefined,
166 |
167 | override val flexDirection: dynamic = undefined,
168 |
169 | override val flexGrow: Number? = undefined,
170 |
171 | override val flexShrink: Number? = undefined,
172 |
173 | override val flexWrap: dynamic = undefined,
174 |
175 | override val height: dynamic = undefined,
176 |
177 | override val justifyContent: dynamic = undefined,
178 |
179 | override val left: dynamic = undefined,
180 |
181 | override val margin: dynamic = undefined,
182 |
183 | override val marginBottom: dynamic = undefined,
184 |
185 | override val marginEnd: dynamic = undefined,
186 |
187 | override val marginHorizontal: dynamic = undefined,
188 |
189 | override val marginLeft: dynamic = undefined,
190 |
191 | override val marginRight: dynamic = undefined,
192 |
193 | override val marginStart: dynamic = undefined,
194 |
195 | override val marginTop: dynamic = undefined,
196 |
197 | override val marginVertical: dynamic = undefined,
198 |
199 | override val maxHeight: dynamic = undefined,
200 |
201 | override val maxWidth: dynamic = undefined,
202 |
203 | override val minHeight: dynamic = undefined,
204 |
205 | override val minWidth: dynamic = undefined,
206 |
207 | override val overflow: dynamic = undefined,
208 |
209 | override val padding: dynamic = undefined,
210 |
211 | override val paddingBottom: dynamic = undefined,
212 |
213 | override val paddingEnd: dynamic = undefined,
214 |
215 | override val paddingHorizontal: dynamic = undefined,
216 |
217 | override val paddingLeft: dynamic = undefined,
218 |
219 | override val paddingRight: dynamic = undefined,
220 |
221 | override val paddingStart: dynamic = undefined,
222 |
223 | override val paddingTop: dynamic = undefined,
224 |
225 | override val paddingVertical: dynamic = undefined,
226 |
227 | override val position: dynamic = undefined,
228 |
229 | override val right: dynamic = undefined,
230 |
231 | override val start: dynamic = undefined,
232 |
233 | override val top: dynamic = undefined,
234 |
235 | override val width: dynamic = undefined,
236 |
237 | override val zIndex: Number? = undefined,
238 |
239 | override val alignContent: dynamic = undefined
240 | ) : LayoutStyle
241 |
242 | class TextStyle(
243 | val textShadowOffset: dynamic = undefined,
244 | val color: String? = undefined,
245 | val fontSize: Number? = undefined,
246 | val fontStyle: String? = undefined,
247 | val fontWeight: String? = undefined,
248 | val lineHeight: Number? = undefined,
249 | val textAlign: String? = undefined,
250 | val textDecorationLine: String? = undefined,
251 | val textShadowColor: String? = undefined,
252 | val fontFamily: String? = undefined,
253 | val textShadowRadius: Number? = undefined,
254 | val includeFontPadding: Boolean? = undefined,
255 | val textAlignVertical: String? = undefined,
256 | val fontVariant: dynamic = undefined,
257 | val letterSpacing: Number? = undefined,
258 | val textDecorationColor: String? = undefined,
259 | val textDecorationStyle: String? = undefined,
260 | val textTransform: String? = undefined,
261 | val writingDirection: String? = undefined,
262 | override val alignContent: dynamic = undefined,
263 |
264 | override val alignItems: dynamic = undefined,
265 |
266 | override val alignSelf: dynamic = undefined,
267 |
268 | override val aspectRatio: Number? = undefined,
269 |
270 | override val borderEndWidth: dynamic = undefined,
271 |
272 | override val borderStartWidth: dynamic = undefined,
273 |
274 | override val bottom: dynamic = undefined,
275 |
276 | override val direction: dynamic = undefined,
277 |
278 | override val display: dynamic = undefined,
279 |
280 | override val end: dynamic = undefined,
281 |
282 | override val flex: Number? = undefined,
283 |
284 | override val flexBasis: dynamic = undefined,
285 |
286 | override val flexDirection: dynamic = undefined,
287 |
288 | override val flexGrow: Number? = undefined,
289 |
290 | override val flexShrink: Number? = undefined,
291 |
292 | override val flexWrap: dynamic = undefined,
293 |
294 | override val height: dynamic = undefined,
295 |
296 | override val justifyContent: dynamic = undefined,
297 |
298 | override val left: dynamic = undefined,
299 |
300 | override val margin: dynamic = undefined,
301 |
302 | override val marginBottom: dynamic = undefined,
303 |
304 | override val marginEnd: dynamic = undefined,
305 |
306 | override val marginHorizontal: dynamic = undefined,
307 |
308 | override val marginLeft: dynamic = undefined,
309 |
310 | override val marginRight: dynamic = undefined,
311 |
312 | override val marginStart: dynamic = undefined,
313 |
314 | override val marginTop: dynamic = undefined,
315 |
316 | override val marginVertical: dynamic = undefined,
317 |
318 | override val maxHeight: dynamic = undefined,
319 |
320 | override val maxWidth: dynamic = undefined,
321 |
322 | override val minHeight: dynamic = undefined,
323 |
324 | override val minWidth: dynamic = undefined,
325 |
326 | override val overflow: dynamic = undefined,
327 |
328 | override val padding: dynamic = undefined,
329 |
330 | override val paddingBottom: dynamic = undefined,
331 |
332 | override val paddingEnd: dynamic = undefined,
333 |
334 | override val paddingHorizontal: dynamic = undefined,
335 |
336 | override val paddingLeft: dynamic = undefined,
337 |
338 | override val paddingRight: dynamic = undefined,
339 |
340 | override val paddingStart: dynamic = undefined,
341 |
342 | override val paddingTop: dynamic = undefined,
343 |
344 | override val paddingVertical: dynamic = undefined,
345 |
346 | override val position: dynamic = undefined,
347 |
348 | override val right: dynamic = undefined,
349 |
350 | override val start: dynamic = undefined,
351 |
352 | override val top: dynamic = undefined,
353 |
354 | override val width: dynamic = undefined,
355 |
356 | override val zIndex: Number? = undefined,
357 | override val borderBottomWidth: Number? = undefined,
358 | override val borderLeftWidth: Number? = undefined,
359 | override val borderRightWidth: Number? = undefined,
360 | override val borderTopWidth: Number? = undefined,
361 | override val borderWidth: Number? = undefined,
362 | override var borderColor: dynamic = undefined,
363 | override var backgroundColor: String? = undefined
364 |
365 | ) : LayoutStyle
366 |
367 | interface ShadowStyle : LayoutStyle {
368 | val shadowColor: String?
369 | val shadowOffset: dynamic
370 | val shadowOpacity: Number?
371 | val shadowRadius: Number?
372 |
373 | override val alignContent: dynamic
374 |
375 | override val alignItems: dynamic
376 |
377 | override val alignSelf: dynamic
378 |
379 | override val aspectRatio: Number?
380 |
381 | override val borderEndWidth: dynamic
382 |
383 | override val borderStartWidth: dynamic
384 |
385 | override val bottom: dynamic
386 |
387 | override val direction: dynamic
388 |
389 | override val display: dynamic
390 |
391 | override val end: dynamic
392 |
393 | override val flex: Number?
394 |
395 | override val flexBasis: dynamic
396 |
397 | override val flexDirection: dynamic
398 |
399 | override val flexGrow: Number?
400 |
401 | override val flexShrink: Number?
402 |
403 | override val flexWrap: dynamic
404 |
405 | override val height: dynamic
406 |
407 | override val justifyContent: dynamic
408 |
409 | override val left: dynamic
410 |
411 | override val margin: dynamic
412 |
413 | override val marginBottom: dynamic
414 |
415 | override val marginEnd: dynamic
416 |
417 | override val marginHorizontal: dynamic
418 |
419 | override val marginLeft: dynamic
420 |
421 | override val marginRight: dynamic
422 |
423 | override val marginStart: dynamic
424 |
425 | override val marginTop: dynamic
426 |
427 | override val marginVertical: dynamic
428 |
429 | override val maxHeight: dynamic
430 |
431 | override val maxWidth: dynamic
432 |
433 | override val minHeight: dynamic
434 |
435 | override val minWidth: dynamic
436 |
437 | override val overflow: dynamic
438 |
439 | override val padding: dynamic
440 |
441 | override val paddingBottom: dynamic
442 |
443 | override val paddingEnd: dynamic
444 |
445 | override val paddingHorizontal: dynamic
446 |
447 | override val paddingLeft: dynamic
448 |
449 | override val paddingRight: dynamic
450 |
451 | override val paddingStart: dynamic
452 |
453 | override val paddingTop: dynamic
454 |
455 | override val paddingVertical: dynamic
456 |
457 | override val position: dynamic
458 |
459 | override val right: dynamic
460 |
461 | override val start: dynamic
462 |
463 | override val top: dynamic
464 |
465 | override val width: dynamic
466 |
467 | override val zIndex: Number?
468 |
469 | }
470 |
471 | class ImageStyle(
472 | val borderTopRightRadius: Number? = undefined,
473 | val backfaceVisibility: String? = undefined,
474 | val borderBottomLeftRadius: Number? = undefined,
475 | val borderBottomRightRadius: Number? = undefined,
476 | override var borderColor: String? = undefined,
477 | val borderRadius: Number? = undefined,
478 | val borderTopLeftRadius: Number? = undefined,
479 | val opacity: Number? = undefined,
480 | val resizeMode: String? = undefined,
481 | val tintColor: String? = undefined,
482 | val overlayColor: String? = undefined,
483 |
484 | override val alignContent: dynamic = undefined,
485 |
486 | override val alignItems: dynamic = undefined,
487 |
488 | override val alignSelf: dynamic = undefined,
489 |
490 | override val aspectRatio: Number? = undefined,
491 |
492 | override val borderEndWidth: dynamic = undefined,
493 |
494 | override val borderStartWidth: dynamic = undefined,
495 |
496 | override val bottom: dynamic = undefined,
497 |
498 | override val direction: dynamic = undefined,
499 |
500 | override val display: dynamic = undefined,
501 |
502 | override val end: dynamic = undefined,
503 |
504 | override val flex: Number? = undefined,
505 |
506 | override val flexBasis: dynamic = undefined,
507 |
508 | override val flexDirection: dynamic = undefined,
509 |
510 | override val flexGrow: Number? = undefined,
511 |
512 | override val flexShrink: Number? = undefined,
513 |
514 | override val flexWrap: dynamic = undefined,
515 |
516 | override val height: dynamic = undefined,
517 |
518 | override val justifyContent: dynamic = undefined,
519 |
520 | override val left: dynamic = undefined,
521 |
522 | override val margin: dynamic = undefined,
523 |
524 | override val marginBottom: dynamic = undefined,
525 |
526 | override val marginEnd: dynamic = undefined,
527 |
528 | override val marginHorizontal: dynamic = undefined,
529 |
530 | override val marginLeft: dynamic = undefined,
531 |
532 | override val marginRight: dynamic = undefined,
533 |
534 | override val marginStart: dynamic = undefined,
535 |
536 | override val marginTop: dynamic = undefined,
537 |
538 | override val marginVertical: dynamic = undefined,
539 |
540 | override val maxHeight: dynamic = undefined,
541 |
542 | override val maxWidth: dynamic = undefined,
543 |
544 | override val minHeight: dynamic = undefined,
545 |
546 | override val minWidth: dynamic = undefined,
547 |
548 | override val overflow: dynamic = undefined,
549 |
550 | override val padding: dynamic = undefined,
551 |
552 | override val paddingBottom: dynamic = undefined,
553 |
554 | override val paddingEnd: dynamic = undefined,
555 |
556 | override val paddingHorizontal: dynamic = undefined,
557 |
558 | override val paddingLeft: dynamic = undefined,
559 |
560 | override val paddingRight: dynamic = undefined,
561 |
562 | override val paddingStart: dynamic = undefined,
563 |
564 | override val paddingTop: dynamic = undefined,
565 |
566 | override val paddingVertical: dynamic = undefined,
567 |
568 | override val position: dynamic = undefined,
569 |
570 | override val right: dynamic = undefined,
571 |
572 | override val start: dynamic = undefined,
573 |
574 | override val top: dynamic = undefined,
575 |
576 | override val width: dynamic = undefined,
577 |
578 | override val zIndex: Number? = undefined,
579 | override val borderBottomWidth: Number? = undefined,
580 | override val borderLeftWidth: Number? = undefined,
581 | override val borderRightWidth: Number? = undefined,
582 | override val borderTopWidth: Number? = undefined,
583 | override val borderWidth: Number? = undefined,
584 | override val shadowColor: String? = undefined,
585 | override val shadowOffset: dynamic = undefined,
586 | override val shadowOpacity: Number? = undefined,
587 | override val shadowRadius: Number? = undefined,
588 | override var backgroundColor: String? = undefined
589 | ) : ShadowStyle
590 |
--------------------------------------------------------------------------------
/src/main/kotlin/ojaynico/kotlin/react/native/component/Components.kt:
--------------------------------------------------------------------------------
1 | @file:JsModule("react-native")
2 | @file:Suppress("unused")
3 |
4 | package ojaynico.kotlin.react.native.component
5 |
6 | import react.*
7 |
8 | // View Component
9 | external interface ViewProps : Props {
10 | var onStartShouldSetResponder: (dynamic) -> Boolean
11 | var accessible: Boolean?
12 | var accessibilityLabel: String
13 | var accessibilityHint: String
14 | var accessibilityRole: String
15 | var accessibilityState: dynamic
16 | var accessibilityValue: dynamic
17 | var accessibilityActions: List
18 | var onAccessibilityAction: (dynamic) -> Unit
19 | var onAccessibilityTap: () -> Unit
20 | var onMagicTap: () -> Unit
21 | var onAccessibilityEscape: () -> Unit
22 | var accessibilityViewIsModal: Boolean?
23 | var accessibilityElementsHidden: Boolean?
24 | var accessibilityIgnoresInvertColors: Boolean?
25 | var accessibilityLiveRegion: String
26 | var importantForAccessibility: String
27 | var hitSlop: dynamic
28 | var nativeID: String
29 | var onLayout: () -> dynamic
30 | var onMoveShouldSetResponder: () -> Boolean
31 | var onMoveShouldSetResponderCapture: () -> Boolean
32 | var onResponderGrant: () -> Unit
33 | var onResponderMove: () -> Unit
34 | var onResponderReject: () -> Unit
35 | var onResponderRelease: () -> Unit
36 | var onResponderTerminate: () -> Unit
37 | var onResponderTerminationRequest: () -> Unit
38 | var onStartShouldSetResponderCapture: () -> Boolean
39 | var pointerEvents: String
40 | var removeClippedSubviews: Boolean?
41 | var style: dynamic
42 | var testID: String
43 | var collapsable: Boolean?
44 | var needsOffscreenAlphaCompositing: Boolean?
45 | var renderToHardwareTextureAndroid: Boolean?
46 | var shouldRasterizeIOS: Boolean?
47 | var nextFocusDown: Number
48 | var nextFocusForward: Number
49 | var nextFocusLeft: Number
50 | var nextFocusRight: Number
51 | var nextFocusUp: Number
52 | var focusable: Boolean?
53 | }
54 |
55 | external val View : FC
56 |
57 | // Text Component
58 | external interface TextProps : Props {
59 | var accessibilityLabel: String
60 | var accessibilityHint: String
61 | var accessibilityRole: String
62 | var accessibilityState: dynamic
63 | var accessible: Boolean?
64 | var adjustsFontSizeToFit: Boolean?
65 | var allowFontScaling: Boolean?
66 | var dataDetectorType: String
67 | var disabled: Boolean?
68 | var ellipsizeMode: String
69 | var maxFontSizeMultiplier: Number
70 | var minimumFontScale: Number
71 | var nativeID: String
72 | var numberOfLines: Number
73 | var onLayout: () -> dynamic
74 | var onLongPress: () -> Unit
75 | var onMoveShouldSetResponder: () -> Boolean
76 | var onPress: () -> Unit
77 | var onResponderGrant: () -> Unit
78 | var onResponderMove: () -> Unit
79 | var onResponderRelease: () -> Unit
80 | var onResponderTerminate: () -> Unit
81 | var onResponderTerminationRequest: () -> Unit
82 | var onStartShouldSetResponderCapture: () -> Boolean
83 | var onTextLayout: () -> Boolean
84 | var pressRetentionOffset: dynamic
85 | var selectable: Boolean?
86 | var selectionColor: dynamic
87 | var style: dynamic
88 | var suppressHighlighting: Boolean?
89 | var testID: String
90 | var textBreakStrategy: String
91 | var onPressIn: (event: dynamic) -> Unit
92 | var onPressOut: (event: dynamic) -> Unit
93 | }
94 |
95 | external val Text: FC
96 |
97 | // Button Component
98 | external interface ButtonProps : Props {
99 | var onPress: () -> Unit
100 | var title: String
101 | var accessibilityLabel: String
102 | var color: String
103 | var disabled: Boolean?
104 | var testID: String
105 | var hasTVPreferredFocus: Boolean?
106 | var nextFocusDown: Number
107 | var nextFocusForward: Number
108 | var nextFocusLeft: Number
109 | var nextFocusRight: Number
110 | var nextFocusUp: Number
111 | var touchSoundDisabled: Boolean?
112 | }
113 |
114 | external val Button: FC
115 |
116 | // Image Component
117 | external interface ImageProps : Props {
118 | var style: dynamic
119 | var accessible: Boolean?
120 | var accessibilityLabel: String
121 | var blurRadius: Number
122 | var capInsets: dynamic
123 | var defaultSource: Number
124 | var fadeDuration: Number
125 | var loadingIndicatorSource: Array
126 | var onError: () -> Unit
127 | var onLayout: (dynamic, dynamic, dynamic, dynamic) -> Unit
128 | var onLoad: () -> Unit
129 | var onLoadEnd: () -> Unit
130 | var onLoadStart: (dynamic) -> dynamic
131 | var onPartialLoad: () -> Unit
132 | var onProgress: (dynamic, dynamic) -> Unit
133 | var progressiveRenderingEnabled: Boolean?
134 | var resizeMethod: String
135 | var resizeMode: String
136 | var source: dynamic
137 | var testID: String
138 | }
139 |
140 | external val Image: FC
141 |
142 | external interface ImageBackgroundProps : ImageProps, Props {
143 | var imageStyle: dynamic
144 | var imageRef: dynamic
145 | override var style: dynamic
146 | override var accessible: Boolean?
147 | override var accessibilityLabel: String
148 | override var blurRadius: Number
149 | override var capInsets: dynamic
150 | override var defaultSource: Number
151 | override var fadeDuration: Number
152 | override var loadingIndicatorSource: Array
153 | override var onError: () -> Unit
154 | override var onLayout: (dynamic, dynamic, dynamic, dynamic) -> Unit
155 | override var onLoad: () -> Unit
156 | override var onLoadEnd: () -> Unit
157 | override var onLoadStart: (dynamic) -> dynamic
158 | override var onPartialLoad: () -> Unit
159 | override var onProgress: (dynamic, dynamic) -> Unit
160 | override var progressiveRenderingEnabled: Boolean?
161 | override var resizeMethod: String
162 | override var resizeMode: String
163 | override var source: dynamic
164 | override var testID: String
165 | }
166 |
167 | external val ImageBackground: FC
168 |
169 | // TextInput Component
170 | external interface TextInputProps : Props {
171 | var allowFontScaling: Boolean?
172 | var autoCapitalize: String
173 | var autoCompleteType: String
174 | var autoCorrect: Boolean?
175 | var autoFocus: Boolean?
176 | var blurOnSubmit: Boolean?
177 | var caretHidden: Boolean?
178 | var clearButtonMode: String
179 | var clearTextOnFocus: Boolean?
180 | var contextMenuHidden: Boolean?
181 | var dataDetectorTypes: String
182 | var defaultValue: String
183 | var disableFullscreenUI: Boolean?
184 | var editable: Boolean?
185 | var enablesReturnKeyAutomatically: Boolean?
186 | var importantForAutofill: String
187 | var inlineImageLeft: String
188 | var inlineImagePadding: Number
189 | var inputAccessoryViewID: String
190 | var keyboardAppearance: String
191 | var keyboardType: String
192 | var maxFontSizeMultiplier: Number
193 | var maxLength: Number
194 | var multiline: Boolean?
195 | var numberOfLines: Number
196 | var onBlur: () -> Unit
197 | var onChange: () -> Unit
198 | var onChangeText: (String) -> Unit
199 | var onContentSizeChange: () -> Unit
200 | var onEndEditing: () -> Unit
201 | var onFocus: () -> Unit
202 | var onKeyPress: () -> Unit
203 | var onLayout: () -> Unit
204 | var onScroll: () -> Unit
205 | var onSelectionChange: () -> Unit
206 | var onSubmitEditing: () -> Unit
207 | var onTextInput: () -> Unit
208 | var placeholder: String
209 | var placeholderTextColor: String
210 | var returnKeyLabel: String
211 | var returnKeyType: String
212 | var rejectResponderTermination: Boolean?
213 | var scrollEnabled: Boolean?
214 | var secureTextEntry: Boolean?
215 | var selection: JSON
216 | var selectionColor: String
217 | var selectTextOnFocus: Boolean?
218 | var showSoftInputOnFocus: Boolean?
219 | var spellCheck: Boolean?
220 | var textAlign: String
221 | var textContentType: String
222 | var passwordRules: String
223 | var style: dynamic
224 | var textBreakStrategy: String
225 | var underlineColorAndroid: String
226 | var value: String
227 | }
228 |
229 | /*external class TextInput : Component {
230 | override fun render(): dynamic = definedExternally
231 |
232 | companion object {
233 | fun focus()
234 | fun blur()
235 | fun clear()
236 | fun isFocused(): dynamic
237 | }
238 | }*/
239 |
240 | external val TextInput: FC
241 |
242 | // Switch Component
243 | external interface SwitchProps : Props {
244 | var disabled: Boolean?
245 | var ios_backgroundColor: String
246 | var onChange: () -> Unit
247 | var onValueChange: () -> Unit
248 | var thumbColor: String
249 | var trackColor: dynamic
250 | var value: Boolean?
251 | }
252 |
253 | external val Switch: FC
254 |
255 | // FlatList Component
256 | external interface FlatListProps : Props {
257 | var renderItem: (arguments: dynamic) -> dynamic
258 | var data: Array
259 | var itemSeparatorComponent: dynamic
260 | var listEmptyComponent: dynamic
261 | var listFooterComponent: dynamic
262 | var listFooterComponentStyle: dynamic
263 | var listHeaderComponent: dynamic
264 | var ListHeaderComponentStyle: dynamic
265 | var columnWrapperStyle: dynamic
266 | var extraData: dynamic
267 | var getItemLayout: (data: dynamic, index: Number) -> Unit
268 | var horizontal: Boolean?
269 | var initialNumToRender: Number
270 | var initialScrollIndex: Number
271 | var inverted: Boolean?
272 | var keyExtractor: (item: dynamic, index: Number) -> String
273 | var numColumns: Number
274 | var onEndReached: (info: dynamic) -> Unit
275 | var onEndReachedThreshold: Number
276 | var onRefresh: () -> Unit
277 | var onViewableItemsChanged: (info: dynamic) -> Unit
278 | var progressViewOffset: Number
279 | var refreshing: Boolean?
280 | var removeClippedSubviews: Boolean?
281 | var viewabilityConfig: dynamic
282 | var viewabilityConfigCallbackPairs: dynamic
283 | }
284 |
285 | /*external class FlatList : Component {
286 | override fun render(): dynamic = definedExternally
287 |
288 | companion object {
289 | fun scrollToEnd(params: dynamic)
290 | fun scrollToIndex(params: dynamic)
291 | fun scrollToItem(params: dynamic)
292 | fun scrollToOffset(params: dynamic)
293 | fun recordInteraction()
294 | fun flashScrollIndicators()
295 | fun getNativeScrollRef()
296 | fun getScrollResponder()
297 | fun getScrollableNode()
298 | }
299 | }*/
300 |
301 | external val FlatList : FC
302 |
303 | // ScrollView Component
304 | external interface ScrollViewProps : Props {
305 | var alwaysBounceHorizontal: Boolean?
306 | var alwaysBounceVertical: Boolean?
307 | var automaticallyAdjustContentInsets: Boolean?
308 | var bounces: Boolean?
309 | var bouncesZoom: Boolean?
310 | var canCancelContentTouches: Boolean?
311 | var centerContent: Boolean?
312 | var contentContainerStyle: dynamic
313 | var contentInset: JSON
314 | var contentInsetAdjustmentBehavior: String
315 | var contentOffset: JSON
316 | var decelerationRate: String
317 | var directionalLockEnabled: Boolean?
318 | var disableIntervalMomentum: Boolean?
319 | var disableScrollViewPanResponder: Boolean?
320 | var endFillColor: String
321 | var fadingEdgeLength: Int
322 | var horizontal: Boolean?
323 | var indicatorStyle: String
324 | var invertStickyHeaders: Boolean?
325 | var keyboardDismissMode: String
326 | var keyboardShouldPersistTaps: String
327 | var maintainVisibleContentPosition: JSON
328 | var maximumZoomScale: Int
329 | var minimumZoomScale: Int
330 | var nestedScrollEnabled: Boolean?
331 | var onContentSizeChange: () -> Unit
332 | var onMomentumScrollBegin: () -> Unit
333 | var onMomentumScrollEnd: () -> Unit
334 | var onScroll: () -> Unit
335 | var onScrollBeginDrag: () -> Unit
336 | var onScrollEndDrag: () -> Unit
337 | var onScrollToTop: () -> Unit
338 | var overScrollMode: String
339 | var pagingEnabled: Boolean?
340 | var persistentScrollbar: Boolean?
341 | var pinchGestureEnabled: Boolean?
342 | var refreshControl: dynamic
343 | var removeClippedSubviews: Boolean?
344 | var scrollBarThumbImage: Int
345 | var scrollEnabled: Boolean?
346 | var scrollEventThrottle: Int
347 | var scrollIndicatorInsets: JSON
348 | var scrollPerfTag: String
349 | var scrollToOverflowEnabled: Boolean?
350 | var scrollsToTop: Boolean?
351 | var showsHorizontalScrollIndicator: Boolean?
352 | var showsVerticalScrollIndicator: Boolean?
353 | var snapToAlignment: String
354 | var snapToEnd: Boolean?
355 | var snapToInterval: Int
356 | var snapToOffsets: Array
357 | var snapToStart: Boolean?
358 | var stickyHeaderIndices: Array
359 | var zoomScale: Int
360 | var stickyHeaderHiddenOnScroll: Boolean?
361 | }
362 |
363 | /*external class ScrollView : Component {
364 | override fun render(): dynamic = definedExternally
365 |
366 | companion object {
367 | fun flashScrollIndicators()
368 | fun scrollTo(vararg options: dynamic)
369 | fun scrollToEnd(vararg options: dynamic)
370 | fun scrollWithoutAnimationTo(y: dynamic, x: dynamic)
371 | }
372 | }*/
373 |
374 | external val ScrollView : FC
375 |
376 | // SafeAreaView Component
377 | external interface SafeAreaViewProps : ViewProps {
378 | var emulateUnlessSupported: Boolean?
379 | }
380 |
381 | external val SafeAreaView: FC
382 |
383 | // SectionList Component
384 | external interface SectionListProps : Props {
385 | var emulateUnlessSupported: Boolean?
386 | var renderItem: (item: dynamic, index: Int, separators: dynamic) -> Unit
387 | var section: Array
388 | var ItemSeparatorComponent: dynamic
389 | var ListEmptyComponent: dynamic
390 | var ListFooterComponent: dynamic
391 | var ListHeaderComponent: dynamic
392 | var columnWrapperStyle: dynamic
393 | var extraData: dynamic
394 | var getItemLayout: (data: dynamic, index: Int) -> Unit
395 | var horizontal: Boolean?
396 | var initialNumToRender: Int
397 | var initialScrollIndex: Int
398 | var inverted: Boolean?
399 | var keyExtractor: (item: dynamic, index: Int) -> String
400 | var numColumns: Int
401 | var onEndReached: (info: dynamic) -> Unit
402 | var onEndReachedThreshold: Int
403 | var onRefresh: () -> Unit
404 | var onViewableItemsChanged: (info: dynamic) -> Unit
405 | var refreshing: Boolean?
406 | var removeClippedSubviews: Boolean?
407 | var renderSectionHeader: (info: dynamic) -> dynamic
408 | var renderSectionFooter: (info: dynamic) -> dynamic
409 | var sectionSeparatorComponent: dynamic
410 | var stickySectionHeadersEnabled: Boolean?
411 | }
412 |
413 | /*external class SectionList: Component {
414 | override fun render(): dynamic = definedExternally
415 |
416 | companion object {
417 | fun scrollToLocation(params: dynamic)
418 | fun recordInteraction()
419 | fun flashScrollIndicators()
420 | }
421 | }*/
422 |
423 | external val SectionList: FC
424 |
425 | // ActivityIndicator Component
426 | external interface ActivityIndicatorProps : Props {
427 | var animating: Boolean?
428 | var color: String
429 | var hidesWhenStopped: Boolean?
430 | var size: dynamic
431 | }
432 |
433 | external val ActivityIndicator: FC
434 |
435 | external class StyleSheet {
436 | var absoluteFill: dynamic = definedExternally
437 | var absoluteFillObject: dynamic = definedExternally
438 | var hairlineWidth: dynamic = definedExternally
439 |
440 | companion object {
441 | fun compose(style1: dynamic, style2: dynamic): dynamic
442 | fun create(obj: dynamic): dynamic
443 | fun flatten(style: Array): dynamic
444 | fun setStyleAttributePreprocessor(property: String, process: (propValue: dynamic) -> dynamic)
445 | }
446 | }
447 |
448 | external interface KeyboardAvoidingViewProps : ViewProps, Props {
449 | var behavior: dynamic
450 | var contentContainerStyle: dynamic
451 | var enabled: Boolean?
452 | override var onStartShouldSetResponder: (dynamic) -> Boolean
453 | override var accessible: Boolean?
454 | override var accessibilityLabel: String
455 | override var accessibilityHint: String
456 | override var accessibilityRole: String
457 | override var accessibilityState: dynamic
458 | override var accessibilityValue: dynamic
459 | override var accessibilityActions: List
460 | override var onAccessibilityAction: (dynamic) -> Unit
461 | override var onAccessibilityTap: () -> Unit
462 | override var onMagicTap: () -> Unit
463 | override var onAccessibilityEscape: () -> Unit
464 | override var accessibilityViewIsModal: Boolean?
465 | override var accessibilityElementsHidden: Boolean?
466 | override var accessibilityIgnoresInvertColors: Boolean?
467 | override var accessibilityLiveRegion: String
468 | override var importantForAccessibility: String
469 | override var hitSlop: dynamic
470 | override var nativeID: String
471 | override var onLayout: () -> dynamic
472 | override var onMoveShouldSetResponder: () -> Boolean
473 | override var onMoveShouldSetResponderCapture: () -> Boolean
474 | override var onResponderGrant: () -> Unit
475 | override var onResponderMove: () -> Unit
476 | override var onResponderReject: () -> Unit
477 | override var onResponderRelease: () -> Unit
478 | override var onResponderTerminate: () -> Unit
479 | override var onResponderTerminationRequest: () -> Unit
480 | override var onStartShouldSetResponderCapture: () -> Boolean
481 | override var pointerEvents: String
482 | override var removeClippedSubviews: Boolean?
483 | override var style: dynamic
484 | override var testID: String
485 | override var collapsable: Boolean?
486 | override var needsOffscreenAlphaCompositing: Boolean?
487 | override var renderToHardwareTextureAndroid: Boolean?
488 | override var shouldRasterizeIOS: Boolean?
489 | override var nextFocusDown: Number
490 | override var nextFocusForward: Number
491 | override var nextFocusLeft: Number
492 | override var nextFocusRight: Number
493 | override var nextFocusUp: Number
494 | override var focusable: Boolean?
495 |
496 | }
497 |
498 | external val KeyboardAvoidingView : FC
499 |
500 | external interface ModalProps : Props {
501 | var animationType: dynamic
502 | var hardwareAccelerated: Boolean?
503 | var onDismiss: () -> Unit
504 | var onOrientationChange: () -> Unit
505 | var onRequestClose: () -> Unit
506 | var onShow: () -> Unit
507 | var presentationStyle: dynamic
508 | var statusBarTranslucent: Boolean?
509 | var supportedOrientations: dynamic
510 | var transparent: Boolean?
511 | var visible: Boolean?
512 | }
513 |
514 | external val Modal : FC
515 |
516 | external interface PressableProps : Props {
517 | var android_disableSound: Boolean?
518 | var android_ripple: dynamic
519 | var children: dynamic
520 | var delayLongPress: Number
521 | var disabled: Boolean?
522 | var hitSlop: dynamic
523 | var onLongPress: dynamic
524 | var onPress: dynamic
525 | var onPressIn: dynamic
526 | var onPressOut: dynamic
527 | var pressRetentionOffset: dynamic
528 | var style: dynamic
529 | var testOnly_pressed: Boolean?
530 | var onBlur: (event: dynamic) -> dynamic
531 | var onFocus: (event: dynamic) -> dynamic
532 | }
533 |
534 | external val Pressable : FC
535 |
536 | external interface RefreshControlProps : Props {
537 | var refreshing: Boolean?
538 | var onRefresh: () -> Unit
539 | var colors: Array
540 | var enabled: Boolean?
541 | var progressBackgroundColor: dynamic
542 | var progressViewOffset: Number
543 | var size: dynamic
544 | var tintColor: dynamic
545 | var title: String
546 | var titleColor: dynamic
547 | }
548 |
549 | external val RefreshControl : FC
550 |
551 | external interface StatusBarProps : Props {
552 | var animated: Boolean?
553 | var backgroundColor: dynamic
554 | var barStyle: dynamic
555 | var hidden: Boolean?
556 | var networkActivityIndicatorVisible: Boolean?
557 | var showHideTransition: dynamic
558 | var translucent: Boolean?
559 | }
560 |
561 | /*external class StatusBar : Component {
562 | override fun render(): dynamic = definedExternally
563 |
564 | companion object {
565 | fun popStackEntry(entry: dynamic): dynamic
566 | fun pushStackEntry(entry: dynamic): dynamic
567 | fun replaceStackEntry(entry: dynamic, props: dynamic): dynamic
568 | fun setBackgroundColor(color: String, animated: Boolean)
569 | fun setBarStyle(style: dynamic, animated: Boolean)
570 | fun setHidden(hidden: Boolean, animation: dynamic)
571 | fun setNetworkActivityIndicatorVisible(visible: Boolean)
572 | fun setTranslucent(translucent: Boolean)
573 | }
574 | }*/
575 |
576 | external val StatusBar : FC
577 |
578 | external interface TouchableHighlightProps : Props {
579 | var activeOpacity: Number
580 | var onHideUnderlay: () -> Unit
581 | var onShowUnderlay: () -> Unit
582 | var style: dynamic
583 | var underlayColor: dynamic
584 | var hasTVPreferredFocus: Boolean?
585 | var nextFocusDown: Boolean?
586 | var nextFocusForward: Boolean?
587 | var nextFocusLeft: Boolean?
588 | var nextFocusRight: Boolean?
589 | var nextFocusUp: Boolean?
590 | var testOnly_pressed: Boolean?
591 | var onPress: () -> Unit
592 | }
593 |
594 | external val TouchableHighlight : FC
595 |
596 | external interface TouchableOpacityProps : Props {
597 | var style: dynamic
598 | var onPress: () -> Unit
599 | var activeOpacity: Number
600 | var tvParallaxProperties: dynamic
601 | var hasTVPreferredFocus: Boolean?
602 | var nextFocusDown: Boolean?
603 | var nextFocusForward: Boolean?
604 | var nextFocusLeft: Boolean?
605 | var nextFocusRight: Boolean?
606 | var nextFocusUp: Boolean?
607 | }
608 |
609 | /*external class TouchableOpacity : Component {
610 | override fun render(): dynamic = definedExternally
611 |
612 | companion object {
613 | fun setOpacityTo(value: Number, duration: Number)
614 | }
615 | }*/
616 |
617 | external val TouchableOpacity : FC
618 |
619 | external interface TouchableWithoutFeedbackProps : Props {
620 | var accessibilityIgnoresInvertColors: Boolean?
621 | var accessible: Boolean?
622 | var accessibilityLabel: String
623 | var accessibilityHint: String
624 | var accessibilityRole: String
625 | var accessibilityState: dynamic
626 | var accessibilityActions: Array
627 | var onAccessibilityAction: () -> Unit
628 | var accessibilityValue: dynamic
629 | var delayLongPress: Number
630 | var delayPressIn: Number
631 | var delayPressOut: Number
632 | var disabled: Boolean?
633 | var hitSlop: dynamic
634 | var onBlur: () -> Unit
635 | var onFocus: () -> Unit
636 | var onLayout: () -> Unit
637 | var onLongPress: () -> Unit
638 | var onPress: () -> Unit
639 | var onPressIn: () -> Unit
640 | var onPressOut: () -> Unit
641 | var pressRetentionOffset: dynamic
642 | var nativeID: String
643 | var testID: String
644 | var touchSoundDisabled: Boolean?
645 | }
646 |
647 | external val TouchableWithoutFeedback : FC
648 |
649 | external interface VirtualizedListProps : Props {
650 | var renderItem: (arguments: dynamic) -> dynamic
651 | var data: dynamic
652 | var getItem: (data: dynamic, index: Number) -> dynamic
653 | var getItemCount: (data: dynamic) -> Number
654 | var debug: Boolean?
655 | var extraData: dynamic
656 | var getItemLayout: (data: dynamic, index: Number) -> dynamic
657 | var initialScrollIndex: Number
658 | var inverted: Boolean?
659 | var CellRendererComponent: dynamic
660 | var ItemSeparatorComponent: dynamic
661 | var listKey: String
662 | var ListEmptyComponent: dynamic
663 | var ListItemComponent: dynamic
664 | var ListFooterComponent: dynamic
665 | var ListFooterComponentStyle: dynamic
666 | var ListHeaderComponent: dynamic
667 | var ListHeaderComponentStyle: dynamic
668 | var onRefresh: () -> Unit
669 | var onScrollToIndexFailed: (info: dynamic) -> Unit
670 | var onViewableItemsChanged: (info: dynamic) -> Unit
671 | var refreshing: Boolean?
672 | var refreshControl: dynamic
673 | var removeClippedSubviews: Boolean?
674 | var renderScrollComponent: (props: dynamic) -> dynamic
675 | var viewabilityConfig: dynamic
676 | var viewabilityConfigCallbackPairs: dynamic
677 | var horizontal: Boolean?
678 | var initialNumToRender: Number
679 | var keyExtractor: (item: dynamic, index: Number) -> String
680 | var maxToRenderPerBatch: Number
681 | var onEndReached: (info: dynamic) -> Unit
682 | var onEndReachedThreshold: Number
683 | var updateCellsBatchingPeriod: Number
684 | var windowSize: Number
685 | var persistentScrollbar: Boolean?
686 | var progressViewOffset: Number
687 | }
688 |
689 | /*external class VirtualizedList : Component {
690 | override fun render(): dynamic = definedExternally
691 |
692 | companion object {
693 | fun scrollToEnd(params: dynamic)
694 | fun scrollToIndex(params: dynamic)
695 | fun scrollToItem(params: dynamic)
696 | fun scrollToOffset(params: dynamic)
697 | fun recordInteraction()
698 | fun flashScrollIndicators()
699 | fun getScrollRef()
700 | fun getScrollResponder()
701 | fun getScrollableNode()
702 | fun setNativeProps(params: dynamic)
703 | fun getChildContext() : dynamic
704 | fun hasMore(): Boolean
705 | }
706 | }*/
707 |
708 | external val VirtualizedList : FC
709 |
710 | external interface DrawerLayoutAndroidProps : Props {
711 | var drawerBackgroundColor: dynamic
712 | var drawerLockMode: dynamic
713 | var drawerPosition: dynamic
714 | var drawerWidth: Number
715 | var keyboardDismissMode: dynamic
716 | var onDrawerClose: () -> Unit
717 | var onDrawerOpen: () -> Unit
718 | var onDrawerSlide: () -> Unit
719 | var onDrawerStateChanged: () -> Unit
720 | var renderNavigationView: () -> Unit
721 | var statusBarBackgroundColor: dynamic
722 | }
723 |
724 | /*external class DrawerLayoutAndroid : Component {
725 | override fun render(): dynamic = definedExternally
726 |
727 | companion object {
728 | fun closeDrawer()
729 | fun openDrawer()
730 | }
731 | }*/
732 |
733 | external val DrawerLayoutAndroid : FC
734 |
735 | external interface TouchableNativeFeedbackProps : Props {
736 | var background: dynamic
737 | var useForeground: Boolean?
738 | var hasTVPreferredFocus: Boolean?
739 | var nextFocusDown: Boolean?
740 | var nextFocusForward: Boolean?
741 | var nextFocusLeft: Boolean?
742 | var nextFocusRight: Boolean?
743 | var nextFocusUp: Boolean?
744 | }
745 |
746 | /*external class TouchableNativeFeedback : Component {
747 | override fun render(): dynamic = definedExternally
748 |
749 | companion object {
750 | fun SelectableBackground(rippleRadius: Number)
751 | fun SelectableBackgroundBorderless(rippleRadius: Number)
752 | fun Ripple(color: String, borderless: Boolean, rippleRadius: Number)
753 | fun canUseNativeForeground()
754 | }
755 | }*/
756 |
757 | external val TouchableNativeFeedback : FC
758 |
759 | external interface InputAccessoryViewProps : Props {
760 | var backgroundColor: dynamic
761 | var nativeID: String
762 | var style: dynamic
763 | }
764 |
765 | external val InputAccessoryView : FC
766 |
--------------------------------------------------------------------------------