@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,27 @@
1
+ package com.swmansion.enriched.textinput
2
+
3
+ import com.facebook.react.bridge.Arguments
4
+
5
+ class EnrichedTextInputViewLayoutManager(
6
+ private val view: EnrichedTextInputView,
7
+ ) {
8
+ private var forceHeightRecalculationCounter: Int = 0
9
+
10
+ fun invalidateLayout() {
11
+ val text = view.text
12
+ val paint = view.paint
13
+
14
+ val needUpdate = MeasurementStore.store(view.id, text, paint)
15
+ if (!needUpdate) return
16
+
17
+ val counter = forceHeightRecalculationCounter
18
+ forceHeightRecalculationCounter++
19
+ val state = Arguments.createMap()
20
+ state.putInt("forceHeightRecalculationCounter", counter)
21
+ view.stateWrapper?.updateState(state)
22
+ }
23
+
24
+ fun releaseMeasurementStore() {
25
+ MeasurementStore.release(view.id)
26
+ }
27
+ }
@@ -0,0 +1,478 @@
1
+ package com.swmansion.enriched.textinput
2
+
3
+ import android.content.Context
4
+ import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import com.facebook.react.module.annotations.ReactModule
7
+ import com.facebook.react.uimanager.ReactStylesDiffMap
8
+ import com.facebook.react.uimanager.SimpleViewManager
9
+ import com.facebook.react.uimanager.StateWrapper
10
+ import com.facebook.react.uimanager.ThemedReactContext
11
+ import com.facebook.react.uimanager.ViewDefaults
12
+ import com.facebook.react.uimanager.ViewManagerDelegate
13
+ import com.facebook.react.uimanager.ViewProps
14
+ import com.facebook.react.uimanager.annotations.ReactProp
15
+ import com.facebook.react.viewmanagers.EnrichedTextInputViewManagerDelegate
16
+ import com.facebook.react.viewmanagers.EnrichedTextInputViewManagerInterface
17
+ import com.facebook.yoga.YogaMeasureMode
18
+ import com.swmansion.enriched.textinput.events.OnChangeHtmlEvent
19
+ import com.swmansion.enriched.textinput.events.OnChangeSelectionEvent
20
+ import com.swmansion.enriched.textinput.events.OnChangeStateEvent
21
+ import com.swmansion.enriched.textinput.events.OnChangeTextEvent
22
+ import com.swmansion.enriched.textinput.events.OnContextMenuItemPressEvent
23
+ import com.swmansion.enriched.textinput.events.OnInputBlurEvent
24
+ import com.swmansion.enriched.textinput.events.OnInputFocusEvent
25
+ import com.swmansion.enriched.textinput.events.OnInputKeyPressEvent
26
+ import com.swmansion.enriched.textinput.events.OnLinkDetectedEvent
27
+ import com.swmansion.enriched.textinput.events.OnMentionDetectedEvent
28
+ import com.swmansion.enriched.textinput.events.OnMentionEvent
29
+ import com.swmansion.enriched.textinput.events.OnPasteImagesEvent
30
+ import com.swmansion.enriched.textinput.events.OnRequestHtmlResultEvent
31
+ import com.swmansion.enriched.textinput.events.OnSubmitEditingEvent
32
+ import com.swmansion.enriched.textinput.spans.EnrichedSpans
33
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
34
+ import com.swmansion.enriched.textinput.utils.jsonStringToStringMap
35
+
36
+ @ReactModule(name = EnrichedTextInputViewManager.NAME)
37
+ class EnrichedTextInputViewManager :
38
+ SimpleViewManager<EnrichedTextInputView>(),
39
+ EnrichedTextInputViewManagerInterface<EnrichedTextInputView> {
40
+ private val mDelegate: ViewManagerDelegate<EnrichedTextInputView> =
41
+ EnrichedTextInputViewManagerDelegate(this)
42
+
43
+ override fun getDelegate(): ViewManagerDelegate<EnrichedTextInputView>? = mDelegate
44
+
45
+ override fun getName(): String = NAME
46
+
47
+ public override fun createViewInstance(context: ThemedReactContext): EnrichedTextInputView = EnrichedTextInputView(context)
48
+
49
+ override fun onDropViewInstance(view: EnrichedTextInputView) {
50
+ super.onDropViewInstance(view)
51
+ view.layoutManager.releaseMeasurementStore()
52
+ }
53
+
54
+ override fun updateState(
55
+ view: EnrichedTextInputView,
56
+ props: ReactStylesDiffMap?,
57
+ stateWrapper: StateWrapper?,
58
+ ): Any? {
59
+ view.stateWrapper = stateWrapper
60
+ return super.updateState(view, props, stateWrapper)
61
+ }
62
+
63
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> {
64
+ val map = mutableMapOf<String, Any>()
65
+ map.put(OnInputFocusEvent.EVENT_NAME, mapOf("registrationName" to OnInputFocusEvent.EVENT_NAME))
66
+ map.put(OnInputBlurEvent.EVENT_NAME, mapOf("registrationName" to OnInputBlurEvent.EVENT_NAME))
67
+ map.put(OnChangeTextEvent.EVENT_NAME, mapOf("registrationName" to OnChangeTextEvent.EVENT_NAME))
68
+ map.put(OnChangeHtmlEvent.EVENT_NAME, mapOf("registrationName" to OnChangeHtmlEvent.EVENT_NAME))
69
+ map.put(OnChangeStateEvent.EVENT_NAME, mapOf("registrationName" to OnChangeStateEvent.EVENT_NAME))
70
+ map.put(OnLinkDetectedEvent.EVENT_NAME, mapOf("registrationName" to OnLinkDetectedEvent.EVENT_NAME))
71
+ map.put(OnMentionDetectedEvent.EVENT_NAME, mapOf("registrationName" to OnMentionDetectedEvent.EVENT_NAME))
72
+ map.put(OnMentionEvent.EVENT_NAME, mapOf("registrationName" to OnMentionEvent.EVENT_NAME))
73
+ map.put(OnChangeSelectionEvent.EVENT_NAME, mapOf("registrationName" to OnChangeSelectionEvent.EVENT_NAME))
74
+ map.put(OnRequestHtmlResultEvent.EVENT_NAME, mapOf("registrationName" to OnRequestHtmlResultEvent.EVENT_NAME))
75
+ map.put(OnInputKeyPressEvent.EVENT_NAME, mapOf("registrationName" to OnInputKeyPressEvent.EVENT_NAME))
76
+ map.put(OnPasteImagesEvent.EVENT_NAME, mapOf("registrationName" to OnPasteImagesEvent.EVENT_NAME))
77
+ map.put(OnContextMenuItemPressEvent.EVENT_NAME, mapOf("registrationName" to OnContextMenuItemPressEvent.EVENT_NAME))
78
+ map.put(OnSubmitEditingEvent.EVENT_NAME, mapOf("registrationName" to OnSubmitEditingEvent.EVENT_NAME))
79
+
80
+ return map
81
+ }
82
+
83
+ @ReactProp(name = "defaultValue")
84
+ override fun setDefaultValue(
85
+ view: EnrichedTextInputView?,
86
+ value: String?,
87
+ ) {
88
+ view?.setDefaultValue(value)
89
+ }
90
+
91
+ @ReactProp(name = "placeholder")
92
+ override fun setPlaceholder(
93
+ view: EnrichedTextInputView?,
94
+ value: String?,
95
+ ) {
96
+ view?.setPlaceholder(value)
97
+ }
98
+
99
+ @ReactProp(name = "placeholderTextColor", customType = "Color")
100
+ override fun setPlaceholderTextColor(
101
+ view: EnrichedTextInputView?,
102
+ color: Int?,
103
+ ) {
104
+ view?.setPlaceholderTextColor(color)
105
+ }
106
+
107
+ @ReactProp(name = "cursorColor", customType = "Color")
108
+ override fun setCursorColor(
109
+ view: EnrichedTextInputView?,
110
+ color: Int?,
111
+ ) {
112
+ view?.setCursorColor(color)
113
+ }
114
+
115
+ @ReactProp(name = "returnKeyType")
116
+ override fun setReturnKeyType(
117
+ view: EnrichedTextInputView?,
118
+ returnKeyType: String?,
119
+ ) {
120
+ // Not supported on multiline text input
121
+ }
122
+
123
+ @ReactProp(name = "submitBehavior")
124
+ override fun setSubmitBehavior(
125
+ view: EnrichedTextInputView?,
126
+ submitBehavior: String?,
127
+ ) {
128
+ view?.submitBehavior = submitBehavior
129
+ }
130
+
131
+ @ReactProp(name = "returnKeyLabel")
132
+ override fun setReturnKeyLabel(
133
+ view: EnrichedTextInputView?,
134
+ returnKeyLabel: String?,
135
+ ) {
136
+ view?.setReturnKeyLabel(returnKeyLabel)
137
+ }
138
+
139
+ @ReactProp(name = "selectionColor", customType = "Color")
140
+ override fun setSelectionColor(
141
+ view: EnrichedTextInputView?,
142
+ color: Int?,
143
+ ) {
144
+ view?.setSelectionColor(color)
145
+ }
146
+
147
+ @ReactProp(name = "autoFocus", defaultBoolean = false)
148
+ override fun setAutoFocus(
149
+ view: EnrichedTextInputView?,
150
+ autoFocus: Boolean,
151
+ ) {
152
+ view?.setAutoFocus(autoFocus)
153
+ }
154
+
155
+ @ReactProp(name = "editable", defaultBoolean = true)
156
+ override fun setEditable(
157
+ view: EnrichedTextInputView?,
158
+ editable: Boolean,
159
+ ) {
160
+ view?.isEnabled = editable
161
+ }
162
+
163
+ @ReactProp(name = "mentionIndicators")
164
+ override fun setMentionIndicators(
165
+ view: EnrichedTextInputView?,
166
+ indicators: ReadableArray?,
167
+ ) {
168
+ if (indicators == null) return
169
+
170
+ val indicatorsList = mutableListOf<String>()
171
+ for (i in 0 until indicators.size()) {
172
+ val stringValue = indicators.getString(i) ?: continue
173
+ indicatorsList.add(stringValue)
174
+ }
175
+
176
+ val indicatorsArray = indicatorsList.toTypedArray()
177
+ view?.parametrizedStyles?.mentionIndicators = indicatorsArray
178
+ }
179
+
180
+ @ReactProp(name = "htmlStyle")
181
+ override fun setHtmlStyle(
182
+ view: EnrichedTextInputView?,
183
+ style: ReadableMap?,
184
+ ) {
185
+ view?.htmlStyle = HtmlStyle(view, style)
186
+ }
187
+
188
+ @ReactProp(name = ViewProps.COLOR, customType = "Color")
189
+ override fun setColor(
190
+ view: EnrichedTextInputView?,
191
+ color: Int?,
192
+ ) {
193
+ view?.setColor(color)
194
+ }
195
+
196
+ @ReactProp(name = "fontSize", defaultFloat = ViewDefaults.FONT_SIZE_SP)
197
+ override fun setFontSize(
198
+ view: EnrichedTextInputView?,
199
+ size: Float,
200
+ ) {
201
+ view?.setFontSize(size)
202
+ }
203
+
204
+ @ReactProp(name = "lineHeight", defaultFloat = 0f)
205
+ override fun setLineHeight(
206
+ view: EnrichedTextInputView?,
207
+ height: Float,
208
+ ) {
209
+ view?.setLineHeight(height)
210
+ }
211
+
212
+ @ReactProp(name = "fontFamily")
213
+ override fun setFontFamily(
214
+ view: EnrichedTextInputView?,
215
+ family: String?,
216
+ ) {
217
+ view?.setFontFamily(family)
218
+ }
219
+
220
+ @ReactProp(name = "fontWeight")
221
+ override fun setFontWeight(
222
+ view: EnrichedTextInputView?,
223
+ weight: String?,
224
+ ) {
225
+ view?.setFontWeight(weight)
226
+ }
227
+
228
+ @ReactProp(name = "fontStyle")
229
+ override fun setFontStyle(
230
+ view: EnrichedTextInputView?,
231
+ style: String?,
232
+ ) {
233
+ view?.setFontStyle(style)
234
+ }
235
+
236
+ @ReactProp(name = "scrollEnabled")
237
+ override fun setScrollEnabled(
238
+ view: EnrichedTextInputView,
239
+ scrollEnabled: Boolean,
240
+ ) {
241
+ view.scrollEnabled = scrollEnabled
242
+ }
243
+
244
+ override fun onAfterUpdateTransaction(view: EnrichedTextInputView) {
245
+ super.onAfterUpdateTransaction(view)
246
+ view.afterUpdateTransaction()
247
+ }
248
+
249
+ override fun setPadding(
250
+ view: EnrichedTextInputView?,
251
+ left: Int,
252
+ top: Int,
253
+ right: Int,
254
+ bottom: Int,
255
+ ) {
256
+ super.setPadding(view, left, top, right, bottom)
257
+
258
+ view?.setPadding(left, top, right, bottom)
259
+ }
260
+
261
+ override fun setIsOnChangeHtmlSet(
262
+ view: EnrichedTextInputView?,
263
+ value: Boolean,
264
+ ) {
265
+ view?.shouldEmitHtml = value
266
+ }
267
+
268
+ override fun setIsOnChangeTextSet(
269
+ view: EnrichedTextInputView?,
270
+ value: Boolean,
271
+ ) {
272
+ view?.shouldEmitOnChangeText = value
273
+ }
274
+
275
+ override fun setAutoCapitalize(
276
+ view: EnrichedTextInputView?,
277
+ flag: String?,
278
+ ) {
279
+ view?.setAutoCapitalize(flag)
280
+ }
281
+
282
+ override fun setLinkRegex(
283
+ view: EnrichedTextInputView?,
284
+ config: ReadableMap?,
285
+ ) {
286
+ view?.setLinkRegex(config)
287
+ }
288
+
289
+ override fun setAndroidExperimentalSynchronousEvents(
290
+ view: EnrichedTextInputView?,
291
+ value: Boolean,
292
+ ) {
293
+ view?.experimentalSynchronousEvents = value
294
+ }
295
+
296
+ override fun setContextMenuItems(
297
+ view: EnrichedTextInputView?,
298
+ value: ReadableArray?,
299
+ ) {
300
+ view?.setContextMenuItems(value)
301
+ }
302
+
303
+ override fun setUseHtmlNormalizer(
304
+ view: EnrichedTextInputView?,
305
+ value: Boolean,
306
+ ) {
307
+ view?.useHtmlNormalizer = value
308
+ }
309
+
310
+ override fun focus(view: EnrichedTextInputView?) {
311
+ view?.requestFocusProgrammatically()
312
+ }
313
+
314
+ override fun blur(view: EnrichedTextInputView?) {
315
+ view?.clearFocus()
316
+ }
317
+
318
+ override fun setValue(
319
+ view: EnrichedTextInputView?,
320
+ text: String,
321
+ ) {
322
+ view?.setValue(text)
323
+ }
324
+
325
+ override fun insertText(
326
+ view: EnrichedTextInputView?,
327
+ text: String,
328
+ start: Int,
329
+ end: Int,
330
+ ) {
331
+ view?.insertText(text, start, end)
332
+ }
333
+
334
+ override fun setSelection(
335
+ view: EnrichedTextInputView?,
336
+ start: Int,
337
+ end: Int,
338
+ ) {
339
+ view?.setCustomSelection(start, end)
340
+ }
341
+
342
+ override fun toggleBold(view: EnrichedTextInputView?) {
343
+ view?.verifyAndToggleStyle(EnrichedSpans.BOLD)
344
+ }
345
+
346
+ override fun toggleItalic(view: EnrichedTextInputView?) {
347
+ view?.verifyAndToggleStyle(EnrichedSpans.ITALIC)
348
+ }
349
+
350
+ override fun toggleUnderline(view: EnrichedTextInputView?) {
351
+ view?.verifyAndToggleStyle(EnrichedSpans.UNDERLINE)
352
+ }
353
+
354
+ override fun toggleStrikeThrough(view: EnrichedTextInputView?) {
355
+ view?.verifyAndToggleStyle(EnrichedSpans.STRIKETHROUGH)
356
+ }
357
+
358
+ override fun toggleInlineCode(view: EnrichedTextInputView?) {
359
+ view?.verifyAndToggleStyle(EnrichedSpans.INLINE_CODE)
360
+ }
361
+
362
+ override fun toggleH1(view: EnrichedTextInputView?) {
363
+ view?.verifyAndToggleStyle(EnrichedSpans.H1)
364
+ }
365
+
366
+ override fun toggleH2(view: EnrichedTextInputView?) {
367
+ view?.verifyAndToggleStyle(EnrichedSpans.H2)
368
+ }
369
+
370
+ override fun toggleH3(view: EnrichedTextInputView?) {
371
+ view?.verifyAndToggleStyle(EnrichedSpans.H3)
372
+ }
373
+
374
+ override fun toggleH4(view: EnrichedTextInputView?) {
375
+ view?.verifyAndToggleStyle(EnrichedSpans.H4)
376
+ }
377
+
378
+ override fun toggleH5(view: EnrichedTextInputView?) {
379
+ view?.verifyAndToggleStyle(EnrichedSpans.H5)
380
+ }
381
+
382
+ override fun toggleH6(view: EnrichedTextInputView?) {
383
+ view?.verifyAndToggleStyle(EnrichedSpans.H6)
384
+ }
385
+
386
+ override fun toggleCodeBlock(view: EnrichedTextInputView?) {
387
+ view?.verifyAndToggleStyle(EnrichedSpans.CODE_BLOCK)
388
+ }
389
+
390
+ override fun toggleBlockQuote(view: EnrichedTextInputView?) {
391
+ view?.verifyAndToggleStyle(EnrichedSpans.BLOCK_QUOTE)
392
+ }
393
+
394
+ override fun toggleOrderedList(view: EnrichedTextInputView?) {
395
+ view?.verifyAndToggleStyle(EnrichedSpans.ORDERED_LIST)
396
+ }
397
+
398
+ override fun toggleUnorderedList(view: EnrichedTextInputView?) {
399
+ view?.verifyAndToggleStyle(EnrichedSpans.UNORDERED_LIST)
400
+ }
401
+
402
+ override fun toggleCheckboxList(
403
+ view: EnrichedTextInputView?,
404
+ isChecked: Boolean,
405
+ ) {
406
+ view?.toggleCheckboxListItem(isChecked)
407
+ }
408
+
409
+ override fun addLink(
410
+ view: EnrichedTextInputView?,
411
+ start: Int,
412
+ end: Int,
413
+ text: String,
414
+ url: String,
415
+ ) {
416
+ view?.addLink(start, end, text, url)
417
+ }
418
+
419
+ override fun removeLink(
420
+ view: EnrichedTextInputView?,
421
+ start: Int,
422
+ end: Int,
423
+ ) {
424
+ view?.removeLink(start, end)
425
+ }
426
+
427
+ override fun addImage(
428
+ view: EnrichedTextInputView?,
429
+ src: String,
430
+ width: Float,
431
+ height: Float,
432
+ ) {
433
+ view?.addImage(src, width, height)
434
+ }
435
+
436
+ override fun startMention(
437
+ view: EnrichedTextInputView?,
438
+ indicator: String,
439
+ ) {
440
+ view?.startMention(indicator)
441
+ }
442
+
443
+ override fun addMention(
444
+ view: EnrichedTextInputView?,
445
+ indicator: String,
446
+ text: String,
447
+ payload: String,
448
+ ) {
449
+ val attributes = jsonStringToStringMap(payload)
450
+ view?.addMention(text, indicator, attributes)
451
+ }
452
+
453
+ override fun requestHTML(
454
+ view: EnrichedTextInputView?,
455
+ requestId: Int,
456
+ ) {
457
+ view?.requestHTML(requestId)
458
+ }
459
+
460
+ override fun measure(
461
+ context: Context,
462
+ localData: ReadableMap?,
463
+ props: ReadableMap?,
464
+ state: ReadableMap?,
465
+ width: Float,
466
+ widthMode: YogaMeasureMode?,
467
+ height: Float,
468
+ heightMode: YogaMeasureMode?,
469
+ attachmentsPositions: FloatArray?,
470
+ ): Long {
471
+ val id = localData?.getInt("viewTag")
472
+ return MeasurementStore.getMeasureById(context, id, width, height, heightMode, props)
473
+ }
474
+
475
+ companion object {
476
+ const val NAME = "EnrichedTextInputView"
477
+ }
478
+ }