@chaitrabhairappa/react-native-rich-text-editor 3.2.0 → 3.4.0

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/README.md CHANGED
@@ -140,6 +140,7 @@ export default App;
140
140
  | `placeholder` | `string` | `""` | Placeholder text |
141
141
  | `initialContent` | `Block[]` | `[]` | Initial content blocks |
142
142
  | `readOnly` | `boolean` | `false` | Make editor read-only |
143
+ | `selectable` | `boolean` | `true` | Enable/disable text selection |
143
144
  | `numberOfLines` | `number` | `undefined` | Truncate text with ellipsis in readOnly mode |
144
145
  | `maxHeight` | `number` | `undefined` | Maximum height before scrolling |
145
146
  | `showToolbar` | `boolean` | `true` | Show/hide floating toolbar |
@@ -314,6 +315,10 @@ const toolbarOptions: ToolbarOption[] = ['bold', 'italic', 'underline', 'bullet'
314
315
 
315
316
  ## Changelog
316
317
 
318
+ ### 3.3.0
319
+
320
+ - Add `selectable` prop to enable/disable text selection (iOS & Android)
321
+
317
322
  ### 3.0.0
318
323
 
319
324
  - Add media attachment support — insert images into the editor (iOS & Android)
@@ -11,6 +11,11 @@ import kotlin.math.ceil
11
11
  data class MediaAttachmentData(
12
12
  val kind: String,
13
13
  val uri: String,
14
+ val sourceUri: String? = null,
15
+ val fileName: String? = null,
16
+ val extension: String? = null,
17
+ val contentType: String? = null,
18
+ val fileSize: Long? = null,
14
19
  val widthDp: Int,
15
20
  val heightDp: Int,
16
21
  val alt: String
@@ -4,9 +4,11 @@ import android.content.Context
4
4
  import android.graphics.Bitmap
5
5
  import android.graphics.BitmapFactory
6
6
  import android.net.Uri
7
+ import android.provider.OpenableColumns
7
8
  import android.text.Editable
8
9
  import android.text.SpannableStringBuilder
9
10
  import android.text.Spanned
11
+ import android.webkit.MimeTypeMap
10
12
  import com.facebook.react.bridge.Arguments
11
13
  import com.facebook.react.bridge.WritableMap
12
14
  import org.json.JSONObject
@@ -32,9 +34,16 @@ class MediaAttachmentSupport(
32
34
  if (blockType != "mediaAttachment") return null
33
35
 
34
36
  val mediaInfo = block["mediaAttachment"] as? Map<*, *>
37
+ val uri = mediaInfo?.get("uri") as? String ?: ""
38
+ val sourceUri = mediaInfo?.get("sourceUri") as? String ?: uri
35
39
  return MediaAttachmentData(
36
40
  kind = mediaInfo?.get("kind") as? String ?: "image",
37
- uri = mediaInfo?.get("uri") as? String ?: "",
41
+ uri = uri,
42
+ sourceUri = sourceUri,
43
+ fileName = mediaInfo?.get("fileName") as? String,
44
+ extension = mediaInfo?.get("extension") as? String,
45
+ contentType = mediaInfo?.get("contentType") as? String,
46
+ fileSize = (mediaInfo?.get("fileSize") as? Number)?.toLong(),
38
47
  widthDp = (mediaInfo?.get("width") as? Number)?.toInt() ?: 100,
39
48
  heightDp = (mediaInfo?.get("height") as? Number)?.toInt() ?: 100,
40
49
  alt = mediaInfo?.get("alt") as? String ?: ""
@@ -76,6 +85,11 @@ class MediaAttachmentSupport(
76
85
  val mediaMap = Arguments.createMap()
77
86
  mediaMap.putString("kind", mediaData.kind)
78
87
  mediaMap.putString("uri", mediaData.uri)
88
+ mediaMap.putString("sourceUri", mediaData.sourceUri ?: mediaData.uri)
89
+ mediaData.fileName?.let { mediaMap.putString("fileName", it) }
90
+ mediaData.extension?.let { mediaMap.putString("extension", it) }
91
+ mediaData.contentType?.let { mediaMap.putString("contentType", it) }
92
+ mediaData.fileSize?.let { mediaMap.putDouble("fileSize", it.toDouble()) }
79
93
  mediaMap.putInt("width", mediaData.widthDp)
80
94
  mediaMap.putInt("height", mediaData.heightDp)
81
95
  mediaMap.putString("alt", mediaData.alt)
@@ -93,6 +107,11 @@ class MediaAttachmentSupport(
93
107
  val mediaObj = JSONObject()
94
108
  mediaObj.put("kind", mediaData.kind)
95
109
  mediaObj.put("uri", mediaData.uri)
110
+ mediaObj.put("sourceUri", mediaData.sourceUri ?: mediaData.uri)
111
+ mediaData.fileName?.let { mediaObj.put("fileName", it) }
112
+ mediaData.extension?.let { mediaObj.put("extension", it) }
113
+ mediaData.contentType?.let { mediaObj.put("contentType", it) }
114
+ mediaData.fileSize?.let { mediaObj.put("fileSize", it) }
96
115
  mediaObj.put("width", mediaData.widthDp)
97
116
  mediaObj.put("height", mediaData.heightDp)
98
117
  mediaObj.put("alt", mediaData.alt)
@@ -127,14 +146,12 @@ class MediaAttachmentSupport(
127
146
  }
128
147
 
129
148
  fun insertMediaAttachmentBlock(editable: Editable, insertPos: Int, uri: String): Int {
149
+ val mediaData = createMediaDataForUri(uri)
150
+ return insertMediaAttachmentBlock(editable, insertPos, mediaData)
151
+ }
152
+
153
+ fun insertMediaAttachmentBlock(editable: Editable, insertPos: Int, mediaData: MediaAttachmentData): Int {
130
154
  var mutableInsertPos = insertPos.coerceIn(0, editable.length)
131
- val mediaData = MediaAttachmentData(
132
- kind = "image",
133
- uri = uri,
134
- widthDp = 100,
135
- heightDp = 100,
136
- alt = "Selected image"
137
- )
138
155
 
139
156
  if (mutableInsertPos > 0 && editable[mutableInsertPos - 1] != '\n') {
140
157
  editable.insert(mutableInsertPos, "\n")
@@ -160,6 +177,75 @@ class MediaAttachmentSupport(
160
177
  return nextPos.coerceAtMost(editable.length)
161
178
  }
162
179
 
180
+ fun createMediaDataForUri(uri: String): MediaAttachmentData {
181
+ val inferredMeta = inferMediaMetadata(uri)
182
+ return MediaAttachmentData(
183
+ kind = "image",
184
+ uri = uri,
185
+ sourceUri = uri,
186
+ fileName = inferredMeta.fileName,
187
+ extension = inferredMeta.extension,
188
+ contentType = inferredMeta.contentType,
189
+ fileSize = inferredMeta.fileSize,
190
+ widthDp = 100,
191
+ heightDp = 100,
192
+ alt = "Selected image"
193
+ )
194
+ }
195
+
196
+ private data class InferredMediaMetadata(
197
+ val fileName: String?,
198
+ val extension: String?,
199
+ val contentType: String?,
200
+ val fileSize: Long?
201
+ )
202
+
203
+ private fun inferMediaMetadata(uriString: String): InferredMediaMetadata {
204
+ val parsed = runCatching { Uri.parse(uriString) }.getOrNull()
205
+ ?: return InferredMediaMetadata(null, null, null, null)
206
+
207
+ val extension = runCatching {
208
+ MimeTypeMap.getFileExtensionFromUrl(parsed.toString())
209
+ }.getOrNull()?.takeIf { it.isNotBlank() }?.lowercase()
210
+
211
+ val contentType = runCatching {
212
+ context.contentResolver.getType(parsed)
213
+ }.getOrNull() ?: extension?.let {
214
+ MimeTypeMap.getSingleton().getMimeTypeFromExtension(it)
215
+ }
216
+
217
+ var fileName: String? = null
218
+ var fileSize: Long? = null
219
+
220
+ if (parsed.scheme == "content") {
221
+ runCatching {
222
+ context.contentResolver.query(parsed, null, null, null, null)
223
+ }.getOrNull()?.use { cursor ->
224
+ val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
225
+ val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE)
226
+ if (cursor.moveToFirst()) {
227
+ if (nameIndex >= 0) {
228
+ fileName = cursor.getString(nameIndex)
229
+ }
230
+ if (sizeIndex >= 0 && !cursor.isNull(sizeIndex)) {
231
+ fileSize = cursor.getLong(sizeIndex)
232
+ }
233
+ }
234
+ }
235
+ }
236
+
237
+ if (fileName.isNullOrBlank()) {
238
+ fileName = parsed.lastPathSegment
239
+ }
240
+
241
+ val resolvedExtension = extension ?: fileName
242
+ ?.substringAfterLast('.', "")
243
+ ?.takeIf { it.isNotBlank() }
244
+ ?.lowercase()
245
+
246
+ return InferredMediaMetadata(fileName, resolvedExtension, contentType, fileSize)
247
+ }
248
+
163
249
  private fun normalizeMediaDimensions(mediaData: MediaAttachmentData, targetWidthPx: Int): MediaAttachmentData {
164
250
  val targetWidthDp = (targetWidthPx / density).toInt().coerceAtLeast(1)
165
251
  val fallbackHeightDp = if (mediaData.widthDp > 0 && mediaData.heightDp > 0) {
@@ -1006,6 +1006,10 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
1006
1006
  }
1007
1007
  }
1008
1008
 
1009
+ fun setSelectableValue(value: Boolean) {
1010
+ setTextIsSelectable(value)
1011
+ }
1012
+
1009
1013
  fun setMaxHeightValue(value: Int) {
1010
1014
  maxHeightValue = value
1011
1015
  post { updateContentSize() }
@@ -1939,12 +1943,12 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
1939
1943
  imagePickerLauncher?.launch("image/*")
1940
1944
  }
1941
1945
 
1942
- private fun insertMediaAttachmentBlock(uri: String) {
1946
+ private fun insertMediaAttachmentBlock(mediaData: MediaAttachmentData) {
1943
1947
  val editable = text ?: return
1944
1948
  var insertPos = selectionStart.coerceIn(0, editable.length)
1945
1949
 
1946
1950
  isInternalChange = true
1947
- val nextPos = mediaAttachmentSupport.insertMediaAttachmentBlock(editable, insertPos, uri)
1951
+ val nextPos = mediaAttachmentSupport.insertMediaAttachmentBlock(editable, insertPos, mediaData)
1948
1952
  setSelection(nextPos.coerceAtMost(editable.length))
1949
1953
 
1950
1954
  isInternalChange = false
@@ -1953,10 +1957,60 @@ class RichTextEditorView(context: Context) : androidx.appcompat.widget.AppCompat
1953
1957
  post { updateContentSize() }
1954
1958
  }
1955
1959
 
1956
- fun insertMediaAttachment(uri: String?) {
1957
- val safeUri = uri?.trim().orEmpty()
1960
+ private fun insertMediaAttachmentBlock(uri: String) {
1961
+ val safeUri = uri.trim()
1958
1962
  if (safeUri.isEmpty()) return
1959
- insertMediaAttachmentBlock(safeUri)
1963
+ val mediaData = mediaAttachmentSupport.createMediaDataForUri(safeUri)
1964
+ insertMediaAttachmentBlock(mediaData)
1965
+ }
1966
+
1967
+ private fun parseMediaAttachmentPayload(payload: String): MediaAttachmentData? {
1968
+ val trimmed = payload.trim()
1969
+ if (trimmed.isEmpty()) return null
1970
+
1971
+ return try {
1972
+ if (trimmed.startsWith("{")) {
1973
+ val obj = org.json.JSONObject(trimmed)
1974
+ val uri = obj.optString("uri", "").trim()
1975
+ if (uri.isEmpty()) {
1976
+ null
1977
+ } else {
1978
+ val sourceUri = obj.optString("sourceUri", uri).ifBlank { uri }
1979
+ val kind = obj.optString("kind", "image")
1980
+ val fileName = obj.optString("fileName", "").ifBlank { null }
1981
+ val extension = obj.optString("extension", "").ifBlank { null }
1982
+ val contentType = obj.optString("contentType", "").ifBlank { null }
1983
+ val fileSize = if (obj.has("fileSize")) obj.optLong("fileSize", -1L) else -1L
1984
+ val width = obj.optInt("width", 100).coerceAtLeast(1)
1985
+ val height = obj.optInt("height", 100).coerceAtLeast(1)
1986
+ val alt = obj.optString("alt", "Selected image")
1987
+
1988
+ MediaAttachmentData(
1989
+ kind = kind,
1990
+ uri = uri,
1991
+ sourceUri = sourceUri,
1992
+ fileName = fileName,
1993
+ extension = extension,
1994
+ contentType = contentType,
1995
+ fileSize = fileSize.takeIf { it >= 0L },
1996
+ widthDp = width,
1997
+ heightDp = height,
1998
+ alt = alt
1999
+ )
2000
+ }
2001
+ } else {
2002
+ mediaAttachmentSupport.createMediaDataForUri(trimmed)
2003
+ }
2004
+ } catch (_: Exception) {
2005
+ mediaAttachmentSupport.createMediaDataForUri(trimmed)
2006
+ }
2007
+ }
2008
+
2009
+ fun insertMediaAttachment(payload: String?) {
2010
+ val safePayload = payload?.trim().orEmpty()
2011
+ if (safePayload.isEmpty()) return
2012
+ val mediaData = parseMediaAttachmentPayload(safePayload) ?: return
2013
+ insertMediaAttachmentBlock(mediaData)
1960
2014
  }
1961
2015
 
1962
2016
  private fun promptInsertLink() {
@@ -29,8 +29,8 @@ class RichTextEditorViewManager : SimpleViewManager<RichTextEditorView>() {
29
29
  override fun receiveCommand(view: RichTextEditorView, commandId: String?, args: ReadableArray?) {
30
30
  when (commandId) {
31
31
  "insertMediaAttachment" -> {
32
- val uri = args?.getString(0)
33
- view.insertMediaAttachment(uri)
32
+ val payload = args?.getString(0)
33
+ view.insertMediaAttachment(payload)
34
34
  }
35
35
  }
36
36
  }
@@ -38,8 +38,8 @@ class RichTextEditorViewManager : SimpleViewManager<RichTextEditorView>() {
38
38
  override fun receiveCommand(view: RichTextEditorView, commandId: Int, args: ReadableArray?) {
39
39
  when (commandId) {
40
40
  COMMAND_INSERT_MEDIA_ATTACHMENT -> {
41
- val uri = args?.getString(0)
42
- view.insertMediaAttachment(uri)
41
+ val payload = args?.getString(0)
42
+ view.insertMediaAttachment(payload)
43
43
  }
44
44
  }
45
45
  }
@@ -62,6 +62,15 @@ class RichTextEditorViewManager : SimpleViewManager<RichTextEditorView>() {
62
62
  }
63
63
  }
64
64
 
65
+ @ReactProp(name = "selectable")
66
+ fun setSelectable(view: RichTextEditorView, selectable: Boolean) {
67
+ try {
68
+ view.setSelectableValue(selectable)
69
+ } catch (e: Exception) {
70
+ e.printStackTrace()
71
+ }
72
+ }
73
+
65
74
  @ReactProp(name = "maxHeight")
66
75
  fun setMaxHeight(view: RichTextEditorView, maxHeight: Double) {
67
76
  try {
@@ -165,6 +174,22 @@ class RichTextEditorViewManager : SimpleViewManager<RichTextEditorView>() {
165
174
  val mediaMap = mutableMapOf<String, Any>()
166
175
  mediaMap["kind"] = mediaAttachment.optString("kind", "image")
167
176
  mediaMap["uri"] = mediaAttachment.optString("uri", "")
177
+ mediaMap["sourceUri"] = mediaAttachment.optString(
178
+ "sourceUri",
179
+ mediaAttachment.optString("uri", "")
180
+ )
181
+ if (mediaAttachment.has("fileName")) {
182
+ mediaMap["fileName"] = mediaAttachment.optString("fileName", "")
183
+ }
184
+ if (mediaAttachment.has("extension")) {
185
+ mediaMap["extension"] = mediaAttachment.optString("extension", "")
186
+ }
187
+ if (mediaAttachment.has("contentType")) {
188
+ mediaMap["contentType"] = mediaAttachment.optString("contentType", "")
189
+ }
190
+ if (mediaAttachment.has("fileSize")) {
191
+ mediaMap["fileSize"] = mediaAttachment.optLong("fileSize", 0)
192
+ }
168
193
  mediaMap["width"] = mediaAttachment.optInt("width", 100)
169
194
  mediaMap["height"] = mediaAttachment.optInt("height", 100)
170
195
  mediaMap["alt"] = mediaAttachment.optString("alt", "")
@@ -557,6 +557,12 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
557
557
  }
558
558
  }
559
559
 
560
+ @objc var selectable: Bool = true {
561
+ didSet {
562
+ textView.isSelectable = selectable
563
+ }
564
+ }
565
+
560
566
  @objc var maxHeight: CGFloat = 0 {
561
567
  didSet {
562
568
  if maxHeight > 0 {
@@ -2029,7 +2035,12 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2029
2035
 
2030
2036
  private func insertPickedImage(_ image: UIImage) {
2031
2037
  guard let imageUrl = writeImageToTemporaryURL(image) else { return }
2032
- insertMediaAttachmentBlock(uri: imageUrl.absoluteString, image: image)
2038
+ let mediaAttachment = createMediaAttachmentInfoFromUri(
2039
+ imageUrl.absoluteString,
2040
+ kind: "image",
2041
+ alt: "Selected image"
2042
+ )
2043
+ insertMediaAttachmentBlock(mediaAttachment: mediaAttachment, image: image)
2033
2044
  }
2034
2045
 
2035
2046
  private func writeImageToTemporaryURL(_ image: UIImage) -> URL? {
@@ -2045,7 +2056,12 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2045
2056
  }
2046
2057
  }
2047
2058
 
2048
- private func insertMediaAttachmentBlock(uri: String, image: UIImage?) {
2059
+ private func insertMediaAttachmentBlock(mediaAttachment: [String: Any], image: UIImage?) {
2060
+ guard let uri = mediaAttachment["uri"] as? String,
2061
+ !uri.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else {
2062
+ return
2063
+ }
2064
+
2049
2065
  let mutable = NSMutableAttributedString(attributedString: textView.attributedText)
2050
2066
  var insertPos = textView.selectedRange.location
2051
2067
  insertPos = max(0, min(insertPos, mutable.length))
@@ -2060,7 +2076,12 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2060
2076
  }
2061
2077
  }
2062
2078
 
2063
- let attachmentString = createMediaAttachmentAttributedString(uri: uri, image: image, width: nil, height: nil, alt: "Selected image")
2079
+ let attachmentString = createMediaAttachmentAttributedString(
2080
+ mediaAttachment: mediaAttachment,
2081
+ image: image,
2082
+ width: nil,
2083
+ height: nil
2084
+ )
2064
2085
  mutable.insert(attachmentString, at: insertPos)
2065
2086
 
2066
2087
  var nextPos = insertPos + attachmentString.length
@@ -2084,13 +2105,30 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2084
2105
  updateContentSize()
2085
2106
  }
2086
2107
 
2087
- private func createMediaAttachmentAttributedString(uri: String, image: UIImage?, width: CGFloat?, height: CGFloat?, alt: String) -> NSAttributedString {
2108
+ private func insertMediaAttachmentBlock(uri: String, image: UIImage?) {
2109
+ let safeUri = uri.trimmingCharacters(in: .whitespacesAndNewlines)
2110
+ guard !safeUri.isEmpty else { return }
2111
+ let mediaAttachment = createMediaAttachmentInfoFromUri(safeUri, kind: "image", alt: "Selected image")
2112
+ insertMediaAttachmentBlock(mediaAttachment: mediaAttachment, image: image)
2113
+ }
2114
+
2115
+ private func createMediaAttachmentAttributedString(mediaAttachment: [String: Any], image: UIImage?, width: CGFloat?, height: CGFloat?) -> NSAttributedString {
2116
+ let uri = (mediaAttachment["uri"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines) ?? ""
2117
+ let sourceUri = (mediaAttachment["sourceUri"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines)
2118
+ .flatMap { $0.isEmpty ? nil : $0 } ?? uri
2119
+ let kind = (mediaAttachment["kind"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines)
2120
+ .flatMap { $0.isEmpty ? nil : $0 } ?? "image"
2121
+ let alt = (mediaAttachment["alt"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines)
2122
+ .flatMap { $0.isEmpty ? nil : $0 } ?? "Selected image"
2123
+
2124
+ let widthFromPayload = numberValue(mediaAttachment["width"]).map { CGFloat(truncating: $0) }
2125
+ let heightFromPayload = numberValue(mediaAttachment["height"]).map { CGFloat(truncating: $0) }
2088
2126
  let textContainerWidth = max(
2089
2127
  120,
2090
2128
  textView.bounds.width - textView.textContainerInset.left - textView.textContainerInset.right - textView.textContainer.lineFragmentPadding * 2
2091
2129
  )
2092
2130
 
2093
- let fallbackWidth = width ?? textContainerWidth
2131
+ let fallbackWidth = width ?? widthFromPayload ?? textContainerWidth
2094
2132
  let normalizedWidth = max(1, min(textContainerWidth, fallbackWidth))
2095
2133
 
2096
2134
  let sourceImage = image ?? loadImageFromUri(uri)
@@ -2098,7 +2136,7 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2098
2136
  if let sourceImage = sourceImage, sourceImage.size.width > 0 {
2099
2137
  normalizedHeight = max(1, normalizedWidth * (sourceImage.size.height / sourceImage.size.width))
2100
2138
  } else {
2101
- normalizedHeight = max(1, height ?? normalizedWidth)
2139
+ normalizedHeight = max(1, height ?? heightFromPayload ?? normalizedWidth)
2102
2140
  }
2103
2141
 
2104
2142
  let targetSize = CGSize(width: normalizedWidth, height: normalizedHeight)
@@ -2107,15 +2145,32 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2107
2145
  attachment.image = renderMediaImage(sourceImage, targetSize: targetSize)
2108
2146
 
2109
2147
  let attributed = NSMutableAttributedString(attachment: attachment)
2148
+
2149
+ var normalizedAttachment: [String: Any] = [
2150
+ "kind": kind,
2151
+ "uri": uri,
2152
+ "sourceUri": sourceUri,
2153
+ "width": Int(normalizedWidth.rounded()),
2154
+ "height": Int(normalizedHeight.rounded()),
2155
+ "alt": alt
2156
+ ]
2157
+
2158
+ if let fileName = (mediaAttachment["fileName"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !fileName.isEmpty {
2159
+ normalizedAttachment["fileName"] = fileName
2160
+ }
2161
+ if let fileExtension = (mediaAttachment["extension"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !fileExtension.isEmpty {
2162
+ normalizedAttachment["extension"] = fileExtension
2163
+ }
2164
+ if let contentType = (mediaAttachment["contentType"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !contentType.isEmpty {
2165
+ normalizedAttachment["contentType"] = contentType
2166
+ }
2167
+ if let fileSize = numberValue(mediaAttachment["fileSize"]) {
2168
+ normalizedAttachment["fileSize"] = fileSize
2169
+ }
2170
+
2110
2171
  attributed.addAttribute(
2111
2172
  RichTextEditorView.mediaAttachmentAttributeKey,
2112
- value: [
2113
- "kind": "image",
2114
- "uri": uri,
2115
- "width": Int(normalizedWidth.rounded()),
2116
- "height": Int(normalizedHeight.rounded()),
2117
- "alt": alt
2118
- ],
2173
+ value: normalizedAttachment,
2119
2174
  range: NSRange(location: 0, length: attributed.length)
2120
2175
  )
2121
2176
 
@@ -2166,6 +2221,137 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2166
2221
  return UIImage(data: data)
2167
2222
  }
2168
2223
 
2224
+ private func createMediaAttachmentInfoFromUri(_ uri: String, kind: String = "image", alt: String = "Selected image") -> [String: Any] {
2225
+ let normalizedUri = uri.trimmingCharacters(in: .whitespacesAndNewlines)
2226
+ var mediaAttachment: [String: Any] = [
2227
+ "kind": kind,
2228
+ "uri": normalizedUri,
2229
+ "sourceUri": normalizedUri,
2230
+ "alt": alt
2231
+ ]
2232
+
2233
+ let inferred = inferMediaMetadata(from: normalizedUri)
2234
+ if let fileName = inferred.fileName {
2235
+ mediaAttachment["fileName"] = fileName
2236
+ }
2237
+ if let fileExtension = inferred.fileExtension {
2238
+ mediaAttachment["extension"] = fileExtension
2239
+ }
2240
+ if let contentType = inferred.contentType {
2241
+ mediaAttachment["contentType"] = contentType
2242
+ }
2243
+ if let fileSize = inferred.fileSize {
2244
+ mediaAttachment["fileSize"] = fileSize
2245
+ }
2246
+
2247
+ return mediaAttachment
2248
+ }
2249
+
2250
+ private func numberValue(_ value: Any?) -> NSNumber? {
2251
+ if let number = value as? NSNumber {
2252
+ return number
2253
+ }
2254
+ if let intValue = value as? Int {
2255
+ return NSNumber(value: intValue)
2256
+ }
2257
+ if let int64Value = value as? Int64 {
2258
+ return NSNumber(value: int64Value)
2259
+ }
2260
+ if let doubleValue = value as? Double {
2261
+ return NSNumber(value: doubleValue)
2262
+ }
2263
+ if let floatValue = value as? Float {
2264
+ return NSNumber(value: floatValue)
2265
+ }
2266
+ return nil
2267
+ }
2268
+
2269
+ private func parseMediaAttachmentPayload(_ payload: String) -> [String: Any]? {
2270
+ let trimmed = payload.trimmingCharacters(in: .whitespacesAndNewlines)
2271
+ guard !trimmed.isEmpty else { return nil }
2272
+
2273
+ if trimmed.first == "{" {
2274
+ guard let data = trimmed.data(using: .utf8),
2275
+ let raw = try? JSONSerialization.jsonObject(with: data) as? [String: Any],
2276
+ let uriValue = raw["uri"] as? String else {
2277
+ return nil
2278
+ }
2279
+
2280
+ let uri = uriValue.trimmingCharacters(in: .whitespacesAndNewlines)
2281
+ guard !uri.isEmpty else { return nil }
2282
+
2283
+ var normalized = createMediaAttachmentInfoFromUri(uri)
2284
+
2285
+ if let kind = (raw["kind"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !kind.isEmpty {
2286
+ normalized["kind"] = kind
2287
+ }
2288
+ if let sourceUri = (raw["sourceUri"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !sourceUri.isEmpty {
2289
+ normalized["sourceUri"] = sourceUri
2290
+ }
2291
+ if let alt = (raw["alt"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !alt.isEmpty {
2292
+ normalized["alt"] = alt
2293
+ }
2294
+ if let fileName = (raw["fileName"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !fileName.isEmpty {
2295
+ normalized["fileName"] = fileName
2296
+ }
2297
+ if let fileExtension = (raw["extension"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !fileExtension.isEmpty {
2298
+ normalized["extension"] = fileExtension
2299
+ }
2300
+ if let contentType = (raw["contentType"] as? String)?.trimmingCharacters(in: .whitespacesAndNewlines), !contentType.isEmpty {
2301
+ normalized["contentType"] = contentType
2302
+ }
2303
+ if let fileSize = numberValue(raw["fileSize"]) {
2304
+ normalized["fileSize"] = fileSize
2305
+ }
2306
+ if let width = numberValue(raw["width"]) {
2307
+ normalized["width"] = max(1, width.intValue)
2308
+ }
2309
+ if let height = numberValue(raw["height"]) {
2310
+ normalized["height"] = max(1, height.intValue)
2311
+ }
2312
+
2313
+ return normalized
2314
+ }
2315
+
2316
+ return createMediaAttachmentInfoFromUri(trimmed)
2317
+ }
2318
+
2319
+ private func inferMediaMetadata(from uri: String) -> (fileName: String?, fileExtension: String?, contentType: String?, fileSize: NSNumber?) {
2320
+ guard let url = URL(string: uri) else {
2321
+ return (nil, nil, nil, nil)
2322
+ }
2323
+
2324
+ let fileName = url.lastPathComponent.isEmpty ? nil : url.lastPathComponent
2325
+ let fileExtension = url.pathExtension.isEmpty ? nil : url.pathExtension.lowercased()
2326
+
2327
+ var fileSize: NSNumber?
2328
+ if url.isFileURL,
2329
+ let attributes = try? FileManager.default.attributesOfItem(atPath: url.path),
2330
+ let size = attributes[.size] as? NSNumber {
2331
+ fileSize = size
2332
+ }
2333
+
2334
+ let contentType = fileExtension.flatMap { mimeType(forExtension: $0) }
2335
+
2336
+ return (fileName, fileExtension, contentType, fileSize)
2337
+ }
2338
+
2339
+ private func mimeType(forExtension fileExtension: String) -> String? {
2340
+ let lower = fileExtension.lowercased()
2341
+ switch lower {
2342
+ case "jpg", "jpeg": return "image/jpeg"
2343
+ case "png": return "image/png"
2344
+ case "gif": return "image/gif"
2345
+ case "webp": return "image/webp"
2346
+ case "bmp": return "image/bmp"
2347
+ case "heic": return "image/heic"
2348
+ case "heif": return "image/heif"
2349
+ case "mp4": return "video/mp4"
2350
+ case "mov": return "video/quicktime"
2351
+ default: return nil
2352
+ }
2353
+ }
2354
+
2169
2355
  private func isImageURL(_ url: URL) -> Bool {
2170
2356
  let lowercasedPath = url.path.lowercased()
2171
2357
  return lowercasedPath.hasSuffix(".png") ||
@@ -2359,9 +2545,38 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2359
2545
  let uri = mediaAttachment["uri"] as? String {
2360
2546
  let width = (mediaAttachment["width"] as? NSNumber).map { CGFloat(truncating: $0) }
2361
2547
  let height = (mediaAttachment["height"] as? NSNumber).map { CGFloat(truncating: $0) }
2362
- let alt = mediaAttachment["alt"] as? String ?? "Selected image"
2548
+ var normalizedMediaAttachment = createMediaAttachmentInfoFromUri(uri)
2363
2549
 
2364
- attributedString.append(createMediaAttachmentAttributedString(uri: uri, image: nil, width: width, height: height, alt: alt))
2550
+ if let kind = mediaAttachment["kind"] as? String {
2551
+ normalizedMediaAttachment["kind"] = kind
2552
+ }
2553
+ if let sourceUri = mediaAttachment["sourceUri"] as? String, !sourceUri.isEmpty {
2554
+ normalizedMediaAttachment["sourceUri"] = sourceUri
2555
+ }
2556
+ if let alt = mediaAttachment["alt"] as? String, !alt.isEmpty {
2557
+ normalizedMediaAttachment["alt"] = alt
2558
+ }
2559
+ if let fileName = mediaAttachment["fileName"] as? String, !fileName.isEmpty {
2560
+ normalizedMediaAttachment["fileName"] = fileName
2561
+ }
2562
+ if let fileExtension = mediaAttachment["extension"] as? String, !fileExtension.isEmpty {
2563
+ normalizedMediaAttachment["extension"] = fileExtension
2564
+ }
2565
+ if let contentType = mediaAttachment["contentType"] as? String, !contentType.isEmpty {
2566
+ normalizedMediaAttachment["contentType"] = contentType
2567
+ }
2568
+ if let fileSize = numberValue(mediaAttachment["fileSize"]) {
2569
+ normalizedMediaAttachment["fileSize"] = fileSize
2570
+ }
2571
+
2572
+ attributedString.append(
2573
+ createMediaAttachmentAttributedString(
2574
+ mediaAttachment: normalizedMediaAttachment,
2575
+ image: nil,
2576
+ width: width,
2577
+ height: height
2578
+ )
2579
+ )
2365
2580
 
2366
2581
  if blockIndex < blocks.count - 1 {
2367
2582
  attributedString.append(NSAttributedString(string: "\n", attributes: [
@@ -2583,10 +2798,16 @@ class RichTextEditorView: UIView, UITextViewDelegate, PHPickerViewControllerDele
2583
2798
  }
2584
2799
 
2585
2800
  func insertMediaAttachment(uri: String) {
2586
- let safeUri = uri.trimmingCharacters(in: .whitespacesAndNewlines)
2587
- guard !safeUri.isEmpty else { return }
2588
- let image = loadImageFromUri(safeUri)
2589
- insertMediaAttachmentBlock(uri: safeUri, image: image)
2801
+ let safePayload = uri.trimmingCharacters(in: .whitespacesAndNewlines)
2802
+ guard !safePayload.isEmpty,
2803
+ let mediaAttachment = parseMediaAttachmentPayload(safePayload),
2804
+ let mediaUri = mediaAttachment["uri"] as? String,
2805
+ !mediaUri.isEmpty else {
2806
+ return
2807
+ }
2808
+
2809
+ let image = loadImageFromUri(mediaUri)
2810
+ insertMediaAttachmentBlock(mediaAttachment: mediaAttachment, image: image)
2590
2811
  }
2591
2812
 
2592
2813
  func undo() {
@@ -4,6 +4,7 @@
4
4
 
5
5
  RCT_EXPORT_VIEW_PROPERTY(placeholder, NSString)
6
6
  RCT_EXPORT_VIEW_PROPERTY(editable, BOOL)
7
+ RCT_EXPORT_VIEW_PROPERTY(selectable, BOOL)
7
8
  RCT_EXPORT_VIEW_PROPERTY(maxHeight, CGFloat)
8
9
  RCT_EXPORT_VIEW_PROPERTY(numberOfLines, NSInteger)
9
10
  RCT_EXPORT_VIEW_PROPERTY(showToolbar, BOOL)
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","COMPONENT_NAME","hasNativeComponent","UIManager","getViewManagerConfig","RichTextEditorViewNative","requireNativeComponent","_default","exports","default"],"sourceRoot":"../../src","sources":["RichTextEditorViewNativeComponent.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAoEA,MAAMC,cAAc,GAAG,oBAAoB;;AAE3C;AACA,MAAMC,kBAAkB,GAAGC,sBAAS,CAACC,oBAAoB,CAACH,cAAc,CAAC,IAAI,IAAI;AAEjF,IAAII,wBAAoD;AAExD,IAAIH,kBAAkB,EAAE;EACtBG,wBAAwB,GAAG,IAAAC,mCAAsB,EAC/CL,cACF,CAA+B;AACjC,CAAC,MAAM;EACLI,wBAAwB,GAAIA,CAAA,KAAM,IAAY;AAChD;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcJ,wBAAwB","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","COMPONENT_NAME","hasNativeComponent","UIManager","getViewManagerConfig","RichTextEditorViewNative","requireNativeComponent","_default","exports","default"],"sourceRoot":"../../src","sources":["RichTextEditorViewNativeComponent.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAqEA,MAAMC,cAAc,GAAG,oBAAoB;;AAE3C;AACA,MAAMC,kBAAkB,GAAGC,sBAAS,CAACC,oBAAoB,CAACH,cAAc,CAAC,IAAI,IAAI;AAEjF,IAAII,wBAAoD;AAExD,IAAIH,kBAAkB,EAAE;EACtBG,wBAAwB,GAAG,IAAAC,mCAAsB,EAC/CL,cACF,CAA+B;AACjC,CAAC,MAAM;EACLI,wBAAwB,GAAIA,CAAA,KAAM,IAAY;AAChD;AAAC,IAAAE,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcJ,wBAAwB","ignoreList":[]}
@@ -33,10 +33,16 @@ const RichTextEditor = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
33
33
  if (commandId == null) return;
34
34
  _reactNative.UIManager.dispatchViewManagerCommand(nativeTag, commandId, args);
35
35
  }, []);
36
- const dispatchInsertMediaAttachment = _react.default.useCallback(uri => {
37
- if (typeof uri !== "string" || uri.trim().length === 0) return;
36
+ const dispatchInsertMediaAttachment = _react.default.useCallback(mediaAttachment => {
37
+ if (!mediaAttachment || typeof mediaAttachment !== "object" || typeof mediaAttachment.uri !== "string" || mediaAttachment.uri.trim().length === 0) {
38
+ return;
39
+ }
40
+ const normalizedMediaAttachment = {
41
+ ...mediaAttachment,
42
+ sourceUri: mediaAttachment.sourceUri ?? mediaAttachment.uri
43
+ };
38
44
  if (_reactNative.Platform.OS === "android") {
39
- dispatchAndroidCommand("insertMediaAttachment", [uri]);
45
+ dispatchAndroidCommand("insertMediaAttachment", [JSON.stringify(normalizedMediaAttachment)]);
40
46
  return;
41
47
  }
42
48
  if (_reactNative.Platform.OS === "ios") {
@@ -44,7 +50,7 @@ const RichTextEditor = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
44
50
  if (nativeTag == null) return;
45
51
  const manager = _reactNative.NativeModules ? _reactNative.NativeModules["RichTextEditorViewManager"] : null;
46
52
  if (manager && typeof manager === "object" && typeof manager.insertMediaAttachment === "function") {
47
- manager.insertMediaAttachment(nativeTag, uri);
53
+ manager.insertMediaAttachment(nativeTag, JSON.stringify(normalizedMediaAttachment));
48
54
  }
49
55
  }
50
56
  }, [dispatchAndroidCommand]);
@@ -105,9 +111,7 @@ const RichTextEditor = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
105
111
  /* Native toolbar handles this */
106
112
  },
107
113
  insertMediaAttachment: mediaAttachment => {
108
- if (mediaAttachment && typeof mediaAttachment === "object" && typeof mediaAttachment.uri === "string") {
109
- dispatchInsertMediaAttachment(mediaAttachment.uri);
110
- }
114
+ dispatchInsertMediaAttachment(mediaAttachment);
111
115
  },
112
116
  undo: () => {
113
117
  /* Native toolbar handles this */
@@ -186,6 +190,7 @@ const RichTextEditor = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
186
190
  placeholder: props.placeholder,
187
191
  initialContentJson: props.initialContent ? JSON.stringify(props.initialContent) : undefined,
188
192
  editable: props.readOnly !== undefined ? !props.readOnly : true,
193
+ selectable: props.selectable ?? true,
189
194
  maxHeight: props.maxHeight,
190
195
  numberOfLines: props.numberOfLines,
191
196
  showToolbar: props.readOnly ? false : props.showToolbar ?? true,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_RichTextEditorViewNativeComponent","_types","e","__esModule","default","RichTextEditor","React","forwardRef","props","ref","nativeRef","useRef","height","setHeight","useState","handleSizeChange","useCallback","event","newHeight","nativeEvent","dispatchAndroidCommand","commandName","args","Platform","OS","nativeTag","findNodeHandle","current","commandConfig","UIManager","getViewManagerConfig","Commands","commandId","dispatchViewManagerCommand","dispatchInsertMediaAttachment","uri","trim","length","manager","NativeModules","insertMediaAttachment","useImperativeHandle","setContent","_blocks","getText","getBlocks","clear","focus","blur","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleCode","toggleHighlight","_color","setHeading","setBulletList","setNumberedList","setQuote","setChecklist","setParagraph","insertLink","_url","_text","mediaAttachment","undo","redo","clearFormatting","indent","outdent","setAlignment","_alignment","toggleChecklistItem","handleContentChange","blocks","blocksJson","JSON","parse","contentEvent","text","delta","onContentChange","handleSelectionChange","selectionEvent","start","end","onSelectionChange","handleFocus","onFocus","handleBlur","onBlur","handleActiveStylesChange","onActiveStylesChange","combinedStyle","StyleSheet","flatten","style","createElement","placeholder","initialContentJson","initialContent","stringify","undefined","editable","readOnly","maxHeight","numberOfLines","showToolbar","toolbarOptions","variant","fontFamily","fontSize","onEditorFocus","onEditorBlur","onSizeChange","displayName","_default","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_RichTextEditorViewNativeComponent","_types","e","__esModule","default","RichTextEditor","React","forwardRef","props","ref","nativeRef","useRef","height","setHeight","useState","handleSizeChange","useCallback","event","newHeight","nativeEvent","dispatchAndroidCommand","commandName","args","Platform","OS","nativeTag","findNodeHandle","current","commandConfig","UIManager","getViewManagerConfig","Commands","commandId","dispatchViewManagerCommand","dispatchInsertMediaAttachment","mediaAttachment","uri","trim","length","normalizedMediaAttachment","sourceUri","JSON","stringify","manager","NativeModules","insertMediaAttachment","useImperativeHandle","setContent","_blocks","getText","getBlocks","clear","focus","blur","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleCode","toggleHighlight","_color","setHeading","setBulletList","setNumberedList","setQuote","setChecklist","setParagraph","insertLink","_url","_text","undo","redo","clearFormatting","indent","outdent","setAlignment","_alignment","toggleChecklistItem","handleContentChange","blocks","blocksJson","parse","contentEvent","text","delta","onContentChange","handleSelectionChange","selectionEvent","start","end","onSelectionChange","handleFocus","onFocus","handleBlur","onBlur","handleActiveStylesChange","onActiveStylesChange","combinedStyle","StyleSheet","flatten","style","createElement","placeholder","initialContentJson","initialContent","undefined","editable","readOnly","selectable","maxHeight","numberOfLines","showToolbar","toolbarOptions","variant","fontFamily","fontSize","onEditorFocus","onEditorBlur","onSizeChange","displayName","_default","exports"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_TOOLBAR_OPTIONS","exports"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AA+FO,MAAMA,uBAAwC,GAAAC,OAAA,CAAAD,uBAAA,GAAG,CACtD,MAAM,EACN,QAAQ,EACR,WAAW,EACX,eAAe,EACf,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,CACb","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_TOOLBAR_OPTIONS","exports"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAqGO,MAAMA,uBAAwC,GAAAC,OAAA,CAAAD,uBAAA,GAAG,CACtD,MAAM,EACN,QAAQ,EACR,WAAW,EACX,eAAe,EACf,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,CACb","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["requireNativeComponent","UIManager","COMPONENT_NAME","hasNativeComponent","getViewManagerConfig","RichTextEditorViewNative"],"sourceRoot":"../../src","sources":["RichTextEditorViewNativeComponent.ts"],"mappings":"AACA,SAASA,sBAAsB,EAAEC,SAAS,QAAQ,cAAc;AAoEhE,MAAMC,cAAc,GAAG,oBAAoB;;AAE3C;AACA,MAAMC,kBAAkB,GAAGF,SAAS,CAACG,oBAAoB,CAACF,cAAc,CAAC,IAAI,IAAI;AAEjF,IAAIG,wBAAoD;AAExD,IAAIF,kBAAkB,EAAE;EACtBE,wBAAwB,GAAGL,sBAAsB,CAC/CE,cACF,CAA+B;AACjC,CAAC,MAAM;EACLG,wBAAwB,GAAIA,CAAA,KAAM,IAAY;AAChD;AAEA,eAAeA,wBAAwB","ignoreList":[]}
1
+ {"version":3,"names":["requireNativeComponent","UIManager","COMPONENT_NAME","hasNativeComponent","getViewManagerConfig","RichTextEditorViewNative"],"sourceRoot":"../../src","sources":["RichTextEditorViewNativeComponent.ts"],"mappings":"AACA,SAASA,sBAAsB,EAAEC,SAAS,QAAQ,cAAc;AAqEhE,MAAMC,cAAc,GAAG,oBAAoB;;AAE3C;AACA,MAAMC,kBAAkB,GAAGF,SAAS,CAACG,oBAAoB,CAACF,cAAc,CAAC,IAAI,IAAI;AAEjF,IAAIG,wBAAoD;AAExD,IAAIF,kBAAkB,EAAE;EACtBE,wBAAwB,GAAGL,sBAAsB,CAC/CE,cACF,CAA+B;AACjC,CAAC,MAAM;EACLG,wBAAwB,GAAIA,CAAA,KAAM,IAAY;AAChD;AAEA,eAAeA,wBAAwB","ignoreList":[]}
@@ -19,10 +19,16 @@ const RichTextEditor = /*#__PURE__*/React.forwardRef((props, ref) => {
19
19
  if (commandId == null) return;
20
20
  UIManager.dispatchViewManagerCommand(nativeTag, commandId, args);
21
21
  }, []);
22
- const dispatchInsertMediaAttachment = React.useCallback(uri => {
23
- if (typeof uri !== "string" || uri.trim().length === 0) return;
22
+ const dispatchInsertMediaAttachment = React.useCallback(mediaAttachment => {
23
+ if (!mediaAttachment || typeof mediaAttachment !== "object" || typeof mediaAttachment.uri !== "string" || mediaAttachment.uri.trim().length === 0) {
24
+ return;
25
+ }
26
+ const normalizedMediaAttachment = {
27
+ ...mediaAttachment,
28
+ sourceUri: mediaAttachment.sourceUri ?? mediaAttachment.uri
29
+ };
24
30
  if (Platform.OS === "android") {
25
- dispatchAndroidCommand("insertMediaAttachment", [uri]);
31
+ dispatchAndroidCommand("insertMediaAttachment", [JSON.stringify(normalizedMediaAttachment)]);
26
32
  return;
27
33
  }
28
34
  if (Platform.OS === "ios") {
@@ -30,7 +36,7 @@ const RichTextEditor = /*#__PURE__*/React.forwardRef((props, ref) => {
30
36
  if (nativeTag == null) return;
31
37
  const manager = NativeModules ? NativeModules["RichTextEditorViewManager"] : null;
32
38
  if (manager && typeof manager === "object" && typeof manager.insertMediaAttachment === "function") {
33
- manager.insertMediaAttachment(nativeTag, uri);
39
+ manager.insertMediaAttachment(nativeTag, JSON.stringify(normalizedMediaAttachment));
34
40
  }
35
41
  }
36
42
  }, [dispatchAndroidCommand]);
@@ -91,9 +97,7 @@ const RichTextEditor = /*#__PURE__*/React.forwardRef((props, ref) => {
91
97
  /* Native toolbar handles this */
92
98
  },
93
99
  insertMediaAttachment: mediaAttachment => {
94
- if (mediaAttachment && typeof mediaAttachment === "object" && typeof mediaAttachment.uri === "string") {
95
- dispatchInsertMediaAttachment(mediaAttachment.uri);
96
- }
100
+ dispatchInsertMediaAttachment(mediaAttachment);
97
101
  },
98
102
  undo: () => {
99
103
  /* Native toolbar handles this */
@@ -172,6 +176,7 @@ const RichTextEditor = /*#__PURE__*/React.forwardRef((props, ref) => {
172
176
  placeholder: props.placeholder,
173
177
  initialContentJson: props.initialContent ? JSON.stringify(props.initialContent) : undefined,
174
178
  editable: props.readOnly !== undefined ? !props.readOnly : true,
179
+ selectable: props.selectable ?? true,
175
180
  maxHeight: props.maxHeight,
176
181
  numberOfLines: props.numberOfLines,
177
182
  showToolbar: props.readOnly ? false : props.showToolbar ?? true,
@@ -1 +1 @@
1
- {"version":3,"names":["React","findNodeHandle","NativeModules","Platform","StyleSheet","UIManager","RichTextEditorViewNative","RichTextEditor","forwardRef","props","ref","nativeRef","useRef","height","setHeight","useState","handleSizeChange","useCallback","event","newHeight","nativeEvent","dispatchAndroidCommand","commandName","args","OS","nativeTag","current","commandConfig","getViewManagerConfig","Commands","commandId","dispatchViewManagerCommand","dispatchInsertMediaAttachment","uri","trim","length","manager","insertMediaAttachment","useImperativeHandle","setContent","_blocks","getText","getBlocks","clear","focus","blur","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleCode","toggleHighlight","_color","setHeading","setBulletList","setNumberedList","setQuote","setChecklist","setParagraph","insertLink","_url","_text","mediaAttachment","undo","redo","clearFormatting","indent","outdent","setAlignment","_alignment","toggleChecklistItem","handleContentChange","blocks","blocksJson","JSON","parse","contentEvent","text","delta","onContentChange","handleSelectionChange","selectionEvent","start","end","onSelectionChange","handleFocus","onFocus","handleBlur","onBlur","handleActiveStylesChange","onActiveStylesChange","combinedStyle","flatten","style","createElement","placeholder","initialContentJson","initialContent","stringify","undefined","editable","readOnly","maxHeight","numberOfLines","showToolbar","toolbarOptions","variant","fontFamily","fontSize","onEditorFocus","onEditorBlur","onSizeChange","displayName","DEFAULT_TOOLBAR_OPTIONS"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","findNodeHandle","NativeModules","Platform","StyleSheet","UIManager","RichTextEditorViewNative","RichTextEditor","forwardRef","props","ref","nativeRef","useRef","height","setHeight","useState","handleSizeChange","useCallback","event","newHeight","nativeEvent","dispatchAndroidCommand","commandName","args","OS","nativeTag","current","commandConfig","getViewManagerConfig","Commands","commandId","dispatchViewManagerCommand","dispatchInsertMediaAttachment","mediaAttachment","uri","trim","length","normalizedMediaAttachment","sourceUri","JSON","stringify","manager","insertMediaAttachment","useImperativeHandle","setContent","_blocks","getText","getBlocks","clear","focus","blur","toggleBold","toggleItalic","toggleUnderline","toggleStrikethrough","toggleCode","toggleHighlight","_color","setHeading","setBulletList","setNumberedList","setQuote","setChecklist","setParagraph","insertLink","_url","_text","undo","redo","clearFormatting","indent","outdent","setAlignment","_alignment","toggleChecklistItem","handleContentChange","blocks","blocksJson","parse","contentEvent","text","delta","onContentChange","handleSelectionChange","selectionEvent","start","end","onSelectionChange","handleFocus","onFocus","handleBlur","onBlur","handleActiveStylesChange","onActiveStylesChange","combinedStyle","flatten","style","createElement","placeholder","initialContentJson","initialContent","undefined","editable","readOnly","selectable","maxHeight","numberOfLines","showToolbar","toolbarOptions","variant","fontFamily","fontSize","onEditorFocus","onEditorBlur","onSizeChange","displayName","DEFAULT_TOOLBAR_OPTIONS"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_TOOLBAR_OPTIONS"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"AA+FA,OAAO,MAAMA,uBAAwC,GAAG,CACtD,MAAM,EACN,QAAQ,EACR,WAAW,EACX,eAAe,EACf,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,CACb","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_TOOLBAR_OPTIONS"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"AAqGA,OAAO,MAAMA,uBAAwC,GAAG,CACtD,MAAM,EACN,QAAQ,EACR,WAAW,EACX,eAAe,EACf,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,QAAQ,EACR,SAAS,EACT,WAAW,EACX,aAAa,EACb,YAAY,CACb","ignoreList":[]}
@@ -43,6 +43,7 @@ type ActiveStylesEventData = Readonly<{
43
43
  export interface NativeProps extends ViewProps {
44
44
  placeholder?: string;
45
45
  editable?: boolean;
46
+ selectable?: boolean;
46
47
  maxHeight?: Double;
47
48
  numberOfLines?: Int32;
48
49
  showToolbar?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextEditorViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/RichTextEditorViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,KAAK,MAAM,GAAG,MAAM,CAAC;AACrB,KAAK,KAAK,GAAG,MAAM,CAAC;AACpB,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,CAAC,CAAA;CAAE,KAAK,IAAI,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC,CAAC;AAEH,KAAK,sBAAsB,GAAG,QAAQ,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,KAAK,wBAAwB,GAAG,QAAQ,CAAC;IACvC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;CACZ,CAAC,CAAC;AAEH,KAAK,mBAAmB,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,eAAe,CAAC,EAAE,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;IACjE,aAAa,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,YAAY,CAAC,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACvD,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;CAClE;AAOD,QAAA,IAAI,wBAAwB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;AAUzD,eAAe,wBAAwB,CAAC"}
1
+ {"version":3,"file":"RichTextEditorViewNativeComponent.d.ts","sourceRoot":"","sources":["../../../src/RichTextEditorViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7D,KAAK,MAAM,GAAG,MAAM,CAAC;AACrB,KAAK,KAAK,GAAG,MAAM,CAAC;AACpB,KAAK,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,CAAC,CAAA;CAAE,KAAK,IAAI,CAAC;AAEjE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,KAAK,CAAC;CACrB,CAAC,CAAC;AAEH,KAAK,sBAAsB,GAAG,QAAQ,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAAC;AAEH,KAAK,wBAAwB,GAAG,QAAQ,CAAC;IACvC,KAAK,EAAE,KAAK,CAAC;IACb,GAAG,EAAE,KAAK,CAAC;CACZ,CAAC,CAAC;AAEH,KAAK,mBAAmB,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,KAAK,qBAAqB,GAAG,QAAQ,CAAC;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,eAAe,CAAC,EAAE,kBAAkB,CAAC,sBAAsB,CAAC,CAAC;IAC7D,iBAAiB,CAAC,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;IACjE,aAAa,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,YAAY,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,YAAY,CAAC,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACvD,oBAAoB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;CAClE;AAOD,QAAA,IAAI,wBAAwB,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;AAUzD,eAAe,wBAAwB,CAAC"}
@@ -16,5 +16,5 @@ export interface RichTextEditorPropsExtended extends RichTextEditorProps {
16
16
  declare const RichTextEditor: React.ForwardRefExoticComponent<RichTextEditorPropsExtended & React.RefAttributes<RichTextEditorRef>>;
17
17
  export default RichTextEditor;
18
18
  export { DEFAULT_TOOLBAR_OPTIONS } from "./types";
19
- export type { Block, BlockType, StyleRange, MediaAttachment, TextAlignment, EditorVariant, ContentChangeEvent, SelectionChangeEvent, RichTextEditorRef, RichTextEditorProps, ToolbarOption, ContentDelta, DeltaType, } from "./types";
19
+ export type { Block, BlockType, StyleRange, MediaKind, MediaAttachment, TextAlignment, EditorVariant, ContentChangeEvent, SelectionChangeEvent, RichTextEditorRef, RichTextEditorProps, ToolbarOption, ContentDelta, DeltaType, } from "./types";
20
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAMV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AASjB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5D;AAED,QAAA,MAAM,cAAc,uGAoPlB,CAAC;AAIH,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAClD,YAAY,EACV,KAAK,EACL,SAAS,EACT,UAAU,EACV,eAAe,EACf,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,SAAS,GACV,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,KAAK,EAMV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,SAAS,CAAC;AASjB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,2BAA4B,SAAQ,mBAAmB;IACtE,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5D;AAED,QAAA,MAAM,cAAc,uGAgQlB,CAAC;AAIH,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAClD,YAAY,EACV,KAAK,EACL,SAAS,EACT,UAAU,EACV,SAAS,EACT,eAAe,EACf,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,SAAS,GACV,MAAM,SAAS,CAAC"}
@@ -9,9 +9,15 @@ export interface StyleRange {
9
9
  export type BlockType = "paragraph" | "bullet" | "numbered" | "heading" | "quote" | "checklist" | "mediaAttachment";
10
10
  export type TextAlignment = "left" | "center" | "right";
11
11
  export type EditorVariant = "outlined" | "flat" | "plain";
12
+ export type MediaKind = "image" | "video";
12
13
  export interface MediaAttachment {
13
- kind: "image";
14
+ kind: MediaKind;
14
15
  uri: string;
16
+ sourceUri?: string;
17
+ fileName?: string;
18
+ extension?: string;
19
+ contentType?: string;
20
+ fileSize?: number;
15
21
  width?: number;
16
22
  height?: number;
17
23
  alt?: string;
@@ -54,6 +60,7 @@ export interface RichTextEditorProps {
54
60
  placeholder?: string;
55
61
  initialContent?: Block[];
56
62
  readOnly?: boolean;
63
+ selectable?: boolean;
57
64
  maxHeight?: number;
58
65
  numberOfLines?: number;
59
66
  showToolbar?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chaitrabhairappa/react-native-rich-text-editor",
3
- "version": "3.2.0",
3
+ "version": "3.4.0",
4
4
  "description": "A high-performance native rich text editor for React Native (New Architecture / Fabric only)",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -50,6 +50,7 @@ type ActiveStylesEventData = Readonly<{
50
50
  export interface NativeProps extends ViewProps {
51
51
  placeholder?: string;
52
52
  editable?: boolean;
53
+ selectable?: boolean;
53
54
  maxHeight?: Double;
54
55
  numberOfLines?: Int32;
55
56
  showToolbar?: boolean;
package/src/index.tsx CHANGED
@@ -76,11 +76,25 @@ const RichTextEditor = React.forwardRef<
76
76
  );
77
77
 
78
78
  const dispatchInsertMediaAttachment = React.useCallback(
79
- (uri: string) => {
80
- if (typeof uri !== "string" || uri.trim().length === 0) return;
79
+ (mediaAttachment: MediaAttachment) => {
80
+ if (
81
+ !mediaAttachment ||
82
+ typeof mediaAttachment !== "object" ||
83
+ typeof mediaAttachment.uri !== "string" ||
84
+ mediaAttachment.uri.trim().length === 0
85
+ ) {
86
+ return;
87
+ }
88
+
89
+ const normalizedMediaAttachment: MediaAttachment = {
90
+ ...mediaAttachment,
91
+ sourceUri: mediaAttachment.sourceUri ?? mediaAttachment.uri,
92
+ };
81
93
 
82
94
  if (Platform.OS === "android") {
83
- dispatchAndroidCommand("insertMediaAttachment", [uri]);
95
+ dispatchAndroidCommand("insertMediaAttachment", [
96
+ JSON.stringify(normalizedMediaAttachment),
97
+ ]);
84
98
  return;
85
99
  }
86
100
 
@@ -104,7 +118,10 @@ const RichTextEditor = React.forwardRef<
104
118
  manager as {
105
119
  insertMediaAttachment: (tag: number, value: string) => void;
106
120
  }
107
- ).insertMediaAttachment(nativeTag, uri);
121
+ ).insertMediaAttachment(
122
+ nativeTag,
123
+ JSON.stringify(normalizedMediaAttachment),
124
+ );
108
125
  }
109
126
  }
110
127
  },
@@ -169,13 +186,7 @@ const RichTextEditor = React.forwardRef<
169
186
  /* Native toolbar handles this */
170
187
  },
171
188
  insertMediaAttachment: (mediaAttachment: MediaAttachment) => {
172
- if (
173
- mediaAttachment &&
174
- typeof mediaAttachment === "object" &&
175
- typeof mediaAttachment.uri === "string"
176
- ) {
177
- dispatchInsertMediaAttachment(mediaAttachment.uri);
178
- }
189
+ dispatchInsertMediaAttachment(mediaAttachment);
179
190
  },
180
191
  undo: () => {
181
192
  /* Native toolbar handles this */
@@ -271,6 +282,7 @@ const RichTextEditor = React.forwardRef<
271
282
  props.initialContent ? JSON.stringify(props.initialContent) : undefined
272
283
  }
273
284
  editable={props.readOnly !== undefined ? !props.readOnly : true}
285
+ selectable={props.selectable ?? true}
274
286
  maxHeight={props.maxHeight}
275
287
  numberOfLines={props.numberOfLines}
276
288
  showToolbar={props.readOnly ? false : (props.showToolbar ?? true)}
@@ -296,6 +308,7 @@ export type {
296
308
  Block,
297
309
  BlockType,
298
310
  StyleRange,
311
+ MediaKind,
299
312
  MediaAttachment,
300
313
  TextAlignment,
301
314
  EditorVariant,
package/src/types.ts CHANGED
@@ -25,10 +25,16 @@ export type BlockType =
25
25
  | "mediaAttachment";
26
26
  export type TextAlignment = "left" | "center" | "right";
27
27
  export type EditorVariant = "outlined" | "flat" | "plain";
28
+ export type MediaKind = "image" | "video";
28
29
 
29
30
  export interface MediaAttachment {
30
- kind: "image";
31
+ kind: MediaKind;
31
32
  uri: string;
33
+ sourceUri?: string;
34
+ fileName?: string;
35
+ extension?: string;
36
+ contentType?: string;
37
+ fileSize?: number;
32
38
  width?: number;
33
39
  height?: number;
34
40
  alt?: string;
@@ -122,6 +128,7 @@ export interface RichTextEditorProps {
122
128
  placeholder?: string;
123
129
  initialContent?: Block[];
124
130
  readOnly?: boolean;
131
+ selectable?: boolean;
125
132
  maxHeight?: number;
126
133
  numberOfLines?: number;
127
134
  showToolbar?: boolean;