@fendent/react-native-enriched 0.5.2-fork.1

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 (278) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +343 -0
  3. package/ReactNativeEnriched.podspec +31 -0
  4. package/android/build.gradle +106 -0
  5. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +197 -0
  6. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +72 -0
  7. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ComponentDescriptors.cpp +22 -0
  8. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ComponentDescriptors.h +24 -0
  9. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.cpp +434 -0
  10. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.h +391 -0
  11. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/Props.cpp +173 -0
  12. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/Props.h +833 -0
  13. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ShadowNodes.cpp +17 -0
  14. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ShadowNodes.h +23 -0
  15. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/States.cpp +16 -0
  16. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/States.h +20 -0
  17. package/android/gradle.properties +5 -0
  18. package/android/lint.gradle +70 -0
  19. package/android/src/main/AndroidManifest.xml +3 -0
  20. package/android/src/main/AndroidManifestNew.xml +2 -0
  21. package/android/src/main/java/com/swmansion/enriched/ReactNativeEnrichedPackage.kt +20 -0
  22. package/android/src/main/java/com/swmansion/enriched/common/AsyncDrawable.kt +126 -0
  23. package/android/src/main/java/com/swmansion/enriched/common/CheckboxDrawable.kt +81 -0
  24. package/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt +11 -0
  25. package/android/src/main/java/com/swmansion/enriched/common/EnrichedStyle.kt +57 -0
  26. package/android/src/main/java/com/swmansion/enriched/common/ForceRedrawSpan.kt +14 -0
  27. package/android/src/main/java/com/swmansion/enriched/common/GumboNormalizer.kt +5 -0
  28. package/android/src/main/java/com/swmansion/enriched/common/MentionStyle.kt +7 -0
  29. package/android/src/main/java/com/swmansion/enriched/common/ResourceManager.kt +26 -0
  30. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java +956 -0
  31. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +79 -0
  32. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBlockQuoteSpan.kt +53 -0
  33. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBoldSpan.kt +12 -0
  34. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCheckboxListSpan.kt +92 -0
  35. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCodeBlockSpan.kt +81 -0
  36. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH1Span.kt +20 -0
  37. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH2Span.kt +20 -0
  38. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH3Span.kt +20 -0
  39. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH4Span.kt +21 -0
  40. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH5Span.kt +20 -0
  41. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH6Span.kt +20 -0
  42. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedImageSpan.kt +184 -0
  43. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedInlineCodeSpan.kt +24 -0
  44. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedItalicSpan.kt +12 -0
  45. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedLinkSpan.kt +29 -0
  46. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedMentionSpan.kt +35 -0
  47. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedOrderedListSpan.kt +79 -0
  48. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedStrikeThroughSpan.kt +11 -0
  49. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnderlineSpan.kt +11 -0
  50. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnorderedListSpan.kt +62 -0
  51. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedBlockSpan.kt +5 -0
  52. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedHeadingSpan.kt +3 -0
  53. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedInlineSpan.kt +3 -0
  54. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedParagraphSpan.kt +5 -0
  55. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedSpan.kt +3 -0
  56. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedZeroWidthSpaceSpan.kt +4 -0
  57. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputConnectionWrapper.kt +140 -0
  58. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +83 -0
  59. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +1120 -0
  60. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewLayoutManager.kt +27 -0
  61. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt +478 -0
  62. package/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt +225 -0
  63. package/android/src/main/java/com/swmansion/enriched/textinput/events/MentionHandler.kt +55 -0
  64. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeHtmlEvent.kt +27 -0
  65. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeSelectionEvent.kt +30 -0
  66. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeStateEvent.kt +21 -0
  67. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeTextEvent.kt +30 -0
  68. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnContextMenuItemPressEvent.kt +35 -0
  69. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputBlurEvent.kt +25 -0
  70. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputFocusEvent.kt +25 -0
  71. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputKeyPressEvent.kt +27 -0
  72. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnLinkDetectedEvent.kt +32 -0
  73. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionDetectedEvent.kt +30 -0
  74. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionEvent.kt +34 -0
  75. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnPasteImagesEvent.kt +47 -0
  76. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnRequestHtmlResultEvent.kt +32 -0
  77. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnSubmitEditingEvent.kt +29 -0
  78. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt +14 -0
  79. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBoldSpan.kt +14 -0
  80. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCheckboxListSpan.kt +15 -0
  81. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt +14 -0
  82. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH1Span.kt +14 -0
  83. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH2Span.kt +14 -0
  84. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH3Span.kt +14 -0
  85. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH4Span.kt +14 -0
  86. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH5Span.kt +14 -0
  87. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH6Span.kt +14 -0
  88. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt +36 -0
  89. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt +14 -0
  90. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt +14 -0
  91. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputLinkSpan.kt +16 -0
  92. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt +18 -0
  93. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt +21 -0
  94. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputStrikeThroughSpan.kt +14 -0
  95. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt +14 -0
  96. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnorderedListSpan.kt +14 -0
  97. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt +44 -0
  98. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedSpans.kt +241 -0
  99. package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt +10 -0
  100. package/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt +372 -0
  101. package/android/src/main/java/com/swmansion/enriched/textinput/styles/InlineStyles.kt +164 -0
  102. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ListStyles.kt +263 -0
  103. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParagraphStyles.kt +434 -0
  104. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt +394 -0
  105. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedEditableFactory.kt +17 -0
  106. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSelection.kt +320 -0
  107. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpanState.kt +310 -0
  108. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannable.kt +106 -0
  109. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannableStringBuilder.kt +24 -0
  110. package/android/src/main/java/com/swmansion/enriched/textinput/utils/RichContentReceiver.kt +127 -0
  111. package/android/src/main/java/com/swmansion/enriched/textinput/utils/Utils.kt +106 -0
  112. package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedSpanWatcher.kt +107 -0
  113. package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedTextWatcher.kt +74 -0
  114. package/android/src/main/new_arch/CMakeLists.txt +62 -0
  115. package/android/src/main/new_arch/GumboNormalizerJni.cpp +14 -0
  116. package/android/src/main/new_arch/ReactNativeEnrichedSpec.cpp +11 -0
  117. package/android/src/main/new_arch/ReactNativeEnrichedSpec.h +15 -0
  118. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputComponentDescriptor.h +35 -0
  119. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.cpp +53 -0
  120. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.h +25 -0
  121. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.cpp +35 -0
  122. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.h +53 -0
  123. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.cpp +9 -0
  124. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.h +24 -0
  125. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h +27 -0
  126. package/android/src/main/res/drawable/broken_image.xml +10 -0
  127. package/cpp/CMakeLists.txt +50 -0
  128. package/cpp/GumboParser/GumboParser.h +34043 -0
  129. package/cpp/README.md +59 -0
  130. package/cpp/parser/GumboNormalizer.c +915 -0
  131. package/cpp/parser/GumboParser.cpp +16 -0
  132. package/cpp/parser/GumboParser.hpp +23 -0
  133. package/cpp/tests/GumboParserTest.cpp +457 -0
  134. package/ios/EnrichedTextInputView.h +53 -0
  135. package/ios/EnrichedTextInputView.mm +2360 -0
  136. package/ios/EnrichedTextInputViewManager.mm +13 -0
  137. package/ios/attributesManager/AttributesManager.h +17 -0
  138. package/ios/attributesManager/AttributesManager.mm +195 -0
  139. package/ios/config/InputConfig.h +104 -0
  140. package/ios/config/InputConfig.mm +664 -0
  141. package/ios/extensions/ColorExtension.h +7 -0
  142. package/ios/extensions/ColorExtension.mm +38 -0
  143. package/ios/extensions/FontExtension.h +11 -0
  144. package/ios/extensions/FontExtension.mm +72 -0
  145. package/ios/extensions/ImageExtension.h +34 -0
  146. package/ios/extensions/ImageExtension.mm +165 -0
  147. package/ios/extensions/LayoutManagerExtension.h +6 -0
  148. package/ios/extensions/LayoutManagerExtension.mm +443 -0
  149. package/ios/extensions/StringExtension.h +15 -0
  150. package/ios/extensions/StringExtension.mm +69 -0
  151. package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.cpp +22 -0
  152. package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.h +24 -0
  153. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.cpp +434 -0
  154. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.h +391 -0
  155. package/ios/generated/ReactNativeEnrichedSpec/Props.cpp +173 -0
  156. package/ios/generated/ReactNativeEnrichedSpec/Props.h +833 -0
  157. package/ios/generated/ReactNativeEnrichedSpec/RCTComponentViewHelpers.h +582 -0
  158. package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.cpp +17 -0
  159. package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.h +23 -0
  160. package/ios/generated/ReactNativeEnrichedSpec/States.cpp +16 -0
  161. package/ios/generated/ReactNativeEnrichedSpec/States.h +20 -0
  162. package/ios/inputParser/InputParser.h +11 -0
  163. package/ios/inputParser/InputParser.mm +1463 -0
  164. package/ios/inputTextView/InputTextView.h +6 -0
  165. package/ios/inputTextView/InputTextView.mm +285 -0
  166. package/ios/interfaces/AttributeEntry.h +9 -0
  167. package/ios/interfaces/AttributeEntry.mm +4 -0
  168. package/ios/interfaces/BaseStyleProtocol.h +17 -0
  169. package/ios/interfaces/ImageAttachment.h +11 -0
  170. package/ios/interfaces/ImageAttachment.mm +107 -0
  171. package/ios/interfaces/ImageData.h +10 -0
  172. package/ios/interfaces/ImageData.mm +4 -0
  173. package/ios/interfaces/LinkData.h +11 -0
  174. package/ios/interfaces/LinkData.mm +29 -0
  175. package/ios/interfaces/LinkRegexConfig.h +19 -0
  176. package/ios/interfaces/LinkRegexConfig.mm +37 -0
  177. package/ios/interfaces/MediaAttachment.h +23 -0
  178. package/ios/interfaces/MediaAttachment.mm +31 -0
  179. package/ios/interfaces/MentionParams.h +8 -0
  180. package/ios/interfaces/MentionParams.mm +4 -0
  181. package/ios/interfaces/MentionStyleProps.h +13 -0
  182. package/ios/interfaces/MentionStyleProps.mm +63 -0
  183. package/ios/interfaces/StyleBase.h +36 -0
  184. package/ios/interfaces/StyleBase.mm +256 -0
  185. package/ios/interfaces/StyleHeaders.h +102 -0
  186. package/ios/interfaces/StylePair.h +9 -0
  187. package/ios/interfaces/StylePair.mm +4 -0
  188. package/ios/interfaces/StyleTypeEnum.h +26 -0
  189. package/ios/interfaces/TextDecorationLineEnum.h +6 -0
  190. package/ios/interfaces/TextDecorationLineEnum.mm +4 -0
  191. package/ios/internals/EnrichedTextInputViewComponentDescriptor.h +19 -0
  192. package/ios/internals/EnrichedTextInputViewShadowNode.h +44 -0
  193. package/ios/internals/EnrichedTextInputViewShadowNode.mm +103 -0
  194. package/ios/internals/EnrichedTextInputViewState.cpp +10 -0
  195. package/ios/internals/EnrichedTextInputViewState.h +22 -0
  196. package/ios/styles/BlockQuoteStyle.mm +55 -0
  197. package/ios/styles/BoldStyle.mm +37 -0
  198. package/ios/styles/CheckboxListStyle.mm +153 -0
  199. package/ios/styles/CodeBlockStyle.mm +49 -0
  200. package/ios/styles/H1Style.mm +20 -0
  201. package/ios/styles/H2Style.mm +20 -0
  202. package/ios/styles/H3Style.mm +20 -0
  203. package/ios/styles/H4Style.mm +20 -0
  204. package/ios/styles/H5Style.mm +20 -0
  205. package/ios/styles/H6Style.mm +20 -0
  206. package/ios/styles/HeadingStyleBase.mm +65 -0
  207. package/ios/styles/ImageStyle.mm +146 -0
  208. package/ios/styles/InlineCodeStyle.mm +65 -0
  209. package/ios/styles/ItalicStyle.mm +37 -0
  210. package/ios/styles/LinkStyle.mm +532 -0
  211. package/ios/styles/MentionStyle.mm +538 -0
  212. package/ios/styles/OrderedListStyle.mm +86 -0
  213. package/ios/styles/StrikethroughStyle.mm +25 -0
  214. package/ios/styles/UnderlineStyle.mm +24 -0
  215. package/ios/styles/UnorderedListStyle.mm +86 -0
  216. package/ios/utils/CheckboxHitTestUtils.h +10 -0
  217. package/ios/utils/CheckboxHitTestUtils.mm +122 -0
  218. package/ios/utils/DotReplacementUtils.h +10 -0
  219. package/ios/utils/DotReplacementUtils.mm +68 -0
  220. package/ios/utils/KeyboardUtils.h +7 -0
  221. package/ios/utils/KeyboardUtils.mm +31 -0
  222. package/ios/utils/OccurenceUtils.h +44 -0
  223. package/ios/utils/OccurenceUtils.mm +179 -0
  224. package/ios/utils/ParagraphAttributesUtils.h +15 -0
  225. package/ios/utils/ParagraphAttributesUtils.mm +257 -0
  226. package/ios/utils/RangeUtils.h +12 -0
  227. package/ios/utils/RangeUtils.mm +183 -0
  228. package/ios/utils/TextBlockTapGestureRecognizer.h +17 -0
  229. package/ios/utils/TextBlockTapGestureRecognizer.mm +56 -0
  230. package/ios/utils/TextInsertionUtils.h +17 -0
  231. package/ios/utils/TextInsertionUtils.mm +64 -0
  232. package/ios/utils/WordsUtils.h +7 -0
  233. package/ios/utils/WordsUtils.mm +98 -0
  234. package/ios/utils/ZeroWidthSpaceUtils.h +9 -0
  235. package/ios/utils/ZeroWidthSpaceUtils.mm +270 -0
  236. package/lib/module/index.js +4 -0
  237. package/lib/module/index.js.map +1 -0
  238. package/lib/module/native/EnrichedTextInput.js +304 -0
  239. package/lib/module/native/EnrichedTextInput.js.map +1 -0
  240. package/lib/module/package.json +1 -0
  241. package/lib/module/spec/EnrichedTextInputNativeComponent.ts +517 -0
  242. package/lib/module/types.js +4 -0
  243. package/lib/module/types.js.map +1 -0
  244. package/lib/module/utils/EnrichedTextInputDefaultProps.js +12 -0
  245. package/lib/module/utils/EnrichedTextInputDefaultProps.js.map +1 -0
  246. package/lib/module/utils/normalizeHtmlStyle.js +155 -0
  247. package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
  248. package/lib/module/utils/nullthrows.js +9 -0
  249. package/lib/module/utils/nullthrows.js.map +1 -0
  250. package/lib/module/utils/regexParser.js +46 -0
  251. package/lib/module/utils/regexParser.js.map +1 -0
  252. package/lib/typescript/package.json +1 -0
  253. package/lib/typescript/src/index.d.ts +3 -0
  254. package/lib/typescript/src/index.d.ts.map +1 -0
  255. package/lib/typescript/src/native/EnrichedTextInput.d.ts +3 -0
  256. package/lib/typescript/src/native/EnrichedTextInput.d.ts.map +1 -0
  257. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts +397 -0
  258. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts.map +1 -0
  259. package/lib/typescript/src/types.d.ts +447 -0
  260. package/lib/typescript/src/types.d.ts.map +1 -0
  261. package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts +10 -0
  262. package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts.map +1 -0
  263. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +4 -0
  264. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
  265. package/lib/typescript/src/utils/nullthrows.d.ts +2 -0
  266. package/lib/typescript/src/utils/nullthrows.d.ts.map +1 -0
  267. package/lib/typescript/src/utils/regexParser.d.ts +3 -0
  268. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
  269. package/package.json +226 -0
  270. package/react-native.config.js +13 -0
  271. package/src/index.tsx +20 -0
  272. package/src/native/EnrichedTextInput.tsx +370 -0
  273. package/src/spec/EnrichedTextInputNativeComponent.ts +517 -0
  274. package/src/types.ts +499 -0
  275. package/src/utils/EnrichedTextInputDefaultProps.ts +9 -0
  276. package/src/utils/normalizeHtmlStyle.ts +199 -0
  277. package/src/utils/nullthrows.ts +7 -0
  278. package/src/utils/regexParser.ts +56 -0
@@ -0,0 +1,29 @@
1
+ package com.swmansion.enriched.textinput.events
2
+
3
+ import android.text.Editable
4
+ import com.facebook.react.bridge.Arguments
5
+ import com.facebook.react.bridge.WritableMap
6
+ import com.facebook.react.uimanager.events.Event
7
+
8
+ class OnSubmitEditingEvent(
9
+ surfaceId: Int,
10
+ viewId: Int,
11
+ private val editable: Editable?,
12
+ private val experimentalSynchronousEvents: Boolean,
13
+ ) : Event<OnSubmitEditingEvent>(surfaceId, viewId) {
14
+ override fun getEventName(): String = EVENT_NAME
15
+
16
+ override fun getEventData(): WritableMap {
17
+ val eventData: WritableMap = Arguments.createMap()
18
+ val text = editable.toString()
19
+ val normalizedText = text.replace(Regex("\\u200B"), "")
20
+ eventData.putString("text", normalizedText)
21
+ return eventData
22
+ }
23
+
24
+ override fun experimental_isSynchronous(): Boolean = experimentalSynchronousEvents
25
+
26
+ companion object {
27
+ const val EVENT_NAME: String = "onSubmitEditing"
28
+ }
29
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedBlockQuoteSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputBlockQuoteSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedBlockQuoteSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputBlockQuoteSpan = EnrichedInputBlockQuoteSpan(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedBoldSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputBoldSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedBoldSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = false
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputBoldSpan = EnrichedInputBoldSpan(htmlStyle)
14
+ }
@@ -0,0 +1,15 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedCheckboxListSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputCheckboxListSpan(
8
+ override var isChecked: Boolean,
9
+ htmlStyle: HtmlStyle,
10
+ ) : EnrichedCheckboxListSpan(isChecked, htmlStyle),
11
+ EnrichedInputSpan {
12
+ override val dependsOnHtmlStyle: Boolean = true
13
+
14
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputCheckboxListSpan = EnrichedInputCheckboxListSpan(isChecked, htmlStyle)
15
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedCodeBlockSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputCodeBlockSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedCodeBlockSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputCodeBlockSpan = EnrichedInputCodeBlockSpan(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedH1Span
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputH1Span(
8
+ style: HtmlStyle,
9
+ ) : EnrichedH1Span(style),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH1Span = EnrichedInputH1Span(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedH2Span
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputH2Span(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedH2Span(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH2Span = EnrichedInputH2Span(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedH3Span
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputH3Span(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedH3Span(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH3Span = EnrichedInputH3Span(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedH4Span
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputH4Span(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedH4Span(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH4Span = EnrichedInputH4Span(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedH5Span
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputH5Span(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedH5Span(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH5Span = EnrichedInputH5Span(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedH6Span
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputH6Span(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedH6Span(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputH6Span = EnrichedInputH6Span(htmlStyle)
14
+ }
@@ -0,0 +1,36 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import android.graphics.drawable.Drawable
4
+ import com.swmansion.enriched.R
5
+ import com.swmansion.enriched.common.ResourceManager
6
+ import com.swmansion.enriched.common.spans.EnrichedImageSpan
7
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
8
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
9
+
10
+ class EnrichedInputImageSpan(
11
+ drawable: Drawable,
12
+ source: String,
13
+ width: Int,
14
+ height: Int,
15
+ ) : EnrichedImageSpan(drawable, source, width, height),
16
+ EnrichedInputSpan {
17
+ override val dependsOnHtmlStyle: Boolean = false
18
+
19
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputImageSpan = this
20
+
21
+ companion object {
22
+ fun createEnrichedImageSpan(
23
+ src: String,
24
+ width: Int,
25
+ height: Int,
26
+ ): EnrichedInputImageSpan {
27
+ var imgDrawable = prepareDrawableForImage(src, width, height)
28
+
29
+ if (imgDrawable == null) {
30
+ imgDrawable = ResourceManager.getDrawableResource(R.drawable.broken_image)
31
+ }
32
+
33
+ return EnrichedInputImageSpan(imgDrawable, src, width, height)
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedInlineCodeSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputInlineCodeSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedInlineCodeSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = true
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputInlineCodeSpan = EnrichedInputInlineCodeSpan(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedItalicSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputItalicSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedItalicSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = false
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputItalicSpan = EnrichedInputItalicSpan(htmlStyle)
14
+ }
@@ -0,0 +1,16 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedLinkSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputLinkSpan(
8
+ private val url: String,
9
+ htmlStyle: HtmlStyle,
10
+ private val isManual: Boolean = false,
11
+ ) : EnrichedLinkSpan(url, htmlStyle, isManual),
12
+ EnrichedInputSpan {
13
+ override val dependsOnHtmlStyle: Boolean = true
14
+
15
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputLinkSpan = EnrichedInputLinkSpan(url, htmlStyle, isManual)
16
+ }
@@ -0,0 +1,18 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedMentionSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputMentionSpan(
8
+ private val text: String,
9
+ private val indicator: String,
10
+ private val attributes: Map<String, String>,
11
+ htmlStyle: HtmlStyle,
12
+ ) : EnrichedMentionSpan(text, indicator, attributes, htmlStyle),
13
+ EnrichedInputSpan {
14
+ override val dependsOnHtmlStyle: Boolean = true
15
+
16
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputMentionSpan =
17
+ EnrichedInputMentionSpan(text, indicator, attributes, htmlStyle)
18
+ }
@@ -0,0 +1,21 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedOrderedListSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputOrderedListSpan(
8
+ index: Int,
9
+ htmlStyle: HtmlStyle,
10
+ ) : EnrichedOrderedListSpan(index, htmlStyle),
11
+ EnrichedInputSpan {
12
+ override val dependsOnHtmlStyle: Boolean = true
13
+
14
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputOrderedListSpan = EnrichedInputOrderedListSpan(index, htmlStyle)
15
+
16
+ fun getListIndex(): Int = index
17
+
18
+ fun setListIndex(i: Int) {
19
+ index = i
20
+ }
21
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedStrikeThroughSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputStrikeThroughSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedStrikeThroughSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = false
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputStrikeThroughSpan = EnrichedInputStrikeThroughSpan(htmlStyle)
14
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedUnderlineSpan
4
+ import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
5
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
6
+
7
+ class EnrichedInputUnderlineSpan(
8
+ htmlStyle: HtmlStyle,
9
+ ) : EnrichedUnderlineSpan(htmlStyle),
10
+ EnrichedInputSpan {
11
+ override val dependsOnHtmlStyle: Boolean = false
12
+
13
+ override fun rebuildWithStyle(htmlStyle: HtmlStyle): EnrichedInputUnderlineSpan = EnrichedInputUnderlineSpan(htmlStyle)
14
+ }
@@ -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,44 @@
1
+ package com.swmansion.enriched.textinput.spans
2
+
3
+ import android.graphics.Paint
4
+ import android.text.Spannable
5
+ import android.text.TextPaint
6
+ import android.text.style.LineHeightSpan
7
+ import android.text.style.MetricAffectingSpan
8
+ import com.facebook.react.uimanager.PixelUtil
9
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
10
+
11
+ class EnrichedLineHeightSpan(
12
+ val lineHeight: Float,
13
+ ) : MetricAffectingSpan(),
14
+ LineHeightSpan {
15
+ override fun updateDrawState(p0: TextPaint?) {
16
+ // Do nothing but inform TextView that line height should be recalculated
17
+ }
18
+
19
+ override fun updateMeasureState(p0: TextPaint) {
20
+ // Do nothing but inform TextView that line height should be recalculated
21
+ }
22
+
23
+ override fun chooseHeight(
24
+ text: CharSequence,
25
+ start: Int,
26
+ end: Int,
27
+ spanstartv: Int,
28
+ v: Int,
29
+ fm: Paint.FontMetricsInt,
30
+ ) {
31
+ val spannable = text as? Spannable ?: return
32
+ // Do not modify line height for headings
33
+ // In the future we may consider adding custom lineHeight support for each paragraph style
34
+ if (spannable.getSpans(start, end, EnrichedHeadingSpan::class.java).isNotEmpty()) return
35
+
36
+ val lineHeightPx = PixelUtil.toPixelFromSP(lineHeight)
37
+ val currentHeight = (fm.descent - fm.ascent).toFloat()
38
+ if (lineHeightPx <= currentHeight) return
39
+
40
+ val extra = (lineHeightPx - currentHeight).toInt()
41
+ fm.ascent -= extra
42
+ fm.top = minOf(fm.top, fm.ascent)
43
+ }
44
+ }
@@ -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
+ }