@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,17 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateShadowNodeCpp.js
9
+ */
10
+
11
+ #include "ShadowNodes.h"
12
+
13
+ namespace facebook::react {
14
+
15
+
16
+
17
+ } // namespace facebook::react
@@ -0,0 +1,23 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateShadowNodeH.js
9
+ */
10
+
11
+ #pragma once
12
+
13
+ #include "EventEmitters.h"
14
+ #include "Props.h"
15
+ #include "States.h"
16
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
17
+ #include <jsi/jsi.h>
18
+
19
+ namespace facebook::react {
20
+
21
+
22
+
23
+ } // namespace facebook::react
@@ -0,0 +1,16 @@
1
+
2
+ /**
3
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
6
+ * once the code is regenerated.
7
+ *
8
+ * @generated by codegen project: GenerateStateCpp.js
9
+ */
10
+ #include "States.h"
11
+
12
+ namespace facebook::react {
13
+
14
+
15
+
16
+ } // namespace facebook::react
@@ -0,0 +1,20 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GenerateStateH.js
8
+ */
9
+ #pragma once
10
+
11
+ #include <react/renderer/core/StateData.h>
12
+ #ifdef RN_SERIALIZABLE_STATE
13
+ #include <folly/dynamic.h>
14
+ #endif
15
+
16
+ namespace facebook::react {
17
+
18
+
19
+
20
+ } // namespace facebook::react
@@ -0,0 +1,5 @@
1
+ ReactNativeEnriched_kotlinVersion=2.0.21
2
+ ReactNativeEnriched_minSdkVersion=24
3
+ ReactNativeEnriched_targetSdkVersion=34
4
+ ReactNativeEnriched_compileSdkVersion=35
5
+ ReactNativeEnriched_ndkVersion=27.1.12297006
@@ -0,0 +1,70 @@
1
+ apply plugin: "org.jlleitschuh.gradle.ktlint"
2
+ apply plugin: 'com.diffplug.spotless'
3
+
4
+ ktlint {
5
+ version = "1.8.0"
6
+ verbose = true
7
+ outputToConsole = true
8
+ coloredOutput = true
9
+ android = true
10
+ enableExperimentalRules = true
11
+
12
+ reporters {
13
+ reporter "plain"
14
+ reporter "checkstyle"
15
+ reporter "html"
16
+ }
17
+
18
+ filter {
19
+ exclude("**/generated/**")
20
+ exclude("**/build/**")
21
+ exclude("**/node_modules/**")
22
+
23
+ include("src/**/*.kt")
24
+ include("src/**/*.kts")
25
+ }
26
+ }
27
+
28
+ spotless {
29
+ kotlin {
30
+ target 'src/**/*.kt', 'src/**/*.kts'
31
+ ktlint("1.8.0")
32
+ trimTrailingWhitespace()
33
+ endWithNewline()
34
+ lineEndings 'UNIX'
35
+ targetExclude '**/generated/**', '**/build/**', '**/node_modules/**'
36
+ }
37
+
38
+ java {
39
+ target 'src/**/*.java'
40
+ googleJavaFormat("1.23.0")
41
+ removeUnusedImports()
42
+ trimTrailingWhitespace()
43
+ endWithNewline()
44
+ leadingTabsToSpaces(2)
45
+ lineEndings 'UNIX'
46
+ targetExclude '**/generated/**', '**/build/**', '**/node_modules/**'
47
+ }
48
+
49
+ groovyGradle {
50
+ target '*.gradle', 'gradle/*.gradle'
51
+ greclipse()
52
+ trimTrailingWhitespace()
53
+ endWithNewline()
54
+ }
55
+ }
56
+
57
+ tasks.register('lintFormat') {
58
+ group = "formatting"
59
+ description = "Auto-fix all code formatting issues"
60
+ dependsOn 'ktlintFormat', 'spotlessApply'
61
+ }
62
+
63
+ tasks.register('lintVerify') {
64
+ group = "verification"
65
+ description = "Verify code is properly formatted"
66
+ dependsOn 'ktlintCheck', 'spotlessCheck'
67
+ doLast {
68
+ println "✓ All code formatting checks passed!"
69
+ }
70
+ }
@@ -0,0 +1,3 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
+ package="com.swmansion.enriched">
3
+ </manifest>
@@ -0,0 +1,2 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ </manifest>
@@ -0,0 +1,20 @@
1
+ package com.swmansion.enriched
2
+
3
+ import com.facebook.react.ReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.uimanager.ViewManager
7
+ import com.swmansion.enriched.common.ResourceManager
8
+ import com.swmansion.enriched.textinput.EnrichedTextInputViewManager
9
+ import java.util.ArrayList
10
+
11
+ class ReactNativeEnrichedPackage : ReactPackage {
12
+ override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
13
+ ResourceManager.init(reactContext.applicationContext)
14
+ val viewManagers: MutableList<ViewManager<*, *>> = ArrayList()
15
+ viewManagers.add(EnrichedTextInputViewManager())
16
+ return viewManagers
17
+ }
18
+
19
+ override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> = emptyList()
20
+ }
@@ -0,0 +1,126 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ import android.content.res.Resources
4
+ import android.graphics.BitmapFactory
5
+ import android.graphics.Canvas
6
+ import android.graphics.Color
7
+ import android.graphics.ColorFilter
8
+ import android.graphics.ImageDecoder
9
+ import android.graphics.PixelFormat
10
+ import android.graphics.drawable.AnimatedImageDrawable
11
+ import android.graphics.drawable.Drawable
12
+ import android.os.Build
13
+ import android.os.Handler
14
+ import android.os.Looper
15
+ import android.util.Log
16
+ import androidx.core.graphics.drawable.toDrawable
17
+ import com.swmansion.enriched.R
18
+ import java.net.URL
19
+ import java.nio.ByteBuffer
20
+ import java.util.concurrent.Executors
21
+
22
+ class AsyncDrawable(
23
+ private val url: String,
24
+ ) : Drawable() {
25
+ private var internalDrawable: Drawable = Color.TRANSPARENT.toDrawable()
26
+ private val mainHandler = Handler(Looper.getMainLooper())
27
+ private val executor = Executors.newSingleThreadExecutor()
28
+ var isLoaded = false
29
+
30
+ init {
31
+ internalDrawable.bounds = bounds
32
+
33
+ load()
34
+ }
35
+
36
+ private fun load() {
37
+ executor.execute {
38
+ try {
39
+ isLoaded = false
40
+ val inputStream = URL(url).openStream()
41
+ val bytes = inputStream.readBytes()
42
+ val d = prepareDrawable(bytes)
43
+
44
+ // Switch to Main Thread to update UI
45
+ mainHandler.post {
46
+ if (d != null) {
47
+ d.bounds = bounds
48
+ internalDrawable = d
49
+ } else {
50
+ loadPlaceholderImage()
51
+ }
52
+ }
53
+ } catch (e: Exception) {
54
+ Log.e("AsyncDrawable", "Failed to load: $url", e)
55
+
56
+ loadPlaceholderImage()
57
+ } finally {
58
+ isLoaded = true
59
+ onLoaded?.invoke()
60
+ }
61
+ }
62
+ }
63
+
64
+ private fun prepareDrawable(bytes: ByteArray): Drawable? {
65
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
66
+ try {
67
+ val buffer = ByteBuffer.wrap(bytes)
68
+ val source = ImageDecoder.createSource(buffer)
69
+
70
+ val drawable =
71
+ ImageDecoder.decodeDrawable(source) { decoder, _, _ ->
72
+ decoder.setTargetSize(bounds.width(), bounds.height())
73
+ }
74
+
75
+ if (drawable is AnimatedImageDrawable) {
76
+ drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
77
+ drawable.repeatCount = AnimatedImageDrawable.REPEAT_INFINITE
78
+ drawable.start()
79
+ }
80
+
81
+ return drawable
82
+ } catch (e: Exception) {
83
+ Log.w("AsyncDrawable", "ImageDecoder failed, falling back to Bitmap", e)
84
+ }
85
+ }
86
+
87
+ // Fallback to bitmap if ImageDecoder fails
88
+ return try {
89
+ val bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.size)
90
+ bitmap?.toDrawable(Resources.getSystem())
91
+ } catch (_: Exception) {
92
+ null
93
+ }
94
+ }
95
+
96
+ private fun loadPlaceholderImage() {
97
+ internalDrawable = ResourceManager.getDrawableResource(R.drawable.broken_image)
98
+ }
99
+
100
+ override fun draw(canvas: Canvas) {
101
+ internalDrawable.draw(canvas)
102
+ }
103
+
104
+ override fun setAlpha(alpha: Int) {
105
+ internalDrawable.alpha = alpha
106
+ }
107
+
108
+ override fun setColorFilter(colorFilter: ColorFilter?) {
109
+ internalDrawable.colorFilter = colorFilter
110
+ }
111
+
112
+ @Deprecated("Deprecated in Java")
113
+ override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
114
+
115
+ override fun setBounds(
116
+ left: Int,
117
+ top: Int,
118
+ right: Int,
119
+ bottom: Int,
120
+ ) {
121
+ super.setBounds(left, top, right, bottom)
122
+ internalDrawable.setBounds(left, top, right, bottom)
123
+ }
124
+
125
+ var onLoaded: (() -> Unit)? = null
126
+ }
@@ -0,0 +1,81 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ import android.graphics.Canvas
4
+ import android.graphics.ColorFilter
5
+ import android.graphics.Paint
6
+ import android.graphics.Path
7
+ import android.graphics.PixelFormat
8
+ import android.graphics.PorterDuff
9
+ import android.graphics.PorterDuffXfermode
10
+ import android.graphics.drawable.Drawable
11
+
12
+ class CheckboxDrawable(
13
+ private val size: Int,
14
+ private var color: Int,
15
+ private var isChecked: Boolean,
16
+ ) : Drawable() {
17
+ private val paint = Paint(Paint.ANTI_ALIAS_FLAG)
18
+ private val path = Path()
19
+
20
+ fun update(checked: Boolean) {
21
+ this.isChecked = checked
22
+ invalidateSelf()
23
+ }
24
+
25
+ override fun draw(canvas: Canvas) {
26
+ val saveCount = canvas.saveLayer(0f, 0f, size.toFloat(), size.toFloat(), null)
27
+
28
+ paint.color = color
29
+ paint.style = Paint.Style.FILL
30
+
31
+ // Full square background with transparent checkmark
32
+ if (isChecked) {
33
+ val cornerRadius = size * 0.15f
34
+ canvas.drawRoundRect(0f, 0f, size.toFloat(), size.toFloat(), cornerRadius, cornerRadius, paint)
35
+
36
+ paint.xfermode = PorterDuffXfermode(PorterDuff.Mode.XOR)
37
+ paint.strokeWidth = size * 0.15f
38
+ paint.style = Paint.Style.STROKE
39
+ paint.strokeCap = Paint.Cap.ROUND
40
+ paint.strokeJoin = Paint.Join.ROUND
41
+
42
+ path.reset()
43
+ path.moveTo(size * 0.25f, size * 0.5f)
44
+ path.lineTo(size * 0.45f, size * 0.7f)
45
+ path.lineTo(size * 0.75f, size * 0.3f)
46
+ canvas.drawPath(path, paint)
47
+
48
+ paint.xfermode = null
49
+ canvas.restoreToCount(saveCount)
50
+ return
51
+ }
52
+
53
+ // Border only square for unchecked state
54
+ paint.style = Paint.Style.STROKE
55
+ paint.strokeWidth = size * 0.1f
56
+ val margin = paint.strokeWidth / 2f
57
+ val cornerRadius = size * 0.15f
58
+ canvas.drawRoundRect(
59
+ margin,
60
+ margin,
61
+ size - margin,
62
+ size - margin,
63
+ cornerRadius,
64
+ cornerRadius,
65
+ paint,
66
+ )
67
+
68
+ canvas.restoreToCount(saveCount)
69
+ }
70
+
71
+ override fun setAlpha(alpha: Int) {
72
+ paint.alpha = alpha
73
+ }
74
+
75
+ override fun setColorFilter(colorFilter: ColorFilter?) {
76
+ paint.colorFilter = colorFilter
77
+ }
78
+
79
+ @Deprecated("Deprecated in Java")
80
+ override fun getOpacity(): Int = PixelFormat.TRANSLUCENT
81
+ }
@@ -0,0 +1,11 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ object EnrichedConstants {
4
+ // Zero Width Space
5
+ const val ZWS = '\u200B'
6
+ const val ZWS_STRING = "\u200B"
7
+
8
+ // Object Replacement Character
9
+ const val ORC = '\uFFFC'
10
+ const val ORC_STRING = "\uFFFC"
11
+ }
@@ -0,0 +1,57 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ interface EnrichedStyle {
4
+ // Headers
5
+ val h1FontSize: Int
6
+ val h1Bold: Boolean
7
+ val h2FontSize: Int
8
+ val h2Bold: Boolean
9
+ val h3FontSize: Int
10
+ val h3Bold: Boolean
11
+ val h4FontSize: Int
12
+ val h4Bold: Boolean
13
+ val h5FontSize: Int
14
+ val h5Bold: Boolean
15
+ val h6FontSize: Int
16
+ val h6Bold: Boolean
17
+
18
+ // Blockquote
19
+ val blockquoteColor: Int?
20
+ val blockquoteBorderColor: Int
21
+ val blockquoteStripeWidth: Int
22
+ val blockquoteGapWidth: Int
23
+
24
+ // Ordered Lists
25
+ val olGapWidth: Int
26
+ val olMarginLeft: Int
27
+ val olMarkerFontWeight: Int?
28
+ val olMarkerColor: Int?
29
+
30
+ // Unordered Lists
31
+ val ulGapWidth: Int
32
+ val ulMarginLeft: Int
33
+ val ulBulletSize: Int
34
+ val ulBulletColor: Int
35
+
36
+ // Checkbox list
37
+ val ulCheckboxBoxSize: Int
38
+ val ulCheckboxGapWidth: Int
39
+ val ulCheckboxMarginLeft: Int
40
+ val ulCheckboxBoxColor: Int
41
+
42
+ // Links
43
+ val aColor: Int
44
+ val aUnderline: Boolean
45
+
46
+ // Code Blocks
47
+ val codeBlockColor: Int
48
+ val codeBlockBackgroundColor: Int
49
+ val codeBlockRadius: Float
50
+
51
+ // Inline Code
52
+ val inlineCodeColor: Int
53
+ val inlineCodeBackgroundColor: Int
54
+
55
+ // Mentions
56
+ val mentionsStyle: Map<String, MentionStyle>
57
+ }
@@ -0,0 +1,14 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ import android.text.TextPaint
4
+ import android.text.style.MetricAffectingSpan
5
+
6
+ class ForceRedrawSpan : MetricAffectingSpan() {
7
+ override fun updateMeasureState(tp: TextPaint) {
8
+ // Do nothing, we don't actually want to change how it looks
9
+ }
10
+
11
+ override fun updateDrawState(tp: TextPaint?) {
12
+ // Do nothing
13
+ }
14
+ }
@@ -0,0 +1,5 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ object GumboNormalizer {
4
+ external fun normalizeHtml(html: String): String?
5
+ }
@@ -0,0 +1,7 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ data class MentionStyle(
4
+ val color: Int,
5
+ val backgroundColor: Int,
6
+ val underline: Boolean,
7
+ )
@@ -0,0 +1,26 @@
1
+ package com.swmansion.enriched.common
2
+
3
+ import android.annotation.SuppressLint
4
+ import android.content.Context
5
+ import android.content.res.Resources
6
+ import android.graphics.drawable.Drawable
7
+ import androidx.core.content.res.ResourcesCompat
8
+ import androidx.core.graphics.drawable.DrawableCompat
9
+
10
+ object ResourceManager {
11
+ private var appContext: Context? = null
12
+
13
+ fun init(context: Context) {
14
+ this.appContext = context.applicationContext
15
+ }
16
+
17
+ @SuppressLint("UseCompatLoadingForDrawables")
18
+ fun getDrawableResource(id: Int): Drawable {
19
+ val context = appContext ?: throw IllegalStateException("ResourceManager not initialized! Call init() first.")
20
+
21
+ val image = ResourcesCompat.getDrawable(context.resources, id, null)
22
+ val finalImage = image ?: Resources.getSystem().getDrawable(android.R.drawable.ic_menu_report_image)
23
+
24
+ return DrawableCompat.wrap(finalImage)
25
+ }
26
+ }