react-native-enriched 0.3.0 → 0.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.
Files changed (202) hide show
  1. package/README.md +6 -4
  2. package/android/build.gradle +3 -3
  3. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +3 -0
  4. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +1 -0
  5. package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.cpp +1 -1
  6. package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.h +1 -1
  7. package/{ios/generated/RNEnrichedTextInputViewSpec → android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec}/EventEmitters.cpp +31 -29
  8. package/{ios/generated/RNEnrichedTextInputViewSpec → android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec}/EventEmitters.h +22 -25
  9. package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.h +57 -0
  10. package/android/gradle.properties +5 -5
  11. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewPackage.kt → ReactNativeEnrichedPackage.kt} +3 -2
  12. package/android/src/main/java/com/swmansion/enriched/{utils → common}/AsyncDrawable.kt +40 -8
  13. package/android/src/main/java/com/swmansion/enriched/common/CheckboxDrawable.kt +81 -0
  14. package/android/src/main/java/com/swmansion/enriched/{utils → common}/EnrichedConstants.kt +1 -1
  15. package/android/src/main/java/com/swmansion/enriched/common/EnrichedStyle.kt +57 -0
  16. package/android/src/main/java/com/swmansion/enriched/{spans/utils → common}/ForceRedrawSpan.kt +1 -1
  17. package/android/src/main/java/com/swmansion/enriched/common/MentionStyle.kt +7 -0
  18. package/android/src/main/java/com/swmansion/enriched/{utils → common}/ResourceManager.kt +1 -1
  19. package/android/src/main/java/com/swmansion/enriched/{utils → common/parser}/EnrichedParser.java +126 -99
  20. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +79 -0
  21. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedBlockQuoteSpan.kt +9 -13
  22. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBoldSpan.kt +12 -0
  23. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCheckboxListSpan.kt +91 -0
  24. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedCodeBlockSpan.kt +8 -12
  25. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH1Span.kt +20 -0
  26. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH2Span.kt +20 -0
  27. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH3Span.kt +20 -0
  28. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH4Span.kt +21 -0
  29. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH5Span.kt +20 -0
  30. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH6Span.kt +20 -0
  31. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedImageSpan.kt +43 -38
  32. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedInlineCodeSpan.kt +7 -11
  33. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedItalicSpan.kt +12 -0
  34. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedLinkSpan.kt +7 -11
  35. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedMentionSpan.kt +6 -10
  36. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedOrderedListSpan.kt +12 -21
  37. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedStrikeThroughSpan.kt +11 -0
  38. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnderlineSpan.kt +11 -0
  39. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedUnorderedListSpan.kt +9 -13
  40. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/interfaces/EnrichedBlockSpan.kt +1 -1
  41. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/interfaces/EnrichedHeadingSpan.kt +1 -1
  42. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedInlineSpan.kt +3 -0
  43. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/interfaces/EnrichedParagraphSpan.kt +1 -1
  44. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedSpan.kt +3 -0
  45. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/interfaces/EnrichedZeroWidthSpaceSpan.kt +1 -1
  46. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputConnectionWrapper.kt → textinput/EnrichedTextInputConnectionWrapper.kt} +2 -2
  47. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +83 -0
  48. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputView.kt → textinput/EnrichedTextInputView.kt} +87 -51
  49. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewLayoutManager.kt → textinput/EnrichedTextInputViewLayoutManager.kt} +1 -1
  50. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewManager.kt → textinput/EnrichedTextInputViewManager.kt} +24 -17
  51. package/android/src/main/java/com/swmansion/enriched/{MeasurementStore.kt → textinput/MeasurementStore.kt} +5 -4
  52. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/MentionHandler.kt +2 -2
  53. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnChangeHtmlEvent.kt +1 -1
  54. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnChangeSelectionEvent.kt +1 -1
  55. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnChangeStateEvent.kt +1 -1
  56. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnChangeTextEvent.kt +2 -2
  57. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnInputBlurEvent.kt +1 -1
  58. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnInputFocusEvent.kt +1 -1
  59. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnInputKeyPressEvent.kt +1 -1
  60. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnLinkDetectedEvent.kt +1 -1
  61. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnMentionDetectedEvent.kt +1 -1
  62. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnMentionEvent.kt +1 -1
  63. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnPasteImagesEvent.kt +47 -0
  64. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnRequestHtmlResultEvent.kt +1 -1
  65. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt +14 -0
  66. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBoldSpan.kt +14 -0
  67. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCheckboxListSpan.kt +15 -0
  68. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt +14 -0
  69. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH1Span.kt +14 -0
  70. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH2Span.kt +14 -0
  71. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH3Span.kt +14 -0
  72. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH4Span.kt +14 -0
  73. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH5Span.kt +14 -0
  74. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH6Span.kt +14 -0
  75. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt +36 -0
  76. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt +14 -0
  77. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt +14 -0
  78. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputLinkSpan.kt +15 -0
  79. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt +18 -0
  80. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt +21 -0
  81. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputStrikeThroughSpan.kt +14 -0
  82. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt +14 -0
  83. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnorderedListSpan.kt +14 -0
  84. package/android/src/main/java/com/swmansion/enriched/{spans → textinput/spans}/EnrichedSpans.kt +39 -30
  85. package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt +10 -0
  86. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/HtmlStyle.kt +58 -43
  87. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/InlineStyles.kt +4 -4
  88. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/ListStyles.kt +77 -26
  89. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/ParagraphStyles.kt +11 -11
  90. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/ParametrizedStyles.kt +19 -19
  91. package/android/src/main/java/com/swmansion/enriched/{utils → textinput/utils}/EnrichedEditableFactory.kt +2 -2
  92. package/android/src/main/java/com/swmansion/enriched/{utils → textinput/utils}/EnrichedSelection.kt +15 -14
  93. package/android/src/main/java/com/swmansion/enriched/{utils → textinput/utils}/EnrichedSpanState.kt +15 -50
  94. package/android/src/main/java/com/swmansion/enriched/{utils → textinput/utils}/EnrichedSpannable.kt +3 -3
  95. package/android/src/main/java/com/swmansion/enriched/{utils → textinput/utils}/EnrichedSpannableStringBuilder.kt +2 -1
  96. package/android/src/main/java/com/swmansion/enriched/textinput/utils/RichContentReceiver.kt +127 -0
  97. package/android/src/main/java/com/swmansion/enriched/textinput/utils/Utils.kt +106 -0
  98. package/android/src/main/java/com/swmansion/enriched/{watchers → textinput/watchers}/EnrichedSpanWatcher.kt +10 -10
  99. package/android/src/main/java/com/swmansion/enriched/{watchers → textinput/watchers}/EnrichedTextWatcher.kt +3 -3
  100. package/android/src/main/new_arch/CMakeLists.txt +1 -1
  101. package/android/src/main/new_arch/ReactNativeEnrichedSpec.cpp +11 -0
  102. package/android/src/main/new_arch/ReactNativeEnrichedSpec.h +15 -0
  103. package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputMeasurementManager.h +1 -1
  104. package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputShadowNode.h +2 -2
  105. package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/conversions.h +1 -1
  106. package/ios/EnrichedTextInputView.h +1 -0
  107. package/ios/EnrichedTextInputView.mm +266 -55
  108. package/ios/config/InputConfig.h +10 -0
  109. package/ios/config/InputConfig.mm +119 -0
  110. package/ios/extensions/ImageExtension.h +35 -0
  111. package/ios/extensions/ImageExtension.mm +156 -0
  112. package/ios/extensions/LayoutManagerExtension.mm +115 -95
  113. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.cpp +1 -1
  114. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.h +1 -1
  115. package/{android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec → ios/generated/ReactNativeEnrichedSpec}/EventEmitters.cpp +31 -29
  116. package/{android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec → ios/generated/ReactNativeEnrichedSpec}/EventEmitters.h +22 -25
  117. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.h +57 -0
  118. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/RCTComponentViewHelpers.h +21 -0
  119. package/ios/inputParser/InputParser.mm +135 -8
  120. package/ios/inputTextView/InputTextView.mm +118 -0
  121. package/ios/interfaces/ImageAttachment.h +1 -0
  122. package/ios/interfaces/ImageAttachment.mm +14 -4
  123. package/ios/interfaces/StyleHeaders.h +13 -2
  124. package/ios/interfaces/StyleTypeEnum.h +1 -0
  125. package/ios/internals/EnrichedTextInputViewState.cpp +6 -6
  126. package/ios/styles/CheckboxListStyle.mm +321 -0
  127. package/ios/styles/H1Style.mm +3 -0
  128. package/ios/styles/H2Style.mm +3 -0
  129. package/ios/styles/H3Style.mm +3 -0
  130. package/ios/styles/H4Style.mm +3 -0
  131. package/ios/styles/H5Style.mm +3 -0
  132. package/ios/styles/H6Style.mm +3 -0
  133. package/ios/styles/HeadingStyleBase.mm +150 -78
  134. package/ios/utils/CheckboxHitTestUtils.h +10 -0
  135. package/ios/utils/CheckboxHitTestUtils.mm +123 -0
  136. package/ios/utils/ParagraphAttributesUtils.mm +83 -53
  137. package/ios/utils/TextBlockTapGestureRecognizer.h +17 -0
  138. package/ios/utils/TextBlockTapGestureRecognizer.mm +56 -0
  139. package/ios/utils/ZeroWidthSpaceUtils.mm +14 -3
  140. package/lib/module/EnrichedTextInput.js +36 -11
  141. package/lib/module/EnrichedTextInput.js.map +1 -1
  142. package/lib/module/{EnrichedTextInputNativeComponent.ts → spec/EnrichedTextInputNativeComponent.ts} +40 -9
  143. package/lib/module/types.js +4 -0
  144. package/lib/module/types.js.map +1 -0
  145. package/lib/module/utils/normalizeHtmlStyle.js +6 -0
  146. package/lib/module/utils/normalizeHtmlStyle.js.map +1 -1
  147. package/lib/module/utils/nullthrows.js +9 -0
  148. package/lib/module/utils/nullthrows.js.map +1 -0
  149. package/lib/typescript/src/EnrichedTextInput.d.ts +9 -49
  150. package/lib/typescript/src/EnrichedTextInput.d.ts.map +1 -1
  151. package/lib/typescript/src/index.d.ts +2 -1
  152. package/lib/typescript/src/index.d.ts.map +1 -1
  153. package/lib/typescript/src/{EnrichedTextInputNativeComponent.d.ts → spec/EnrichedTextInputNativeComponent.d.ts} +33 -8
  154. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts.map +1 -0
  155. package/lib/typescript/src/types.d.ts +58 -0
  156. package/lib/typescript/src/types.d.ts.map +1 -0
  157. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +2 -2
  158. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -1
  159. package/lib/typescript/src/utils/nullthrows.d.ts +2 -0
  160. package/lib/typescript/src/utils/nullthrows.d.ts.map +1 -0
  161. package/lib/typescript/src/utils/regexParser.d.ts +1 -1
  162. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -1
  163. package/package.json +4 -4
  164. package/src/EnrichedTextInput.tsx +49 -62
  165. package/src/index.tsx +3 -1
  166. package/src/{EnrichedTextInputNativeComponent.ts → spec/EnrichedTextInputNativeComponent.ts} +40 -9
  167. package/src/types.ts +59 -0
  168. package/src/utils/normalizeHtmlStyle.ts +8 -5
  169. package/src/utils/nullthrows.ts +7 -0
  170. package/src/utils/regexParser.ts +1 -1
  171. package/android/src/main/java/com/swmansion/enriched/events/OnChangeStateDeprecatedEvent.kt +0 -21
  172. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBoldSpan.kt +0 -17
  173. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH1Span.kt +0 -24
  174. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH2Span.kt +0 -24
  175. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH3Span.kt +0 -24
  176. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH4Span.kt +0 -24
  177. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH5Span.kt +0 -24
  178. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH6Span.kt +0 -24
  179. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedItalicSpan.kt +0 -16
  180. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedStrikeThroughSpan.kt +0 -15
  181. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedUnderlineSpan.kt +0 -15
  182. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedInlineSpan.kt +0 -3
  183. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedSpan.kt +0 -9
  184. package/android/src/main/java/com/swmansion/enriched/utils/Utils.kt +0 -21
  185. package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.cpp +0 -22
  186. package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.h +0 -26
  187. package/lib/typescript/src/EnrichedTextInputNativeComponent.d.ts.map +0 -1
  188. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.cpp +0 -0
  189. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.cpp +0 -0
  190. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.h +0 -0
  191. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.cpp +0 -0
  192. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.h +0 -0
  193. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputComponentDescriptor.h +0 -0
  194. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputMeasurementManager.cpp +0 -0
  195. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputShadowNode.cpp +0 -0
  196. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputState.cpp +0 -0
  197. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputState.h +0 -0
  198. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.cpp +0 -0
  199. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.cpp +0 -0
  200. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.h +0 -0
  201. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.cpp +0 -0
  202. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.h +0 -0
@@ -1,4 +1,4 @@
1
- package com.swmansion.enriched.styles
1
+ package com.swmansion.enriched.textinput.styles
2
2
 
3
3
  import android.graphics.Color
4
4
  import com.facebook.react.bridge.ColorPropConverter
@@ -6,63 +6,70 @@ import com.facebook.react.bridge.ReactContext
6
6
  import com.facebook.react.bridge.ReadableMap
7
7
  import com.facebook.react.uimanager.PixelUtil
8
8
  import com.facebook.react.views.text.ReactTypefaceUtils.parseFontWeight
9
- import com.swmansion.enriched.EnrichedTextInputView
9
+ import com.swmansion.enriched.common.EnrichedStyle
10
+ import com.swmansion.enriched.common.MentionStyle
11
+ import com.swmansion.enriched.textinput.EnrichedTextInputView
10
12
  import kotlin.Float
11
13
  import kotlin.Int
12
14
  import kotlin.String
13
15
  import kotlin.math.ceil
14
16
 
15
- class HtmlStyle {
17
+ class HtmlStyle : EnrichedStyle {
16
18
  private var style: ReadableMap? = null
17
19
  private var view: EnrichedTextInputView? = null
18
20
 
19
21
  // Default values are ignored as they are specified on the JS side.
20
22
  // They are specified only because they are required by the constructor.
21
23
  // JS passes them as a prop - so they are initialized after the constructor is called.
22
- var h1FontSize: Int = 72
23
- var h1Bold: Boolean = false
24
+ override var h1FontSize: Int = 72
25
+ override var h1Bold: Boolean = false
24
26
 
25
- var h2FontSize: Int = 64
26
- var h2Bold: Boolean = false
27
+ override var h2FontSize: Int = 64
28
+ override var h2Bold: Boolean = false
27
29
 
28
- var h3FontSize: Int = 56
29
- var h3Bold: Boolean = false
30
+ override var h3FontSize: Int = 56
31
+ override var h3Bold: Boolean = false
30
32
 
31
- var h4FontSize: Int = 48
32
- var h4Bold: Boolean = false
33
+ override var h4FontSize: Int = 48
34
+ override var h4Bold: Boolean = false
33
35
 
34
- var h5FontSize: Int = 40
35
- var h5Bold: Boolean = false
36
+ override var h5FontSize: Int = 40
37
+ override var h5Bold: Boolean = false
36
38
 
37
- var h6FontSize: Int = 32
38
- var h6Bold: Boolean = false
39
+ override var h6FontSize: Int = 32
40
+ override var h6Bold: Boolean = false
39
41
 
40
- var blockquoteColor: Int? = null
41
- var blockquoteBorderColor: Int = Color.BLACK
42
- var blockquoteStripeWidth: Int = 2
43
- var blockquoteGapWidth: Int = 16
42
+ override var blockquoteColor: Int? = null
43
+ override var blockquoteBorderColor: Int = Color.BLACK
44
+ override var blockquoteStripeWidth: Int = 2
45
+ override var blockquoteGapWidth: Int = 16
44
46
 
45
- var olGapWidth: Int = 16
46
- var olMarginLeft: Int = 24
47
- var olMarkerFontWeight: Int? = null
48
- var olMarkerColor: Int? = null
47
+ override var olGapWidth: Int = 16
48
+ override var olMarginLeft: Int = 24
49
+ override var olMarkerFontWeight: Int? = null
50
+ override var olMarkerColor: Int? = null
49
51
 
50
- var ulGapWidth: Int = 16
51
- var ulMarginLeft: Int = 24
52
- var ulBulletSize: Int = 8
53
- var ulBulletColor: Int = Color.BLACK
52
+ override var ulGapWidth: Int = 16
53
+ override var ulMarginLeft: Int = 24
54
+ override var ulBulletSize: Int = 8
55
+ override var ulBulletColor: Int = Color.BLACK
54
56
 
55
- var aColor: Int = Color.BLACK
56
- var aUnderline: Boolean = true
57
+ override var ulCheckboxBoxSize: Int = 50
58
+ override var ulCheckboxGapWidth: Int = 16
59
+ override var ulCheckboxMarginLeft: Int = 24
60
+ override var ulCheckboxBoxColor: Int = Color.BLACK
57
61
 
58
- var codeBlockColor: Int = Color.BLACK
59
- var codeBlockBackgroundColor: Int = Color.BLACK
60
- var codeBlockRadius: Float = 4f
62
+ override var aColor: Int = Color.BLACK
63
+ override var aUnderline: Boolean = true
61
64
 
62
- var inlineCodeColor: Int = Color.BLACK
63
- var inlineCodeBackgroundColor: Int = Color.BLACK
65
+ override var codeBlockColor: Int = Color.BLACK
66
+ override var codeBlockBackgroundColor: Int = Color.BLACK
67
+ override var codeBlockRadius: Float = 4f
64
68
 
65
- var mentionsStyle: MutableMap<String, MentionStyle> = mutableMapOf()
69
+ override var inlineCodeColor: Int = Color.BLACK
70
+ override var inlineCodeBackgroundColor: Int = Color.BLACK
71
+
72
+ override var mentionsStyle: MutableMap<String, MentionStyle> = mutableMapOf()
66
73
 
67
74
  constructor(view: EnrichedTextInputView?, style: ReadableMap?) {
68
75
  this.view = view
@@ -118,6 +125,12 @@ class HtmlStyle {
118
125
  ulMarginLeft = parseFloat(ulStyle, "marginLeft").toInt()
119
126
  ulBulletSize = parseFloat(ulStyle, "bulletSize").toInt()
120
127
 
128
+ val ulCheckboxStyle = style.getMap("ulCheckbox")
129
+ ulCheckboxBoxSize = parseFloat(ulCheckboxStyle, "boxSize").toInt()
130
+ ulCheckboxGapWidth = parseFloat(ulCheckboxStyle, "gapWidth").toInt()
131
+ ulCheckboxMarginLeft = parseFloat(ulCheckboxStyle, "marginLeft").toInt()
132
+ ulCheckboxBoxColor = parseColor(ulCheckboxStyle, "boxColor")
133
+
121
134
  val aStyle = style.getMap("a")
122
135
  aColor = parseColor(aStyle, "color")
123
136
  aUnderline = parseIsUnderline(aStyle)
@@ -290,6 +303,11 @@ class HtmlStyle {
290
303
  ulBulletSize == other.ulBulletSize &&
291
304
  ulBulletColor == other.ulBulletColor &&
292
305
 
306
+ ulCheckboxBoxSize == other.ulCheckboxBoxSize &&
307
+ ulCheckboxGapWidth == other.ulCheckboxGapWidth &&
308
+ ulCheckboxMarginLeft == other.ulCheckboxMarginLeft &&
309
+ ulCheckboxBoxColor == other.ulCheckboxBoxColor &&
310
+
293
311
  aColor == other.aColor &&
294
312
  aUnderline == other.aUnderline &&
295
313
 
@@ -332,6 +350,11 @@ class HtmlStyle {
332
350
  result = 31 * result + ulBulletSize.hashCode()
333
351
  result = 31 * result + ulBulletColor.hashCode()
334
352
 
353
+ result = 31 * result + ulCheckboxBoxSize.hashCode()
354
+ result = 31 * result + ulCheckboxGapWidth.hashCode()
355
+ result = 31 * result + ulCheckboxMarginLeft.hashCode()
356
+ result = 31 * result + ulCheckboxBoxColor.hashCode()
357
+
335
358
  result = 31 * result + aColor.hashCode()
336
359
  result = 31 * result + aUnderline.hashCode()
337
360
 
@@ -346,12 +369,4 @@ class HtmlStyle {
346
369
 
347
370
  return result
348
371
  }
349
-
350
- companion object {
351
- data class MentionStyle(
352
- val color: Int,
353
- val backgroundColor: Int,
354
- val underline: Boolean,
355
- )
356
- }
357
372
  }
@@ -1,10 +1,10 @@
1
- package com.swmansion.enriched.styles
1
+ package com.swmansion.enriched.textinput.styles
2
2
 
3
3
  import android.text.Editable
4
4
  import android.text.Spannable
5
- import com.swmansion.enriched.EnrichedTextInputView
6
- import com.swmansion.enriched.spans.EnrichedSpans
7
- import com.swmansion.enriched.utils.getSafeSpanBoundaries
5
+ import com.swmansion.enriched.textinput.EnrichedTextInputView
6
+ import com.swmansion.enriched.textinput.spans.EnrichedSpans
7
+ import com.swmansion.enriched.textinput.utils.getSafeSpanBoundaries
8
8
 
9
9
  class InlineStyles(
10
10
  private val view: EnrichedTextInputView,
@@ -1,17 +1,18 @@
1
- package com.swmansion.enriched.styles
1
+ package com.swmansion.enriched.textinput.styles
2
2
 
3
3
  import android.text.Editable
4
4
  import android.text.Spannable
5
5
  import android.text.SpannableStringBuilder
6
6
  import android.text.Spanned
7
- import com.swmansion.enriched.EnrichedTextInputView
8
- import com.swmansion.enriched.spans.EnrichedOrderedListSpan
9
- import com.swmansion.enriched.spans.EnrichedSpans
10
- import com.swmansion.enriched.spans.EnrichedUnorderedListSpan
11
- import com.swmansion.enriched.utils.EnrichedConstants
12
- import com.swmansion.enriched.utils.getParagraphBounds
13
- import com.swmansion.enriched.utils.getSafeSpanBoundaries
14
- import com.swmansion.enriched.utils.removeZWS
7
+ import com.swmansion.enriched.common.EnrichedConstants
8
+ import com.swmansion.enriched.textinput.EnrichedTextInputView
9
+ import com.swmansion.enriched.textinput.spans.EnrichedInputCheckboxListSpan
10
+ import com.swmansion.enriched.textinput.spans.EnrichedInputOrderedListSpan
11
+ import com.swmansion.enriched.textinput.spans.EnrichedInputUnorderedListSpan
12
+ import com.swmansion.enriched.textinput.spans.EnrichedSpans
13
+ import com.swmansion.enriched.textinput.utils.getParagraphBounds
14
+ import com.swmansion.enriched.textinput.utils.getSafeSpanBoundaries
15
+ import com.swmansion.enriched.textinput.utils.removeZWS
15
16
 
16
17
  class ListStyles(
17
18
  private val view: EnrichedTextInputView,
@@ -47,8 +48,8 @@ class ListStyles(
47
48
  spannable: Spannable,
48
49
  s: Int,
49
50
  ): Int {
50
- val span = getPreviousParagraphSpan(spannable, s, EnrichedOrderedListSpan::class.java)
51
- val index = span?.getIndex() ?: 0
51
+ val span = getPreviousParagraphSpan(spannable, s, EnrichedInputOrderedListSpan::class.java)
52
+ val index = span?.getListIndex() ?: 0
52
53
  return index + 1
53
54
  }
54
55
 
@@ -57,19 +58,29 @@ class ListStyles(
57
58
  name: String,
58
59
  start: Int,
59
60
  end: Int,
61
+ isChecked: Boolean? = false,
60
62
  ) {
61
63
  val (safeStart, safeEnd) = spannable.getSafeSpanBoundaries(start, end)
62
64
 
63
- if (name == EnrichedSpans.UNORDERED_LIST) {
64
- val span = EnrichedUnorderedListSpan(view.htmlStyle)
65
- spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
66
- return
67
- }
65
+ when (name) {
66
+ EnrichedSpans.UNORDERED_LIST -> {
67
+ val span = EnrichedInputUnorderedListSpan(view.htmlStyle)
68
+ spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
69
+ }
70
+
71
+ EnrichedSpans.ORDERED_LIST -> {
72
+ val index = getOrderedListIndex(spannable, safeStart)
73
+ val span = EnrichedInputOrderedListSpan(index, view.htmlStyle)
74
+ spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
75
+ }
76
+
77
+ EnrichedSpans.CHECKBOX_LIST -> {
78
+ val span = EnrichedInputCheckboxListSpan(isChecked ?: false, view.htmlStyle)
79
+ spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
68
80
 
69
- if (name == EnrichedSpans.ORDERED_LIST) {
70
- val index = getOrderedListIndex(spannable, safeStart)
71
- val span = EnrichedOrderedListSpan(index, view.htmlStyle)
72
- spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
81
+ // Invalidate layout to update checkbox drawing in case checkbox is bigger than line height
82
+ view.layoutManager.invalidateLayout()
83
+ }
73
84
  }
74
85
  }
75
86
 
@@ -95,16 +106,19 @@ class ListStyles(
95
106
  text: Spannable,
96
107
  position: Int,
97
108
  ) {
98
- val spans = text.getSpans(position + 1, text.length, EnrichedOrderedListSpan::class.java)
109
+ val spans = text.getSpans(position + 1, text.length, EnrichedInputOrderedListSpan::class.java)
99
110
  val sortedSpans = spans.sortedBy { text.getSpanStart(it) }
100
111
  for (span in sortedSpans) {
101
112
  val spanStart = text.getSpanStart(span)
102
113
  val index = getOrderedListIndex(text, spanStart)
103
- span.setIndex(index)
114
+ span.setListIndex(index)
104
115
  }
105
116
  }
106
117
 
107
- fun toggleStyle(name: String) {
118
+ private fun toggleStyle(
119
+ name: String,
120
+ checkboxState: Boolean?,
121
+ ) {
108
122
  if (view.selection == null) return
109
123
  val config = EnrichedSpans.listSpans[name] ?: return
110
124
  val spannable = view.text as SpannableStringBuilder
@@ -123,7 +137,7 @@ class ListStyles(
123
137
  spannable.insert(start, EnrichedConstants.ZWS_STRING)
124
138
  view.spanState?.setStart(name, start + 1)
125
139
  removeSpansForRange(spannable, start, end, config.clazz)
126
- setSpan(spannable, name, start, end + 1)
140
+ setSpan(spannable, name, start, end + 1, checkboxState)
127
141
 
128
142
  return
129
143
  }
@@ -135,7 +149,7 @@ class ListStyles(
135
149
  for (paragraph in paragraphs) {
136
150
  spannable.insert(currentStart, EnrichedConstants.ZWS_STRING)
137
151
  val currentEnd = currentStart + paragraph.length + 1
138
- setSpan(spannable, name, currentStart, currentEnd)
152
+ setSpan(spannable, name, currentStart, currentEnd, checkboxState)
139
153
 
140
154
  currentStart = currentEnd + 1
141
155
  }
@@ -143,6 +157,14 @@ class ListStyles(
143
157
  view.spanState?.setStart(name, currentStart)
144
158
  }
145
159
 
160
+ fun toggleStyle(name: String) {
161
+ toggleStyle(name, false)
162
+ }
163
+
164
+ fun toggleCheckboxListStyle(checked: Boolean) {
165
+ toggleStyle(EnrichedSpans.CHECKBOX_LIST, checked)
166
+ }
167
+
146
168
  private fun handleAfterTextChanged(
147
169
  s: Editable,
148
170
  name: String,
@@ -155,7 +177,7 @@ class ListStyles(
155
177
 
156
178
  val isBackspace = previousTextLength > s.length
157
179
  val isNewLine = cursorPosition > 0 && s[cursorPosition - 1] == '\n'
158
- val isShortcut = s.substring(start, end).startsWith(config.shortcut)
180
+ val isShortcut = config.shortcut?.let { s.substring(start, end).startsWith(it) } ?: false
159
181
  val spans = s.getSpans(start, end, config.clazz)
160
182
 
161
183
  // Remove spans if cursor is at the start of the paragraph and spans exist
@@ -173,6 +195,19 @@ class ListStyles(
173
195
  }
174
196
 
175
197
  if (!isBackspace && isNewLine && isPreviousParagraphList(s, start, config.clazz)) {
198
+ // Check if the span from the previous line "leaked" into this one
199
+ if (spans.isNotEmpty()) {
200
+ val existingSpan = spans[0]
201
+ val spanStart = s.getSpanStart(existingSpan)
202
+
203
+ // If the span started before the current paragraph (belongs to the previous item)
204
+ // update it to end at the newline (start - 1)
205
+ if (spanStart < start) {
206
+ val spanFlags = s.getSpanFlags(existingSpan)
207
+ s.setSpan(existingSpan, spanStart, start - 1, spanFlags)
208
+ }
209
+ }
210
+
176
211
  s.insert(cursorPosition, EnrichedConstants.ZWS_STRING)
177
212
  setSpan(s, name, start, end + 1)
178
213
  // Inform that new span has been added
@@ -180,6 +215,21 @@ class ListStyles(
180
215
  return
181
216
  }
182
217
 
218
+ if (name === EnrichedSpans.CHECKBOX_LIST) {
219
+ if (spans.isNotEmpty()) {
220
+ val previousSpan = spans[0] as EnrichedInputCheckboxListSpan
221
+ val isChecked = previousSpan.isChecked
222
+
223
+ for (span in spans) {
224
+ s.removeSpan(span)
225
+ }
226
+
227
+ setSpan(s, EnrichedSpans.CHECKBOX_LIST, start, end, isChecked)
228
+ }
229
+
230
+ return
231
+ }
232
+
183
233
  if (spans.isNotEmpty()) {
184
234
  for (span in spans) {
185
235
  s.removeSpan(span)
@@ -196,6 +246,7 @@ class ListStyles(
196
246
  ) {
197
247
  handleAfterTextChanged(s, EnrichedSpans.ORDERED_LIST, endCursorPosition, previousTextLength)
198
248
  handleAfterTextChanged(s, EnrichedSpans.UNORDERED_LIST, endCursorPosition, previousTextLength)
249
+ handleAfterTextChanged(s, EnrichedSpans.CHECKBOX_LIST, endCursorPosition, previousTextLength)
199
250
  }
200
251
 
201
252
  fun getStyleRange(): Pair<Int, Int> = view.selection?.getParagraphSelection() ?: Pair(0, 0)
@@ -1,16 +1,16 @@
1
- package com.swmansion.enriched.styles
1
+ package com.swmansion.enriched.textinput.styles
2
2
 
3
3
  import android.text.Editable
4
4
  import android.text.Spannable
5
5
  import android.text.SpannableStringBuilder
6
6
  import android.util.Log
7
- import com.swmansion.enriched.EnrichedTextInputView
8
- import com.swmansion.enriched.spans.EnrichedSpans
9
- import com.swmansion.enriched.spans.interfaces.EnrichedSpan
10
- import com.swmansion.enriched.utils.EnrichedConstants
11
- import com.swmansion.enriched.utils.getParagraphBounds
12
- import com.swmansion.enriched.utils.getSafeSpanBoundaries
13
- import com.swmansion.enriched.utils.removeZWS
7
+ import com.swmansion.enriched.common.EnrichedConstants
8
+ import com.swmansion.enriched.textinput.EnrichedTextInputView
9
+ import com.swmansion.enriched.textinput.spans.EnrichedSpans
10
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
11
+ import com.swmansion.enriched.textinput.utils.getParagraphBounds
12
+ import com.swmansion.enriched.textinput.utils.getSafeSpanBoundaries
13
+ import com.swmansion.enriched.textinput.utils.removeZWS
14
14
 
15
15
  class ParagraphStyles(
16
16
  private val view: EnrichedTextInputView,
@@ -259,7 +259,7 @@ class ParagraphStyles(
259
259
  }
260
260
 
261
261
  for (span in spans) {
262
- extendStyleOnWholeParagraph(s, span as EnrichedSpan, conflictingType, paragraphEnd)
262
+ extendStyleOnWholeParagraph(s, span as EnrichedInputSpan, conflictingType, paragraphEnd)
263
263
  }
264
264
  }
265
265
 
@@ -294,7 +294,7 @@ class ParagraphStyles(
294
294
 
295
295
  private fun <T> extendStyleOnWholeParagraph(
296
296
  s: Editable,
297
- span: EnrichedSpan,
297
+ span: EnrichedInputSpan,
298
298
  type: Class<T>,
299
299
  paragraphEnd: Int,
300
300
  ) {
@@ -325,7 +325,7 @@ class ParagraphStyles(
325
325
  for (span in spans) {
326
326
  // handle conflicts when entering paragraph with some paragraph style applied
327
327
  deleteConflictingAndBlockingStyles(s, style, start, end)
328
- extendStyleOnWholeParagraph(s, span as EnrichedSpan, config.clazz, end)
328
+ extendStyleOnWholeParagraph(s, span as EnrichedInputSpan, config.clazz, end)
329
329
  }
330
330
  }
331
331
 
@@ -1,17 +1,17 @@
1
- package com.swmansion.enriched.styles
1
+ package com.swmansion.enriched.textinput.styles
2
2
 
3
3
  import android.text.Editable
4
4
  import android.text.Spannable
5
5
  import android.text.SpannableStringBuilder
6
6
  import android.text.Spanned
7
- import com.swmansion.enriched.EnrichedTextInputView
8
- import com.swmansion.enriched.spans.EnrichedImageSpan
9
- import com.swmansion.enriched.spans.EnrichedLinkSpan
10
- import com.swmansion.enriched.spans.EnrichedMentionSpan
11
- import com.swmansion.enriched.spans.EnrichedSpans
12
- import com.swmansion.enriched.utils.EnrichedConstants
13
- import com.swmansion.enriched.utils.getSafeSpanBoundaries
14
- import com.swmansion.enriched.utils.removeZWS
7
+ import com.swmansion.enriched.common.EnrichedConstants
8
+ import com.swmansion.enriched.textinput.EnrichedTextInputView
9
+ import com.swmansion.enriched.textinput.spans.EnrichedInputImageSpan
10
+ import com.swmansion.enriched.textinput.spans.EnrichedInputLinkSpan
11
+ import com.swmansion.enriched.textinput.spans.EnrichedInputMentionSpan
12
+ import com.swmansion.enriched.textinput.spans.EnrichedSpans
13
+ import com.swmansion.enriched.textinput.utils.getSafeSpanBoundaries
14
+ import com.swmansion.enriched.textinput.utils.removeZWS
15
15
 
16
16
  class ParametrizedStyles(
17
17
  private val view: EnrichedTextInputView,
@@ -49,7 +49,7 @@ class ParametrizedStyles(
49
49
  isSettingLinkSpan = true
50
50
 
51
51
  val spannable = view.text as SpannableStringBuilder
52
- val spans = spannable.getSpans(start, end, EnrichedLinkSpan::class.java)
52
+ val spans = spannable.getSpans(start, end, EnrichedInputLinkSpan::class.java)
53
53
  for (span in spans) {
54
54
  spannable.removeSpan(span)
55
55
  }
@@ -61,7 +61,7 @@ class ParametrizedStyles(
61
61
  }
62
62
 
63
63
  val spanEnd = start + text.length
64
- val span = EnrichedLinkSpan(url, view.htmlStyle)
64
+ val span = EnrichedInputLinkSpan(url, view.htmlStyle)
65
65
  val (safeStart, safeEnd) = spannable.getSafeSpanBoundaries(start, spanEnd)
66
66
  spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
67
67
 
@@ -86,7 +86,7 @@ class ParametrizedStyles(
86
86
  val regex = view.linkRegex ?: return
87
87
  val contextText = spannable.subSequence(start, end).toString()
88
88
 
89
- val spans = spannable.getSpans(start, end, EnrichedLinkSpan::class.java)
89
+ val spans = spannable.getSpans(start, end, EnrichedInputLinkSpan::class.java)
90
90
  for (span in spans) {
91
91
  spannable.removeSpan(span)
92
92
  }
@@ -97,7 +97,7 @@ class ParametrizedStyles(
97
97
  var wordStart = wordMatch.range.first
98
98
 
99
99
  // Do not include zero-width space in link detection
100
- if (word.startsWith("\u200B")) {
100
+ if (word.startsWith(EnrichedConstants.ZWS_STRING)) {
101
101
  word = word.substring(1)
102
102
  wordStart += 1
103
103
  }
@@ -111,7 +111,7 @@ class ParametrizedStyles(
111
111
  val spanStart = start + wordStart + linkStart
112
112
  val spanEnd = start + wordStart + linkEnd
113
113
 
114
- val span = EnrichedLinkSpan(matcher.group(), view.htmlStyle)
114
+ val span = EnrichedInputLinkSpan(matcher.group(), view.htmlStyle)
115
115
  val (safeStart, safeEnd) = spannable.getSafeSpanBoundaries(spanStart, spanEnd)
116
116
 
117
117
  spannable.setSpan(
@@ -209,7 +209,7 @@ class ParametrizedStyles(
209
209
  val mentionIndicatorRegex = Regex("^($indicatorsPattern)")
210
210
  val mentionRegex = Regex("^($indicatorsPattern)\\w*")
211
211
 
212
- val spans = spannable.getSpans(currentWord.start, currentWord.end, EnrichedMentionSpan::class.java)
212
+ val spans = spannable.getSpans(currentWord.start, currentWord.end, EnrichedInputMentionSpan::class.java)
213
213
  for (span in spans) {
214
214
  spannable.removeSpan(span)
215
215
  }
@@ -266,7 +266,7 @@ class ParametrizedStyles(
266
266
  if (start == originalEnd) {
267
267
  spannable.insert(start, EnrichedConstants.ORC_STRING)
268
268
  } else {
269
- val spans = spannable.getSpans(start, originalEnd, EnrichedImageSpan::class.java)
269
+ val spans = spannable.getSpans(start, originalEnd, EnrichedInputImageSpan::class.java)
270
270
  for (s in spans) {
271
271
  spannable.removeSpan(s)
272
272
  }
@@ -275,7 +275,7 @@ class ParametrizedStyles(
275
275
  }
276
276
 
277
277
  val (imageStart, imageEnd) = spannable.getSafeSpanBoundaries(start, start + 1)
278
- val span = EnrichedImageSpan.createEnrichedImageSpan(src, width.toInt(), height.toInt())
278
+ val span = EnrichedInputImageSpan.createEnrichedImageSpan(src, width.toInt(), height.toInt())
279
279
  span.observeAsyncDrawableLoaded(view.text)
280
280
 
281
281
  spannable.setSpan(span, imageStart, imageEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
@@ -303,7 +303,7 @@ class ParametrizedStyles(
303
303
 
304
304
  val spannable = view.text as SpannableStringBuilder
305
305
  val (selectionStart, selectionEnd) = selection.getInlineSelection()
306
- val spans = spannable.getSpans(selectionStart, selectionEnd, EnrichedMentionSpan::class.java)
306
+ val spans = spannable.getSpans(selectionStart, selectionEnd, EnrichedInputMentionSpan::class.java)
307
307
 
308
308
  for (span in spans) {
309
309
  spannable.removeSpan(span)
@@ -314,7 +314,7 @@ class ParametrizedStyles(
314
314
  view.runAsATransaction {
315
315
  spannable.replace(start, selectionEnd, text)
316
316
 
317
- val span = EnrichedMentionSpan(text, indicator, attributes, view.htmlStyle)
317
+ val span = EnrichedInputMentionSpan(text, indicator, attributes, view.htmlStyle)
318
318
  val spanEnd = start + text.length
319
319
  val (safeStart, safeEnd) = spannable.getSafeSpanBoundaries(start, spanEnd)
320
320
  spannable.setSpan(span, safeStart, safeEnd, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
@@ -1,9 +1,9 @@
1
- package com.swmansion.enriched.utils
1
+ package com.swmansion.enriched.textinput.utils
2
2
 
3
3
  import android.text.Editable
4
4
  import android.text.Spannable
5
5
  import android.text.SpannableStringBuilder
6
- import com.swmansion.enriched.watchers.EnrichedSpanWatcher
6
+ import com.swmansion.enriched.textinput.watchers.EnrichedSpanWatcher
7
7
 
8
8
  class EnrichedEditableFactory(
9
9
  private val watcher: EnrichedSpanWatcher,
@@ -1,16 +1,17 @@
1
- package com.swmansion.enriched.utils
1
+ package com.swmansion.enriched.textinput.utils
2
2
 
3
3
  import android.text.Editable
4
4
  import android.text.Spannable
5
5
  import com.facebook.react.bridge.ReactContext
6
6
  import com.facebook.react.uimanager.UIManagerHelper
7
- import com.swmansion.enriched.EnrichedTextInputView
8
- import com.swmansion.enriched.events.OnChangeSelectionEvent
9
- import com.swmansion.enriched.events.OnLinkDetectedEvent
10
- import com.swmansion.enriched.events.OnMentionDetectedEvent
11
- import com.swmansion.enriched.spans.EnrichedLinkSpan
12
- import com.swmansion.enriched.spans.EnrichedMentionSpan
13
- import com.swmansion.enriched.spans.EnrichedSpans
7
+ import com.swmansion.enriched.common.EnrichedConstants
8
+ import com.swmansion.enriched.textinput.EnrichedTextInputView
9
+ import com.swmansion.enriched.textinput.events.OnChangeSelectionEvent
10
+ import com.swmansion.enriched.textinput.events.OnLinkDetectedEvent
11
+ import com.swmansion.enriched.textinput.events.OnMentionDetectedEvent
12
+ import com.swmansion.enriched.textinput.spans.EnrichedInputLinkSpan
13
+ import com.swmansion.enriched.textinput.spans.EnrichedInputMentionSpan
14
+ import com.swmansion.enriched.textinput.spans.EnrichedSpans
14
15
  import org.json.JSONObject
15
16
 
16
17
  class EnrichedSelection(
@@ -190,8 +191,8 @@ class EnrichedSelection(
190
191
  val (start, end) = getInlineSelection()
191
192
  val spannable = view.text as Spannable
192
193
  val spans = spannable.getSpans(start, end, type)
193
- val isLinkType = type == EnrichedLinkSpan::class.java
194
- val isMentionType = type == EnrichedMentionSpan::class.java
194
+ val isLinkType = type == EnrichedInputLinkSpan::class.java
195
+ val isMentionType = type == EnrichedInputMentionSpan::class.java
195
196
 
196
197
  if (isLinkType && spans.isEmpty()) {
197
198
  emitLinkDetectedEvent(spannable, null, start, end)
@@ -208,9 +209,9 @@ class EnrichedSelection(
208
209
  val spanEnd = spannable.getSpanEnd(span)
209
210
 
210
211
  if (start >= spanStart && end <= spanEnd) {
211
- if (isLinkType && span is EnrichedLinkSpan) {
212
+ if (isLinkType && span is EnrichedInputLinkSpan) {
212
213
  emitLinkDetectedEvent(spannable, span, spanStart, spanEnd)
213
- } else if (isMentionType && span is EnrichedMentionSpan) {
214
+ } else if (isMentionType && span is EnrichedInputMentionSpan) {
214
215
  emitMentionDetectedEvent(spannable, span, spanStart, spanEnd)
215
216
  }
216
217
 
@@ -247,7 +248,7 @@ class EnrichedSelection(
247
248
 
248
249
  private fun emitLinkDetectedEvent(
249
250
  spannable: Spannable,
250
- span: EnrichedLinkSpan?,
251
+ span: EnrichedInputLinkSpan?,
251
252
  start: Int,
252
253
  end: Int,
253
254
  ) {
@@ -278,7 +279,7 @@ class EnrichedSelection(
278
279
 
279
280
  private fun emitMentionDetectedEvent(
280
281
  spannable: Spannable,
281
- span: EnrichedMentionSpan?,
282
+ span: EnrichedInputMentionSpan?,
282
283
  start: Int,
283
284
  end: Int,
284
285
  ) {