react-native-enriched-html 0.0.0 → 1.1.0-nightly-20260617-3dfd09072

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 (666) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +402 -0
  3. package/ReactNativeEnrichedHtml.podspec +31 -0
  4. package/android/build.gradle +106 -0
  5. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +203 -0
  6. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +74 -0
  7. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextViewManagerDelegate.java +70 -0
  8. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextViewManagerInterface.java +31 -0
  9. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ComponentDescriptors.cpp +22 -0
  10. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ComponentDescriptors.h +24 -0
  11. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.cpp +456 -0
  12. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.h +410 -0
  13. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/Props.cpp +272 -0
  14. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/Props.h +1595 -0
  15. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ShadowNodes.cpp +17 -0
  16. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/ShadowNodes.h +23 -0
  17. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/States.cpp +16 -0
  18. package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/States.h +20 -0
  19. package/android/gradle.properties +5 -0
  20. package/android/lint.gradle +70 -0
  21. package/android/src/main/AndroidManifest.xml +3 -0
  22. package/android/src/main/AndroidManifestNew.xml +2 -0
  23. package/android/src/main/java/com/swmansion/enriched/ReactNativeEnrichedPackage.kt +22 -0
  24. package/android/src/main/java/com/swmansion/enriched/common/AllowFontScaling.kt +36 -0
  25. package/android/src/main/java/com/swmansion/enriched/common/AsyncDrawable.kt +126 -0
  26. package/android/src/main/java/com/swmansion/enriched/common/CheckboxDrawable.kt +81 -0
  27. package/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt +16 -0
  28. package/android/src/main/java/com/swmansion/enriched/common/EnrichedStyle.kt +57 -0
  29. package/android/src/main/java/com/swmansion/enriched/common/ForceRedrawSpan.kt +14 -0
  30. package/android/src/main/java/com/swmansion/enriched/common/GumboNormalizer.kt +5 -0
  31. package/android/src/main/java/com/swmansion/enriched/common/MentionStyle.kt +9 -0
  32. package/android/src/main/java/com/swmansion/enriched/common/ResourceManager.kt +26 -0
  33. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java +1034 -0
  34. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +82 -0
  35. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedAlignmentSpan.kt +19 -0
  36. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBlockQuoteSpan.kt +53 -0
  37. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBoldSpan.kt +12 -0
  38. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCheckboxListSpan.kt +92 -0
  39. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCodeBlockSpan.kt +81 -0
  40. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH1Span.kt +20 -0
  41. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH2Span.kt +20 -0
  42. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH3Span.kt +20 -0
  43. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH4Span.kt +21 -0
  44. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH5Span.kt +20 -0
  45. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH6Span.kt +20 -0
  46. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedImageSpan.kt +185 -0
  47. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedInlineCodeSpan.kt +24 -0
  48. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedItalicSpan.kt +12 -0
  49. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedLinkSpan.kt +29 -0
  50. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedMentionSpan.kt +35 -0
  51. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedOrderedListSpan.kt +79 -0
  52. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedStrikeThroughSpan.kt +11 -0
  53. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnderlineSpan.kt +11 -0
  54. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnorderedListSpan.kt +62 -0
  55. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedBlockSpan.kt +5 -0
  56. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedHeadingSpan.kt +3 -0
  57. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedInlineSpan.kt +3 -0
  58. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedParagraphSpan.kt +5 -0
  59. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedSpan.kt +3 -0
  60. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedZeroWidthSpaceSpan.kt +4 -0
  61. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextMovementMethod.kt +75 -0
  62. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextSpanFactory.kt +83 -0
  63. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt +202 -0
  64. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt +361 -0
  65. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextViewManager.kt +157 -0
  66. package/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt +170 -0
  67. package/android/src/main/java/com/swmansion/enriched/text/events/OnLinkPressEvent.kt +23 -0
  68. package/android/src/main/java/com/swmansion/enriched/text/events/OnMentionPressEvent.kt +32 -0
  69. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextAlignmentSpan.kt +14 -0
  70. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextBlockQuoteSpan.kt +14 -0
  71. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextBoldSpan.kt +14 -0
  72. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextCheckboxListSpan.kt +15 -0
  73. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextCodeBlockSpan.kt +14 -0
  74. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH1Span.kt +14 -0
  75. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH2Span.kt +14 -0
  76. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH3Span.kt +15 -0
  77. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH4Span.kt +15 -0
  78. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH5Span.kt +14 -0
  79. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH6Span.kt +14 -0
  80. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextImageSpan.kt +57 -0
  81. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextInlineCodeSpan.kt +14 -0
  82. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextItalicSpan.kt +14 -0
  83. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextLinkSpan.kt +41 -0
  84. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextMentionSpan.kt +63 -0
  85. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextOrderedListSpan.kt +16 -0
  86. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextStrikeThroughSpan.kt +15 -0
  87. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextUnderlineSpan.kt +15 -0
  88. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextUnorderedListSpan.kt +15 -0
  89. package/android/src/main/java/com/swmansion/enriched/text/spans/interfaces/EnrichedTextClickableSpan.kt +9 -0
  90. package/android/src/main/java/com/swmansion/enriched/text/spans/interfaces/EnrichedTextSpan.kt +10 -0
  91. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputConnectionWrapper.kt +140 -0
  92. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +85 -0
  93. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +1141 -0
  94. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewLayoutManager.kt +27 -0
  95. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt +500 -0
  96. package/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt +230 -0
  97. package/android/src/main/java/com/swmansion/enriched/textinput/events/MentionHandler.kt +55 -0
  98. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeHtmlEvent.kt +27 -0
  99. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeSelectionEvent.kt +30 -0
  100. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeStateEvent.kt +21 -0
  101. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeTextEvent.kt +30 -0
  102. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnContextMenuItemPressEvent.kt +35 -0
  103. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputBlurEvent.kt +25 -0
  104. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputFocusEvent.kt +25 -0
  105. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputKeyPressEvent.kt +27 -0
  106. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnLinkDetectedEvent.kt +32 -0
  107. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionDetectedEvent.kt +30 -0
  108. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionEvent.kt +34 -0
  109. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnPasteImagesEvent.kt +47 -0
  110. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnRequestHtmlResultEvent.kt +32 -0
  111. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnSubmitEditingEvent.kt +29 -0
  112. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputAlignmentSpan.kt +14 -0
  113. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt +14 -0
  114. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBoldSpan.kt +14 -0
  115. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCheckboxListSpan.kt +15 -0
  116. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt +14 -0
  117. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH1Span.kt +14 -0
  118. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH2Span.kt +14 -0
  119. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH3Span.kt +14 -0
  120. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH4Span.kt +14 -0
  121. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH5Span.kt +14 -0
  122. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH6Span.kt +14 -0
  123. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt +36 -0
  124. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt +14 -0
  125. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt +14 -0
  126. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputLinkSpan.kt +16 -0
  127. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt +18 -0
  128. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt +21 -0
  129. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputStrikeThroughSpan.kt +14 -0
  130. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt +14 -0
  131. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnorderedListSpan.kt +14 -0
  132. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt +45 -0
  133. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedSpans.kt +240 -0
  134. package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt +10 -0
  135. package/android/src/main/java/com/swmansion/enriched/textinput/styles/AlignmentStyles.kt +367 -0
  136. package/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt +371 -0
  137. package/android/src/main/java/com/swmansion/enriched/textinput/styles/InlineStyles.kt +232 -0
  138. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ListStyles.kt +260 -0
  139. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParagraphStyles.kt +439 -0
  140. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt +408 -0
  141. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedEditableFactory.kt +17 -0
  142. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSelection.kt +340 -0
  143. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpanState.kt +318 -0
  144. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannable.kt +156 -0
  145. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannableStringBuilder.kt +59 -0
  146. package/android/src/main/java/com/swmansion/enriched/textinput/utils/RichContentReceiver.kt +127 -0
  147. package/android/src/main/java/com/swmansion/enriched/textinput/utils/ShortcutsHandler.kt +150 -0
  148. package/android/src/main/java/com/swmansion/enriched/textinput/utils/StyleUtils.kt +51 -0
  149. package/android/src/main/java/com/swmansion/enriched/textinput/utils/Utils.kt +106 -0
  150. package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedSpanWatcher.kt +109 -0
  151. package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedTextWatcher.kt +106 -0
  152. package/android/src/main/new_arch/CMakeLists.txt +62 -0
  153. package/android/src/main/new_arch/GumboNormalizerJni.cpp +14 -0
  154. package/android/src/main/new_arch/ReactNativeEnrichedSpec.cpp +11 -0
  155. package/android/src/main/new_arch/ReactNativeEnrichedSpec.h +16 -0
  156. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextComponentDescriptor.h +32 -0
  157. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputComponentDescriptor.h +35 -0
  158. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.cpp +53 -0
  159. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.h +25 -0
  160. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.cpp +35 -0
  161. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.h +53 -0
  162. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.cpp +9 -0
  163. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.h +24 -0
  164. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextMeasurementManager.cpp +45 -0
  165. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextMeasurementManager.h +25 -0
  166. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextShadowNode.cpp +21 -0
  167. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextShadowNode.h +39 -0
  168. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h +44 -0
  169. package/android/src/main/res/drawable/broken_image.xml +10 -0
  170. package/cpp/CMakeLists.txt +50 -0
  171. package/cpp/GumboParser/GumboParser.h +34043 -0
  172. package/cpp/README.md +59 -0
  173. package/cpp/parser/GumboNormalizer.c +915 -0
  174. package/cpp/parser/GumboParser.cpp +16 -0
  175. package/cpp/parser/GumboParser.hpp +23 -0
  176. package/cpp/tests/GumboParserTest.cpp +457 -0
  177. package/ios/EnrichedTextInputView.h +54 -0
  178. package/ios/EnrichedTextInputView.mm +2170 -0
  179. package/ios/EnrichedTextInputViewManager.mm +13 -0
  180. package/ios/EnrichedTextView.h +35 -0
  181. package/ios/EnrichedTextView.mm +806 -0
  182. package/ios/EnrichedTextViewManager.mm +13 -0
  183. package/ios/config/EnrichedConfig.h +114 -0
  184. package/ios/config/EnrichedConfig.mm +727 -0
  185. package/ios/enrichedInputTextView/EnrichedInputTextView.h +6 -0
  186. package/ios/enrichedInputTextView/EnrichedInputTextView.mm +334 -0
  187. package/ios/enrichedTextTextView/EnrichedTextTextView.h +16 -0
  188. package/ios/enrichedTextTextView/EnrichedTextTextView.mm +71 -0
  189. package/ios/extensions/ColorExtension.h +8 -0
  190. package/ios/extensions/ColorExtension.mm +48 -0
  191. package/ios/extensions/FontExtension.h +11 -0
  192. package/ios/extensions/FontExtension.mm +72 -0
  193. package/ios/extensions/ImageExtension.h +33 -0
  194. package/ios/extensions/ImageExtension.mm +176 -0
  195. package/ios/extensions/LayoutManagerExtension.h +6 -0
  196. package/ios/extensions/LayoutManagerExtension.mm +454 -0
  197. package/ios/extensions/StringExtension.h +15 -0
  198. package/ios/extensions/StringExtension.mm +69 -0
  199. package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.cpp +22 -0
  200. package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.h +24 -0
  201. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.cpp +456 -0
  202. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.h +410 -0
  203. package/ios/generated/ReactNativeEnrichedSpec/Props.cpp +272 -0
  204. package/ios/generated/ReactNativeEnrichedSpec/Props.h +1595 -0
  205. package/ios/generated/ReactNativeEnrichedSpec/RCTComponentViewHelpers.h +570 -0
  206. package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.cpp +17 -0
  207. package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.h +23 -0
  208. package/ios/generated/ReactNativeEnrichedSpec/States.cpp +16 -0
  209. package/ios/generated/ReactNativeEnrichedSpec/States.h +20 -0
  210. package/ios/htmlParser/HtmlParser.h +11 -0
  211. package/ios/htmlParser/HtmlParser.mm +1468 -0
  212. package/ios/inputAttributesManager/InputAttributesManager.h +18 -0
  213. package/ios/inputAttributesManager/InputAttributesManager.mm +222 -0
  214. package/ios/inputHtmlParser/InputHtmlParser.h +10 -0
  215. package/ios/inputHtmlParser/InputHtmlParser.mm +225 -0
  216. package/ios/interfaces/AlignmentEntry.h +9 -0
  217. package/ios/interfaces/AlignmentEntry.mm +4 -0
  218. package/ios/interfaces/AttributeEntry.h +9 -0
  219. package/ios/interfaces/AttributeEntry.mm +4 -0
  220. package/ios/interfaces/BaseStyleProtocol.h +17 -0
  221. package/ios/interfaces/EnrichedTextStyleHeaders.h +62 -0
  222. package/ios/interfaces/EnrichedViewHost.h +26 -0
  223. package/ios/interfaces/ImageAttachment.h +11 -0
  224. package/ios/interfaces/ImageAttachment.mm +107 -0
  225. package/ios/interfaces/ImageData.h +10 -0
  226. package/ios/interfaces/ImageData.mm +4 -0
  227. package/ios/interfaces/LinkData.h +11 -0
  228. package/ios/interfaces/LinkData.mm +43 -0
  229. package/ios/interfaces/LinkRegexConfig.h +19 -0
  230. package/ios/interfaces/LinkRegexConfig.mm +37 -0
  231. package/ios/interfaces/MediaAttachment.h +23 -0
  232. package/ios/interfaces/MediaAttachment.mm +31 -0
  233. package/ios/interfaces/MentionParams.h +8 -0
  234. package/ios/interfaces/MentionParams.mm +4 -0
  235. package/ios/interfaces/MentionStyleProps.h +17 -0
  236. package/ios/interfaces/MentionStyleProps.mm +80 -0
  237. package/ios/interfaces/StyleBase.h +38 -0
  238. package/ios/interfaces/StyleBase.mm +279 -0
  239. package/ios/interfaces/StyleHeaders.h +110 -0
  240. package/ios/interfaces/StylePair.h +9 -0
  241. package/ios/interfaces/StylePair.mm +4 -0
  242. package/ios/interfaces/StyleTypeEnum.h +27 -0
  243. package/ios/interfaces/TextDecorationLineEnum.h +6 -0
  244. package/ios/interfaces/TextDecorationLineEnum.mm +4 -0
  245. package/ios/internals/EnrichedTextComponentDescriptor.h +19 -0
  246. package/ios/internals/EnrichedTextInputViewComponentDescriptor.h +19 -0
  247. package/ios/internals/EnrichedTextInputViewShadowNode.h +44 -0
  248. package/ios/internals/EnrichedTextInputViewShadowNode.mm +103 -0
  249. package/ios/internals/EnrichedTextInputViewState.cpp +10 -0
  250. package/ios/internals/EnrichedTextInputViewState.h +22 -0
  251. package/ios/internals/EnrichedTextViewShadowNode.h +34 -0
  252. package/ios/internals/EnrichedTextViewShadowNode.mm +72 -0
  253. package/ios/internals/EnrichedTextViewState.cpp +7 -0
  254. package/ios/internals/EnrichedTextViewState.h +18 -0
  255. package/ios/styles/AlignmentStyle.mm +203 -0
  256. package/ios/styles/BlockQuoteStyle.mm +54 -0
  257. package/ios/styles/BoldStyle.mm +37 -0
  258. package/ios/styles/CheckboxListStyle.mm +154 -0
  259. package/ios/styles/CodeBlockStyle.mm +49 -0
  260. package/ios/styles/EnrichedTextStyles.mm +61 -0
  261. package/ios/styles/H1Style.mm +20 -0
  262. package/ios/styles/H2Style.mm +20 -0
  263. package/ios/styles/H3Style.mm +20 -0
  264. package/ios/styles/H4Style.mm +20 -0
  265. package/ios/styles/H5Style.mm +20 -0
  266. package/ios/styles/H6Style.mm +20 -0
  267. package/ios/styles/HeadingStyleBase.mm +96 -0
  268. package/ios/styles/ImageStyle.mm +150 -0
  269. package/ios/styles/InlineCodeStyle.mm +65 -0
  270. package/ios/styles/ItalicStyle.mm +37 -0
  271. package/ios/styles/LinkStyle.mm +532 -0
  272. package/ios/styles/MentionStyle.mm +541 -0
  273. package/ios/styles/OrderedListStyle.mm +48 -0
  274. package/ios/styles/StrikethroughStyle.mm +25 -0
  275. package/ios/styles/UnderlineStyle.mm +24 -0
  276. package/ios/styles/UnorderedListStyle.mm +48 -0
  277. package/ios/textHtmlParser/TextHtmlParser.h +10 -0
  278. package/ios/textHtmlParser/TextHtmlParser.mm +181 -0
  279. package/ios/utils/AlignmentUtils.h +20 -0
  280. package/ios/utils/AlignmentUtils.mm +111 -0
  281. package/ios/utils/AttachmentLayoutUtils.h +24 -0
  282. package/ios/utils/AttachmentLayoutUtils.mm +144 -0
  283. package/ios/utils/CheckboxHitTestUtils.h +10 -0
  284. package/ios/utils/CheckboxHitTestUtils.mm +122 -0
  285. package/ios/utils/DotReplacementUtils.h +10 -0
  286. package/ios/utils/DotReplacementUtils.mm +68 -0
  287. package/ios/utils/EnrichedTextTouchHandler.h +14 -0
  288. package/ios/utils/EnrichedTextTouchHandler.mm +152 -0
  289. package/ios/utils/KeyboardUtils.h +7 -0
  290. package/ios/utils/KeyboardUtils.mm +30 -0
  291. package/ios/utils/OccurenceUtils.h +44 -0
  292. package/ios/utils/OccurenceUtils.mm +185 -0
  293. package/ios/utils/ParagraphAttributesUtils.h +18 -0
  294. package/ios/utils/ParagraphAttributesUtils.mm +289 -0
  295. package/ios/utils/RangeUtils.h +12 -0
  296. package/ios/utils/RangeUtils.mm +183 -0
  297. package/ios/utils/ShortcutsUtils.h +21 -0
  298. package/ios/utils/ShortcutsUtils.mm +486 -0
  299. package/ios/utils/StyleUtils.h +33 -0
  300. package/ios/utils/StyleUtils.mm +290 -0
  301. package/ios/utils/TextBlockTapGestureRecognizer.h +17 -0
  302. package/ios/utils/TextBlockTapGestureRecognizer.mm +56 -0
  303. package/ios/utils/TextInsertionUtils.h +17 -0
  304. package/ios/utils/TextInsertionUtils.mm +60 -0
  305. package/ios/utils/TextListsUtils.h +40 -0
  306. package/ios/utils/TextListsUtils.mm +93 -0
  307. package/ios/utils/WeakBox.h +3 -0
  308. package/ios/utils/WeakBox.m +4 -0
  309. package/ios/utils/WordsUtils.h +7 -0
  310. package/ios/utils/WordsUtils.mm +98 -0
  311. package/ios/utils/ZeroWidthSpaceUtils.h +14 -0
  312. package/ios/utils/ZeroWidthSpaceUtils.mm +310 -0
  313. package/lib/module/index.js +4 -0
  314. package/lib/module/index.js.map +1 -0
  315. package/lib/module/index.native.js +7 -0
  316. package/lib/module/index.native.js.map +1 -0
  317. package/lib/module/native/EnrichedText.js +76 -0
  318. package/lib/module/native/EnrichedText.js.map +1 -0
  319. package/lib/module/native/EnrichedTextInput.js +306 -0
  320. package/lib/module/native/EnrichedTextInput.js.map +1 -0
  321. package/lib/module/package.json +1 -0
  322. package/lib/module/spec/EnrichedTextInputNativeComponent.ts +524 -0
  323. package/lib/module/spec/EnrichedTextNativeComponent.ts +110 -0
  324. package/lib/module/types.js +4 -0
  325. package/lib/module/types.js.map +1 -0
  326. package/lib/module/utils/EnrichedTextInputDefaultProps.js +20 -0
  327. package/lib/module/utils/EnrichedTextInputDefaultProps.js.map +1 -0
  328. package/lib/module/utils/defaultHtmlStyle.js +83 -0
  329. package/lib/module/utils/defaultHtmlStyle.js.map +1 -0
  330. package/lib/module/utils/expandMentionStylesForIndicators.js +15 -0
  331. package/lib/module/utils/expandMentionStylesForIndicators.js.map +1 -0
  332. package/lib/module/utils/isMentionStyleRecord.js +10 -0
  333. package/lib/module/utils/isMentionStyleRecord.js.map +1 -0
  334. package/lib/module/utils/normalizeHtmlStyle.js +126 -0
  335. package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
  336. package/lib/module/utils/nullthrows.js +9 -0
  337. package/lib/module/utils/nullthrows.js.map +1 -0
  338. package/lib/module/utils/regexParser.js +46 -0
  339. package/lib/module/utils/regexParser.js.map +1 -0
  340. package/lib/module/web/EnrichedTextInput.css +201 -0
  341. package/lib/module/web/EnrichedTextInput.js +314 -0
  342. package/lib/module/web/EnrichedTextInput.js.map +1 -0
  343. package/lib/module/web/adaptWebToNativeEvent.js +34 -0
  344. package/lib/module/web/adaptWebToNativeEvent.js.map +1 -0
  345. package/lib/module/web/checkboxHtmlNormalizer.js +54 -0
  346. package/lib/module/web/checkboxHtmlNormalizer.js.map +1 -0
  347. package/lib/module/web/formats/EnrichedBlockquote.js +32 -0
  348. package/lib/module/web/formats/EnrichedBlockquote.js.map +1 -0
  349. package/lib/module/web/formats/EnrichedBold.js +22 -0
  350. package/lib/module/web/formats/EnrichedBold.js.map +1 -0
  351. package/lib/module/web/formats/EnrichedCheckboxItem.js +32 -0
  352. package/lib/module/web/formats/EnrichedCheckboxItem.js.map +1 -0
  353. package/lib/module/web/formats/EnrichedCheckboxList.js +35 -0
  354. package/lib/module/web/formats/EnrichedCheckboxList.js.map +1 -0
  355. package/lib/module/web/formats/EnrichedCode.js +15 -0
  356. package/lib/module/web/formats/EnrichedCode.js.map +1 -0
  357. package/lib/module/web/formats/EnrichedCodeBlock.js +43 -0
  358. package/lib/module/web/formats/EnrichedCodeBlock.js.map +1 -0
  359. package/lib/module/web/formats/EnrichedHeading.js +27 -0
  360. package/lib/module/web/formats/EnrichedHeading.js.map +1 -0
  361. package/lib/module/web/formats/EnrichedImage.js +57 -0
  362. package/lib/module/web/formats/EnrichedImage.js.map +1 -0
  363. package/lib/module/web/formats/EnrichedImageNodeView.js +90 -0
  364. package/lib/module/web/formats/EnrichedImageNodeView.js.map +1 -0
  365. package/lib/module/web/formats/EnrichedItalic.js +22 -0
  366. package/lib/module/web/formats/EnrichedItalic.js.map +1 -0
  367. package/lib/module/web/formats/EnrichedLink.js +140 -0
  368. package/lib/module/web/formats/EnrichedLink.js.map +1 -0
  369. package/lib/module/web/formats/EnrichedListItem.js +19 -0
  370. package/lib/module/web/formats/EnrichedListItem.js.map +1 -0
  371. package/lib/module/web/formats/EnrichedMention.js +50 -0
  372. package/lib/module/web/formats/EnrichedMention.js.map +1 -0
  373. package/lib/module/web/formats/EnrichedOrderedList.js +32 -0
  374. package/lib/module/web/formats/EnrichedOrderedList.js.map +1 -0
  375. package/lib/module/web/formats/EnrichedStrike.js +22 -0
  376. package/lib/module/web/formats/EnrichedStrike.js.map +1 -0
  377. package/lib/module/web/formats/EnrichedUnderline.js +22 -0
  378. package/lib/module/web/formats/EnrichedUnderline.js.map +1 -0
  379. package/lib/module/web/formats/EnrichedUnorderedList.js +33 -0
  380. package/lib/module/web/formats/EnrichedUnorderedList.js.map +1 -0
  381. package/lib/module/web/formats/applyWrappingListToSelection.js +63 -0
  382. package/lib/module/web/formats/applyWrappingListToSelection.js.map +1 -0
  383. package/lib/module/web/formats/formatRules.js +48 -0
  384. package/lib/module/web/formats/formatRules.js.map +1 -0
  385. package/lib/module/web/formats/listKeyboard.js +50 -0
  386. package/lib/module/web/formats/listKeyboard.js.map +1 -0
  387. package/lib/module/web/formats/wrappedBlockKeyboard.js +58 -0
  388. package/lib/module/web/formats/wrappedBlockKeyboard.js.map +1 -0
  389. package/lib/module/web/pasteImages.js +78 -0
  390. package/lib/module/web/pasteImages.js.map +1 -0
  391. package/lib/module/web/pastedImageDimensions.js +49 -0
  392. package/lib/module/web/pastedImageDimensions.js.map +1 -0
  393. package/lib/module/web/pmPlugins/MentionPlugin/index.js +36 -0
  394. package/lib/module/web/pmPlugins/MentionPlugin/index.js.map +1 -0
  395. package/lib/module/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.js +11 -0
  396. package/lib/module/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.js.map +1 -0
  397. package/lib/module/web/pmPlugins/MentionPlugin/makeMentionPluginState.js +67 -0
  398. package/lib/module/web/pmPlugins/MentionPlugin/makeMentionPluginState.js.map +1 -0
  399. package/lib/module/web/pmPlugins/MentionPlugin/mentionPluginKey.js +5 -0
  400. package/lib/module/web/pmPlugins/MentionPlugin/mentionPluginKey.js.map +1 -0
  401. package/lib/module/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.js +56 -0
  402. package/lib/module/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.js.map +1 -0
  403. package/lib/module/web/pmPlugins/MentionPlugin/setMention.js +58 -0
  404. package/lib/module/web/pmPlugins/MentionPlugin/setMention.js.map +1 -0
  405. package/lib/module/web/pmPlugins/MentionPlugin/startMention.js +9 -0
  406. package/lib/module/web/pmPlugins/MentionPlugin/startMention.js.map +1 -0
  407. package/lib/module/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.js +9 -0
  408. package/lib/module/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.js.map +1 -0
  409. package/lib/module/web/pmPlugins/MentionPlugin/subscribeMentionEvents.js +100 -0
  410. package/lib/module/web/pmPlugins/MentionPlugin/subscribeMentionEvents.js.map +1 -0
  411. package/lib/module/web/pmPlugins/MentionPlugin/types.js +4 -0
  412. package/lib/module/web/pmPlugins/MentionPlugin/types.js.map +1 -0
  413. package/lib/module/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.js +42 -0
  414. package/lib/module/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.js.map +1 -0
  415. package/lib/module/web/pmPlugins/ShortcutPlugin.js +123 -0
  416. package/lib/module/web/pmPlugins/ShortcutPlugin.js.map +1 -0
  417. package/lib/module/web/pmPlugins/StrictMarksPlugin.js +98 -0
  418. package/lib/module/web/pmPlugins/StrictMarksPlugin.js.map +1 -0
  419. package/lib/module/web/pmPlugins/StripBoldInStyledHeadingsPlugin.js +56 -0
  420. package/lib/module/web/pmPlugins/StripBoldInStyledHeadingsPlugin.js.map +1 -0
  421. package/lib/module/web/pmPlugins/StripMarksInCodeBlockPlugin.js +28 -0
  422. package/lib/module/web/pmPlugins/StripMarksInCodeBlockPlugin.js.map +1 -0
  423. package/lib/module/web/pmPlugins/StripMarksOnImagePlugin.js +29 -0
  424. package/lib/module/web/pmPlugins/StripMarksOnImagePlugin.js.map +1 -0
  425. package/lib/module/web/positionMapping.js +76 -0
  426. package/lib/module/web/positionMapping.js.map +1 -0
  427. package/lib/module/web/returnKeyTypeToEnterKeyHint.js +20 -0
  428. package/lib/module/web/returnKeyTypeToEnterKeyHint.js.map +1 -0
  429. package/lib/module/web/styleConversion/buildMentionRulesCSS.js +33 -0
  430. package/lib/module/web/styleConversion/buildMentionRulesCSS.js.map +1 -0
  431. package/lib/module/web/styleConversion/enrichedInputStyleToCSSProperties.js +159 -0
  432. package/lib/module/web/styleConversion/enrichedInputStyleToCSSProperties.js.map +1 -0
  433. package/lib/module/web/styleConversion/enrichedInputThemingToCSSProperties.js +18 -0
  434. package/lib/module/web/styleConversion/enrichedInputThemingToCSSProperties.js.map +1 -0
  435. package/lib/module/web/styleConversion/htmlStyleToCSSVariables.js +145 -0
  436. package/lib/module/web/styleConversion/htmlStyleToCSSVariables.js.map +1 -0
  437. package/lib/module/web/styleConversion/mentionIndicatorCssKey.js +15 -0
  438. package/lib/module/web/styleConversion/mentionIndicatorCssKey.js.map +1 -0
  439. package/lib/module/web/styleConversion/toColor.js +18 -0
  440. package/lib/module/web/styleConversion/toColor.js.map +1 -0
  441. package/lib/module/web/tiptapHtmlNormalizer.js +30 -0
  442. package/lib/module/web/tiptapHtmlNormalizer.js.map +1 -0
  443. package/lib/module/web/useOnChangeHtml.js +8 -0
  444. package/lib/module/web/useOnChangeHtml.js.map +1 -0
  445. package/lib/module/web/useOnChangeState.js +88 -0
  446. package/lib/module/web/useOnChangeState.js.map +1 -0
  447. package/lib/module/web/useOnChangeText.js +11 -0
  448. package/lib/module/web/useOnChangeText.js.map +1 -0
  449. package/lib/module/web/useOnEditorChange.js +25 -0
  450. package/lib/module/web/useOnEditorChange.js.map +1 -0
  451. package/lib/module/web/useOnLinkDetected.js +68 -0
  452. package/lib/module/web/useOnLinkDetected.js.map +1 -0
  453. package/lib/typescript/package.json +1 -0
  454. package/lib/typescript/src/index.d.ts +3 -0
  455. package/lib/typescript/src/index.d.ts.map +1 -0
  456. package/lib/typescript/src/index.native.d.ts +5 -0
  457. package/lib/typescript/src/index.native.d.ts.map +1 -0
  458. package/lib/typescript/src/native/EnrichedText.d.ts +3 -0
  459. package/lib/typescript/src/native/EnrichedText.d.ts.map +1 -0
  460. package/lib/typescript/src/native/EnrichedTextInput.d.ts +3 -0
  461. package/lib/typescript/src/native/EnrichedTextInput.d.ts.map +1 -0
  462. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts +405 -0
  463. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts.map +1 -0
  464. package/lib/typescript/src/spec/EnrichedTextNativeComponent.d.ts +88 -0
  465. package/lib/typescript/src/spec/EnrichedTextNativeComponent.d.ts.map +1 -0
  466. package/lib/typescript/src/types.d.ts +721 -0
  467. package/lib/typescript/src/types.d.ts.map +1 -0
  468. package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts +13 -0
  469. package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts.map +1 -0
  470. package/lib/typescript/src/utils/defaultHtmlStyle.d.ts +4 -0
  471. package/lib/typescript/src/utils/defaultHtmlStyle.d.ts.map +1 -0
  472. package/lib/typescript/src/utils/expandMentionStylesForIndicators.d.ts +3 -0
  473. package/lib/typescript/src/utils/expandMentionStylesForIndicators.d.ts.map +1 -0
  474. package/lib/typescript/src/utils/isMentionStyleRecord.d.ts +3 -0
  475. package/lib/typescript/src/utils/isMentionStyleRecord.d.ts.map +1 -0
  476. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +6 -0
  477. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
  478. package/lib/typescript/src/utils/nullthrows.d.ts +2 -0
  479. package/lib/typescript/src/utils/nullthrows.d.ts.map +1 -0
  480. package/lib/typescript/src/utils/regexParser.d.ts +3 -0
  481. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
  482. package/lib/typescript/src/web/EnrichedTextInput.d.ts +4 -0
  483. package/lib/typescript/src/web/EnrichedTextInput.d.ts.map +1 -0
  484. package/lib/typescript/src/web/adaptWebToNativeEvent.d.ts +3 -0
  485. package/lib/typescript/src/web/adaptWebToNativeEvent.d.ts.map +1 -0
  486. package/lib/typescript/src/web/checkboxHtmlNormalizer.d.ts +3 -0
  487. package/lib/typescript/src/web/checkboxHtmlNormalizer.d.ts.map +1 -0
  488. package/lib/typescript/src/web/formats/EnrichedBlockquote.d.ts +2 -0
  489. package/lib/typescript/src/web/formats/EnrichedBlockquote.d.ts.map +1 -0
  490. package/lib/typescript/src/web/formats/EnrichedBold.d.ts +2 -0
  491. package/lib/typescript/src/web/formats/EnrichedBold.d.ts.map +1 -0
  492. package/lib/typescript/src/web/formats/EnrichedCheckboxItem.d.ts +2 -0
  493. package/lib/typescript/src/web/formats/EnrichedCheckboxItem.d.ts.map +1 -0
  494. package/lib/typescript/src/web/formats/EnrichedCheckboxList.d.ts +9 -0
  495. package/lib/typescript/src/web/formats/EnrichedCheckboxList.d.ts.map +1 -0
  496. package/lib/typescript/src/web/formats/EnrichedCode.d.ts +2 -0
  497. package/lib/typescript/src/web/formats/EnrichedCode.d.ts.map +1 -0
  498. package/lib/typescript/src/web/formats/EnrichedCodeBlock.d.ts +9 -0
  499. package/lib/typescript/src/web/formats/EnrichedCodeBlock.d.ts.map +1 -0
  500. package/lib/typescript/src/web/formats/EnrichedHeading.d.ts +5 -0
  501. package/lib/typescript/src/web/formats/EnrichedHeading.d.ts.map +1 -0
  502. package/lib/typescript/src/web/formats/EnrichedImage.d.ts +2 -0
  503. package/lib/typescript/src/web/formats/EnrichedImage.d.ts.map +1 -0
  504. package/lib/typescript/src/web/formats/EnrichedImageNodeView.d.ts +3 -0
  505. package/lib/typescript/src/web/formats/EnrichedImageNodeView.d.ts.map +1 -0
  506. package/lib/typescript/src/web/formats/EnrichedItalic.d.ts +2 -0
  507. package/lib/typescript/src/web/formats/EnrichedItalic.d.ts.map +1 -0
  508. package/lib/typescript/src/web/formats/EnrichedLink.d.ts +5 -0
  509. package/lib/typescript/src/web/formats/EnrichedLink.d.ts.map +1 -0
  510. package/lib/typescript/src/web/formats/EnrichedListItem.d.ts +2 -0
  511. package/lib/typescript/src/web/formats/EnrichedListItem.d.ts.map +1 -0
  512. package/lib/typescript/src/web/formats/EnrichedMention.d.ts +4 -0
  513. package/lib/typescript/src/web/formats/EnrichedMention.d.ts.map +1 -0
  514. package/lib/typescript/src/web/formats/EnrichedOrderedList.d.ts +2 -0
  515. package/lib/typescript/src/web/formats/EnrichedOrderedList.d.ts.map +1 -0
  516. package/lib/typescript/src/web/formats/EnrichedStrike.d.ts +2 -0
  517. package/lib/typescript/src/web/formats/EnrichedStrike.d.ts.map +1 -0
  518. package/lib/typescript/src/web/formats/EnrichedUnderline.d.ts +2 -0
  519. package/lib/typescript/src/web/formats/EnrichedUnderline.d.ts.map +1 -0
  520. package/lib/typescript/src/web/formats/EnrichedUnorderedList.d.ts +9 -0
  521. package/lib/typescript/src/web/formats/EnrichedUnorderedList.d.ts.map +1 -0
  522. package/lib/typescript/src/web/formats/applyWrappingListToSelection.d.ts +18 -0
  523. package/lib/typescript/src/web/formats/applyWrappingListToSelection.d.ts.map +1 -0
  524. package/lib/typescript/src/web/formats/formatRules.d.ts +10 -0
  525. package/lib/typescript/src/web/formats/formatRules.d.ts.map +1 -0
  526. package/lib/typescript/src/web/formats/listKeyboard.d.ts +4 -0
  527. package/lib/typescript/src/web/formats/listKeyboard.d.ts.map +1 -0
  528. package/lib/typescript/src/web/formats/wrappedBlockKeyboard.d.ts +12 -0
  529. package/lib/typescript/src/web/formats/wrappedBlockKeyboard.d.ts.map +1 -0
  530. package/lib/typescript/src/web/pasteImages.d.ts +10 -0
  531. package/lib/typescript/src/web/pasteImages.d.ts.map +1 -0
  532. package/lib/typescript/src/web/pastedImageDimensions.d.ts +9 -0
  533. package/lib/typescript/src/web/pastedImageDimensions.d.ts.map +1 -0
  534. package/lib/typescript/src/web/pmPlugins/MentionPlugin/index.d.ts +9 -0
  535. package/lib/typescript/src/web/pmPlugins/MentionPlugin/index.d.ts.map +1 -0
  536. package/lib/typescript/src/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.d.ts +3 -0
  537. package/lib/typescript/src/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.d.ts.map +1 -0
  538. package/lib/typescript/src/web/pmPlugins/MentionPlugin/makeMentionPluginState.d.ts +4 -0
  539. package/lib/typescript/src/web/pmPlugins/MentionPlugin/makeMentionPluginState.d.ts.map +1 -0
  540. package/lib/typescript/src/web/pmPlugins/MentionPlugin/mentionPluginKey.d.ts +4 -0
  541. package/lib/typescript/src/web/pmPlugins/MentionPlugin/mentionPluginKey.d.ts.map +1 -0
  542. package/lib/typescript/src/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.d.ts +9 -0
  543. package/lib/typescript/src/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.d.ts.map +1 -0
  544. package/lib/typescript/src/web/pmPlugins/MentionPlugin/setMention.d.ts +3 -0
  545. package/lib/typescript/src/web/pmPlugins/MentionPlugin/setMention.d.ts.map +1 -0
  546. package/lib/typescript/src/web/pmPlugins/MentionPlugin/startMention.d.ts +3 -0
  547. package/lib/typescript/src/web/pmPlugins/MentionPlugin/startMention.d.ts.map +1 -0
  548. package/lib/typescript/src/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.d.ts +3 -0
  549. package/lib/typescript/src/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.d.ts.map +1 -0
  550. package/lib/typescript/src/web/pmPlugins/MentionPlugin/subscribeMentionEvents.d.ts +4 -0
  551. package/lib/typescript/src/web/pmPlugins/MentionPlugin/subscribeMentionEvents.d.ts.map +1 -0
  552. package/lib/typescript/src/web/pmPlugins/MentionPlugin/types.d.ts +20 -0
  553. package/lib/typescript/src/web/pmPlugins/MentionPlugin/types.d.ts.map +1 -0
  554. package/lib/typescript/src/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.d.ts +3 -0
  555. package/lib/typescript/src/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.d.ts.map +1 -0
  556. package/lib/typescript/src/web/pmPlugins/ShortcutPlugin.d.ts +7 -0
  557. package/lib/typescript/src/web/pmPlugins/ShortcutPlugin.d.ts.map +1 -0
  558. package/lib/typescript/src/web/pmPlugins/StrictMarksPlugin.d.ts +3 -0
  559. package/lib/typescript/src/web/pmPlugins/StrictMarksPlugin.d.ts.map +1 -0
  560. package/lib/typescript/src/web/pmPlugins/StripBoldInStyledHeadingsPlugin.d.ts +10 -0
  561. package/lib/typescript/src/web/pmPlugins/StripBoldInStyledHeadingsPlugin.d.ts.map +1 -0
  562. package/lib/typescript/src/web/pmPlugins/StripMarksInCodeBlockPlugin.d.ts +3 -0
  563. package/lib/typescript/src/web/pmPlugins/StripMarksInCodeBlockPlugin.d.ts.map +1 -0
  564. package/lib/typescript/src/web/pmPlugins/StripMarksOnImagePlugin.d.ts +3 -0
  565. package/lib/typescript/src/web/pmPlugins/StripMarksOnImagePlugin.d.ts.map +1 -0
  566. package/lib/typescript/src/web/positionMapping.d.ts +39 -0
  567. package/lib/typescript/src/web/positionMapping.d.ts.map +1 -0
  568. package/lib/typescript/src/web/returnKeyTypeToEnterKeyHint.d.ts +4 -0
  569. package/lib/typescript/src/web/returnKeyTypeToEnterKeyHint.d.ts.map +1 -0
  570. package/lib/typescript/src/web/styleConversion/buildMentionRulesCSS.d.ts +3 -0
  571. package/lib/typescript/src/web/styleConversion/buildMentionRulesCSS.d.ts.map +1 -0
  572. package/lib/typescript/src/web/styleConversion/enrichedInputStyleToCSSProperties.d.ts +8 -0
  573. package/lib/typescript/src/web/styleConversion/enrichedInputStyleToCSSProperties.d.ts.map +1 -0
  574. package/lib/typescript/src/web/styleConversion/enrichedInputThemingToCSSProperties.d.ts +9 -0
  575. package/lib/typescript/src/web/styleConversion/enrichedInputThemingToCSSProperties.d.ts.map +1 -0
  576. package/lib/typescript/src/web/styleConversion/htmlStyleToCSSVariables.d.ts +10 -0
  577. package/lib/typescript/src/web/styleConversion/htmlStyleToCSSVariables.d.ts.map +1 -0
  578. package/lib/typescript/src/web/styleConversion/mentionIndicatorCssKey.d.ts +3 -0
  579. package/lib/typescript/src/web/styleConversion/mentionIndicatorCssKey.d.ts.map +1 -0
  580. package/lib/typescript/src/web/styleConversion/toColor.d.ts +3 -0
  581. package/lib/typescript/src/web/styleConversion/toColor.d.ts.map +1 -0
  582. package/lib/typescript/src/web/tiptapHtmlNormalizer.d.ts +3 -0
  583. package/lib/typescript/src/web/tiptapHtmlNormalizer.d.ts.map +1 -0
  584. package/lib/typescript/src/web/useOnChangeHtml.d.ts +5 -0
  585. package/lib/typescript/src/web/useOnChangeHtml.d.ts.map +1 -0
  586. package/lib/typescript/src/web/useOnChangeState.d.ts +6 -0
  587. package/lib/typescript/src/web/useOnChangeState.d.ts.map +1 -0
  588. package/lib/typescript/src/web/useOnChangeText.d.ts +5 -0
  589. package/lib/typescript/src/web/useOnChangeText.d.ts.map +1 -0
  590. package/lib/typescript/src/web/useOnEditorChange.d.ts +6 -0
  591. package/lib/typescript/src/web/useOnEditorChange.d.ts.map +1 -0
  592. package/lib/typescript/src/web/useOnLinkDetected.d.ts +4 -0
  593. package/lib/typescript/src/web/useOnLinkDetected.d.ts.map +1 -0
  594. package/package.json +232 -1
  595. package/react-native.config.js +16 -0
  596. package/src/index.native.tsx +34 -0
  597. package/src/index.tsx +24 -0
  598. package/src/native/EnrichedText.tsx +115 -0
  599. package/src/native/EnrichedTextInput.tsx +374 -0
  600. package/src/spec/EnrichedTextInputNativeComponent.ts +524 -0
  601. package/src/spec/EnrichedTextNativeComponent.ts +110 -0
  602. package/src/types.ts +864 -0
  603. package/src/utils/EnrichedTextInputDefaultProps.ts +16 -0
  604. package/src/utils/defaultHtmlStyle.ts +83 -0
  605. package/src/utils/expandMentionStylesForIndicators.ts +19 -0
  606. package/src/utils/isMentionStyleRecord.ts +22 -0
  607. package/src/utils/normalizeHtmlStyle.ts +181 -0
  608. package/src/utils/nullthrows.ts +7 -0
  609. package/src/utils/regexParser.ts +56 -0
  610. package/src/web/EnrichedTextInput.css +201 -0
  611. package/src/web/EnrichedTextInput.tsx +403 -0
  612. package/src/web/adaptWebToNativeEvent.ts +37 -0
  613. package/src/web/checkboxHtmlNormalizer.ts +62 -0
  614. package/src/web/formats/EnrichedBlockquote.ts +36 -0
  615. package/src/web/formats/EnrichedBold.ts +16 -0
  616. package/src/web/formats/EnrichedCheckboxItem.ts +35 -0
  617. package/src/web/formats/EnrichedCheckboxList.ts +47 -0
  618. package/src/web/formats/EnrichedCode.ts +13 -0
  619. package/src/web/formats/EnrichedCodeBlock.ts +53 -0
  620. package/src/web/formats/EnrichedHeading.ts +36 -0
  621. package/src/web/formats/EnrichedImage.ts +59 -0
  622. package/src/web/formats/EnrichedImageNodeView.tsx +89 -0
  623. package/src/web/formats/EnrichedItalic.ts +16 -0
  624. package/src/web/formats/EnrichedLink.ts +149 -0
  625. package/src/web/formats/EnrichedListItem.ts +17 -0
  626. package/src/web/formats/EnrichedMention.ts +55 -0
  627. package/src/web/formats/EnrichedOrderedList.ts +40 -0
  628. package/src/web/formats/EnrichedStrike.ts +16 -0
  629. package/src/web/formats/EnrichedUnderline.ts +16 -0
  630. package/src/web/formats/EnrichedUnorderedList.ts +50 -0
  631. package/src/web/formats/applyWrappingListToSelection.ts +76 -0
  632. package/src/web/formats/formatRules.ts +84 -0
  633. package/src/web/formats/listKeyboard.ts +58 -0
  634. package/src/web/formats/wrappedBlockKeyboard.ts +76 -0
  635. package/src/web/pasteImages.ts +96 -0
  636. package/src/web/pastedImageDimensions.ts +40 -0
  637. package/src/web/pmPlugins/MentionPlugin/index.ts +45 -0
  638. package/src/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.ts +17 -0
  639. package/src/web/pmPlugins/MentionPlugin/makeMentionPluginState.ts +75 -0
  640. package/src/web/pmPlugins/MentionPlugin/mentionPluginKey.ts +4 -0
  641. package/src/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.ts +68 -0
  642. package/src/web/pmPlugins/MentionPlugin/setMention.ts +83 -0
  643. package/src/web/pmPlugins/MentionPlugin/startMention.ts +14 -0
  644. package/src/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.ts +20 -0
  645. package/src/web/pmPlugins/MentionPlugin/subscribeMentionEvents.ts +105 -0
  646. package/src/web/pmPlugins/MentionPlugin/types.ts +22 -0
  647. package/src/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.ts +57 -0
  648. package/src/web/pmPlugins/ShortcutPlugin.ts +98 -0
  649. package/src/web/pmPlugins/StrictMarksPlugin.ts +131 -0
  650. package/src/web/pmPlugins/StripBoldInStyledHeadingsPlugin.ts +79 -0
  651. package/src/web/pmPlugins/StripMarksInCodeBlockPlugin.ts +34 -0
  652. package/src/web/pmPlugins/StripMarksOnImagePlugin.ts +33 -0
  653. package/src/web/positionMapping.ts +81 -0
  654. package/src/web/returnKeyTypeToEnterKeyHint.ts +29 -0
  655. package/src/web/styleConversion/buildMentionRulesCSS.ts +42 -0
  656. package/src/web/styleConversion/enrichedInputStyleToCSSProperties.ts +224 -0
  657. package/src/web/styleConversion/enrichedInputThemingToCSSProperties.ts +34 -0
  658. package/src/web/styleConversion/htmlStyleToCSSVariables.ts +226 -0
  659. package/src/web/styleConversion/mentionIndicatorCssKey.ts +14 -0
  660. package/src/web/styleConversion/toColor.ts +17 -0
  661. package/src/web/tiptapHtmlNormalizer.ts +33 -0
  662. package/src/web/useOnChangeHtml.ts +14 -0
  663. package/src/web/useOnChangeState.ts +125 -0
  664. package/src/web/useOnChangeText.ts +15 -0
  665. package/src/web/useOnEditorChange.ts +33 -0
  666. package/src/web/useOnLinkDetected.ts +82 -0
@@ -0,0 +1,82 @@
1
+ package com.swmansion.enriched.common.parser
2
+
3
+ import com.swmansion.enriched.common.spans.EnrichedAlignmentSpan
4
+ import com.swmansion.enriched.common.spans.EnrichedBlockQuoteSpan
5
+ import com.swmansion.enriched.common.spans.EnrichedBoldSpan
6
+ import com.swmansion.enriched.common.spans.EnrichedCheckboxListSpan
7
+ import com.swmansion.enriched.common.spans.EnrichedCodeBlockSpan
8
+ import com.swmansion.enriched.common.spans.EnrichedH1Span
9
+ import com.swmansion.enriched.common.spans.EnrichedH2Span
10
+ import com.swmansion.enriched.common.spans.EnrichedH3Span
11
+ import com.swmansion.enriched.common.spans.EnrichedH4Span
12
+ import com.swmansion.enriched.common.spans.EnrichedH5Span
13
+ import com.swmansion.enriched.common.spans.EnrichedH6Span
14
+ import com.swmansion.enriched.common.spans.EnrichedImageSpan
15
+ import com.swmansion.enriched.common.spans.EnrichedInlineCodeSpan
16
+ import com.swmansion.enriched.common.spans.EnrichedItalicSpan
17
+ import com.swmansion.enriched.common.spans.EnrichedLinkSpan
18
+ import com.swmansion.enriched.common.spans.EnrichedMentionSpan
19
+ import com.swmansion.enriched.common.spans.EnrichedOrderedListSpan
20
+ import com.swmansion.enriched.common.spans.EnrichedStrikeThroughSpan
21
+ import com.swmansion.enriched.common.spans.EnrichedUnderlineSpan
22
+ import com.swmansion.enriched.common.spans.EnrichedUnorderedListSpan
23
+
24
+ interface EnrichedSpanFactory<T> {
25
+ fun createAlignmentSpan(cssValue: String): EnrichedAlignmentSpan
26
+
27
+ fun createBoldSpan(style: T): EnrichedBoldSpan
28
+
29
+ fun createItalicSpan(style: T): EnrichedItalicSpan
30
+
31
+ fun createUnderlineSpan(style: T): EnrichedUnderlineSpan
32
+
33
+ fun createStrikeThroughSpan(style: T): EnrichedStrikeThroughSpan
34
+
35
+ fun createInlineCodeSpan(style: T): EnrichedInlineCodeSpan
36
+
37
+ fun createLinkSpan(
38
+ url: String,
39
+ style: T,
40
+ ): EnrichedLinkSpan
41
+
42
+ fun createMentionSpan(
43
+ text: String,
44
+ indicator: String,
45
+ attributes: Map<String, String>,
46
+ style: T,
47
+ ): EnrichedMentionSpan
48
+
49
+ fun createImageSpan(
50
+ source: String,
51
+ width: Int,
52
+ height: Int,
53
+ ): EnrichedImageSpan
54
+
55
+ fun createH1Span(style: T): EnrichedH1Span
56
+
57
+ fun createH2Span(style: T): EnrichedH2Span
58
+
59
+ fun createH3Span(style: T): EnrichedH3Span
60
+
61
+ fun createH4Span(style: T): EnrichedH4Span
62
+
63
+ fun createH5Span(style: T): EnrichedH5Span
64
+
65
+ fun createH6Span(style: T): EnrichedH6Span
66
+
67
+ fun createOrderedListSpan(
68
+ index: Int,
69
+ style: T,
70
+ ): EnrichedOrderedListSpan
71
+
72
+ fun createUnorderedListSpan(style: T): EnrichedUnorderedListSpan
73
+
74
+ fun createCheckboxListSpan(
75
+ isChecked: Boolean,
76
+ style: T,
77
+ ): EnrichedCheckboxListSpan
78
+
79
+ fun createBlockQuoteSpan(style: T): EnrichedBlockQuoteSpan
80
+
81
+ fun createCodeBlockSpan(style: T): EnrichedCodeBlockSpan
82
+ }
@@ -0,0 +1,19 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.text.Layout
4
+ import android.text.style.AlignmentSpan
5
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedZeroWidthSpaceSpan
6
+
7
+ open class EnrichedAlignmentSpan(
8
+ val cssValue: String,
9
+ ) : AlignmentSpan.Standard(cssValueToLayoutAlignment(cssValue)),
10
+ EnrichedZeroWidthSpaceSpan {
11
+ companion object {
12
+ fun cssValueToLayoutAlignment(cssValue: String): Layout.Alignment =
13
+ when (cssValue) {
14
+ "center" -> Layout.Alignment.ALIGN_CENTER
15
+ "right" -> Layout.Alignment.ALIGN_OPPOSITE
16
+ else -> Layout.Alignment.ALIGN_NORMAL
17
+ }
18
+ }
19
+ }
@@ -0,0 +1,53 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Canvas
4
+ import android.graphics.Paint
5
+ import android.text.Layout
6
+ import android.text.TextPaint
7
+ import android.text.style.LeadingMarginSpan
8
+ import android.text.style.MetricAffectingSpan
9
+ import com.swmansion.enriched.common.EnrichedStyle
10
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedBlockSpan
11
+
12
+ // https://android.googlesource.com/platform/frameworks/base/+/refs/heads/main/core/java/android/text/style/QuoteSpan.java
13
+ open class EnrichedBlockQuoteSpan(
14
+ private val enrichedStyle: EnrichedStyle,
15
+ ) : MetricAffectingSpan(),
16
+ LeadingMarginSpan,
17
+ EnrichedBlockSpan {
18
+ override fun updateMeasureState(p0: TextPaint) {
19
+ // Do nothing, but inform layout that this span affects text metrics
20
+ }
21
+
22
+ override fun getLeadingMargin(p0: Boolean): Int = enrichedStyle.blockquoteStripeWidth + enrichedStyle.blockquoteGapWidth
23
+
24
+ override fun drawLeadingMargin(
25
+ c: Canvas,
26
+ p: Paint,
27
+ x: Int,
28
+ dir: Int,
29
+ top: Int,
30
+ baseline: Int,
31
+ bottom: Int,
32
+ text: CharSequence?,
33
+ start: Int,
34
+ end: Int,
35
+ first: Boolean,
36
+ layout: Layout?,
37
+ ) {
38
+ val style = p.style
39
+ val color = p.color
40
+ p.style = Paint.Style.FILL
41
+ p.color = enrichedStyle.blockquoteBorderColor
42
+ c.drawRect(x.toFloat(), top.toFloat(), x + dir * enrichedStyle.blockquoteStripeWidth.toFloat(), bottom.toFloat(), p)
43
+ p.style = style
44
+ p.color = color
45
+ }
46
+
47
+ override fun updateDrawState(textPaint: TextPaint?) {
48
+ val color = enrichedStyle.blockquoteColor
49
+ if (color != null) {
50
+ textPaint?.color = color
51
+ }
52
+ }
53
+ }
@@ -0,0 +1,12 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.style.StyleSpan
5
+ import com.swmansion.enriched.common.EnrichedStyle
6
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedInlineSpan
7
+
8
+ @Suppress("UNUSED_PARAMETER")
9
+ open class EnrichedBoldSpan(
10
+ enrichedStyle: EnrichedStyle,
11
+ ) : StyleSpan(Typeface.BOLD),
12
+ EnrichedInlineSpan
@@ -0,0 +1,92 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Canvas
4
+ import android.graphics.Paint
5
+ import android.text.Layout
6
+ import android.text.Spanned
7
+ import android.text.TextPaint
8
+ import android.text.style.LeadingMarginSpan
9
+ import android.text.style.LineHeightSpan
10
+ import android.text.style.MetricAffectingSpan
11
+ import androidx.core.graphics.withTranslation
12
+ import com.swmansion.enriched.common.CheckboxDrawable
13
+ import com.swmansion.enriched.common.EnrichedStyle
14
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedParagraphSpan
15
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
16
+
17
+ open class EnrichedCheckboxListSpan(
18
+ open var isChecked: Boolean,
19
+ private val enrichedStyle: EnrichedStyle,
20
+ ) : MetricAffectingSpan(),
21
+ LineHeightSpan,
22
+ LeadingMarginSpan,
23
+ EnrichedParagraphSpan {
24
+ private val checkboxDrawable =
25
+ CheckboxDrawable(enrichedStyle.ulCheckboxBoxSize, enrichedStyle.ulCheckboxBoxColor, isChecked).apply {
26
+ setBounds(0, 0, enrichedStyle.ulCheckboxBoxSize, enrichedStyle.ulCheckboxBoxSize)
27
+ }
28
+
29
+ override fun updateMeasureState(tp: TextPaint) {
30
+ // Do nothing, but inform layout that this span affects text metrics
31
+ }
32
+
33
+ override fun updateDrawState(tp: TextPaint) {
34
+ // Do nothing, but inform layout that this span affects text metrics
35
+ }
36
+
37
+ // Include checkbox size in text measurements to avoid clipping
38
+ override fun chooseHeight(
39
+ text: CharSequence,
40
+ start: Int,
41
+ end: Int,
42
+ spanstartv: Int,
43
+ v: Int,
44
+ fm: Paint.FontMetricsInt,
45
+ ) {
46
+ val checkboxSize = enrichedStyle.ulCheckboxBoxSize
47
+ val currentLineHeight = fm.descent - fm.ascent
48
+
49
+ if (checkboxSize > currentLineHeight) {
50
+ val extraSpace = checkboxSize - currentLineHeight
51
+ val halfExtra = extraSpace / 2
52
+
53
+ fm.ascent -= halfExtra
54
+ fm.descent += (extraSpace - halfExtra)
55
+
56
+ fm.top -= halfExtra
57
+ fm.bottom += (extraSpace - halfExtra)
58
+ }
59
+ }
60
+
61
+ override fun getLeadingMargin(first: Boolean): Int =
62
+ enrichedStyle.ulCheckboxBoxSize + enrichedStyle.ulCheckboxMarginLeft + enrichedStyle.ulCheckboxGapWidth
63
+
64
+ override fun drawLeadingMargin(
65
+ canvas: Canvas,
66
+ paint: Paint,
67
+ x: Int,
68
+ dir: Int,
69
+ top: Int,
70
+ baseline: Int,
71
+ bottom: Int,
72
+ text: CharSequence,
73
+ start: Int,
74
+ end: Int,
75
+ first: Boolean,
76
+ layout: Layout?,
77
+ ) {
78
+ val spannedText = text as Spanned
79
+
80
+ if (spannedText.getSpanStart(this) == start) {
81
+ checkboxDrawable.update(isChecked)
82
+
83
+ val fm = paint.fontMetricsInt
84
+ val textCenter = baseline + (fm.ascent + fm.descent) / 2f
85
+ val drawableTop = textCenter - (enrichedStyle.ulCheckboxBoxSize / 2f)
86
+
87
+ canvas.withTranslation(x.toFloat() + enrichedStyle.ulCheckboxMarginLeft, drawableTop) {
88
+ checkboxDrawable.draw(this)
89
+ }
90
+ }
91
+ }
92
+ }
@@ -0,0 +1,81 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Canvas
4
+ import android.graphics.Paint
5
+ import android.graphics.Path
6
+ import android.graphics.RectF
7
+ import android.graphics.Typeface
8
+ import android.text.Spanned
9
+ import android.text.TextPaint
10
+ import android.text.style.LineBackgroundSpan
11
+ import android.text.style.MetricAffectingSpan
12
+ import com.swmansion.enriched.common.EnrichedStyle
13
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedBlockSpan
14
+
15
+ open class EnrichedCodeBlockSpan(
16
+ private val enrichedStyle: EnrichedStyle,
17
+ ) : MetricAffectingSpan(),
18
+ LineBackgroundSpan,
19
+ EnrichedBlockSpan {
20
+ override fun updateDrawState(paint: TextPaint) {
21
+ paint.typeface = Typeface.MONOSPACE
22
+ paint.color = enrichedStyle.codeBlockColor
23
+ }
24
+
25
+ override fun updateMeasureState(paint: TextPaint) {
26
+ paint.typeface = Typeface.MONOSPACE
27
+ }
28
+
29
+ override fun drawBackground(
30
+ canvas: Canvas,
31
+ p: Paint,
32
+ left: Int,
33
+ right: Int,
34
+ top: Int,
35
+ baseline: Int,
36
+ bottom: Int,
37
+ text: CharSequence,
38
+ start: Int,
39
+ end: Int,
40
+ lineNum: Int,
41
+ ) {
42
+ if (text !is Spanned) {
43
+ return
44
+ }
45
+
46
+ val previousColor = p.color
47
+ p.color = enrichedStyle.codeBlockBackgroundColor
48
+
49
+ val radius = enrichedStyle.codeBlockRadius
50
+
51
+ val spanStart = text.getSpanStart(this)
52
+ val spanEnd = text.getSpanEnd(this)
53
+ val isFirstLineOfSpan = start == spanStart
54
+ val isLastLineOfSpan = end == spanEnd || (spanEnd + 1 == end && text[spanEnd] == '\n')
55
+
56
+ val path = Path()
57
+ val radii = floatArrayOf(0f, 0f, 0f, 0f, 0f, 0f, 0f, 0f)
58
+
59
+ if (isFirstLineOfSpan) {
60
+ // Top-Left and Top-Right corners
61
+ radii[0] = radius
62
+ radii[1] = radius
63
+ radii[2] = radius
64
+ radii[3] = radius
65
+ }
66
+
67
+ if (isLastLineOfSpan) {
68
+ // Bottom-Right and Bottom-Left corners
69
+ radii[4] = radius
70
+ radii[5] = radius
71
+ radii[6] = radius
72
+ radii[7] = radius
73
+ }
74
+
75
+ val rect = RectF(left.toFloat(), top.toFloat(), right.toFloat(), bottom.toFloat())
76
+
77
+ path.addRoundRect(rect, radii, Path.Direction.CW)
78
+ canvas.drawPath(path, p)
79
+ p.color = previousColor
80
+ }
81
+ }
@@ -0,0 +1,20 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.TextPaint
5
+ import android.text.style.AbsoluteSizeSpan
6
+ import com.swmansion.enriched.common.EnrichedStyle
7
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
8
+
9
+ open class EnrichedH1Span(
10
+ private val enrichedStyle: EnrichedStyle,
11
+ ) : AbsoluteSizeSpan(enrichedStyle.h1FontSize),
12
+ EnrichedHeadingSpan {
13
+ override fun updateDrawState(tp: TextPaint) {
14
+ super.updateDrawState(tp)
15
+ val bold = enrichedStyle.h1Bold
16
+ if (bold) {
17
+ tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.TextPaint
5
+ import android.text.style.AbsoluteSizeSpan
6
+ import com.swmansion.enriched.common.EnrichedStyle
7
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
8
+
9
+ open class EnrichedH2Span(
10
+ private val enrichedStyle: EnrichedStyle,
11
+ ) : AbsoluteSizeSpan(enrichedStyle.h2FontSize),
12
+ EnrichedHeadingSpan {
13
+ override fun updateDrawState(tp: TextPaint) {
14
+ super.updateDrawState(tp)
15
+ val bold = enrichedStyle.h2Bold
16
+ if (bold) {
17
+ tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.TextPaint
5
+ import android.text.style.AbsoluteSizeSpan
6
+ import com.swmansion.enriched.common.EnrichedStyle
7
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
8
+
9
+ open class EnrichedH3Span(
10
+ private val enrichedStyle: EnrichedStyle,
11
+ ) : AbsoluteSizeSpan(enrichedStyle.h3FontSize),
12
+ EnrichedHeadingSpan {
13
+ override fun updateDrawState(tp: TextPaint) {
14
+ super.updateDrawState(tp)
15
+ val bold = enrichedStyle.h3Bold
16
+ if (bold) {
17
+ tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,21 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.TextPaint
5
+ import android.text.style.AbsoluteSizeSpan
6
+ import com.swmansion.enriched.common.EnrichedStyle
7
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
8
+ import com.swmansion.enriched.textinput.styles.HtmlStyle
9
+
10
+ open class EnrichedH4Span(
11
+ private val enrichedStyle: EnrichedStyle,
12
+ ) : AbsoluteSizeSpan(enrichedStyle.h4FontSize),
13
+ EnrichedHeadingSpan {
14
+ override fun updateDrawState(tp: TextPaint) {
15
+ super.updateDrawState(tp)
16
+ val bold = enrichedStyle.h4Bold
17
+ if (bold) {
18
+ tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,20 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.TextPaint
5
+ import android.text.style.AbsoluteSizeSpan
6
+ import com.swmansion.enriched.common.EnrichedStyle
7
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
8
+
9
+ open class EnrichedH5Span(
10
+ private val enrichedStyle: EnrichedStyle,
11
+ ) : AbsoluteSizeSpan(enrichedStyle.h5FontSize),
12
+ EnrichedHeadingSpan {
13
+ override fun updateDrawState(tp: TextPaint) {
14
+ super.updateDrawState(tp)
15
+ val bold = enrichedStyle.h5Bold
16
+ if (bold) {
17
+ tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,20 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.TextPaint
5
+ import android.text.style.AbsoluteSizeSpan
6
+ import com.swmansion.enriched.common.EnrichedStyle
7
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
8
+
9
+ open class EnrichedH6Span(
10
+ private val enrichedStyle: EnrichedStyle,
11
+ ) : AbsoluteSizeSpan(enrichedStyle.h6FontSize),
12
+ EnrichedHeadingSpan {
13
+ override fun updateDrawState(tp: TextPaint) {
14
+ super.updateDrawState(tp)
15
+ val bold = enrichedStyle.h6Bold
16
+ if (bold) {
17
+ tp.typeface = Typeface.create(tp.typeface, Typeface.BOLD)
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,185 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.content.res.Resources
4
+ import android.graphics.BitmapFactory
5
+ import android.graphics.Canvas
6
+ import android.graphics.ImageDecoder
7
+ import android.graphics.Paint
8
+ import android.graphics.drawable.AnimatedImageDrawable
9
+ import android.graphics.drawable.Drawable
10
+ import android.os.Build
11
+ import android.os.Handler
12
+ import android.os.Looper
13
+ import android.text.Spannable
14
+ import android.text.style.ImageSpan
15
+ import android.util.Log
16
+ import androidx.core.graphics.drawable.toDrawable
17
+ import androidx.core.graphics.withSave
18
+ import com.swmansion.enriched.common.AsyncDrawable
19
+ import com.swmansion.enriched.common.ForceRedrawSpan
20
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedInlineSpan
21
+ import java.io.File
22
+
23
+ open class EnrichedImageSpan :
24
+ ImageSpan,
25
+ EnrichedInlineSpan {
26
+ private var width: Int = 0
27
+ private var height: Int = 0
28
+
29
+ constructor(drawable: Drawable, source: String, width: Int, height: Int) : super(drawable, source, ALIGN_BASELINE) {
30
+ this.width = width
31
+ this.height = height
32
+ }
33
+
34
+ override fun draw(
35
+ canvas: Canvas,
36
+ text: CharSequence?,
37
+ start: Int,
38
+ end: Int,
39
+ x: Float,
40
+ top: Int,
41
+ y: Int,
42
+ bottom: Int,
43
+ paint: Paint,
44
+ ) {
45
+ val drawable = drawable
46
+ canvas.withSave {
47
+ val transY = bottom - drawable.bounds.bottom - paint.fontMetricsInt.descent
48
+ translate(x, transY.toFloat())
49
+ drawable.draw(this)
50
+ }
51
+ }
52
+
53
+ override fun getDrawable(): Drawable {
54
+ val drawable = super.getDrawable()
55
+ val scale = Resources.getSystem().displayMetrics.density
56
+
57
+ drawable.setBounds(0, 0, (width * scale).toInt(), (height * scale).toInt())
58
+ return drawable
59
+ }
60
+
61
+ override fun getSize(
62
+ paint: Paint,
63
+ text: CharSequence?,
64
+ start: Int,
65
+ end: Int,
66
+ fm: Paint.FontMetricsInt?,
67
+ ): Int {
68
+ val d = drawable
69
+ val rect = d.bounds
70
+
71
+ if (fm != null) {
72
+ val imageHeight = rect.bottom - rect.top
73
+
74
+ // We want the image bottom to sit on the baseline (0).
75
+ // Therefore, the image top will be at: -imageHeight.
76
+ val targetTop = -imageHeight
77
+
78
+ // Expand the line UPWARDS if the image is taller than the current font
79
+ if (targetTop < fm.ascent) {
80
+ fm.ascent = targetTop
81
+ fm.top = targetTop
82
+ }
83
+ }
84
+
85
+ return rect.right
86
+ }
87
+
88
+ private fun registerDrawableLoadCallback(
89
+ d: AsyncDrawable,
90
+ text: Spannable?,
91
+ ) {
92
+ d.onLoaded = onLoaded@{
93
+ val spannable = text
94
+
95
+ if (spannable == null) {
96
+ return@onLoaded
97
+ }
98
+ // Ensure we are on the Main Thread before modifying the Spannable
99
+ Handler(Looper.getMainLooper()).post {
100
+ val start = spannable.getSpanStart(this@EnrichedImageSpan)
101
+ val end = spannable.getSpanEnd(this@EnrichedImageSpan)
102
+
103
+ if (start != -1 && end != -1) {
104
+ // trick for adding empty span to force redraw when image is loaded
105
+ val redrawSpan = ForceRedrawSpan()
106
+ spannable.setSpan(redrawSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
107
+ spannable.removeSpan(redrawSpan)
108
+ }
109
+ }
110
+ }
111
+ }
112
+
113
+ fun observeAsyncDrawableLoaded(text: Spannable?) {
114
+ val d = drawable
115
+
116
+ if (d !is AsyncDrawable) {
117
+ return
118
+ }
119
+
120
+ registerDrawableLoadCallback(d, text)
121
+
122
+ // If it's already loaded (race condition), run logic immediately
123
+ if (d.isLoaded) {
124
+ d.onLoaded?.invoke()
125
+ }
126
+ }
127
+
128
+ fun getWidth(): Int = width
129
+
130
+ fun getHeight(): Int = height
131
+
132
+ companion object {
133
+ fun prepareDrawableForImage(
134
+ src: String,
135
+ width: Int,
136
+ height: Int,
137
+ ): Drawable? {
138
+ var cleanPath = src
139
+
140
+ if (cleanPath.startsWith("http://") || cleanPath.startsWith("https://")) {
141
+ return AsyncDrawable(cleanPath)
142
+ }
143
+
144
+ if (cleanPath.startsWith("file://")) {
145
+ cleanPath = cleanPath.substring(7)
146
+ }
147
+
148
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
149
+ return try {
150
+ val bitmap = BitmapFactory.decodeFile(cleanPath) ?: return null
151
+ val drawable = bitmap.toDrawable(Resources.getSystem())
152
+ drawable.setBounds(0, 0, bitmap.width, bitmap.height)
153
+ return drawable
154
+ } catch (e: Exception) {
155
+ Log.e("EnrichedImageSpan", "Failed to load legacy image: $cleanPath", e)
156
+ null
157
+ }
158
+ }
159
+
160
+ return try {
161
+ val file = File(cleanPath)
162
+ val source = ImageDecoder.createSource(file)
163
+
164
+ val density = Resources.getSystem().displayMetrics.density
165
+ val targetWidthPx = (width * density).toInt()
166
+ val targetHeightPx = (height * density).toInt()
167
+
168
+ val drawable =
169
+ ImageDecoder.decodeDrawable(source) { decoder, info, source ->
170
+ decoder.setTargetSize(targetWidthPx, targetHeightPx)
171
+ }
172
+
173
+ if (drawable is AnimatedImageDrawable) {
174
+ drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
175
+ drawable.repeatCount = AnimatedImageDrawable.REPEAT_INFINITE
176
+ drawable.start()
177
+ }
178
+ drawable
179
+ } catch (e: Exception) {
180
+ Log.e("EnrichedImageSpan", "Failed to load image: $cleanPath", e)
181
+ null
182
+ }
183
+ }
184
+ }
185
+ }
@@ -0,0 +1,24 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.TextPaint
5
+ import android.text.style.MetricAffectingSpan
6
+ import com.swmansion.enriched.common.EnrichedStyle
7
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedInlineSpan
8
+
9
+ open class EnrichedInlineCodeSpan(
10
+ private val enrichedStyle: EnrichedStyle,
11
+ ) : MetricAffectingSpan(),
12
+ EnrichedInlineSpan {
13
+ override fun updateDrawState(textPaint: TextPaint) {
14
+ val typeface = Typeface.create(Typeface.MONOSPACE, Typeface.NORMAL)
15
+ textPaint.typeface = typeface
16
+ textPaint.color = enrichedStyle.inlineCodeColor
17
+ textPaint.bgColor = enrichedStyle.inlineCodeBackgroundColor
18
+ }
19
+
20
+ override fun updateMeasureState(textPaint: TextPaint) {
21
+ val typeface = Typeface.create(Typeface.MONOSPACE, Typeface.NORMAL)
22
+ textPaint.typeface = typeface
23
+ }
24
+ }
@@ -0,0 +1,12 @@
1
+ package com.swmansion.enriched.common.spans
2
+
3
+ import android.graphics.Typeface
4
+ import android.text.style.StyleSpan
5
+ import com.swmansion.enriched.common.EnrichedStyle
6
+ import com.swmansion.enriched.common.spans.interfaces.EnrichedInlineSpan
7
+
8
+ @Suppress("UNUSED_PARAMETER")
9
+ open class EnrichedItalicSpan(
10
+ private val enrichedStyle: EnrichedStyle,
11
+ ) : StyleSpan(Typeface.ITALIC),
12
+ EnrichedInlineSpan