@tbvjaos510/react-native-paste-input 0.9.1 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +5 -27
- package/android/src/main/java/com/mattermost/pasteinputtext/PasteInputActionCallback.kt +10 -9
- package/android/src/main/java/com/mattermost/pasteinputtext/PasteInputEditText.kt +1 -2
- package/android/src/main/java/com/mattermost/pasteinputtext/PasteInputListener.kt +91 -44
- package/android/src/main/java/com/mattermost/pasteinputtext/PasteTextInputManager.kt +33 -0
- package/ios/PasteTextInput.mm +11 -3
- package/ios/PasteTextInputManager.mm +20 -95
- package/lib/commonjs/PasteTextInputNativeComponent.js +33 -0
- package/lib/commonjs/PasteTextInputNativeComponent.js.map +1 -0
- package/lib/module/PasteTextInputNativeComponent.js +31 -0
- package/lib/module/PasteTextInputNativeComponent.js.map +1 -0
- package/lib/typescript/PasteTextInput.d.ts.map +1 -0
- package/lib/typescript/{src/PasteTextInputNativeComponent.d.ts → PasteTextInputNativeComponent.d.ts} +2 -1
- package/lib/typescript/PasteTextInputNativeComponent.d.ts.map +1 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/types.d.ts.map +1 -0
- package/package.json +4 -16
- package/react-native-paste-input.podspec +12 -4
- package/react-native.config.js +5 -1
- package/src/PasteTextInputNativeComponent.ts +34 -6
- package/android/generated/java/com/facebook/react/viewmanagers/PasteTextInputManagerDelegate.java +0 -236
- package/android/generated/java/com/facebook/react/viewmanagers/PasteTextInputManagerInterface.java +0 -84
- package/android/generated/jni/CMakeLists.txt +0 -36
- package/android/generated/jni/PasteTextInputSpecs-generated.cpp +0 -27
- package/android/generated/jni/PasteTextInputSpecs.h +0 -28
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/ComponentDescriptors.cpp +0 -22
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/ComponentDescriptors.h +0 -166
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/EventEmitters.cpp +0 -183
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/EventEmitters.h +0 -148
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/PasteTextInputSpecsJSI-generated.cpp +0 -17
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/PasteTextInputSpecsJSI.h +0 -19
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/Props.cpp +0 -640
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/Props.h +0 -144
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/ShadowNodes.cpp +0 -247
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/ShadowNodes.h +0 -95
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/States.cpp +0 -14
- package/android/generated/jni/react/renderer/components/PasteTextInputSpecs/States.h +0 -19
- package/lib/commonjs/PasteTextInputNativeComponent.ts +0 -277
- package/lib/module/PasteTextInputNativeComponent.ts +0 -277
- package/lib/typescript/src/PasteTextInput.d.ts.map +0 -1
- package/lib/typescript/src/PasteTextInputNativeComponent.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/types.d.ts.map +0 -1
- /package/lib/typescript/{src/PasteTextInput.d.ts → PasteTextInput.d.ts} +0 -0
- /package/lib/typescript/{src/index.d.ts → index.d.ts} +0 -0
- /package/lib/typescript/{src/types.d.ts → types.d.ts} +0 -0
package/android/build.gradle
CHANGED
|
@@ -18,8 +18,7 @@ buildscript {
|
|
|
18
18
|
|
|
19
19
|
apply plugin: "com.android.library"
|
|
20
20
|
apply plugin: "kotlin-android"
|
|
21
|
-
|
|
22
|
-
apply plugin: "com.facebook.react"
|
|
21
|
+
// NOT using com.facebook.react plugin - this is a Paper-only component using interop
|
|
23
22
|
|
|
24
23
|
def getExtOrIntegerDefault(name) {
|
|
25
24
|
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["TestItOut_" + name]).toInteger()
|
|
@@ -33,11 +32,6 @@ android {
|
|
|
33
32
|
defaultConfig {
|
|
34
33
|
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
|
35
34
|
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
|
36
|
-
externalNativeBuild {
|
|
37
|
-
cmake {
|
|
38
|
-
cppFlags '-DBUILD_DEBUG'
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
35
|
}
|
|
42
36
|
|
|
43
37
|
buildFeatures {
|
|
@@ -59,21 +53,8 @@ android {
|
|
|
59
53
|
targetCompatibility JavaVersion.VERSION_1_8
|
|
60
54
|
}
|
|
61
55
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
java.srcDirs += [
|
|
65
|
-
"generated/java",
|
|
66
|
-
"generated/jni"
|
|
67
|
-
]
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
externalNativeBuild {
|
|
72
|
-
cmake {
|
|
73
|
-
path file('generated/jni/CMakeLists.txt')
|
|
74
|
-
version '3.22.1'
|
|
75
|
-
}
|
|
76
|
-
}
|
|
56
|
+
// Note: Codegen generates Java delegate files at build time
|
|
57
|
+
// sourceSets not needed as codegen output is automatically included
|
|
77
58
|
}
|
|
78
59
|
|
|
79
60
|
def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
@@ -85,10 +66,7 @@ repositories {
|
|
|
85
66
|
|
|
86
67
|
dependencies {
|
|
87
68
|
implementation 'com.facebook.react:react-native:+'
|
|
69
|
+
implementation 'androidx.core:core-ktx:1.12.0'
|
|
88
70
|
}
|
|
89
71
|
|
|
90
|
-
react {
|
|
91
|
-
jsRootDir = file("../src/")
|
|
92
|
-
libraryName = "react-native-paste-input"
|
|
93
|
-
codegenJavaPackageName = "com.mattermost.pastetextinput"
|
|
94
|
-
}
|
|
72
|
+
// No react {} block - using Paper interop mode instead of Fabric codegen
|
|
@@ -13,12 +13,10 @@ class PasteInputActionCallback(editText: PasteInputEditText, disabled: Boolean,
|
|
|
13
13
|
private val mEditText = editText
|
|
14
14
|
private val mEventDispatcher = eventDispatcher
|
|
15
15
|
|
|
16
|
-
|
|
17
16
|
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
|
|
18
17
|
if (isDisabled) {
|
|
19
18
|
disableMenus(menu)
|
|
20
19
|
}
|
|
21
|
-
|
|
22
20
|
return true
|
|
23
21
|
}
|
|
24
22
|
|
|
@@ -34,12 +32,10 @@ class PasteInputActionCallback(editText: PasteInputEditText, disabled: Boolean,
|
|
|
34
32
|
} else {
|
|
35
33
|
mEditText.onTextContextMenuItem(item!!.itemId)
|
|
36
34
|
}
|
|
37
|
-
|
|
38
35
|
return true
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
override fun onDestroyActionMode(mode: ActionMode?) {
|
|
42
|
-
|
|
43
39
|
}
|
|
44
40
|
|
|
45
41
|
private fun disableMenus(menu: Menu?) {
|
|
@@ -61,12 +57,17 @@ class PasteInputActionCallback(editText: PasteInputEditText, disabled: Boolean,
|
|
|
61
57
|
val clipboardManager = mEditText.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
|
62
58
|
val clipData = clipboardManager.primaryClip ?: return null
|
|
63
59
|
val item = clipData.getItemAt(0) ?: return null
|
|
64
|
-
val chars = item.text ?: return null
|
|
65
60
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
// Check for URI first (for images)
|
|
62
|
+
val uri = item.uri
|
|
63
|
+
if (uri != null) {
|
|
64
|
+
return uri
|
|
65
|
+
}
|
|
70
66
|
|
|
67
|
+
// If no URI, check if it's text content
|
|
68
|
+
val chars = item.text
|
|
69
|
+
return if (chars != null && chars.toString().isNotEmpty()) {
|
|
70
|
+
null // It's text, not an image
|
|
71
|
+
} else null
|
|
71
72
|
}
|
|
72
73
|
}
|
|
@@ -9,7 +9,6 @@ import androidx.core.view.inputmethod.InputConnectionCompat
|
|
|
9
9
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
10
10
|
import com.facebook.react.uimanager.events.EventDispatcher
|
|
11
11
|
import com.facebook.react.views.textinput.ReactEditText
|
|
12
|
-
import java.lang.Exception
|
|
13
12
|
|
|
14
13
|
|
|
15
14
|
@SuppressLint("ViewConstructor")
|
|
@@ -42,7 +41,7 @@ class PasteInputEditText(context: ThemedReactContext) : ReactEditText(context) {
|
|
|
42
41
|
val lacksPermission = (flags and InputConnectionCompat.INPUT_CONTENT_GRANT_READ_URI_PERMISSION) != 0
|
|
43
42
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1 && lacksPermission) {
|
|
44
43
|
try {
|
|
45
|
-
|
|
44
|
+
inputContentInfo.requestPermission()
|
|
46
45
|
} catch (e: Exception) {
|
|
47
46
|
return@OnCommitContentListener false
|
|
48
47
|
}
|
|
@@ -5,79 +5,126 @@ import android.content.Context
|
|
|
5
5
|
import android.net.Uri
|
|
6
6
|
import android.util.Patterns
|
|
7
7
|
import android.webkit.MimeTypeMap
|
|
8
|
-
import android.webkit.URLUtil
|
|
9
8
|
import com.facebook.react.bridge.Arguments
|
|
10
9
|
import com.facebook.react.bridge.ReactContext
|
|
11
|
-
import com.facebook.react.bridge.WritableArray
|
|
12
|
-
import com.facebook.react.bridge.WritableMap
|
|
13
10
|
import com.facebook.react.uimanager.events.EventDispatcher
|
|
14
|
-
import java.io.
|
|
11
|
+
import java.io.File
|
|
12
|
+
import java.io.FileOutputStream
|
|
15
13
|
|
|
16
14
|
class PasteInputListener(editText: PasteInputEditText, surfaceId: Int) : IPasteInputListener {
|
|
17
15
|
private val mEditText = editText
|
|
18
16
|
private val mSurfaceId = surfaceId
|
|
19
17
|
|
|
18
|
+
/**
|
|
19
|
+
* Copy content from URI to app's cache directory.
|
|
20
|
+
* This avoids SecurityException when accessing clipboard URIs.
|
|
21
|
+
*/
|
|
22
|
+
private fun copyUriToCache(context: Context, uri: Uri, mimeType: String): File? {
|
|
23
|
+
try {
|
|
24
|
+
val cacheDir = File(context.cacheDir, PasteTextInputManager.CACHE_DIR_NAME)
|
|
25
|
+
if (!cacheDir.exists()) {
|
|
26
|
+
cacheDir.mkdirs()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
val extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType) ?: "jpg"
|
|
30
|
+
val fileName = "paste_${System.currentTimeMillis()}.$extension"
|
|
31
|
+
val destFile = File(cacheDir, fileName)
|
|
32
|
+
|
|
33
|
+
context.contentResolver.openInputStream(uri)?.use { input ->
|
|
34
|
+
FileOutputStream(destFile).use { output ->
|
|
35
|
+
input.copyTo(output)
|
|
36
|
+
}
|
|
37
|
+
} ?: return null
|
|
38
|
+
|
|
39
|
+
return destFile
|
|
40
|
+
} catch (e: Exception) {
|
|
41
|
+
return null
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
20
45
|
override fun onPaste(itemUri: Uri, eventDispatcher: EventDispatcher?) {
|
|
21
46
|
val reactContext = mEditText.context as ReactContext
|
|
22
|
-
|
|
47
|
+
val uriString: String = itemUri.toString()
|
|
23
48
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
49
|
+
// Handle HTTP URLs separately
|
|
50
|
+
if (uriString.startsWith("http")) {
|
|
51
|
+
val pastImageFromUrlThread = Thread(PasteInputFileFromUrl(
|
|
52
|
+
mEditText,
|
|
53
|
+
uriString,
|
|
54
|
+
mSurfaceId,
|
|
55
|
+
eventDispatcher
|
|
56
|
+
))
|
|
57
|
+
pastImageFromUrlThread.start()
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Try to get content type
|
|
62
|
+
var mimeType = reactContext.contentResolver.getType(itemUri)
|
|
63
|
+
|
|
64
|
+
// If content type is null, try to get from ClipData
|
|
65
|
+
if (mimeType == null) {
|
|
66
|
+
val clipboardManager = reactContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
|
67
|
+
val clipData = clipboardManager.primaryClip
|
|
68
|
+
if (clipData != null && clipData.description.mimeTypeCount > 0) {
|
|
69
|
+
mimeType = clipData.description.getMimeType(0)
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Default to image/jpeg if still null
|
|
74
|
+
if (mimeType == null) {
|
|
75
|
+
mimeType = "image/jpeg"
|
|
76
|
+
}
|
|
29
77
|
|
|
30
78
|
// Special handle for Google docs
|
|
31
79
|
if (uriString == "content://com.google.android.apps.docs.editors.kix.editors.clipboard") {
|
|
32
80
|
val clipboardManager = reactContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
|
33
81
|
val clipData = clipboardManager.primaryClip ?: return
|
|
34
82
|
val item = clipData.getItemAt(0) ?: return
|
|
35
|
-
val htmlText = item.htmlText
|
|
83
|
+
val htmlText = item.htmlText ?: return
|
|
36
84
|
|
|
37
85
|
// Find uri from html
|
|
38
86
|
val matcher = Patterns.WEB_URL.matcher(htmlText)
|
|
39
87
|
if (matcher.find()) {
|
|
40
|
-
|
|
88
|
+
val urlString = htmlText.substring(matcher.start(1), matcher.end())
|
|
89
|
+
val pastImageFromUrlThread = Thread(PasteInputFileFromUrl(
|
|
90
|
+
mEditText,
|
|
91
|
+
urlString,
|
|
92
|
+
mSurfaceId,
|
|
93
|
+
eventDispatcher
|
|
94
|
+
))
|
|
95
|
+
pastImageFromUrlThread.start()
|
|
41
96
|
}
|
|
42
|
-
} else if (uriString.startsWith("http")) {
|
|
43
|
-
val pastImageFromUrlThread = Thread(PasteInputFileFromUrl(
|
|
44
|
-
mEditText,
|
|
45
|
-
uriString,
|
|
46
|
-
mSurfaceId,
|
|
47
|
-
eventDispatcher
|
|
48
|
-
))
|
|
49
|
-
pastImageFromUrlThread.start()
|
|
50
97
|
return
|
|
51
|
-
} else {
|
|
52
|
-
uriString = RealPathUtil.getRealPathFromURI(reactContext, itemUri) ?: return
|
|
53
98
|
}
|
|
54
99
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
val
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
fileSize = assetFileDescriptor.length
|
|
66
|
-
file.putString("type", mimeType)
|
|
67
|
-
file.putDouble("fileSize", fileSize.toDouble())
|
|
68
|
-
file.putString("fileName", fileName)
|
|
69
|
-
file.putString("uri", "file://$uriString")
|
|
70
|
-
|
|
71
|
-
files.pushMap(file)
|
|
72
|
-
assetFileDescriptor.close()
|
|
73
|
-
} catch (e: FileNotFoundException) {
|
|
74
|
-
error = Arguments.createMap()
|
|
75
|
-
error.putString("message", e.localizedMessage)
|
|
100
|
+
// Copy content URI to cache file
|
|
101
|
+
val cachedFile = copyUriToCache(reactContext, itemUri, mimeType)
|
|
102
|
+
if (cachedFile == null) {
|
|
103
|
+
val error = Arguments.createMap()
|
|
104
|
+
error.putString("message", "Failed to copy image from clipboard")
|
|
105
|
+
val event = Arguments.createMap()
|
|
106
|
+
event.putArray("data", null)
|
|
107
|
+
event.putMap("error", error)
|
|
108
|
+
eventDispatcher?.dispatchEvent(PasteTextInputPasteEvent(mSurfaceId, mEditText.id, event))
|
|
109
|
+
return
|
|
76
110
|
}
|
|
77
111
|
|
|
112
|
+
val fileName = cachedFile.name
|
|
113
|
+
val fileSize = cachedFile.length()
|
|
114
|
+
val filePath = cachedFile.absolutePath
|
|
115
|
+
|
|
116
|
+
val file = Arguments.createMap()
|
|
117
|
+
file.putString("type", mimeType)
|
|
118
|
+
file.putDouble("fileSize", fileSize.toDouble())
|
|
119
|
+
file.putString("fileName", fileName)
|
|
120
|
+
file.putString("uri", "file://$filePath")
|
|
121
|
+
|
|
122
|
+
val files = Arguments.createArray()
|
|
123
|
+
files.pushMap(file)
|
|
124
|
+
|
|
78
125
|
val event = Arguments.createMap()
|
|
79
126
|
event.putArray("data", files)
|
|
80
|
-
event.putMap("error",
|
|
127
|
+
event.putMap("error", null)
|
|
81
128
|
|
|
82
129
|
eventDispatcher?.dispatchEvent(PasteTextInputPasteEvent(mSurfaceId, mEditText.id, event))
|
|
83
130
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
package com.mattermost.pasteinputtext
|
|
2
2
|
|
|
3
3
|
import android.text.InputType
|
|
4
|
+
import androidx.core.view.ViewCompat
|
|
4
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
6
|
import com.facebook.react.bridge.ReactContext
|
|
6
7
|
import com.facebook.react.common.MapBuilder
|
|
@@ -51,6 +52,38 @@ class PasteTextInputManager(context: ReactApplicationContext) : ReactTextInputMa
|
|
|
51
52
|
val pasteInputEditText = editText as PasteInputEditText
|
|
52
53
|
val eventDispatcher = getEventDispatcher(reactContext, editText)
|
|
53
54
|
pasteInputEditText.setOnPasteListener(PasteInputListener(pasteInputEditText, reactContext.surfaceId), eventDispatcher)
|
|
55
|
+
|
|
56
|
+
// Set up OnReceiveContentListener for unified content handling (drag & drop, etc.)
|
|
57
|
+
setupOnReceiveContentListener(pasteInputEditText, eventDispatcher)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private fun setupOnReceiveContentListener(
|
|
61
|
+
editText: PasteInputEditText,
|
|
62
|
+
eventDispatcher: EventDispatcher?
|
|
63
|
+
) {
|
|
64
|
+
val mimeTypes = arrayOf("image/*")
|
|
65
|
+
|
|
66
|
+
ViewCompat.setOnReceiveContentListener(
|
|
67
|
+
editText,
|
|
68
|
+
mimeTypes,
|
|
69
|
+
androidx.core.view.OnReceiveContentListener { _, payload ->
|
|
70
|
+
val clip = payload.clip
|
|
71
|
+
val description = clip.description
|
|
72
|
+
|
|
73
|
+
if (description != null && description.hasMimeType("image/*")) {
|
|
74
|
+
for (i in 0 until clip.itemCount) {
|
|
75
|
+
val item = clip.getItemAt(i)
|
|
76
|
+
val uri = item.uri
|
|
77
|
+
if (uri != null) {
|
|
78
|
+
editText.getOnPasteListener().onPaste(uri, eventDispatcher)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
null
|
|
82
|
+
} else {
|
|
83
|
+
payload
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
)
|
|
54
87
|
}
|
|
55
88
|
|
|
56
89
|
override fun getExportedCustomBubblingEventTypeConstants(): MutableMap<String, Any> {
|
package/ios/PasteTextInput.mm
CHANGED
|
@@ -17,9 +17,15 @@
|
|
|
17
17
|
#import "RCTTextInputUtils.h"
|
|
18
18
|
|
|
19
19
|
#import "RCTFabricComponentsPlugins.h"
|
|
20
|
+
#import <React/RCTComponentViewFactory.h>
|
|
20
21
|
|
|
21
22
|
using namespace facebook::react;
|
|
22
23
|
|
|
24
|
+
// Register the component with Fabric's component registry
|
|
25
|
+
__attribute__((constructor)) static void registerPasteTextInput() {
|
|
26
|
+
[RCTComponentViewFactory.currentComponentViewFactory registerComponentViewClass:[PasteTextInput class]];
|
|
27
|
+
}
|
|
28
|
+
|
|
23
29
|
@interface PasteTextInput () <RCTBackedTextInputDelegate, RCTPasteTextInputViewProtocol>
|
|
24
30
|
@end
|
|
25
31
|
|
|
@@ -86,18 +92,20 @@ std::int32_t convertNSDictionaryValueToStdInt(NSDictionary *dictionary, NSString
|
|
|
86
92
|
if (self = [super initWithFrame:frame]) {
|
|
87
93
|
static const auto defaultProps = std::make_shared<const PasteTextInputProps>();
|
|
88
94
|
_props = defaultProps;
|
|
89
|
-
|
|
95
|
+
|
|
90
96
|
_backedTextInputView = [[PasteInputTextView alloc] initWithFrame:self.bounds];
|
|
91
97
|
_backedTextInputView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
92
98
|
_backedTextInputView.textInputDelegate = self;
|
|
99
|
+
_backedTextInputView.editable = YES;
|
|
100
|
+
_backedTextInputView.userInteractionEnabled = YES;
|
|
93
101
|
[self _setOnPaste];
|
|
94
102
|
_ignoreNextTextInputCall = NO;
|
|
95
103
|
_comingFromJS = NO;
|
|
96
104
|
_didMoveToWindow = NO;
|
|
97
|
-
|
|
105
|
+
|
|
98
106
|
[self addSubview:_backedTextInputView];
|
|
99
107
|
}
|
|
100
|
-
|
|
108
|
+
|
|
101
109
|
return self;
|
|
102
110
|
}
|
|
103
111
|
|
|
@@ -17,81 +17,13 @@
|
|
|
17
17
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
18
18
|
@interface PasteTextInputManager : RCTViewManager
|
|
19
19
|
@end
|
|
20
|
-
#else
|
|
21
|
-
#import <React/RCTMultilineTextInputViewManager.h>
|
|
22
|
-
|
|
23
|
-
@interface PasteTextInputManager : RCTMultilineTextInputViewManager
|
|
24
|
-
|
|
25
|
-
@end
|
|
26
|
-
#endif
|
|
27
20
|
|
|
28
|
-
@implementation PasteTextInputManager
|
|
29
|
-
NSHashTable<RCTBaseTextInputShadowView *> *_shadowViews;
|
|
30
|
-
}
|
|
21
|
+
@implementation PasteTextInputManager
|
|
31
22
|
|
|
32
23
|
RCT_EXPORT_MODULE(PasteTextInput)
|
|
33
24
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
RCT_EXPORT_VIEW_PROPERTY(onPaste, RCTBubblingEventBlock)
|
|
38
|
-
|
|
39
|
-
#pragma mark - Unified <PasteTextInput> properties
|
|
40
|
-
#ifdef RCT_NEW_ARCH_ENABLED
|
|
41
|
-
RCT_REMAP_VIEW_PROPERTY(autoCapitalize, backedTextInputView.autocapitalizationType, UITextAutocapitalizationType)
|
|
42
|
-
RCT_REMAP_VIEW_PROPERTY(autoCorrect, backedTextInputView.autocorrectionType, UITextAutocorrectionType)
|
|
43
|
-
RCT_REMAP_VIEW_PROPERTY(contextMenuHidden, backedTextInputView.contextMenuHidden, BOOL)
|
|
44
|
-
RCT_REMAP_VIEW_PROPERTY(editable, backedTextInputView.editable, BOOL)
|
|
45
|
-
RCT_REMAP_VIEW_PROPERTY(enablesReturnKeyAutomatically, backedTextInputView.enablesReturnKeyAutomatically, BOOL)
|
|
46
|
-
RCT_REMAP_VIEW_PROPERTY(keyboardAppearance, backedTextInputView.keyboardAppearance, UIKeyboardAppearance)
|
|
47
|
-
RCT_REMAP_VIEW_PROPERTY(placeholder, backedTextInputView.placeholder, NSString)
|
|
48
|
-
RCT_REMAP_VIEW_PROPERTY(placeholderTextColor, backedTextInputView.placeholderColor, UIColor)
|
|
49
|
-
RCT_REMAP_VIEW_PROPERTY(returnKeyType, backedTextInputView.returnKeyType, UIReturnKeyType)
|
|
50
|
-
RCT_REMAP_VIEW_PROPERTY(selectionColor, backedTextInputView.tintColor, UIColor)
|
|
51
|
-
RCT_REMAP_VIEW_PROPERTY(spellCheck, backedTextInputView.spellCheckingType, UITextSpellCheckingType)
|
|
52
|
-
RCT_REMAP_VIEW_PROPERTY(caretHidden, backedTextInputView.caretHidden, BOOL)
|
|
53
|
-
RCT_REMAP_VIEW_PROPERTY(clearButtonMode, backedTextInputView.clearButtonMode, UITextFieldViewMode)
|
|
54
|
-
RCT_REMAP_VIEW_PROPERTY(scrollEnabled, backedTextInputView.scrollEnabled, BOOL)
|
|
55
|
-
RCT_REMAP_VIEW_PROPERTY(secureTextEntry, backedTextInputView.secureTextEntry, BOOL)
|
|
56
|
-
RCT_REMAP_VIEW_PROPERTY(smartInsertDelete, backedTextInputView.smartInsertDeleteType, UITextSmartInsertDeleteType)
|
|
57
|
-
RCT_EXPORT_VIEW_PROPERTY(autoFocus, BOOL)
|
|
58
|
-
RCT_EXPORT_VIEW_PROPERTY(submitBehavior, NSString)
|
|
59
|
-
RCT_EXPORT_VIEW_PROPERTY(clearTextOnFocus, BOOL)
|
|
60
|
-
RCT_EXPORT_VIEW_PROPERTY(keyboardType, UIKeyboardType)
|
|
61
|
-
RCT_EXPORT_VIEW_PROPERTY(showSoftInputOnFocus, BOOL)
|
|
62
|
-
RCT_EXPORT_VIEW_PROPERTY(maxLength, NSNumber)
|
|
63
|
-
RCT_EXPORT_VIEW_PROPERTY(selectTextOnFocus, BOOL)
|
|
64
|
-
RCT_EXPORT_VIEW_PROPERTY(selection, RCTTextSelection)
|
|
65
|
-
RCT_EXPORT_VIEW_PROPERTY(inputAccessoryViewID, NSString)
|
|
66
|
-
RCT_EXPORT_VIEW_PROPERTY(textContentType, NSString)
|
|
67
|
-
RCT_EXPORT_VIEW_PROPERTY(passwordRules, NSString)
|
|
68
|
-
|
|
69
|
-
RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
|
|
70
|
-
RCT_EXPORT_VIEW_PROPERTY(onSelectionChange, RCTDirectEventBlock)
|
|
71
|
-
RCT_EXPORT_VIEW_PROPERTY(onScroll, RCTDirectEventBlock)
|
|
72
|
-
|
|
73
|
-
RCT_EXPORT_VIEW_PROPERTY(mostRecentEventCount, NSInteger)
|
|
74
|
-
|
|
75
|
-
RCT_EXPORT_SHADOW_PROPERTY(text, NSString)
|
|
76
|
-
RCT_EXPORT_SHADOW_PROPERTY(placeholder, NSString)
|
|
77
|
-
RCT_EXPORT_SHADOW_PROPERTY(onContentSizeChange, RCTDirectEventBlock)
|
|
78
|
-
|
|
79
|
-
RCT_CUSTOM_VIEW_PROPERTY(multiline, BOOL, UIView)
|
|
80
|
-
{
|
|
81
|
-
// No op.
|
|
82
|
-
// This View Manager doesn't use this prop but it must be exposed here via ViewConfig to enable Fabric component use
|
|
83
|
-
// it.
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
- (RCTShadowView *)shadowView
|
|
87
|
-
{
|
|
88
|
-
RCTBaseTextInputShadowView *shadowView = [[RCTBaseTextInputShadowView alloc] initWithBridge:self.bridge];
|
|
89
|
-
shadowView.textAttributes.fontSizeMultiplier =
|
|
90
|
-
[[[self.bridge moduleForName:@"AccessibilityManager"
|
|
91
|
-
lazilyLoadIfNecessary:YES] valueForKey:@"multiplier"] floatValue];
|
|
92
|
-
[_shadowViews addObject:shadowView];
|
|
93
|
-
return shadowView;
|
|
94
|
-
}
|
|
25
|
+
// Props are handled by Fabric component (PasteTextInput.mm)
|
|
26
|
+
// ViewManager handles native commands only
|
|
95
27
|
|
|
96
28
|
RCT_EXPORT_METHOD(focus : (nonnull NSNumber *)viewTag)
|
|
97
29
|
{
|
|
@@ -136,36 +68,29 @@ RCT_EXPORT_METHOD(setTextAndSelection
|
|
|
136
68
|
}];
|
|
137
69
|
}
|
|
138
70
|
|
|
139
|
-
|
|
71
|
+
// Note: For Fabric, the -view method is NOT needed.
|
|
72
|
+
// The PasteTextInput component is created via PasteTextInputCls() in PasteTextInput.mm
|
|
140
73
|
|
|
141
|
-
|
|
142
|
-
{
|
|
143
|
-
for (RCTBaseTextInputShadowView *shadowView in _shadowViews) {
|
|
144
|
-
[shadowView uiManagerWillPerformMounting];
|
|
145
|
-
}
|
|
146
|
-
}
|
|
74
|
+
@end
|
|
147
75
|
|
|
148
|
-
#
|
|
76
|
+
#else
|
|
77
|
+
#import <React/RCTMultilineTextInputViewManager.h>
|
|
149
78
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
}
|
|
79
|
+
@interface PasteTextInputManager : RCTMultilineTextInputViewManager
|
|
80
|
+
@end
|
|
81
|
+
|
|
82
|
+
@implementation PasteTextInputManager
|
|
83
|
+
|
|
84
|
+
RCT_EXPORT_MODULE(PasteTextInput)
|
|
85
|
+
|
|
86
|
+
RCT_EXPORT_VIEW_PROPERTY(disableCopyPaste, BOOL)
|
|
87
|
+
RCT_EXPORT_VIEW_PROPERTY(smartPunctuation, NSString)
|
|
88
|
+
RCT_EXPORT_VIEW_PROPERTY(onPaste, RCTBubblingEventBlock)
|
|
161
89
|
|
|
162
|
-
[self.bridge.uiManager setNeedsLayout];
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
#else
|
|
166
90
|
- (UIView *)view
|
|
167
91
|
{
|
|
168
92
|
return [[PasteInputView alloc] initWithBridge:self.bridge];
|
|
169
93
|
}
|
|
170
|
-
|
|
94
|
+
|
|
171
95
|
@end
|
|
96
|
+
#endif
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = exports.Commands = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
// Paper interop: Use UIManager commands instead of codegen commands
|
|
9
|
+
const PasteTextInputCommands = exports.Commands = {
|
|
10
|
+
focus: viewRef => {
|
|
11
|
+
const handle = (0, _reactNative.findNodeHandle)(viewRef);
|
|
12
|
+
if (handle != null) {
|
|
13
|
+
_reactNative.UIManager.dispatchViewManagerCommand(handle, 'focus', []);
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
blur: viewRef => {
|
|
17
|
+
const handle = (0, _reactNative.findNodeHandle)(viewRef);
|
|
18
|
+
if (handle != null) {
|
|
19
|
+
_reactNative.UIManager.dispatchViewManagerCommand(handle, 'blur', []);
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
setTextAndSelection: (viewRef, mostRecentEventCount, value, start, end) => {
|
|
23
|
+
const handle = (0, _reactNative.findNodeHandle)(viewRef);
|
|
24
|
+
if (handle != null) {
|
|
25
|
+
_reactNative.UIManager.dispatchViewManagerCommand(handle, 'setTextAndSelection', [mostRecentEventCount, value, start, end]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Re-export as Commands for compatibility
|
|
31
|
+
// Paper interop: Use requireNativeComponent instead of codegenNativeComponent
|
|
32
|
+
var _default = exports.default = (0, _reactNative.requireNativeComponent)('PasteTextInput');
|
|
33
|
+
//# sourceMappingURL=PasteTextInputNativeComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","PasteTextInputCommands","exports","Commands","focus","viewRef","handle","findNodeHandle","UIManager","dispatchViewManagerCommand","blur","setTextAndSelection","mostRecentEventCount","value","start","end","_default","default","requireNativeComponent"],"sourceRoot":"../../src","sources":["PasteTextInputNativeComponent.ts"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AA+QA;AACA,MAAMC,sBAAsC,GAAAC,OAAA,CAAAC,QAAA,GAAG;EAC3CC,KAAK,EAAGC,OAAO,IAAK;IAChB,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,OAAO,CAAC;IACtC,IAAIC,MAAM,IAAI,IAAI,EAAE;MAChBE,sBAAS,CAACC,0BAA0B,CAACH,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IAC7D;EACJ,CAAC;EACDI,IAAI,EAAGL,OAAO,IAAK;IACf,MAAMC,MAAM,GAAG,IAAAC,2BAAc,EAACF,OAAO,CAAC;IACtC,IAAIC,MAAM,IAAI,IAAI,EAAE;MAChBE,sBAAS,CAACC,0BAA0B,CAACH,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IAC5D;EACJ,CAAC;EACDK,mBAAmB,EAAEA,CAACN,OAAO,EAAEO,oBAAoB,EAAEC,KAAK,EAAEC,KAAK,EAAEC,GAAG,KAAK;IACvE,MAAMT,MAAM,GAAG,IAAAC,2BAAc,EAACF,OAAO,CAAC;IACtC,IAAIC,MAAM,IAAI,IAAI,EAAE;MAChBE,sBAAS,CAACC,0BAA0B,CAACH,MAAM,EAAE,qBAAqB,EAAE,CAChEM,oBAAoB,EACpBC,KAAK,EACLC,KAAK,EACLC,GAAG,CACN,CAAC;IACN;EACJ;AACJ,CAAC;;AAED;AAGA;AAAA,IAAAC,QAAA,GAAAd,OAAA,CAAAe,OAAA,GACe,IAAAC,mCAAsB,EACjC,gBACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { requireNativeComponent, UIManager, findNodeHandle } from 'react-native';
|
|
4
|
+
// Paper interop: Use UIManager commands instead of codegen commands
|
|
5
|
+
const PasteTextInputCommands = {
|
|
6
|
+
focus: viewRef => {
|
|
7
|
+
const handle = findNodeHandle(viewRef);
|
|
8
|
+
if (handle != null) {
|
|
9
|
+
UIManager.dispatchViewManagerCommand(handle, 'focus', []);
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
blur: viewRef => {
|
|
13
|
+
const handle = findNodeHandle(viewRef);
|
|
14
|
+
if (handle != null) {
|
|
15
|
+
UIManager.dispatchViewManagerCommand(handle, 'blur', []);
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
setTextAndSelection: (viewRef, mostRecentEventCount, value, start, end) => {
|
|
19
|
+
const handle = findNodeHandle(viewRef);
|
|
20
|
+
if (handle != null) {
|
|
21
|
+
UIManager.dispatchViewManagerCommand(handle, 'setTextAndSelection', [mostRecentEventCount, value, start, end]);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
// Re-export as Commands for compatibility
|
|
27
|
+
export { PasteTextInputCommands as Commands };
|
|
28
|
+
|
|
29
|
+
// Paper interop: Use requireNativeComponent instead of codegenNativeComponent
|
|
30
|
+
export default requireNativeComponent('PasteTextInput');
|
|
31
|
+
//# sourceMappingURL=PasteTextInputNativeComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["requireNativeComponent","UIManager","findNodeHandle","PasteTextInputCommands","focus","viewRef","handle","dispatchViewManagerCommand","blur","setTextAndSelection","mostRecentEventCount","value","start","end","Commands"],"sourceRoot":"../../src","sources":["PasteTextInputNativeComponent.ts"],"mappings":";;AAAA,SAIIA,sBAAsB,EACtBC,SAAS,EACTC,cAAc,QACX,cAAc;AAwQrB;AACA,MAAMC,sBAAsC,GAAG;EAC3CC,KAAK,EAAGC,OAAO,IAAK;IAChB,MAAMC,MAAM,GAAGJ,cAAc,CAACG,OAAO,CAAC;IACtC,IAAIC,MAAM,IAAI,IAAI,EAAE;MAChBL,SAAS,CAACM,0BAA0B,CAACD,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;IAC7D;EACJ,CAAC;EACDE,IAAI,EAAGH,OAAO,IAAK;IACf,MAAMC,MAAM,GAAGJ,cAAc,CAACG,OAAO,CAAC;IACtC,IAAIC,MAAM,IAAI,IAAI,EAAE;MAChBL,SAAS,CAACM,0BAA0B,CAACD,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IAC5D;EACJ,CAAC;EACDG,mBAAmB,EAAEA,CAACJ,OAAO,EAAEK,oBAAoB,EAAEC,KAAK,EAAEC,KAAK,EAAEC,GAAG,KAAK;IACvE,MAAMP,MAAM,GAAGJ,cAAc,CAACG,OAAO,CAAC;IACtC,IAAIC,MAAM,IAAI,IAAI,EAAE;MAChBL,SAAS,CAACM,0BAA0B,CAACD,MAAM,EAAE,qBAAqB,EAAE,CAChEI,oBAAoB,EACpBC,KAAK,EACLC,KAAK,EACLC,GAAG,CACN,CAAC;IACN;EACJ;AACJ,CAAC;;AAED;AACA,SAASV,sBAAsB,IAAIW,QAAQ;;AAE3C;AACA,eAAed,sBAAsB,CACjC,gBACJ,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasteTextInput.d.ts","sourceRoot":"","sources":["../../src/PasteTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAER,eAAe,EACf,sBAAsB,EAGzB,MAAM,SAAS,CAAC;AA8gBjB,QAAA,MAAM,kBAAkB,gGAiEtB,CAAC;AAaH,eAAe,kBAAkB,CAAC"}
|
package/lib/typescript/{src/PasteTextInputNativeComponent.d.ts → PasteTextInputNativeComponent.d.ts}
RENAMED
|
@@ -162,7 +162,8 @@ interface NativeCommands {
|
|
|
162
162
|
readonly setTextAndSelection: (viewRef: React.ElementRef<PasteTextInputNativeComponentType>, mostRecentEventCount: Int32, value: string | null | undefined, // in theory this is nullable
|
|
163
163
|
start: Int32, end: Int32) => void;
|
|
164
164
|
}
|
|
165
|
-
|
|
165
|
+
declare const PasteTextInputCommands: NativeCommands;
|
|
166
|
+
export { PasteTextInputCommands as Commands };
|
|
166
167
|
declare const _default: HostComponent<NativeProps>;
|
|
167
168
|
export default _default;
|
|
168
169
|
//# sourceMappingURL=PasteTextInputNativeComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasteTextInputNativeComponent.d.ts","sourceRoot":"","sources":["../../src/PasteTextInputNativeComponent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,cAAc,SAAS,CAAC;AAExB,QAAA,IAAI,UAAU,EAAE,KAAK,CAAC,yBAAyB,CAC3C,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CACjD,CAAC;AAIF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,UAAU,CACjD,aAAa,CAAC,eAAe,CAAC,CACjC,GAAG;IACA,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC;IACtE,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,UAAU;IACvB,WAAW,EAAE;QACT,IAAI,EAAE,UAAU,EAAE,CAAC;QACnB,KAAK,CAAC,EAAE;YACJ,OAAO,EAAE,MAAM,CAAC;SACnB,CAAC;KACL,CAAC;CACL;AAED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACnD,YAAY,CAAC,EAAE,YAAY,CAAC,sBAAsB,CAAC,CAAC;IACpD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAC1E,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACtD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,SAAS,IAAI,OAAO,CAAC;IACrB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAuB;IACpC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,mBAAmB,EAAE,CACjB,OAAO,EAAE,OAAO,EAChB,oBAAoB,EAAE,MAAM,EAC5B,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE,6BAA6B;IACnD,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,KACV,IAAI,CAAC;CACb;AAED,MAAM,WAAW,SAAS;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,eAAe,GAAG,SAAS,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC"}
|