react-native-enriched 0.2.1 → 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 (263) hide show
  1. package/README.md +21 -16
  2. package/android/build.gradle +77 -72
  3. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +21 -0
  4. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +7 -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/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.cpp +276 -0
  8. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.h +239 -0
  9. package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.cpp +10 -0
  10. package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.h +251 -0
  11. package/android/gradle.properties +5 -5
  12. package/android/lint.gradle +70 -0
  13. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewPackage.kt → ReactNativeEnrichedPackage.kt} +4 -5
  14. package/android/src/main/java/com/swmansion/enriched/{utils → common}/AsyncDrawable.kt +50 -15
  15. package/android/src/main/java/com/swmansion/enriched/common/CheckboxDrawable.kt +81 -0
  16. package/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt +11 -0
  17. package/android/src/main/java/com/swmansion/enriched/common/EnrichedStyle.kt +57 -0
  18. package/android/src/main/java/com/swmansion/enriched/{spans/utils → common}/ForceRedrawSpan.kt +3 -2
  19. package/android/src/main/java/com/swmansion/enriched/common/MentionStyle.kt +7 -0
  20. package/android/src/main/java/com/swmansion/enriched/{utils → common}/ResourceManager.kt +1 -1
  21. package/android/src/main/java/com/swmansion/enriched/{utils → common/parser}/EnrichedParser.java +228 -160
  22. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +79 -0
  23. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBlockQuoteSpan.kt +53 -0
  24. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBoldSpan.kt +12 -0
  25. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCheckboxListSpan.kt +91 -0
  26. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedCodeBlockSpan.kt +12 -14
  27. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH1Span.kt +20 -0
  28. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH2Span.kt +20 -0
  29. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH3Span.kt +20 -0
  30. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH4Span.kt +21 -0
  31. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH5Span.kt +20 -0
  32. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH6Span.kt +20 -0
  33. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedImageSpan.kt +68 -51
  34. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedInlineCodeSpan.kt +24 -0
  35. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedItalicSpan.kt +12 -0
  36. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedLinkSpan.kt +26 -0
  37. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedMentionSpan.kt +35 -0
  38. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedOrderedListSpan.kt +21 -29
  39. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedStrikeThroughSpan.kt +11 -0
  40. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnderlineSpan.kt +11 -0
  41. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedUnorderedListSpan.kt +13 -17
  42. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedBlockSpan.kt +5 -0
  43. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedHeadingSpan.kt +3 -0
  44. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedInlineSpan.kt +3 -0
  45. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedParagraphSpan.kt +5 -0
  46. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedSpan.kt +3 -0
  47. package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/interfaces/EnrichedZeroWidthSpaceSpan.kt +2 -3
  48. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputConnectionWrapper.kt +140 -0
  49. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +83 -0
  50. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputView.kt → textinput/EnrichedTextInputView.kt} +322 -157
  51. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewLayoutManager.kt → textinput/EnrichedTextInputViewLayoutManager.kt} +4 -2
  52. package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewManager.kt → textinput/EnrichedTextInputViewManager.kt} +182 -66
  53. package/android/src/main/java/com/swmansion/enriched/{MeasurementStore.kt → textinput/MeasurementStore.kt} +75 -25
  54. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/MentionHandler.kt +22 -12
  55. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeHtmlEvent.kt +27 -0
  56. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnChangeSelectionEvent.kt +11 -10
  57. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeStateEvent.kt +21 -0
  58. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeTextEvent.kt +30 -0
  59. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputBlurEvent.kt +25 -0
  60. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputFocusEvent.kt +25 -0
  61. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputKeyPressEvent.kt +27 -0
  62. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnLinkDetectedEvent.kt +32 -0
  63. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnMentionDetectedEvent.kt +11 -10
  64. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnMentionEvent.kt +10 -9
  65. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnPasteImagesEvent.kt +47 -0
  66. package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnRequestHtmlResultEvent.kt +2 -3
  67. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt +14 -0
  68. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBoldSpan.kt +14 -0
  69. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCheckboxListSpan.kt +15 -0
  70. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt +14 -0
  71. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH1Span.kt +14 -0
  72. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH2Span.kt +14 -0
  73. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH3Span.kt +14 -0
  74. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH4Span.kt +14 -0
  75. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH5Span.kt +14 -0
  76. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH6Span.kt +14 -0
  77. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt +36 -0
  78. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt +14 -0
  79. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt +14 -0
  80. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputLinkSpan.kt +15 -0
  81. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt +18 -0
  82. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt +21 -0
  83. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputStrikeThroughSpan.kt +14 -0
  84. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt +14 -0
  85. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnorderedListSpan.kt +14 -0
  86. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedSpans.kt +241 -0
  87. package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt +10 -0
  88. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/HtmlStyle.kt +129 -57
  89. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/InlineStyles.kt +30 -13
  90. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ListStyles.kt +263 -0
  91. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/ParagraphStyles.kt +94 -34
  92. package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/ParametrizedStyles.kt +143 -67
  93. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedEditableFactory.kt +17 -0
  94. package/android/src/main/java/com/swmansion/enriched/{utils → textinput/utils}/EnrichedSelection.kt +84 -54
  95. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpanState.kt +304 -0
  96. package/android/src/main/java/com/swmansion/enriched/{utils/Utils.kt → textinput/utils/EnrichedSpannable.kt} +22 -31
  97. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannableStringBuilder.kt +16 -0
  98. package/android/src/main/java/com/swmansion/enriched/textinput/utils/RichContentReceiver.kt +127 -0
  99. package/android/src/main/java/com/swmansion/enriched/textinput/utils/Utils.kt +106 -0
  100. package/android/src/main/java/com/swmansion/enriched/{watchers → textinput/watchers}/EnrichedSpanWatcher.kt +56 -24
  101. package/android/src/main/java/com/swmansion/enriched/{watchers → textinput/watchers}/EnrichedTextWatcher.kt +37 -14
  102. package/android/src/main/new_arch/CMakeLists.txt +7 -1
  103. package/android/src/main/new_arch/ReactNativeEnrichedSpec.cpp +11 -0
  104. package/android/src/main/new_arch/ReactNativeEnrichedSpec.h +15 -0
  105. package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputMeasurementManager.h +1 -1
  106. package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputShadowNode.h +2 -2
  107. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h +46 -0
  108. package/ios/EnrichedTextInputView.h +2 -1
  109. package/ios/EnrichedTextInputView.mm +603 -60
  110. package/ios/config/InputConfig.h +28 -0
  111. package/ios/config/InputConfig.mm +237 -8
  112. package/ios/extensions/ImageExtension.h +35 -0
  113. package/ios/extensions/ImageExtension.mm +156 -0
  114. package/ios/{utils → extensions}/LayoutManagerExtension.mm +115 -95
  115. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.cpp +1 -1
  116. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.h +1 -1
  117. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.cpp +276 -0
  118. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.h +239 -0
  119. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.cpp +10 -0
  120. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.h +251 -0
  121. package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/RCTComponentViewHelpers.h +95 -0
  122. package/ios/inputParser/InputParser.mm +218 -18
  123. package/ios/inputTextView/InputTextView.mm +118 -0
  124. package/ios/{attachments → interfaces}/ImageAttachment.h +1 -0
  125. package/ios/interfaces/ImageAttachment.mm +46 -0
  126. package/ios/interfaces/LinkRegexConfig.h +19 -0
  127. package/ios/interfaces/LinkRegexConfig.mm +37 -0
  128. package/ios/{utils → interfaces}/MentionStyleProps.mm +2 -2
  129. package/ios/{utils → interfaces}/StyleHeaders.h +22 -1
  130. package/ios/{utils → interfaces}/StyleTypeEnum.h +4 -0
  131. package/ios/internals/EnrichedTextInputViewState.cpp +6 -6
  132. package/ios/styles/BlockQuoteStyle.mm +5 -5
  133. package/ios/styles/BoldStyle.mm +21 -6
  134. package/ios/styles/CheckboxListStyle.mm +321 -0
  135. package/ios/styles/CodeBlockStyle.mm +5 -5
  136. package/ios/styles/H1Style.mm +3 -0
  137. package/ios/styles/H2Style.mm +3 -0
  138. package/ios/styles/H3Style.mm +3 -0
  139. package/ios/styles/H4Style.mm +20 -0
  140. package/ios/styles/H5Style.mm +20 -0
  141. package/ios/styles/H6Style.mm +20 -0
  142. package/ios/styles/HeadingStyleBase.mm +161 -72
  143. package/ios/styles/ImageStyle.mm +5 -5
  144. package/ios/styles/InlineCodeStyle.mm +30 -19
  145. package/ios/styles/ItalicStyle.mm +5 -5
  146. package/ios/styles/LinkStyle.mm +98 -40
  147. package/ios/styles/MentionStyle.mm +4 -4
  148. package/ios/styles/OrderedListStyle.mm +5 -5
  149. package/ios/styles/StrikethroughStyle.mm +5 -5
  150. package/ios/styles/UnderlineStyle.mm +5 -5
  151. package/ios/styles/UnorderedListStyle.mm +5 -5
  152. package/ios/utils/CheckboxHitTestUtils.h +10 -0
  153. package/ios/utils/CheckboxHitTestUtils.mm +123 -0
  154. package/ios/utils/ParagraphAttributesUtils.h +4 -0
  155. package/ios/utils/ParagraphAttributesUtils.mm +142 -45
  156. package/ios/utils/ParagraphsUtils.mm +4 -4
  157. package/ios/utils/TextBlockTapGestureRecognizer.h +17 -0
  158. package/ios/utils/TextBlockTapGestureRecognizer.mm +56 -0
  159. package/ios/utils/ZeroWidthSpaceUtils.mm +14 -3
  160. package/lib/module/EnrichedTextInput.js +57 -11
  161. package/lib/module/EnrichedTextInput.js.map +1 -1
  162. package/lib/module/{EnrichedTextInputNativeComponent.ts → spec/EnrichedTextInputNativeComponent.ts} +175 -18
  163. package/lib/module/types.js +4 -0
  164. package/lib/module/types.js.map +1 -0
  165. package/lib/module/{normalizeHtmlStyle.js → utils/normalizeHtmlStyle.js} +18 -0
  166. package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
  167. package/lib/module/utils/nullthrows.js +9 -0
  168. package/lib/module/utils/nullthrows.js.map +1 -0
  169. package/lib/module/utils/regexParser.js +46 -0
  170. package/lib/module/utils/regexParser.js.map +1 -0
  171. package/lib/typescript/src/EnrichedTextInput.d.ts +20 -51
  172. package/lib/typescript/src/EnrichedTextInput.d.ts.map +1 -1
  173. package/lib/typescript/src/index.d.ts +2 -1
  174. package/lib/typescript/src/index.d.ts.map +1 -1
  175. package/lib/typescript/src/{EnrichedTextInputNativeComponent.d.ts → spec/EnrichedTextInputNativeComponent.d.ts} +154 -18
  176. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts.map +1 -0
  177. package/lib/typescript/src/types.d.ts +58 -0
  178. package/lib/typescript/src/types.d.ts.map +1 -0
  179. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +4 -0
  180. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
  181. package/lib/typescript/src/utils/nullthrows.d.ts +2 -0
  182. package/lib/typescript/src/utils/nullthrows.d.ts.map +1 -0
  183. package/lib/typescript/src/utils/regexParser.d.ts +3 -0
  184. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
  185. package/package.json +13 -9
  186. package/src/EnrichedTextInput.tsx +88 -63
  187. package/src/index.tsx +5 -1
  188. package/src/{EnrichedTextInputNativeComponent.ts → spec/EnrichedTextInputNativeComponent.ts} +175 -18
  189. package/src/types.ts +59 -0
  190. package/src/{normalizeHtmlStyle.ts → utils/normalizeHtmlStyle.ts} +20 -5
  191. package/src/utils/nullthrows.ts +7 -0
  192. package/src/utils/regexParser.ts +56 -0
  193. package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.cpp +0 -128
  194. package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.h +0 -102
  195. package/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt +0 -28
  196. package/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt +0 -24
  197. package/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt +0 -30
  198. package/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt +0 -27
  199. package/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt +0 -27
  200. package/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt +0 -30
  201. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBlockQuoteSpan.kt +0 -44
  202. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBoldSpan.kt +0 -16
  203. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH1Span.kt +0 -23
  204. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH2Span.kt +0 -23
  205. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH3Span.kt +0 -23
  206. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedInlineCodeSpan.kt +0 -27
  207. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedItalicSpan.kt +0 -15
  208. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedLinkSpan.kt +0 -30
  209. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedMentionSpan.kt +0 -42
  210. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedSpans.kt +0 -136
  211. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedStrikeThroughSpan.kt +0 -14
  212. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedUnderlineSpan.kt +0 -14
  213. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedBlockSpan.kt +0 -4
  214. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedHeadingSpan.kt +0 -4
  215. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedInlineSpan.kt +0 -4
  216. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedParagraphSpan.kt +0 -4
  217. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedSpan.kt +0 -8
  218. package/android/src/main/java/com/swmansion/enriched/styles/ListStyles.kt +0 -172
  219. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpanState.kt +0 -204
  220. package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.cpp +0 -22
  221. package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.h +0 -26
  222. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/conversions.h +0 -26
  223. package/ios/attachments/ImageAttachment.mm +0 -34
  224. package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.cpp +0 -128
  225. package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.h +0 -102
  226. package/lib/module/normalizeHtmlStyle.js.map +0 -1
  227. package/lib/typescript/src/EnrichedTextInputNativeComponent.d.ts.map +0 -1
  228. package/lib/typescript/src/normalizeHtmlStyle.d.ts +0 -4
  229. package/lib/typescript/src/normalizeHtmlStyle.d.ts.map +0 -1
  230. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.cpp +0 -0
  231. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.h +0 -0
  232. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.cpp +0 -0
  233. /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.h +0 -0
  234. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputComponentDescriptor.h +0 -0
  235. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputMeasurementManager.cpp +0 -0
  236. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputShadowNode.cpp +0 -0
  237. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputState.cpp +0 -0
  238. /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputState.h +0 -0
  239. /package/ios/{utils → extensions}/ColorExtension.h +0 -0
  240. /package/ios/{utils → extensions}/ColorExtension.mm +0 -0
  241. /package/ios/{utils → extensions}/FontExtension.h +0 -0
  242. /package/ios/{utils → extensions}/FontExtension.mm +0 -0
  243. /package/ios/{utils → extensions}/LayoutManagerExtension.h +0 -0
  244. /package/ios/{utils → extensions}/StringExtension.h +0 -0
  245. /package/ios/{utils → extensions}/StringExtension.mm +0 -0
  246. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.cpp +0 -0
  247. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.h +0 -0
  248. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.cpp +0 -0
  249. /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.h +0 -0
  250. /package/ios/{utils → interfaces}/BaseStyleProtocol.h +0 -0
  251. /package/ios/{utils → interfaces}/ImageData.h +0 -0
  252. /package/ios/{utils → interfaces}/ImageData.mm +0 -0
  253. /package/ios/{utils → interfaces}/LinkData.h +0 -0
  254. /package/ios/{utils → interfaces}/LinkData.mm +0 -0
  255. /package/ios/{attachments → interfaces}/MediaAttachment.h +0 -0
  256. /package/ios/{attachments → interfaces}/MediaAttachment.mm +0 -0
  257. /package/ios/{utils → interfaces}/MentionParams.h +0 -0
  258. /package/ios/{utils → interfaces}/MentionParams.mm +0 -0
  259. /package/ios/{utils → interfaces}/MentionStyleProps.h +0 -0
  260. /package/ios/{utils → interfaces}/StylePair.h +0 -0
  261. /package/ios/{utils → interfaces}/StylePair.mm +0 -0
  262. /package/ios/{utils → interfaces}/TextDecorationLineEnum.h +0 -0
  263. /package/ios/{utils → interfaces}/TextDecorationLineEnum.mm +0 -0
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedUnorderedListSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputUnorderedListSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedUnorderedListSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputUnorderedListSpan = EnrichedInputUnorderedListSpan(htmlStyle)
14
+ }
@@ -0,0 +1,241 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
4
+
5
+ interface ISpanConfig {
6
+ val clazz: Class<*>
7
+ }
8
+
9
+ data class BaseSpanConfig(
10
+ override val clazz: Class<*>,
11
+ ) : ISpanConfig
12
+
13
+ data class ParagraphSpanConfig(
14
+ override val clazz: Class<*>,
15
+ val isContinuous: Boolean,
16
+ ) : ISpanConfig
17
+
18
+ data class ListSpanConfig(
19
+ override val clazz: Class<*>,
20
+ val shortcut: String?,
21
+ ) : ISpanConfig
22
+
23
+ data class StylesMergingConfig(
24
+ // styles that should be removed when we apply specific style
25
+ val conflictingStyles: Array<String> = emptyArray(),
26
+ // styles that should block setting specific style
27
+ val blockingStyles: Array<String> = emptyArray(),
28
+ )
29
+
30
+ object EnrichedSpans {
31
+ // inline styles
32
+ const val BOLD = "bold"
33
+ const val ITALIC = "italic"
34
+ const val UNDERLINE = "underline"
35
+ const val STRIKETHROUGH = "strikethrough"
36
+ const val INLINE_CODE = "inline_code"
37
+
38
+ // paragraph styles
39
+ const val H1 = "h1"
40
+ const val H2 = "h2"
41
+ const val H3 = "h3"
42
+ const val H4 = "h4"
43
+ const val H5 = "h5"
44
+ const val H6 = "h6"
45
+ const val BLOCK_QUOTE = "block_quote"
46
+ const val CODE_BLOCK = "code_block"
47
+
48
+ // list styles
49
+ const val UNORDERED_LIST = "unordered_list"
50
+ const val ORDERED_LIST = "ordered_list"
51
+ const val CHECKBOX_LIST = "checkbox_list"
52
+
53
+ // parametrized styles
54
+ const val LINK = "link"
55
+ const val IMAGE = "image"
56
+ const val MENTION = "mention"
57
+
58
+ val inlineSpans: Map<String, BaseSpanConfig> =
59
+ mapOf(
60
+ BOLD to BaseSpanConfig(EnrichedInputBoldSpan::class.java),
61
+ ITALIC to BaseSpanConfig(EnrichedInputItalicSpan::class.java),
62
+ UNDERLINE to BaseSpanConfig(EnrichedInputUnderlineSpan::class.java),
63
+ STRIKETHROUGH to BaseSpanConfig(EnrichedInputStrikeThroughSpan::class.java),
64
+ INLINE_CODE to BaseSpanConfig(EnrichedInputInlineCodeSpan::class.java),
65
+ )
66
+
67
+ val paragraphSpans: Map<String, ParagraphSpanConfig> =
68
+ mapOf(
69
+ H1 to ParagraphSpanConfig(EnrichedInputH1Span::class.java, false),
70
+ H2 to ParagraphSpanConfig(EnrichedInputH2Span::class.java, false),
71
+ H3 to ParagraphSpanConfig(EnrichedInputH3Span::class.java, false),
72
+ H4 to ParagraphSpanConfig(EnrichedInputH4Span::class.java, false),
73
+ H5 to ParagraphSpanConfig(EnrichedInputH5Span::class.java, false),
74
+ H6 to ParagraphSpanConfig(EnrichedInputH6Span::class.java, false),
75
+ BLOCK_QUOTE to ParagraphSpanConfig(EnrichedInputBlockQuoteSpan::class.java, true),
76
+ CODE_BLOCK to ParagraphSpanConfig(EnrichedInputCodeBlockSpan::class.java, true),
77
+ )
78
+
79
+ val listSpans: Map<String, ListSpanConfig> =
80
+ mapOf(
81
+ UNORDERED_LIST to ListSpanConfig(EnrichedInputUnorderedListSpan::class.java, "- "),
82
+ ORDERED_LIST to ListSpanConfig(EnrichedInputOrderedListSpan::class.java, "1. "),
83
+ CHECKBOX_LIST to ListSpanConfig(EnrichedInputCheckboxListSpan::class.java, null),
84
+ )
85
+
86
+ val parametrizedStyles: Map<String, BaseSpanConfig> =
87
+ mapOf(
88
+ LINK to BaseSpanConfig(EnrichedInputLinkSpan::class.java),
89
+ IMAGE to BaseSpanConfig(EnrichedInputImageSpan::class.java),
90
+ MENTION to BaseSpanConfig(EnrichedInputMentionSpan::class.java),
91
+ )
92
+
93
+ val allSpans: Map<String, ISpanConfig> = inlineSpans + paragraphSpans + listSpans + parametrizedStyles
94
+
95
+ fun getMergingConfigForStyle(
96
+ style: String,
97
+ htmlStyle: HtmlStyle,
98
+ ): StylesMergingConfig? =
99
+ when (style) {
100
+ BOLD -> {
101
+ val blockingStyles = mutableListOf(CODE_BLOCK)
102
+ if (htmlStyle.h1Bold) blockingStyles.add(H1)
103
+ if (htmlStyle.h2Bold) blockingStyles.add(H2)
104
+ if (htmlStyle.h3Bold) blockingStyles.add(H3)
105
+ if (htmlStyle.h4Bold) blockingStyles.add(H4)
106
+ if (htmlStyle.h5Bold) blockingStyles.add(H5)
107
+ if (htmlStyle.h6Bold) blockingStyles.add(H6)
108
+ StylesMergingConfig(blockingStyles = blockingStyles.toTypedArray())
109
+ }
110
+
111
+ ITALIC -> {
112
+ StylesMergingConfig(
113
+ blockingStyles = arrayOf(CODE_BLOCK),
114
+ )
115
+ }
116
+
117
+ UNDERLINE -> {
118
+ StylesMergingConfig(
119
+ blockingStyles = arrayOf(CODE_BLOCK),
120
+ )
121
+ }
122
+
123
+ STRIKETHROUGH -> {
124
+ StylesMergingConfig(
125
+ blockingStyles = arrayOf(CODE_BLOCK),
126
+ )
127
+ }
128
+
129
+ INLINE_CODE -> {
130
+ StylesMergingConfig(
131
+ conflictingStyles = arrayOf(MENTION, LINK),
132
+ blockingStyles = arrayOf(CODE_BLOCK),
133
+ )
134
+ }
135
+
136
+ H1 -> {
137
+ val conflictingStyles = mutableListOf(H2, H3, H4, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
138
+ if (htmlStyle.h1Bold) conflictingStyles.add(BOLD)
139
+ StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
140
+ }
141
+
142
+ H2 -> {
143
+ val conflictingStyles = mutableListOf(H1, H3, H4, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
144
+ if (htmlStyle.h2Bold) conflictingStyles.add(BOLD)
145
+ StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
146
+ }
147
+
148
+ H3 -> {
149
+ val conflictingStyles = mutableListOf(H1, H2, H4, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
150
+ if (htmlStyle.h3Bold) conflictingStyles.add(BOLD)
151
+ StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
152
+ }
153
+
154
+ H4 -> {
155
+ val conflictingStyles = mutableListOf(H1, H2, H3, H5, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
156
+ if (htmlStyle.h4Bold) conflictingStyles.add(BOLD)
157
+ StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
158
+ }
159
+
160
+ H5 -> {
161
+ val conflictingStyles = mutableListOf(H1, H2, H3, H4, H6, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
162
+ if (htmlStyle.h5Bold) conflictingStyles.add(BOLD)
163
+ StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
164
+ }
165
+
166
+ H6 -> {
167
+ val conflictingStyles = mutableListOf(H1, H2, H3, H4, H5, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST, BLOCK_QUOTE, CODE_BLOCK)
168
+ if (htmlStyle.h6Bold) conflictingStyles.add(BOLD)
169
+ StylesMergingConfig(conflictingStyles = conflictingStyles.toTypedArray())
170
+ }
171
+
172
+ BLOCK_QUOTE -> {
173
+ StylesMergingConfig(
174
+ conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, CODE_BLOCK, ORDERED_LIST, UNORDERED_LIST, CHECKBOX_LIST),
175
+ )
176
+ }
177
+
178
+ CODE_BLOCK -> {
179
+ StylesMergingConfig(
180
+ conflictingStyles =
181
+ arrayOf(
182
+ H1,
183
+ H2,
184
+ H3,
185
+ H4,
186
+ H5,
187
+ H6,
188
+ BOLD,
189
+ ITALIC,
190
+ UNDERLINE,
191
+ STRIKETHROUGH,
192
+ UNORDERED_LIST,
193
+ ORDERED_LIST,
194
+ CHECKBOX_LIST,
195
+ BLOCK_QUOTE,
196
+ INLINE_CODE,
197
+ ),
198
+ )
199
+ }
200
+
201
+ UNORDERED_LIST -> {
202
+ StylesMergingConfig(
203
+ conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, ORDERED_LIST, CHECKBOX_LIST, CODE_BLOCK, BLOCK_QUOTE),
204
+ )
205
+ }
206
+
207
+ ORDERED_LIST -> {
208
+ StylesMergingConfig(
209
+ conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, UNORDERED_LIST, CHECKBOX_LIST, CODE_BLOCK, BLOCK_QUOTE),
210
+ )
211
+ }
212
+
213
+ CHECKBOX_LIST -> {
214
+ StylesMergingConfig(
215
+ conflictingStyles = arrayOf(H1, H2, H3, H4, H5, H6, UNORDERED_LIST, ORDERED_LIST, CODE_BLOCK, BLOCK_QUOTE),
216
+ )
217
+ }
218
+
219
+ LINK -> {
220
+ StylesMergingConfig(
221
+ blockingStyles = arrayOf(INLINE_CODE, CODE_BLOCK, MENTION),
222
+ )
223
+ }
224
+
225
+ IMAGE -> {
226
+ StylesMergingConfig()
227
+ }
228
+
229
+ MENTION -> {
230
+ StylesMergingConfig(
231
+ blockingStyles = arrayOf(INLINE_CODE, CODE_BLOCK, LINK),
232
+ )
233
+ }
234
+
235
+ else -> {
236
+ null
237
+ }
238
+ }
239
+
240
+ fun isTypeContinuous(type: Class<*>): Boolean = paragraphSpans.values.find { it.clazz == type }?.isContinuous == true
241
+ }
@@ -0,0 +1,10 @@
1
+ package com.swmansion.enriched.textinput.spans.interfaces
2
+
3
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedSpan
4
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
5
+
6
+ interface EnrichedInputSpan : EnrichedSpan {
7
+ val dependsOnHtmlStyle: Boolean
8
+
9
+ fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputSpan
10
+ }
@@ -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,54 +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 blockquoteColor: Int? = null
32
- var blockquoteBorderColor: Int = Color.BLACK
33
- var blockquoteStripeWidth: Int = 2
34
- var blockquoteGapWidth: Int = 16
33
+ override var h4FontSize: Int = 48
34
+ override var h4Bold: Boolean = false
35
35
 
36
- var olGapWidth: Int = 16
37
- var olMarginLeft: Int = 24
38
- var olMarkerFontWeight: Int? = null
39
- var olMarkerColor: Int? = null
36
+ override var h5FontSize: Int = 40
37
+ override var h5Bold: Boolean = false
40
38
 
41
- var ulGapWidth: Int = 16
42
- var ulMarginLeft: Int = 24
43
- var ulBulletSize: Int = 8
44
- var ulBulletColor: Int = Color.BLACK
39
+ override var h6FontSize: Int = 32
40
+ override var h6Bold: Boolean = false
45
41
 
46
- var aColor: Int = Color.BLACK
47
- var aUnderline: Boolean = true
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
48
46
 
49
- var codeBlockColor: Int = Color.BLACK
50
- var codeBlockBackgroundColor: Int = Color.BLACK
51
- var codeBlockRadius: Float = 4f
47
+ override var olGapWidth: Int = 16
48
+ override var olMarginLeft: Int = 24
49
+ override var olMarkerFontWeight: Int? = null
50
+ override var olMarkerColor: Int? = null
52
51
 
53
- var inlineCodeColor: Int = Color.BLACK
54
- var inlineCodeBackgroundColor: 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
55
56
 
56
- var mentionsStyle: MutableMap<String, MentionStyle> = mutableMapOf()
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
61
+
62
+ override var aColor: Int = Color.BLACK
63
+ override var aUnderline: Boolean = true
64
+
65
+ override var codeBlockColor: Int = Color.BLACK
66
+ override var codeBlockBackgroundColor: Int = Color.BLACK
67
+ override var codeBlockRadius: Float = 4f
68
+
69
+ override var inlineCodeColor: Int = Color.BLACK
70
+ override var inlineCodeBackgroundColor: Int = Color.BLACK
71
+
72
+ override var mentionsStyle: MutableMap<String, MentionStyle> = mutableMapOf()
57
73
 
58
74
  constructor(view: EnrichedTextInputView?, style: ReadableMap?) {
59
75
  this.view = view
@@ -77,6 +93,18 @@ class HtmlStyle {
77
93
  h3FontSize = parseFloat(h3Style, "fontSize").toInt()
78
94
  h3Bold = h3Style?.getBoolean("bold") == true
79
95
 
96
+ val h4Style = style.getMap("h4")
97
+ h4FontSize = parseFloat(h4Style, "fontSize").toInt()
98
+ h4Bold = h4Style?.getBoolean("bold") == true
99
+
100
+ val h5Style = style.getMap("h5")
101
+ h5FontSize = parseFloat(h5Style, "fontSize").toInt()
102
+ h5Bold = h5Style?.getBoolean("bold") == true
103
+
104
+ val h6Style = style.getMap("h6")
105
+ h6FontSize = parseFloat(h6Style, "fontSize").toInt()
106
+ h6Bold = h6Style?.getBoolean("bold") == true
107
+
80
108
  val blockquoteStyle = style.getMap("blockquote")
81
109
  blockquoteColor = parseOptionalColor(blockquoteStyle, "color")
82
110
  blockquoteBorderColor = parseColor(blockquoteStyle, "borderColor")
@@ -97,6 +125,12 @@ class HtmlStyle {
97
125
  ulMarginLeft = parseFloat(ulStyle, "marginLeft").toInt()
98
126
  ulBulletSize = parseFloat(ulStyle, "bulletSize").toInt()
99
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
+
100
134
  val aStyle = style.getMap("a")
101
135
  aColor = parseColor(aStyle, "color")
102
136
  aUnderline = parseIsUnderline(aStyle)
@@ -114,19 +148,29 @@ class HtmlStyle {
114
148
  mentionsStyle = parseMentionsStyle(mentionStyle)
115
149
  }
116
150
 
117
- private fun parseFloat(map: ReadableMap?, key: String): Float {
151
+ private fun parseFloat(
152
+ map: ReadableMap?,
153
+ key: String,
154
+ ): Float {
118
155
  val safeMap = ensureValueIsSet(map, key)
119
156
 
120
157
  val value = safeMap.getDouble(key)
121
158
  return ceil(PixelUtil.toPixelFromSP(value))
122
159
  }
123
160
 
124
- private fun parseColorWithOpacity(map: ReadableMap?, key: String, opacity: Int): Int {
161
+ private fun parseColorWithOpacity(
162
+ map: ReadableMap?,
163
+ key: String,
164
+ opacity: Int,
165
+ ): Int {
125
166
  val color = parseColor(map, key)
126
167
  return withOpacity(color, opacity)
127
168
  }
128
169
 
129
- private fun parseOptionalColor(map: ReadableMap?, key: String): Int? {
170
+ private fun parseOptionalColor(
171
+ map: ReadableMap?,
172
+ key: String,
173
+ ): Int? {
130
174
  if (map == null) return null
131
175
  if (!map.hasKey(key)) return null
132
176
  if (map.isNull(key)) return null
@@ -134,7 +178,10 @@ class HtmlStyle {
134
178
  return parseColor(map, key)
135
179
  }
136
180
 
137
- private fun parseColor(map: ReadableMap?, key: String): Int {
181
+ private fun parseColor(
182
+ map: ReadableMap?,
183
+ key: String,
184
+ ): Int {
138
185
  val safeMap = ensureValueIsSet(map, key)
139
186
 
140
187
  val color = safeMap.getDouble(key)
@@ -146,7 +193,10 @@ class HtmlStyle {
146
193
  return parsedColor
147
194
  }
148
195
 
149
- private fun withOpacity(color: Int, alpha: Int): Int {
196
+ private fun withOpacity(
197
+ color: Int,
198
+ alpha: Int,
199
+ ): Int {
150
200
  // Do not apply opacity to transparent color
151
201
  if (Color.alpha(color) == 0) return color
152
202
  val a = alpha.coerceIn(0, 255)
@@ -164,14 +214,20 @@ class HtmlStyle {
164
214
  throw Error("Specified textDecorationLine value is not supported: $underline. Supported values are 'underline' and 'none'.")
165
215
  }
166
216
 
167
- private fun calculateOlMarginLeft(view: EnrichedTextInputView?, userMargin: Int): Int {
217
+ private fun calculateOlMarginLeft(
218
+ view: EnrichedTextInputView?,
219
+ userMargin: Int,
220
+ ): Int {
168
221
  val fontSize = view?.fontSize?.toInt() ?: 0
169
222
  val leadMargin = fontSize / 2
170
223
 
171
224
  return leadMargin + userMargin
172
225
  }
173
226
 
174
- private fun ensureValueIsSet(map: ReadableMap?, key: String): ReadableMap {
227
+ private fun ensureValueIsSet(
228
+ map: ReadableMap?,
229
+ key: String,
230
+ ): ReadableMap {
175
231
  if (map == null) throw Error("Style map cannot be null")
176
232
 
177
233
  if (!map.hasKey(key)) throw Error("Style map must contain key: $key")
@@ -186,24 +242,27 @@ class HtmlStyle {
186
242
 
187
243
  val parsedMentionsStyle: MutableMap<String, MentionStyle> = mutableMapOf()
188
244
 
189
- val iterator = mentionsStyle.keySetIterator()
190
- while (iterator.hasNextKey()) {
191
- val key = iterator.nextKey()
192
- val value = mentionsStyle.getMap(key)
245
+ val iterator = mentionsStyle.keySetIterator()
246
+ while (iterator.hasNextKey()) {
247
+ val key = iterator.nextKey()
248
+ val value = mentionsStyle.getMap(key)
193
249
 
194
- if (value == null) throw Error("Mention style for key '$key' cannot be null")
250
+ if (value == null) throw Error("Mention style for key '$key' cannot be null")
195
251
 
196
- val color = parseColor(value, "color")
197
- val backgroundColor = parseColorWithOpacity(value, "backgroundColor", 80)
198
- val isUnderline = parseIsUnderline(value)
199
- val parsedStyle = MentionStyle(color, backgroundColor, isUnderline)
200
- parsedMentionsStyle.put(key, parsedStyle)
201
- }
252
+ val color = parseColor(value, "color")
253
+ val backgroundColor = parseColorWithOpacity(value, "backgroundColor", 80)
254
+ val isUnderline = parseIsUnderline(value)
255
+ val parsedStyle = MentionStyle(color, backgroundColor, isUnderline)
256
+ parsedMentionsStyle.put(key, parsedStyle)
257
+ }
202
258
 
203
259
  return parsedMentionsStyle
204
260
  }
205
261
 
206
- private fun parseOptionalFontWeight(map: ReadableMap?, key: String): Int? {
262
+ private fun parseOptionalFontWeight(
263
+ map: ReadableMap?,
264
+ key: String,
265
+ ): Int? {
207
266
  if (map == null) return null
208
267
  if (!map.hasKey(key)) return null
209
268
  if (map.isNull(key)) return null
@@ -222,6 +281,12 @@ class HtmlStyle {
222
281
  h2Bold == other.h2Bold &&
223
282
  h3FontSize == other.h3FontSize &&
224
283
  h3Bold == other.h3Bold &&
284
+ h4FontSize == other.h4FontSize &&
285
+ h4Bold == other.h4Bold &&
286
+ h5FontSize == other.h5FontSize &&
287
+ h5Bold == other.h5Bold &&
288
+ h6FontSize == other.h6FontSize &&
289
+ h6Bold == other.h6Bold &&
225
290
 
226
291
  blockquoteColor == other.blockquoteColor &&
227
292
  blockquoteBorderColor == other.blockquoteBorderColor &&
@@ -238,6 +303,11 @@ class HtmlStyle {
238
303
  ulBulletSize == other.ulBulletSize &&
239
304
  ulBulletColor == other.ulBulletColor &&
240
305
 
306
+ ulCheckboxBoxSize == other.ulCheckboxBoxSize &&
307
+ ulCheckboxGapWidth == other.ulCheckboxGapWidth &&
308
+ ulCheckboxMarginLeft == other.ulCheckboxMarginLeft &&
309
+ ulCheckboxBoxColor == other.ulCheckboxBoxColor &&
310
+
241
311
  aColor == other.aColor &&
242
312
  aUnderline == other.aUnderline &&
243
313
 
@@ -251,7 +321,6 @@ class HtmlStyle {
251
321
  mentionsStyle == other.mentionsStyle
252
322
  }
253
323
 
254
-
255
324
  override fun hashCode(): Int {
256
325
  var result = h1FontSize.hashCode()
257
326
  result = 31 * result + h1Bold.hashCode()
@@ -259,6 +328,12 @@ class HtmlStyle {
259
328
  result = 31 * result + h2Bold.hashCode()
260
329
  result = 31 * result + h3FontSize.hashCode()
261
330
  result = 31 * result + h3Bold.hashCode()
331
+ result = 31 * result + h4FontSize.hashCode()
332
+ result = 31 * result + h4Bold.hashCode()
333
+ result = 31 * result + h5FontSize.hashCode()
334
+ result = 31 * result + h5Bold.hashCode()
335
+ result = 31 * result + h6FontSize.hashCode()
336
+ result = 31 * result + h6Bold.hashCode()
262
337
 
263
338
  result = 31 * result + (blockquoteColor ?: 0)
264
339
  result = 31 * result + blockquoteBorderColor.hashCode()
@@ -275,6 +350,11 @@ class HtmlStyle {
275
350
  result = 31 * result + ulBulletSize.hashCode()
276
351
  result = 31 * result + ulBulletColor.hashCode()
277
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
+
278
358
  result = 31 * result + aColor.hashCode()
279
359
  result = 31 * result + aUnderline.hashCode()
280
360
 
@@ -289,12 +369,4 @@ class HtmlStyle {
289
369
 
290
370
  return result
291
371
  }
292
-
293
- companion object {
294
- data class MentionStyle(
295
- val color: Int,
296
- val backgroundColor: Int,
297
- val underline: Boolean
298
- )
299
- }
300
372
  }
@@ -1,13 +1,20 @@
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
8
-
9
- class InlineStyles(private val view: EnrichedTextInputView) {
10
- private fun <T>setSpan(spannable: Spannable, type: Class<T>, start: Int, end: Int) {
5
+ import com.swmansion.enriched.textinput.EnrichedTextInputView
6
+ import com.swmansion.enriched.textinput.spans.EnrichedSpans
7
+ import com.swmansion.enriched.textinput.utils.getSafeSpanBoundaries
8
+
9
+ class InlineStyles(
10
+ private val view: EnrichedTextInputView,
11
+ ) {
12
+ private fun <T> setSpan(
13
+ spannable: Spannable,
14
+ type: Class<T>,
15
+ start: Int,
16
+ end: Int,
17
+ ) {
11
18
  val previousSpanStart = (start - 1).coerceAtLeast(0)
12
19
  val previousSpanEnd = previousSpanStart + 1
13
20
  val nextSpanStart = (end + 1).coerceAtMost(spannable.length)
@@ -37,7 +44,12 @@ class InlineStyles(private val view: EnrichedTextInputView) {
37
44
  spannable.setSpan(span, safeStart, safeEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
38
45
  }
39
46
 
40
- private fun <T>setAndMergeSpans(spannable: Spannable, type: Class<T>, start: Int, end: Int) {
47
+ private fun <T> setAndMergeSpans(
48
+ spannable: Spannable,
49
+ type: Class<T>,
50
+ start: Int,
51
+ end: Int,
52
+ ) {
41
53
  val spans = spannable.getSpans(start, end, type)
42
54
 
43
55
  // No spans setup for current selection, means we just need to assign new span
@@ -89,7 +101,10 @@ class InlineStyles(private val view: EnrichedTextInputView) {
89
101
  }
90
102
  }
91
103
 
92
- fun afterTextChanged(s: Editable, endCursorPosition: Int) {
104
+ fun afterTextChanged(
105
+ s: Editable,
106
+ endCursorPosition: Int,
107
+ ) {
93
108
  for ((style, config) in EnrichedSpans.inlineSpans) {
94
109
  val start = view.spanState?.getStart(style) ?: continue
95
110
  var end = endCursorPosition
@@ -128,7 +143,11 @@ class InlineStyles(private val view: EnrichedTextInputView) {
128
143
  view.selection.validateStyles()
129
144
  }
130
145
 
131
- fun removeStyle(name: String, start: Int, end: Int): Boolean {
146
+ fun removeStyle(
147
+ name: String,
148
+ start: Int,
149
+ end: Int,
150
+ ): Boolean {
132
151
  val config = EnrichedSpans.inlineSpans[name] ?: return false
133
152
  val spannable = view.text as Spannable
134
153
  val spans = spannable.getSpans(start, end, config.clazz)
@@ -141,7 +160,5 @@ class InlineStyles(private val view: EnrichedTextInputView) {
141
160
  return true
142
161
  }
143
162
 
144
- fun getStyleRange(): Pair<Int, Int> {
145
- return view.selection?.getInlineSelection() ?: Pair(0, 0)
146
- }
163
+ fun getStyleRange(): Pair<Int, Int> = view.selection?.getInlineSelection() ?: Pair(0, 0)
147
164
  }