react-native-enriched-html 0.0.0 → 1.0.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 (747) 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/EnrichedSpanFlags.kt +39 -0
  29. package/android/src/main/java/com/swmansion/enriched/common/EnrichedStyle.kt +57 -0
  30. package/android/src/main/java/com/swmansion/enriched/common/ForceRedrawSpan.kt +14 -0
  31. package/android/src/main/java/com/swmansion/enriched/common/GumboNormalizer.kt +5 -0
  32. package/android/src/main/java/com/swmansion/enriched/common/MentionStyle.kt +9 -0
  33. package/android/src/main/java/com/swmansion/enriched/common/ResourceManager.kt +26 -0
  34. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java +1057 -0
  35. package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +83 -0
  36. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedAlignmentSpan.kt +19 -0
  37. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBlockQuoteSpan.kt +53 -0
  38. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBoldSpan.kt +12 -0
  39. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCheckboxListSpan.kt +92 -0
  40. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCodeBlockSpan.kt +81 -0
  41. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH1Span.kt +20 -0
  42. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH2Span.kt +20 -0
  43. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH3Span.kt +20 -0
  44. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH4Span.kt +21 -0
  45. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH5Span.kt +20 -0
  46. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH6Span.kt +20 -0
  47. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedImageSpan.kt +185 -0
  48. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedInlineCodeSpan.kt +24 -0
  49. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedItalicSpan.kt +12 -0
  50. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedLinkSpan.kt +29 -0
  51. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedMentionSpan.kt +35 -0
  52. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedOrderedListSpan.kt +79 -0
  53. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedStrikeThroughSpan.kt +11 -0
  54. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnderlineSpan.kt +11 -0
  55. package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnorderedListSpan.kt +62 -0
  56. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedBlockSpan.kt +5 -0
  57. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedHeadingSpan.kt +3 -0
  58. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedInlineSpan.kt +3 -0
  59. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedParagraphSpan.kt +5 -0
  60. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedSpan.kt +3 -0
  61. package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedZeroWidthSpaceSpan.kt +4 -0
  62. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextMovementMethod.kt +75 -0
  63. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextSpanFactory.kt +84 -0
  64. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextStyle.kt +202 -0
  65. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextView.kt +362 -0
  66. package/android/src/main/java/com/swmansion/enriched/text/EnrichedTextViewManager.kt +157 -0
  67. package/android/src/main/java/com/swmansion/enriched/text/MeasurementStore.kt +170 -0
  68. package/android/src/main/java/com/swmansion/enriched/text/events/OnLinkPressEvent.kt +23 -0
  69. package/android/src/main/java/com/swmansion/enriched/text/events/OnMentionPressEvent.kt +32 -0
  70. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextAlignmentSpan.kt +14 -0
  71. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextBlockQuoteSpan.kt +14 -0
  72. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextBoldSpan.kt +14 -0
  73. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextCheckboxListSpan.kt +15 -0
  74. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextCodeBlockSpan.kt +14 -0
  75. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH1Span.kt +14 -0
  76. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH2Span.kt +14 -0
  77. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH3Span.kt +15 -0
  78. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH4Span.kt +15 -0
  79. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH5Span.kt +14 -0
  80. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextH6Span.kt +14 -0
  81. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextImageSpan.kt +57 -0
  82. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextInlineCodeSpan.kt +14 -0
  83. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextItalicSpan.kt +14 -0
  84. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextLinkSpan.kt +41 -0
  85. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextMentionSpan.kt +63 -0
  86. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextOrderedListSpan.kt +16 -0
  87. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextStrikeThroughSpan.kt +15 -0
  88. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextUnderlineSpan.kt +15 -0
  89. package/android/src/main/java/com/swmansion/enriched/text/spans/EnrichedTextUnorderedListSpan.kt +15 -0
  90. package/android/src/main/java/com/swmansion/enriched/text/spans/interfaces/EnrichedTextClickableSpan.kt +9 -0
  91. package/android/src/main/java/com/swmansion/enriched/text/spans/interfaces/EnrichedTextSpan.kt +10 -0
  92. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputConnectionWrapper.kt +140 -0
  93. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +86 -0
  94. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputView.kt +1144 -0
  95. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewLayoutManager.kt +27 -0
  96. package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputViewManager.kt +500 -0
  97. package/android/src/main/java/com/swmansion/enriched/textinput/MeasurementStore.kt +230 -0
  98. package/android/src/main/java/com/swmansion/enriched/textinput/events/MentionHandler.kt +65 -0
  99. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeHtmlEvent.kt +27 -0
  100. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeSelectionEvent.kt +30 -0
  101. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeStateEvent.kt +21 -0
  102. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeTextEvent.kt +30 -0
  103. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnContextMenuItemPressEvent.kt +35 -0
  104. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputBlurEvent.kt +25 -0
  105. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputFocusEvent.kt +25 -0
  106. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputKeyPressEvent.kt +27 -0
  107. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnLinkDetectedEvent.kt +32 -0
  108. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionDetectedEvent.kt +30 -0
  109. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnMentionEvent.kt +40 -0
  110. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnPasteImagesEvent.kt +47 -0
  111. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnRequestHtmlResultEvent.kt +32 -0
  112. package/android/src/main/java/com/swmansion/enriched/textinput/events/OnSubmitEditingEvent.kt +29 -0
  113. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputAlignmentSpan.kt +14 -0
  114. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt +14 -0
  115. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBoldSpan.kt +14 -0
  116. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCheckboxListSpan.kt +15 -0
  117. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt +14 -0
  118. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH1Span.kt +14 -0
  119. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH2Span.kt +14 -0
  120. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH3Span.kt +14 -0
  121. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH4Span.kt +14 -0
  122. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH5Span.kt +14 -0
  123. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH6Span.kt +14 -0
  124. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt +36 -0
  125. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt +14 -0
  126. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt +14 -0
  127. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputLinkSpan.kt +16 -0
  128. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt +18 -0
  129. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt +21 -0
  130. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputStrikeThroughSpan.kt +14 -0
  131. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt +14 -0
  132. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnorderedListSpan.kt +14 -0
  133. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedLineHeightSpan.kt +45 -0
  134. package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedSpans.kt +240 -0
  135. package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt +10 -0
  136. package/android/src/main/java/com/swmansion/enriched/textinput/styles/AlignmentStyles.kt +366 -0
  137. package/android/src/main/java/com/swmansion/enriched/textinput/styles/HtmlStyle.kt +371 -0
  138. package/android/src/main/java/com/swmansion/enriched/textinput/styles/InlineStyles.kt +244 -0
  139. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ListStyles.kt +261 -0
  140. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParagraphStyles.kt +440 -0
  141. package/android/src/main/java/com/swmansion/enriched/textinput/styles/ParametrizedStyles.kt +435 -0
  142. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedEditableFactory.kt +17 -0
  143. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSelection.kt +342 -0
  144. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpanState.kt +318 -0
  145. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannable.kt +157 -0
  146. package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannableStringBuilder.kt +59 -0
  147. package/android/src/main/java/com/swmansion/enriched/textinput/utils/RichContentReceiver.kt +127 -0
  148. package/android/src/main/java/com/swmansion/enriched/textinput/utils/ShortcutsHandler.kt +150 -0
  149. package/android/src/main/java/com/swmansion/enriched/textinput/utils/StyleUtils.kt +51 -0
  150. package/android/src/main/java/com/swmansion/enriched/textinput/utils/Utils.kt +107 -0
  151. package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedSpanWatcher.kt +109 -0
  152. package/android/src/main/java/com/swmansion/enriched/textinput/watchers/EnrichedTextWatcher.kt +106 -0
  153. package/android/src/main/new_arch/CMakeLists.txt +62 -0
  154. package/android/src/main/new_arch/GumboNormalizerJni.cpp +14 -0
  155. package/android/src/main/new_arch/ReactNativeEnrichedSpec.cpp +11 -0
  156. package/android/src/main/new_arch/ReactNativeEnrichedSpec.h +16 -0
  157. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextComponentDescriptor.h +32 -0
  158. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputComponentDescriptor.h +35 -0
  159. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.cpp +53 -0
  160. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputMeasurementManager.h +25 -0
  161. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.cpp +35 -0
  162. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputShadowNode.h +53 -0
  163. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.cpp +9 -0
  164. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputState.h +24 -0
  165. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextMeasurementManager.cpp +45 -0
  166. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextMeasurementManager.h +25 -0
  167. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextShadowNode.cpp +21 -0
  168. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextShadowNode.h +39 -0
  169. package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h +44 -0
  170. package/android/src/main/res/drawable/broken_image.xml +10 -0
  171. package/cpp/CMakeLists.txt +50 -0
  172. package/cpp/GumboParser/GumboParser.h +34043 -0
  173. package/cpp/README.md +59 -0
  174. package/cpp/parser/GumboNormalizer.c +973 -0
  175. package/cpp/parser/GumboParser.cpp +16 -0
  176. package/cpp/parser/GumboParser.hpp +23 -0
  177. package/cpp/tests/GumboParserTest.cpp +511 -0
  178. package/ios/EnrichedTextInputView.h +54 -0
  179. package/ios/EnrichedTextInputView.mm +2182 -0
  180. package/ios/EnrichedTextInputViewManager.mm +13 -0
  181. package/ios/EnrichedTextView.h +35 -0
  182. package/ios/EnrichedTextView.mm +806 -0
  183. package/ios/EnrichedTextViewManager.mm +13 -0
  184. package/ios/config/EnrichedConfig.h +114 -0
  185. package/ios/config/EnrichedConfig.mm +727 -0
  186. package/ios/enrichedInputTextView/EnrichedInputTextView.h +6 -0
  187. package/ios/enrichedInputTextView/EnrichedInputTextView.mm +334 -0
  188. package/ios/enrichedTextTextView/EnrichedTextTextView.h +16 -0
  189. package/ios/enrichedTextTextView/EnrichedTextTextView.mm +71 -0
  190. package/ios/extensions/ColorExtension.h +8 -0
  191. package/ios/extensions/ColorExtension.mm +48 -0
  192. package/ios/extensions/FontExtension.h +11 -0
  193. package/ios/extensions/FontExtension.mm +72 -0
  194. package/ios/extensions/ImageExtension.h +33 -0
  195. package/ios/extensions/ImageExtension.mm +176 -0
  196. package/ios/extensions/LayoutManagerExtension.h +6 -0
  197. package/ios/extensions/LayoutManagerExtension.mm +465 -0
  198. package/ios/extensions/StringExtension.h +15 -0
  199. package/ios/extensions/StringExtension.mm +144 -0
  200. package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.cpp +22 -0
  201. package/ios/generated/ReactNativeEnrichedSpec/ComponentDescriptors.h +24 -0
  202. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.cpp +456 -0
  203. package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.h +410 -0
  204. package/ios/generated/ReactNativeEnrichedSpec/Props.cpp +272 -0
  205. package/ios/generated/ReactNativeEnrichedSpec/Props.h +1595 -0
  206. package/ios/generated/ReactNativeEnrichedSpec/RCTComponentViewHelpers.h +570 -0
  207. package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.cpp +17 -0
  208. package/ios/generated/ReactNativeEnrichedSpec/ShadowNodes.h +23 -0
  209. package/ios/generated/ReactNativeEnrichedSpec/States.cpp +16 -0
  210. package/ios/generated/ReactNativeEnrichedSpec/States.h +20 -0
  211. package/ios/htmlParser/HtmlParser.h +14 -0
  212. package/ios/htmlParser/HtmlParser.mm +1486 -0
  213. package/ios/inputAttributesManager/InputAttributesManager.h +18 -0
  214. package/ios/inputAttributesManager/InputAttributesManager.mm +222 -0
  215. package/ios/inputHtmlParser/InputHtmlParser.h +10 -0
  216. package/ios/inputHtmlParser/InputHtmlParser.mm +228 -0
  217. package/ios/interfaces/AlignmentEntry.h +9 -0
  218. package/ios/interfaces/AlignmentEntry.mm +4 -0
  219. package/ios/interfaces/AttributeEntry.h +9 -0
  220. package/ios/interfaces/AttributeEntry.mm +4 -0
  221. package/ios/interfaces/BaseStyleProtocol.h +17 -0
  222. package/ios/interfaces/EnrichedTextStyleHeaders.h +62 -0
  223. package/ios/interfaces/EnrichedViewHost.h +26 -0
  224. package/ios/interfaces/ImageAttachment.h +11 -0
  225. package/ios/interfaces/ImageAttachment.mm +107 -0
  226. package/ios/interfaces/ImageData.h +10 -0
  227. package/ios/interfaces/ImageData.mm +4 -0
  228. package/ios/interfaces/LinkData.h +11 -0
  229. package/ios/interfaces/LinkData.mm +43 -0
  230. package/ios/interfaces/LinkRegexConfig.h +19 -0
  231. package/ios/interfaces/LinkRegexConfig.mm +37 -0
  232. package/ios/interfaces/MediaAttachment.h +23 -0
  233. package/ios/interfaces/MediaAttachment.mm +31 -0
  234. package/ios/interfaces/MentionParams.h +8 -0
  235. package/ios/interfaces/MentionParams.mm +4 -0
  236. package/ios/interfaces/MentionStyleProps.h +17 -0
  237. package/ios/interfaces/MentionStyleProps.mm +80 -0
  238. package/ios/interfaces/StyleBase.h +38 -0
  239. package/ios/interfaces/StyleBase.mm +279 -0
  240. package/ios/interfaces/StyleHeaders.h +114 -0
  241. package/ios/interfaces/StylePair.h +9 -0
  242. package/ios/interfaces/StylePair.mm +4 -0
  243. package/ios/interfaces/StyleTypeEnum.h +27 -0
  244. package/ios/interfaces/TextDecorationLineEnum.h +6 -0
  245. package/ios/interfaces/TextDecorationLineEnum.mm +4 -0
  246. package/ios/internals/EnrichedTextComponentDescriptor.h +19 -0
  247. package/ios/internals/EnrichedTextInputViewComponentDescriptor.h +19 -0
  248. package/ios/internals/EnrichedTextInputViewShadowNode.h +44 -0
  249. package/ios/internals/EnrichedTextInputViewShadowNode.mm +103 -0
  250. package/ios/internals/EnrichedTextInputViewState.cpp +10 -0
  251. package/ios/internals/EnrichedTextInputViewState.h +22 -0
  252. package/ios/internals/EnrichedTextViewShadowNode.h +34 -0
  253. package/ios/internals/EnrichedTextViewShadowNode.mm +72 -0
  254. package/ios/internals/EnrichedTextViewState.cpp +7 -0
  255. package/ios/internals/EnrichedTextViewState.h +18 -0
  256. package/ios/styles/AlignmentStyle.mm +203 -0
  257. package/ios/styles/BlockQuoteStyle.mm +54 -0
  258. package/ios/styles/BoldStyle.mm +37 -0
  259. package/ios/styles/CheckboxListStyle.mm +154 -0
  260. package/ios/styles/CodeBlockStyle.mm +49 -0
  261. package/ios/styles/EnrichedTextStyles.mm +61 -0
  262. package/ios/styles/H1Style.mm +20 -0
  263. package/ios/styles/H2Style.mm +20 -0
  264. package/ios/styles/H3Style.mm +20 -0
  265. package/ios/styles/H4Style.mm +20 -0
  266. package/ios/styles/H5Style.mm +20 -0
  267. package/ios/styles/H6Style.mm +20 -0
  268. package/ios/styles/HeadingStyleBase.mm +96 -0
  269. package/ios/styles/ImageStyle.mm +150 -0
  270. package/ios/styles/InlineCodeStyle.mm +65 -0
  271. package/ios/styles/ItalicStyle.mm +37 -0
  272. package/ios/styles/LinkStyle.mm +518 -0
  273. package/ios/styles/MentionStyle.mm +592 -0
  274. package/ios/styles/OrderedListStyle.mm +48 -0
  275. package/ios/styles/StrikethroughStyle.mm +25 -0
  276. package/ios/styles/UnderlineStyle.mm +24 -0
  277. package/ios/styles/UnorderedListStyle.mm +48 -0
  278. package/ios/textHtmlParser/TextHtmlParser.h +10 -0
  279. package/ios/textHtmlParser/TextHtmlParser.mm +182 -0
  280. package/ios/utils/AlignmentUtils.h +20 -0
  281. package/ios/utils/AlignmentUtils.mm +111 -0
  282. package/ios/utils/AttachmentLayoutUtils.h +24 -0
  283. package/ios/utils/AttachmentLayoutUtils.mm +144 -0
  284. package/ios/utils/CheckboxHitTestUtils.h +10 -0
  285. package/ios/utils/CheckboxHitTestUtils.mm +122 -0
  286. package/ios/utils/DotReplacementUtils.h +10 -0
  287. package/ios/utils/DotReplacementUtils.mm +68 -0
  288. package/ios/utils/EnrichedTextTouchHandler.h +14 -0
  289. package/ios/utils/EnrichedTextTouchHandler.mm +152 -0
  290. package/ios/utils/KeyboardUtils.h +7 -0
  291. package/ios/utils/KeyboardUtils.mm +30 -0
  292. package/ios/utils/OccurenceUtils.h +44 -0
  293. package/ios/utils/OccurenceUtils.mm +185 -0
  294. package/ios/utils/ParagraphAttributesUtils.h +18 -0
  295. package/ios/utils/ParagraphAttributesUtils.mm +296 -0
  296. package/ios/utils/RangeUtils.h +12 -0
  297. package/ios/utils/RangeUtils.mm +183 -0
  298. package/ios/utils/ShortcutsUtils.h +21 -0
  299. package/ios/utils/ShortcutsUtils.mm +486 -0
  300. package/ios/utils/StyleUtils.h +33 -0
  301. package/ios/utils/StyleUtils.mm +290 -0
  302. package/ios/utils/TextBlockTapGestureRecognizer.h +17 -0
  303. package/ios/utils/TextBlockTapGestureRecognizer.mm +56 -0
  304. package/ios/utils/TextInsertionUtils.h +17 -0
  305. package/ios/utils/TextInsertionUtils.mm +60 -0
  306. package/ios/utils/TextListsUtils.h +40 -0
  307. package/ios/utils/TextListsUtils.mm +93 -0
  308. package/ios/utils/WeakBox.h +3 -0
  309. package/ios/utils/WeakBox.m +4 -0
  310. package/ios/utils/WordsUtils.h +7 -0
  311. package/ios/utils/WordsUtils.mm +98 -0
  312. package/ios/utils/ZeroWidthSpaceUtils.h +14 -0
  313. package/ios/utils/ZeroWidthSpaceUtils.mm +310 -0
  314. package/lib/module/index.js +5 -0
  315. package/lib/module/index.js.map +1 -0
  316. package/lib/module/index.native.js +7 -0
  317. package/lib/module/index.native.js.map +1 -0
  318. package/lib/module/native/EnrichedText.js +76 -0
  319. package/lib/module/native/EnrichedText.js.map +1 -0
  320. package/lib/module/native/EnrichedTextInput.js +306 -0
  321. package/lib/module/native/EnrichedTextInput.js.map +1 -0
  322. package/lib/module/package.json +1 -0
  323. package/lib/module/spec/EnrichedTextInputNativeComponent.ts +524 -0
  324. package/lib/module/spec/EnrichedTextNativeComponent.ts +110 -0
  325. package/lib/module/types.js +4 -0
  326. package/lib/module/types.js.map +1 -0
  327. package/lib/module/utils/EnrichedTextInputDefaultProps.js +20 -0
  328. package/lib/module/utils/EnrichedTextInputDefaultProps.js.map +1 -0
  329. package/lib/module/utils/defaultHtmlStyle.js +83 -0
  330. package/lib/module/utils/defaultHtmlStyle.js.map +1 -0
  331. package/lib/module/utils/expandMentionStylesForIndicators.js +14 -0
  332. package/lib/module/utils/expandMentionStylesForIndicators.js.map +1 -0
  333. package/lib/module/utils/isMentionStyleRecord.js +10 -0
  334. package/lib/module/utils/isMentionStyleRecord.js.map +1 -0
  335. package/lib/module/utils/normalizeHtmlStyle.js +126 -0
  336. package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
  337. package/lib/module/utils/nullthrows.js +9 -0
  338. package/lib/module/utils/nullthrows.js.map +1 -0
  339. package/lib/module/utils/regexParser.js +46 -0
  340. package/lib/module/utils/regexParser.js.map +1 -0
  341. package/lib/module/web/EnrichedText.css +343 -0
  342. package/lib/module/web/EnrichedText.js +55 -0
  343. package/lib/module/web/EnrichedText.js.map +1 -0
  344. package/lib/module/web/EnrichedTextInput.js +316 -0
  345. package/lib/module/web/EnrichedTextInput.js.map +1 -0
  346. package/lib/module/web/adaptWebToNativeEvent.js +34 -0
  347. package/lib/module/web/adaptWebToNativeEvent.js.map +1 -0
  348. package/lib/module/web/constants/brokenImageGlyph.js +9 -0
  349. package/lib/module/web/constants/brokenImageGlyph.js.map +1 -0
  350. package/lib/module/web/constants/classNames.js +5 -0
  351. package/lib/module/web/constants/classNames.js.map +1 -0
  352. package/lib/module/web/emitLinkDetected.js +12 -0
  353. package/lib/module/web/emitLinkDetected.js.map +1 -0
  354. package/lib/module/web/formats/EnrichedBlockquote.js +32 -0
  355. package/lib/module/web/formats/EnrichedBlockquote.js.map +1 -0
  356. package/lib/module/web/formats/EnrichedBold.js +22 -0
  357. package/lib/module/web/formats/EnrichedBold.js.map +1 -0
  358. package/lib/module/web/formats/EnrichedCheckboxItem.js +32 -0
  359. package/lib/module/web/formats/EnrichedCheckboxItem.js.map +1 -0
  360. package/lib/module/web/formats/EnrichedCheckboxList.js +35 -0
  361. package/lib/module/web/formats/EnrichedCheckboxList.js.map +1 -0
  362. package/lib/module/web/formats/EnrichedCode.js +15 -0
  363. package/lib/module/web/formats/EnrichedCode.js.map +1 -0
  364. package/lib/module/web/formats/EnrichedCodeBlock.js +43 -0
  365. package/lib/module/web/formats/EnrichedCodeBlock.js.map +1 -0
  366. package/lib/module/web/formats/EnrichedHeading.js +27 -0
  367. package/lib/module/web/formats/EnrichedHeading.js.map +1 -0
  368. package/lib/module/web/formats/EnrichedImage.js +57 -0
  369. package/lib/module/web/formats/EnrichedImage.js.map +1 -0
  370. package/lib/module/web/formats/EnrichedImageNodeView.js +90 -0
  371. package/lib/module/web/formats/EnrichedImageNodeView.js.map +1 -0
  372. package/lib/module/web/formats/EnrichedItalic.js +22 -0
  373. package/lib/module/web/formats/EnrichedItalic.js.map +1 -0
  374. package/lib/module/web/formats/EnrichedLink.js +180 -0
  375. package/lib/module/web/formats/EnrichedLink.js.map +1 -0
  376. package/lib/module/web/formats/EnrichedListItem.js +19 -0
  377. package/lib/module/web/formats/EnrichedListItem.js.map +1 -0
  378. package/lib/module/web/formats/EnrichedMention.js +50 -0
  379. package/lib/module/web/formats/EnrichedMention.js.map +1 -0
  380. package/lib/module/web/formats/EnrichedOrderedList.js +32 -0
  381. package/lib/module/web/formats/EnrichedOrderedList.js.map +1 -0
  382. package/lib/module/web/formats/EnrichedStrike.js +22 -0
  383. package/lib/module/web/formats/EnrichedStrike.js.map +1 -0
  384. package/lib/module/web/formats/EnrichedTextAlign.js +82 -0
  385. package/lib/module/web/formats/EnrichedTextAlign.js.map +1 -0
  386. package/lib/module/web/formats/EnrichedUnderline.js +22 -0
  387. package/lib/module/web/formats/EnrichedUnderline.js.map +1 -0
  388. package/lib/module/web/formats/EnrichedUnorderedList.js +33 -0
  389. package/lib/module/web/formats/EnrichedUnorderedList.js.map +1 -0
  390. package/lib/module/web/formats/applyWrappingListToSelection.js +64 -0
  391. package/lib/module/web/formats/applyWrappingListToSelection.js.map +1 -0
  392. package/lib/module/web/formats/formatRules.js +84 -0
  393. package/lib/module/web/formats/formatRules.js.map +1 -0
  394. package/lib/module/web/formats/listKeyboard.js +53 -0
  395. package/lib/module/web/formats/listKeyboard.js.map +1 -0
  396. package/lib/module/web/formats/wrappedBlockKeyboard.js +58 -0
  397. package/lib/module/web/formats/wrappedBlockKeyboard.js.map +1 -0
  398. package/lib/module/web/normalization/checkboxHtmlNormalizer.js +54 -0
  399. package/lib/module/web/normalization/checkboxHtmlNormalizer.js.map +1 -0
  400. package/lib/module/web/normalization/htmlNormalizer.js +514 -0
  401. package/lib/module/web/normalization/htmlNormalizer.js.map +1 -0
  402. package/lib/module/web/normalization/prepareHtmlForWeb.js +78 -0
  403. package/lib/module/web/normalization/prepareHtmlForWeb.js.map +1 -0
  404. package/lib/module/web/normalization/tiptapHtmlNormalizer.js +34 -0
  405. package/lib/module/web/normalization/tiptapHtmlNormalizer.js.map +1 -0
  406. package/lib/module/web/pasteImages.js +78 -0
  407. package/lib/module/web/pasteImages.js.map +1 -0
  408. package/lib/module/web/pastedImageDimensions.js +49 -0
  409. package/lib/module/web/pastedImageDimensions.js.map +1 -0
  410. package/lib/module/web/pmPlugins/AutolinkPlugin/autolinkRegex.js +27 -0
  411. package/lib/module/web/pmPlugins/AutolinkPlugin/autolinkRegex.js.map +1 -0
  412. package/lib/module/web/pmPlugins/AutolinkPlugin/index.js +178 -0
  413. package/lib/module/web/pmPlugins/AutolinkPlugin/index.js.map +1 -0
  414. package/lib/module/web/pmPlugins/MentionPlugin/index.js +36 -0
  415. package/lib/module/web/pmPlugins/MentionPlugin/index.js.map +1 -0
  416. package/lib/module/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.js +11 -0
  417. package/lib/module/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.js.map +1 -0
  418. package/lib/module/web/pmPlugins/MentionPlugin/makeMentionPluginState.js +86 -0
  419. package/lib/module/web/pmPlugins/MentionPlugin/makeMentionPluginState.js.map +1 -0
  420. package/lib/module/web/pmPlugins/MentionPlugin/mentionPluginKey.js +5 -0
  421. package/lib/module/web/pmPlugins/MentionPlugin/mentionPluginKey.js.map +1 -0
  422. package/lib/module/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.js +56 -0
  423. package/lib/module/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.js.map +1 -0
  424. package/lib/module/web/pmPlugins/MentionPlugin/setMention.js +57 -0
  425. package/lib/module/web/pmPlugins/MentionPlugin/setMention.js.map +1 -0
  426. package/lib/module/web/pmPlugins/MentionPlugin/startMention.js +9 -0
  427. package/lib/module/web/pmPlugins/MentionPlugin/startMention.js.map +1 -0
  428. package/lib/module/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.js +9 -0
  429. package/lib/module/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.js.map +1 -0
  430. package/lib/module/web/pmPlugins/MentionPlugin/types.js +4 -0
  431. package/lib/module/web/pmPlugins/MentionPlugin/types.js.map +1 -0
  432. package/lib/module/web/pmPlugins/MentionPlugin/useMentionEvents.js +105 -0
  433. package/lib/module/web/pmPlugins/MentionPlugin/useMentionEvents.js.map +1 -0
  434. package/lib/module/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.js +42 -0
  435. package/lib/module/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.js.map +1 -0
  436. package/lib/module/web/pmPlugins/ShortcutPlugin.js +134 -0
  437. package/lib/module/web/pmPlugins/ShortcutPlugin.js.map +1 -0
  438. package/lib/module/web/pmPlugins/StrictMarksPlugin.js +100 -0
  439. package/lib/module/web/pmPlugins/StrictMarksPlugin.js.map +1 -0
  440. package/lib/module/web/pmPlugins/StripBoldInStyledHeadingsPlugin.js +56 -0
  441. package/lib/module/web/pmPlugins/StripBoldInStyledHeadingsPlugin.js.map +1 -0
  442. package/lib/module/web/pmPlugins/StripMarksInCodeBlockPlugin.js +28 -0
  443. package/lib/module/web/pmPlugins/StripMarksInCodeBlockPlugin.js.map +1 -0
  444. package/lib/module/web/pmPlugins/StripMarksOnImagePlugin.js +29 -0
  445. package/lib/module/web/pmPlugins/StripMarksOnImagePlugin.js.map +1 -0
  446. package/lib/module/web/positionMapping.js +76 -0
  447. package/lib/module/web/positionMapping.js.map +1 -0
  448. package/lib/module/web/returnKeyTypeToEnterKeyHint.js +20 -0
  449. package/lib/module/web/returnKeyTypeToEnterKeyHint.js.map +1 -0
  450. package/lib/module/web/sanitization/htmlSanitizer.js +10 -0
  451. package/lib/module/web/sanitization/htmlSanitizer.js.map +1 -0
  452. package/lib/module/web/styleConversion/buildMentionRulesCSS.js +39 -0
  453. package/lib/module/web/styleConversion/buildMentionRulesCSS.js.map +1 -0
  454. package/lib/module/web/styleConversion/enrichedBaseStyleToCSSProperties.js +159 -0
  455. package/lib/module/web/styleConversion/enrichedBaseStyleToCSSProperties.js.map +1 -0
  456. package/lib/module/web/styleConversion/enrichedInputStyleToCSSProperties.js +7 -0
  457. package/lib/module/web/styleConversion/enrichedInputStyleToCSSProperties.js.map +1 -0
  458. package/lib/module/web/styleConversion/enrichedTextStyleToCSSProperties.js +44 -0
  459. package/lib/module/web/styleConversion/enrichedTextStyleToCSSProperties.js.map +1 -0
  460. package/lib/module/web/styleConversion/enrichedThemingToCSSProperties.js +18 -0
  461. package/lib/module/web/styleConversion/enrichedThemingToCSSProperties.js.map +1 -0
  462. package/lib/module/web/styleConversion/htmlStyleToCSSVariables.js +168 -0
  463. package/lib/module/web/styleConversion/htmlStyleToCSSVariables.js.map +1 -0
  464. package/lib/module/web/styleConversion/inlineImageCSSVariables.js +7 -0
  465. package/lib/module/web/styleConversion/inlineImageCSSVariables.js.map +1 -0
  466. package/lib/module/web/styleConversion/mentionIndicatorCssKey.js +15 -0
  467. package/lib/module/web/styleConversion/mentionIndicatorCssKey.js.map +1 -0
  468. package/lib/module/web/styleConversion/toColor.js +18 -0
  469. package/lib/module/web/styleConversion/toColor.js.map +1 -0
  470. package/lib/module/web/useImageErrorFallback.js +33 -0
  471. package/lib/module/web/useImageErrorFallback.js.map +1 -0
  472. package/lib/module/web/useOnChangeHtml.js +8 -0
  473. package/lib/module/web/useOnChangeHtml.js.map +1 -0
  474. package/lib/module/web/useOnChangeState.js +91 -0
  475. package/lib/module/web/useOnChangeState.js.map +1 -0
  476. package/lib/module/web/useOnChangeText.js +11 -0
  477. package/lib/module/web/useOnChangeText.js.map +1 -0
  478. package/lib/module/web/useOnEditorChange.js +25 -0
  479. package/lib/module/web/useOnEditorChange.js.map +1 -0
  480. package/lib/module/web/useOnLinkDetected.js +55 -0
  481. package/lib/module/web/useOnLinkDetected.js.map +1 -0
  482. package/lib/module/web/usePressInteractions.js +19 -0
  483. package/lib/module/web/usePressInteractions.js.map +1 -0
  484. package/lib/module/web/useStableRef.js +13 -0
  485. package/lib/module/web/useStableRef.js.map +1 -0
  486. package/lib/typescript/package.json +1 -0
  487. package/lib/typescript/src/index.d.ts +4 -0
  488. package/lib/typescript/src/index.d.ts.map +1 -0
  489. package/lib/typescript/src/index.native.d.ts +5 -0
  490. package/lib/typescript/src/index.native.d.ts.map +1 -0
  491. package/lib/typescript/src/native/EnrichedText.d.ts +3 -0
  492. package/lib/typescript/src/native/EnrichedText.d.ts.map +1 -0
  493. package/lib/typescript/src/native/EnrichedTextInput.d.ts +3 -0
  494. package/lib/typescript/src/native/EnrichedTextInput.d.ts.map +1 -0
  495. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts +405 -0
  496. package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts.map +1 -0
  497. package/lib/typescript/src/spec/EnrichedTextNativeComponent.d.ts +88 -0
  498. package/lib/typescript/src/spec/EnrichedTextNativeComponent.d.ts.map +1 -0
  499. package/lib/typescript/src/types.d.ts +721 -0
  500. package/lib/typescript/src/types.d.ts.map +1 -0
  501. package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts +13 -0
  502. package/lib/typescript/src/utils/EnrichedTextInputDefaultProps.d.ts.map +1 -0
  503. package/lib/typescript/src/utils/defaultHtmlStyle.d.ts +4 -0
  504. package/lib/typescript/src/utils/defaultHtmlStyle.d.ts.map +1 -0
  505. package/lib/typescript/src/utils/expandMentionStylesForIndicators.d.ts +3 -0
  506. package/lib/typescript/src/utils/expandMentionStylesForIndicators.d.ts.map +1 -0
  507. package/lib/typescript/src/utils/isMentionStyleRecord.d.ts +3 -0
  508. package/lib/typescript/src/utils/isMentionStyleRecord.d.ts.map +1 -0
  509. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +6 -0
  510. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
  511. package/lib/typescript/src/utils/nullthrows.d.ts +2 -0
  512. package/lib/typescript/src/utils/nullthrows.d.ts.map +1 -0
  513. package/lib/typescript/src/utils/regexParser.d.ts +3 -0
  514. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
  515. package/lib/typescript/src/web/EnrichedText.d.ts +4 -0
  516. package/lib/typescript/src/web/EnrichedText.d.ts.map +1 -0
  517. package/lib/typescript/src/web/EnrichedTextInput.d.ts +4 -0
  518. package/lib/typescript/src/web/EnrichedTextInput.d.ts.map +1 -0
  519. package/lib/typescript/src/web/adaptWebToNativeEvent.d.ts +3 -0
  520. package/lib/typescript/src/web/adaptWebToNativeEvent.d.ts.map +1 -0
  521. package/lib/typescript/src/web/constants/brokenImageGlyph.d.ts +3 -0
  522. package/lib/typescript/src/web/constants/brokenImageGlyph.d.ts.map +1 -0
  523. package/lib/typescript/src/web/constants/classNames.d.ts +3 -0
  524. package/lib/typescript/src/web/constants/classNames.d.ts.map +1 -0
  525. package/lib/typescript/src/web/emitLinkDetected.d.ts +10 -0
  526. package/lib/typescript/src/web/emitLinkDetected.d.ts.map +1 -0
  527. package/lib/typescript/src/web/formats/EnrichedBlockquote.d.ts +2 -0
  528. package/lib/typescript/src/web/formats/EnrichedBlockquote.d.ts.map +1 -0
  529. package/lib/typescript/src/web/formats/EnrichedBold.d.ts +2 -0
  530. package/lib/typescript/src/web/formats/EnrichedBold.d.ts.map +1 -0
  531. package/lib/typescript/src/web/formats/EnrichedCheckboxItem.d.ts +2 -0
  532. package/lib/typescript/src/web/formats/EnrichedCheckboxItem.d.ts.map +1 -0
  533. package/lib/typescript/src/web/formats/EnrichedCheckboxList.d.ts +9 -0
  534. package/lib/typescript/src/web/formats/EnrichedCheckboxList.d.ts.map +1 -0
  535. package/lib/typescript/src/web/formats/EnrichedCode.d.ts +2 -0
  536. package/lib/typescript/src/web/formats/EnrichedCode.d.ts.map +1 -0
  537. package/lib/typescript/src/web/formats/EnrichedCodeBlock.d.ts +9 -0
  538. package/lib/typescript/src/web/formats/EnrichedCodeBlock.d.ts.map +1 -0
  539. package/lib/typescript/src/web/formats/EnrichedHeading.d.ts +5 -0
  540. package/lib/typescript/src/web/formats/EnrichedHeading.d.ts.map +1 -0
  541. package/lib/typescript/src/web/formats/EnrichedImage.d.ts +2 -0
  542. package/lib/typescript/src/web/formats/EnrichedImage.d.ts.map +1 -0
  543. package/lib/typescript/src/web/formats/EnrichedImageNodeView.d.ts +3 -0
  544. package/lib/typescript/src/web/formats/EnrichedImageNodeView.d.ts.map +1 -0
  545. package/lib/typescript/src/web/formats/EnrichedItalic.d.ts +2 -0
  546. package/lib/typescript/src/web/formats/EnrichedItalic.d.ts.map +1 -0
  547. package/lib/typescript/src/web/formats/EnrichedLink.d.ts +8 -0
  548. package/lib/typescript/src/web/formats/EnrichedLink.d.ts.map +1 -0
  549. package/lib/typescript/src/web/formats/EnrichedListItem.d.ts +2 -0
  550. package/lib/typescript/src/web/formats/EnrichedListItem.d.ts.map +1 -0
  551. package/lib/typescript/src/web/formats/EnrichedMention.d.ts +4 -0
  552. package/lib/typescript/src/web/formats/EnrichedMention.d.ts.map +1 -0
  553. package/lib/typescript/src/web/formats/EnrichedOrderedList.d.ts +2 -0
  554. package/lib/typescript/src/web/formats/EnrichedOrderedList.d.ts.map +1 -0
  555. package/lib/typescript/src/web/formats/EnrichedStrike.d.ts +2 -0
  556. package/lib/typescript/src/web/formats/EnrichedStrike.d.ts.map +1 -0
  557. package/lib/typescript/src/web/formats/EnrichedTextAlign.d.ts +2 -0
  558. package/lib/typescript/src/web/formats/EnrichedTextAlign.d.ts.map +1 -0
  559. package/lib/typescript/src/web/formats/EnrichedUnderline.d.ts +2 -0
  560. package/lib/typescript/src/web/formats/EnrichedUnderline.d.ts.map +1 -0
  561. package/lib/typescript/src/web/formats/EnrichedUnorderedList.d.ts +9 -0
  562. package/lib/typescript/src/web/formats/EnrichedUnorderedList.d.ts.map +1 -0
  563. package/lib/typescript/src/web/formats/applyWrappingListToSelection.d.ts +18 -0
  564. package/lib/typescript/src/web/formats/applyWrappingListToSelection.d.ts.map +1 -0
  565. package/lib/typescript/src/web/formats/formatRules.d.ts +12 -0
  566. package/lib/typescript/src/web/formats/formatRules.d.ts.map +1 -0
  567. package/lib/typescript/src/web/formats/listKeyboard.d.ts +4 -0
  568. package/lib/typescript/src/web/formats/listKeyboard.d.ts.map +1 -0
  569. package/lib/typescript/src/web/formats/wrappedBlockKeyboard.d.ts +12 -0
  570. package/lib/typescript/src/web/formats/wrappedBlockKeyboard.d.ts.map +1 -0
  571. package/lib/typescript/src/web/normalization/checkboxHtmlNormalizer.d.ts +3 -0
  572. package/lib/typescript/src/web/normalization/checkboxHtmlNormalizer.d.ts.map +1 -0
  573. package/lib/typescript/src/web/normalization/htmlNormalizer.d.ts +2 -0
  574. package/lib/typescript/src/web/normalization/htmlNormalizer.d.ts.map +1 -0
  575. package/lib/typescript/src/web/normalization/prepareHtmlForWeb.d.ts +2 -0
  576. package/lib/typescript/src/web/normalization/prepareHtmlForWeb.d.ts.map +1 -0
  577. package/lib/typescript/src/web/normalization/tiptapHtmlNormalizer.d.ts +3 -0
  578. package/lib/typescript/src/web/normalization/tiptapHtmlNormalizer.d.ts.map +1 -0
  579. package/lib/typescript/src/web/pasteImages.d.ts +10 -0
  580. package/lib/typescript/src/web/pasteImages.d.ts.map +1 -0
  581. package/lib/typescript/src/web/pastedImageDimensions.d.ts +9 -0
  582. package/lib/typescript/src/web/pastedImageDimensions.d.ts.map +1 -0
  583. package/lib/typescript/src/web/pmPlugins/AutolinkPlugin/autolinkRegex.d.ts +7 -0
  584. package/lib/typescript/src/web/pmPlugins/AutolinkPlugin/autolinkRegex.d.ts.map +1 -0
  585. package/lib/typescript/src/web/pmPlugins/AutolinkPlugin/index.d.ts +8 -0
  586. package/lib/typescript/src/web/pmPlugins/AutolinkPlugin/index.d.ts.map +1 -0
  587. package/lib/typescript/src/web/pmPlugins/MentionPlugin/index.d.ts +9 -0
  588. package/lib/typescript/src/web/pmPlugins/MentionPlugin/index.d.ts.map +1 -0
  589. package/lib/typescript/src/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.d.ts +3 -0
  590. package/lib/typescript/src/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.d.ts.map +1 -0
  591. package/lib/typescript/src/web/pmPlugins/MentionPlugin/makeMentionPluginState.d.ts +4 -0
  592. package/lib/typescript/src/web/pmPlugins/MentionPlugin/makeMentionPluginState.d.ts.map +1 -0
  593. package/lib/typescript/src/web/pmPlugins/MentionPlugin/mentionPluginKey.d.ts +4 -0
  594. package/lib/typescript/src/web/pmPlugins/MentionPlugin/mentionPluginKey.d.ts.map +1 -0
  595. package/lib/typescript/src/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.d.ts +9 -0
  596. package/lib/typescript/src/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.d.ts.map +1 -0
  597. package/lib/typescript/src/web/pmPlugins/MentionPlugin/setMention.d.ts +3 -0
  598. package/lib/typescript/src/web/pmPlugins/MentionPlugin/setMention.d.ts.map +1 -0
  599. package/lib/typescript/src/web/pmPlugins/MentionPlugin/startMention.d.ts +3 -0
  600. package/lib/typescript/src/web/pmPlugins/MentionPlugin/startMention.d.ts.map +1 -0
  601. package/lib/typescript/src/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.d.ts +3 -0
  602. package/lib/typescript/src/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.d.ts.map +1 -0
  603. package/lib/typescript/src/web/pmPlugins/MentionPlugin/types.d.ts +20 -0
  604. package/lib/typescript/src/web/pmPlugins/MentionPlugin/types.d.ts.map +1 -0
  605. package/lib/typescript/src/web/pmPlugins/MentionPlugin/useMentionEvents.d.ts +4 -0
  606. package/lib/typescript/src/web/pmPlugins/MentionPlugin/useMentionEvents.d.ts.map +1 -0
  607. package/lib/typescript/src/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.d.ts +3 -0
  608. package/lib/typescript/src/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.d.ts.map +1 -0
  609. package/lib/typescript/src/web/pmPlugins/ShortcutPlugin.d.ts +7 -0
  610. package/lib/typescript/src/web/pmPlugins/ShortcutPlugin.d.ts.map +1 -0
  611. package/lib/typescript/src/web/pmPlugins/StrictMarksPlugin.d.ts +3 -0
  612. package/lib/typescript/src/web/pmPlugins/StrictMarksPlugin.d.ts.map +1 -0
  613. package/lib/typescript/src/web/pmPlugins/StripBoldInStyledHeadingsPlugin.d.ts +15 -0
  614. package/lib/typescript/src/web/pmPlugins/StripBoldInStyledHeadingsPlugin.d.ts.map +1 -0
  615. package/lib/typescript/src/web/pmPlugins/StripMarksInCodeBlockPlugin.d.ts +3 -0
  616. package/lib/typescript/src/web/pmPlugins/StripMarksInCodeBlockPlugin.d.ts.map +1 -0
  617. package/lib/typescript/src/web/pmPlugins/StripMarksOnImagePlugin.d.ts +3 -0
  618. package/lib/typescript/src/web/pmPlugins/StripMarksOnImagePlugin.d.ts.map +1 -0
  619. package/lib/typescript/src/web/positionMapping.d.ts +39 -0
  620. package/lib/typescript/src/web/positionMapping.d.ts.map +1 -0
  621. package/lib/typescript/src/web/returnKeyTypeToEnterKeyHint.d.ts +4 -0
  622. package/lib/typescript/src/web/returnKeyTypeToEnterKeyHint.d.ts.map +1 -0
  623. package/lib/typescript/src/web/sanitization/htmlSanitizer.d.ts +2 -0
  624. package/lib/typescript/src/web/sanitization/htmlSanitizer.d.ts.map +1 -0
  625. package/lib/typescript/src/web/styleConversion/buildMentionRulesCSS.d.ts +3 -0
  626. package/lib/typescript/src/web/styleConversion/buildMentionRulesCSS.d.ts.map +1 -0
  627. package/lib/typescript/src/web/styleConversion/enrichedBaseStyleToCSSProperties.d.ts +8 -0
  628. package/lib/typescript/src/web/styleConversion/enrichedBaseStyleToCSSProperties.d.ts.map +1 -0
  629. package/lib/typescript/src/web/styleConversion/enrichedInputStyleToCSSProperties.d.ts +5 -0
  630. package/lib/typescript/src/web/styleConversion/enrichedInputStyleToCSSProperties.d.ts.map +1 -0
  631. package/lib/typescript/src/web/styleConversion/enrichedTextStyleToCSSProperties.d.ts +4 -0
  632. package/lib/typescript/src/web/styleConversion/enrichedTextStyleToCSSProperties.d.ts.map +1 -0
  633. package/lib/typescript/src/web/styleConversion/enrichedThemingToCSSProperties.d.ts +9 -0
  634. package/lib/typescript/src/web/styleConversion/enrichedThemingToCSSProperties.d.ts.map +1 -0
  635. package/lib/typescript/src/web/styleConversion/htmlStyleToCSSVariables.d.ts +11 -0
  636. package/lib/typescript/src/web/styleConversion/htmlStyleToCSSVariables.d.ts.map +1 -0
  637. package/lib/typescript/src/web/styleConversion/inlineImageCSSVariables.d.ts +3 -0
  638. package/lib/typescript/src/web/styleConversion/inlineImageCSSVariables.d.ts.map +1 -0
  639. package/lib/typescript/src/web/styleConversion/mentionIndicatorCssKey.d.ts +3 -0
  640. package/lib/typescript/src/web/styleConversion/mentionIndicatorCssKey.d.ts.map +1 -0
  641. package/lib/typescript/src/web/styleConversion/toColor.d.ts +3 -0
  642. package/lib/typescript/src/web/styleConversion/toColor.d.ts.map +1 -0
  643. package/lib/typescript/src/web/useImageErrorFallback.d.ts +3 -0
  644. package/lib/typescript/src/web/useImageErrorFallback.d.ts.map +1 -0
  645. package/lib/typescript/src/web/useOnChangeHtml.d.ts +5 -0
  646. package/lib/typescript/src/web/useOnChangeHtml.d.ts.map +1 -0
  647. package/lib/typescript/src/web/useOnChangeState.d.ts +6 -0
  648. package/lib/typescript/src/web/useOnChangeState.d.ts.map +1 -0
  649. package/lib/typescript/src/web/useOnChangeText.d.ts +5 -0
  650. package/lib/typescript/src/web/useOnChangeText.d.ts.map +1 -0
  651. package/lib/typescript/src/web/useOnEditorChange.d.ts +6 -0
  652. package/lib/typescript/src/web/useOnEditorChange.d.ts.map +1 -0
  653. package/lib/typescript/src/web/useOnLinkDetected.d.ts +4 -0
  654. package/lib/typescript/src/web/useOnLinkDetected.d.ts.map +1 -0
  655. package/lib/typescript/src/web/usePressInteractions.d.ts +2 -0
  656. package/lib/typescript/src/web/usePressInteractions.d.ts.map +1 -0
  657. package/lib/typescript/src/web/useStableRef.d.ts +3 -0
  658. package/lib/typescript/src/web/useStableRef.d.ts.map +1 -0
  659. package/package.json +258 -1
  660. package/react-native.config.js +16 -0
  661. package/src/index.native.tsx +34 -0
  662. package/src/index.tsx +25 -0
  663. package/src/native/EnrichedText.tsx +115 -0
  664. package/src/native/EnrichedTextInput.tsx +374 -0
  665. package/src/spec/EnrichedTextInputNativeComponent.ts +524 -0
  666. package/src/spec/EnrichedTextNativeComponent.ts +110 -0
  667. package/src/types.ts +866 -0
  668. package/src/utils/EnrichedTextInputDefaultProps.ts +16 -0
  669. package/src/utils/defaultHtmlStyle.ts +83 -0
  670. package/src/utils/expandMentionStylesForIndicators.ts +19 -0
  671. package/src/utils/isMentionStyleRecord.ts +22 -0
  672. package/src/utils/normalizeHtmlStyle.ts +182 -0
  673. package/src/utils/nullthrows.ts +7 -0
  674. package/src/utils/regexParser.ts +56 -0
  675. package/src/web/EnrichedText.css +343 -0
  676. package/src/web/EnrichedText.tsx +82 -0
  677. package/src/web/EnrichedTextInput.tsx +417 -0
  678. package/src/web/adaptWebToNativeEvent.ts +37 -0
  679. package/src/web/constants/brokenImageGlyph.ts +7 -0
  680. package/src/web/constants/classNames.ts +2 -0
  681. package/src/web/emitLinkDetected.ts +29 -0
  682. package/src/web/formats/EnrichedBlockquote.ts +37 -0
  683. package/src/web/formats/EnrichedBold.ts +16 -0
  684. package/src/web/formats/EnrichedCheckboxItem.ts +35 -0
  685. package/src/web/formats/EnrichedCheckboxList.ts +50 -0
  686. package/src/web/formats/EnrichedCode.ts +13 -0
  687. package/src/web/formats/EnrichedCodeBlock.ts +54 -0
  688. package/src/web/formats/EnrichedHeading.ts +37 -0
  689. package/src/web/formats/EnrichedImage.ts +59 -0
  690. package/src/web/formats/EnrichedImageNodeView.tsx +87 -0
  691. package/src/web/formats/EnrichedItalic.ts +16 -0
  692. package/src/web/formats/EnrichedLink.ts +204 -0
  693. package/src/web/formats/EnrichedListItem.ts +17 -0
  694. package/src/web/formats/EnrichedMention.ts +55 -0
  695. package/src/web/formats/EnrichedOrderedList.ts +43 -0
  696. package/src/web/formats/EnrichedStrike.ts +16 -0
  697. package/src/web/formats/EnrichedTextAlign.ts +88 -0
  698. package/src/web/formats/EnrichedUnderline.ts +16 -0
  699. package/src/web/formats/EnrichedUnorderedList.ts +53 -0
  700. package/src/web/formats/applyWrappingListToSelection.ts +76 -0
  701. package/src/web/formats/formatRules.ts +128 -0
  702. package/src/web/formats/listKeyboard.ts +63 -0
  703. package/src/web/formats/wrappedBlockKeyboard.ts +76 -0
  704. package/src/web/normalization/checkboxHtmlNormalizer.ts +62 -0
  705. package/src/web/normalization/htmlNormalizer.ts +656 -0
  706. package/src/web/normalization/prepareHtmlForWeb.ts +93 -0
  707. package/src/web/normalization/tiptapHtmlNormalizer.ts +43 -0
  708. package/src/web/pasteImages.ts +96 -0
  709. package/src/web/pastedImageDimensions.ts +40 -0
  710. package/src/web/pmPlugins/AutolinkPlugin/autolinkRegex.ts +43 -0
  711. package/src/web/pmPlugins/AutolinkPlugin/index.ts +274 -0
  712. package/src/web/pmPlugins/MentionPlugin/index.ts +45 -0
  713. package/src/web/pmPlugins/MentionPlugin/isCaretInBlockedContext.ts +17 -0
  714. package/src/web/pmPlugins/MentionPlugin/makeMentionPluginState.ts +102 -0
  715. package/src/web/pmPlugins/MentionPlugin/mentionPluginKey.ts +4 -0
  716. package/src/web/pmPlugins/MentionPlugin/removeMentionMarksIfSpansResized.ts +68 -0
  717. package/src/web/pmPlugins/MentionPlugin/setMention.ts +73 -0
  718. package/src/web/pmPlugins/MentionPlugin/startMention.ts +14 -0
  719. package/src/web/pmPlugins/MentionPlugin/stripPartialMentionMarks.ts +20 -0
  720. package/src/web/pmPlugins/MentionPlugin/types.ts +22 -0
  721. package/src/web/pmPlugins/MentionPlugin/useMentionEvents.ts +114 -0
  722. package/src/web/pmPlugins/MergeAdjacentSameKindBlocksPlugin.ts +57 -0
  723. package/src/web/pmPlugins/ShortcutPlugin.ts +105 -0
  724. package/src/web/pmPlugins/StrictMarksPlugin.ts +134 -0
  725. package/src/web/pmPlugins/StripBoldInStyledHeadingsPlugin.ts +84 -0
  726. package/src/web/pmPlugins/StripMarksInCodeBlockPlugin.ts +34 -0
  727. package/src/web/pmPlugins/StripMarksOnImagePlugin.ts +33 -0
  728. package/src/web/positionMapping.ts +81 -0
  729. package/src/web/returnKeyTypeToEnterKeyHint.ts +29 -0
  730. package/src/web/sanitization/htmlSanitizer.ts +8 -0
  731. package/src/web/styleConversion/buildMentionRulesCSS.ts +61 -0
  732. package/src/web/styleConversion/enrichedBaseStyleToCSSProperties.ts +228 -0
  733. package/src/web/styleConversion/enrichedInputStyleToCSSProperties.ts +13 -0
  734. package/src/web/styleConversion/enrichedTextStyleToCSSProperties.ts +53 -0
  735. package/src/web/styleConversion/enrichedThemingToCSSProperties.ts +34 -0
  736. package/src/web/styleConversion/htmlStyleToCSSVariables.ts +277 -0
  737. package/src/web/styleConversion/inlineImageCSSVariables.ts +6 -0
  738. package/src/web/styleConversion/mentionIndicatorCssKey.ts +14 -0
  739. package/src/web/styleConversion/toColor.ts +17 -0
  740. package/src/web/useImageErrorFallback.ts +37 -0
  741. package/src/web/useOnChangeHtml.ts +14 -0
  742. package/src/web/useOnChangeState.ts +127 -0
  743. package/src/web/useOnChangeText.ts +15 -0
  744. package/src/web/useOnEditorChange.ts +33 -0
  745. package/src/web/useOnLinkDetected.ts +70 -0
  746. package/src/web/usePressInteractions.tsx +22 -0
  747. package/src/web/useStableRef.ts +12 -0
@@ -0,0 +1,296 @@
1
+ #import "ParagraphAttributesUtils.h"
2
+ #import "AlignmentUtils.h"
3
+ #import "EnrichedTextInputView.h"
4
+ #import "RangeUtils.h"
5
+ #import "StyleHeaders.h"
6
+ #import "StyleUtils.h"
7
+ #import "TextInsertionUtils.h"
8
+
9
+ @implementation ParagraphAttributesUtils
10
+
11
+ // if the user backspaces the last character in a line, the iOS applies typing
12
+ // attributes from the previous line in the case of some paragraph styles it
13
+ // works especially bad when a list point just appears this method handles that
14
+ // case differently with or without present paragraph styles
15
+ + (BOOL)handleBackspaceInRange:(NSRange)range
16
+ replacementText:(NSString *)text
17
+ input:(id)input {
18
+ EnrichedTextInputView *typedInput = (EnrichedTextInputView *)input;
19
+ if (typedInput == nullptr) {
20
+ return NO;
21
+ }
22
+
23
+ // Do not manually intervene if the user is in the middle of IME
24
+ // composition. Let the iOS system handle the backspace natively to prevent
25
+ // state desync.
26
+ if (typedInput->textView.markedTextRange != nullptr) {
27
+ return NO;
28
+ }
29
+
30
+ // we make sure it was a backspace (text with 0 length) and it deleted
31
+ // something (range longer than 0)
32
+ if (text.length > 0 || range.length == 0) {
33
+ return NO;
34
+ }
35
+
36
+ // find a non-newline range of the paragraph
37
+ NSRange paragraphRange =
38
+ [typedInput->textView.textStorage.string paragraphRangeForRange:range];
39
+
40
+ NSArray *paragraphs = [RangeUtils getNonNewlineRangesIn:typedInput->textView
41
+ range:paragraphRange];
42
+ if (paragraphs.count == 0) {
43
+ return NO;
44
+ }
45
+
46
+ NSRange nonNewlineRange = [(NSValue *)paragraphs.firstObject rangeValue];
47
+ CheckboxListStyle *cbLStyle =
48
+ typedInput->stylesDict[@([CheckboxListStyle getType])];
49
+
50
+ // the backspace removes the whole content of a paragraph (possibly more but
51
+ // has to start where the paragraph starts)
52
+ if (range.location == nonNewlineRange.location &&
53
+ range.length >= nonNewlineRange.length) {
54
+
55
+ // Preserve the paragraph alignment across typing attribute resets.
56
+ NSParagraphStyle *currentParaStyle =
57
+ typedInput->textView.typingAttributes[NSParagraphStyleAttributeName];
58
+ NSTextAlignment savedAlignment =
59
+ currentParaStyle ? currentParaStyle.alignment : NSTextAlignmentNatural;
60
+
61
+ // for styles that need ZWS (lists, quotes, etc.) we do the following:
62
+ // - manually do the removing
63
+ // - reset typing attributes so that the previous line styles don't get
64
+ // applied
65
+ // - reapply the paragraph style that was present so that a zero width space
66
+ // appears here
67
+ for (NSNumber *type in typedInput->stylesDict) {
68
+ StyleBase *style = typedInput->stylesDict[type];
69
+ if ([style needsZWS] && [style detect:nonNewlineRange]) {
70
+ BOOL isCurrentlyChecked = [cbLStyle getCheckboxStateAt:range.location];
71
+ [TextInsertionUtils replaceText:text
72
+ at:range
73
+ additionalAttributes:nullptr
74
+ host:typedInput
75
+ withSelection:YES];
76
+ [self resetTypingAttributes:typedInput
77
+ preservingAlignment:savedAlignment];
78
+
79
+ if (style == cbLStyle) {
80
+ [cbLStyle addWithChecked:isCurrentlyChecked
81
+ range:NSMakeRange(range.location, 0)
82
+ withTyping:YES
83
+ withDirtyRange:YES];
84
+ } else {
85
+ [style add:NSMakeRange(range.location, 0)
86
+ withTyping:YES
87
+ withDirtyRange:YES];
88
+ }
89
+ return YES;
90
+ }
91
+ }
92
+
93
+ // otherwise (no paragraph styles present), we just do the replacement
94
+ // manually and reset typing attribtues
95
+ [TextInsertionUtils replaceText:text
96
+ at:range
97
+ additionalAttributes:nullptr
98
+ host:typedInput
99
+ withSelection:YES];
100
+ [self resetTypingAttributes:typedInput preservingAlignment:savedAlignment];
101
+ return YES;
102
+ }
103
+
104
+ return NO;
105
+ }
106
+
107
+ /**
108
+ * Handles the specific case of backspacing a newline character, which results
109
+ * in merging two paragraphs.
110
+ *
111
+ * THE PROBLEM:
112
+ * When merging a bottom paragraph (Source) into a top paragraph (Destination),
113
+ * the bottom paragraph normally brings all its attributes with it. If the top
114
+ * paragraph is a restrictive style (like a CodeBlock), and the bottom paragraph
115
+ * contains a conflicting style (like an H1 Header), a standard merge would
116
+ * create an invalid state (e.g., a CodeBlock that is also a Header).
117
+ *
118
+ * THE SOLUTION:
119
+ * 1. Identifies the dominant style of the paragraph ABOVE the deleted newline
120
+ * (`leftParagraphStyle`).
121
+ * 2. Checks the paragraph BELOW the newline (`rightRange`) for any styles that
122
+ * conflict with or are blocked by the top style.
123
+ * 3. Explicitly removes those forbidden styles from the bottom paragraph
124
+ * *before* the merge occurs.
125
+ * 4. Performs the merge (deletes the newline).
126
+ *
127
+ * @return YES if the newline backspace was handled and sanitized; NO otherwise.
128
+ */
129
+ + (BOOL)handleParagraphStylesMergeOnBackspace:(NSRange)range
130
+ replacementText:(NSString *)text
131
+ input:(id)input {
132
+ EnrichedTextInputView *typedInput = (EnrichedTextInputView *)input;
133
+ if (typedInput == nullptr) {
134
+ return NO;
135
+ }
136
+
137
+ // Must be a backspace.
138
+ if (text.length > 0) {
139
+ return NO;
140
+ }
141
+
142
+ // Backspace must have removed a newline character.
143
+ NSString *removedString =
144
+ [typedInput->textView.textStorage.string substringWithRange:range];
145
+ if ([removedString
146
+ rangeOfCharacterFromSet:[NSCharacterSet newlineCharacterSet]]
147
+ .location == NSNotFound) {
148
+ return NO;
149
+ }
150
+
151
+ NSRange leftRange = [typedInput->textView.textStorage.string
152
+ paragraphRangeForRange:NSMakeRange(range.location, 0)];
153
+
154
+ StyleBase *leftParagraphStyle = nullptr;
155
+ for (NSNumber *key in typedInput->stylesDict) {
156
+ StyleBase *style = typedInput->stylesDict[key];
157
+ if ([style isParagraph] && [style detect:leftRange]) {
158
+ leftParagraphStyle = style;
159
+ }
160
+ }
161
+
162
+ if (leftParagraphStyle == nullptr) {
163
+ return NO;
164
+ }
165
+
166
+ // index out of bounds
167
+ NSUInteger rightRangeStart = range.location + range.length;
168
+ if (rightRangeStart >= typedInput->textView.textStorage.string.length) {
169
+ return NO;
170
+ }
171
+
172
+ NSRange rightRange = [typedInput->textView.textStorage.string
173
+ paragraphRangeForRange:NSMakeRange(rightRangeStart, 1)];
174
+
175
+ StyleType type = [[leftParagraphStyle class] getType];
176
+
177
+ NSArray *conflictingStyles = [StyleUtils
178
+ getPresentStyleTypesFrom:typedInput->conflictingStyles[@(type)]
179
+ range:rightRange
180
+ forHost:typedInput];
181
+ NSArray *blockingStyles =
182
+ [StyleUtils getPresentStyleTypesFrom:typedInput->blockingStyles[@(type)]
183
+ range:rightRange
184
+ forHost:typedInput];
185
+ NSArray *allToBeRemoved =
186
+ [conflictingStyles arrayByAddingObjectsFromArray:blockingStyles];
187
+
188
+ for (NSNumber *style in allToBeRemoved) {
189
+ StyleBase *styleToRemove = typedInput->stylesDict[style];
190
+
191
+ // for ranges, we need to remove each occurence
192
+ NSArray<StylePair *> *allOccurences = [styleToRemove all:rightRange];
193
+
194
+ for (StylePair *pair in allOccurences) {
195
+ [styleToRemove remove:[pair.rangeValue rangeValue] withDirtyRange:YES];
196
+ }
197
+ }
198
+
199
+ [TextInsertionUtils replaceText:text
200
+ at:range
201
+ additionalAttributes:nullptr
202
+ host:typedInput
203
+ withSelection:YES];
204
+ return YES;
205
+ }
206
+
207
+ /**
208
+ * Resets typing attributes to defaults when the cursor lands on an empty line
209
+ * after a deletion.
210
+ *
211
+ * This override is necessary because `UITextView` automatically inherits
212
+ * attributes from the preceding newline. This prevents scenarios where a
213
+ * restrictive style (like CodeBlock) "leaks" into the next empty paragraph.
214
+ */
215
+ + (BOOL)handleResetTypingAttributesOnBackspace:(NSRange)range
216
+ replacementText:(NSString *)text
217
+ input:(id)input {
218
+ EnrichedTextInputView *typedInput = (EnrichedTextInputView *)input;
219
+ if (typedInput == nullptr) {
220
+ return NO;
221
+ }
222
+
223
+ NSString *storageString = typedInput->textView.textStorage.string;
224
+
225
+ if (text.length > 0 || range.location >= storageString.length) {
226
+ return NO;
227
+ }
228
+
229
+ unichar firstCharToDelete = [storageString characterAtIndex:range.location];
230
+ if (![[NSCharacterSet newlineCharacterSet]
231
+ characterIsMember:firstCharToDelete]) {
232
+ return NO;
233
+ }
234
+
235
+ NSRange leftParagraphRange =
236
+ [storageString paragraphRangeForRange:NSMakeRange(range.location, 0)];
237
+ BOOL isLeftLineEmpty = [self isParagraphEmpty:leftParagraphRange
238
+ inString:storageString];
239
+
240
+ BOOL isRightLineEmpty = YES;
241
+ NSUInteger rightRangeStart = range.location + range.length;
242
+
243
+ if (rightRangeStart < storageString.length) {
244
+ NSRange rightParagraphRange =
245
+ [storageString paragraphRangeForRange:NSMakeRange(rightRangeStart, 0)];
246
+ isRightLineEmpty = [self isParagraphEmpty:rightParagraphRange
247
+ inString:storageString];
248
+ }
249
+
250
+ if (isLeftLineEmpty && isRightLineEmpty) {
251
+ NSParagraphStyle *currentParaStyle =
252
+ typedInput->textView.typingAttributes[NSParagraphStyleAttributeName];
253
+ NSTextAlignment savedAlignment =
254
+ currentParaStyle ? currentParaStyle.alignment : NSTextAlignmentNatural;
255
+
256
+ [TextInsertionUtils replaceText:text
257
+ at:range
258
+ additionalAttributes:nullptr
259
+ host:typedInput
260
+ withSelection:YES];
261
+
262
+ [self resetTypingAttributes:typedInput preservingAlignment:savedAlignment];
263
+ return YES;
264
+ }
265
+
266
+ return NO;
267
+ }
268
+
269
+ + (void)resetTypingAttributes:(EnrichedTextInputView *)input
270
+ preservingAlignment:(NSTextAlignment)alignment {
271
+ NSMutableDictionary *resetAttrs =
272
+ [input->defaultTypingAttributes mutableCopy];
273
+
274
+ NSMutableParagraphStyle *paraStyle =
275
+ [resetAttrs[NSParagraphStyleAttributeName] mutableCopy]
276
+ ?: [[NSMutableParagraphStyle alloc] init];
277
+ paraStyle.textLists = @[ [[NSTextList alloc]
278
+ initWithMarkerFormat:[AlignmentUtils alignmentToMarker:alignment]
279
+ options:0] ];
280
+ paraStyle.alignment = alignment;
281
+ resetAttrs[NSParagraphStyleAttributeName] = paraStyle;
282
+
283
+ input->textView.typingAttributes = resetAttrs;
284
+ }
285
+
286
+ + (BOOL)isParagraphEmpty:(NSRange)range inString:(NSString *)string {
287
+ if (range.length == 0)
288
+ return YES;
289
+
290
+ NSString *paragraphText = [string substringWithRange:range];
291
+ NSString *trimmed = [paragraphText
292
+ stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
293
+ return trimmed.length == 0;
294
+ }
295
+
296
+ @end
@@ -0,0 +1,12 @@
1
+ #pragma once
2
+ #import <UIKit/UIKit.h>
3
+
4
+ @interface RangeUtils : NSObject
5
+ + (NSArray *)getSeparateParagraphsRangesIn:(UITextView *)textView
6
+ range:(NSRange)range;
7
+ + (NSArray *)getNonNewlineRangesIn:(UITextView *)textView range:(NSRange)range;
8
+ + (NSArray *)connectAndDedupeRanges:(NSArray *)ranges;
9
+ + (NSArray *)shiftRanges:(NSArray *)ranges
10
+ withEditedRange:(NSRange)editedRange
11
+ changeInLength:(NSInteger)delta;
12
+ @end
@@ -0,0 +1,183 @@
1
+ #import "RangeUtils.h"
2
+
3
+ @implementation RangeUtils
4
+
5
+ + (NSArray *)getSeparateParagraphsRangesIn:(UITextView *)textView
6
+ range:(NSRange)range {
7
+ // just in case, get full paragraphs range
8
+ NSRange fullRange =
9
+ [textView.textStorage.string paragraphRangeForRange:range];
10
+
11
+ // we are in an empty paragraph
12
+ if (fullRange.length == 0) {
13
+ return @[ [NSValue valueWithRange:fullRange] ];
14
+ }
15
+
16
+ NSMutableArray *results = [[NSMutableArray alloc] init];
17
+
18
+ NSInteger lastStart = fullRange.location;
19
+ for (int i = int(fullRange.location);
20
+ i < fullRange.location + fullRange.length; i++) {
21
+ unichar currentChar = [textView.textStorage.string characterAtIndex:i];
22
+ if ([[NSCharacterSet newlineCharacterSet] characterIsMember:currentChar]) {
23
+ NSRange paragraphRange = [textView.textStorage.string
24
+ paragraphRangeForRange:NSMakeRange(lastStart, i - lastStart)];
25
+ [results addObject:[NSValue valueWithRange:paragraphRange]];
26
+ lastStart = i + 1;
27
+ }
28
+ }
29
+
30
+ if (lastStart < fullRange.location + fullRange.length) {
31
+ NSRange paragraphRange = [textView.textStorage.string
32
+ paragraphRangeForRange:NSMakeRange(lastStart, fullRange.location +
33
+ fullRange.length -
34
+ lastStart)];
35
+ [results addObject:[NSValue valueWithRange:paragraphRange]];
36
+ }
37
+
38
+ return results;
39
+ }
40
+
41
+ + (NSArray *)getNonNewlineRangesIn:(UITextView *)textView range:(NSRange)range {
42
+ NSMutableArray *nonNewlineRanges = [[NSMutableArray alloc] init];
43
+ int lastRangeLocation = int(range.location);
44
+
45
+ for (int i = int(range.location); i < range.location + range.length; i++) {
46
+ unichar currentChar = [textView.textStorage.string characterAtIndex:i];
47
+ if ([[NSCharacterSet newlineCharacterSet] characterIsMember:currentChar]) {
48
+ if (i - lastRangeLocation > 0) {
49
+ [nonNewlineRanges
50
+ addObject:[NSValue
51
+ valueWithRange:NSMakeRange(lastRangeLocation,
52
+ i - lastRangeLocation)]];
53
+ }
54
+ lastRangeLocation = i + 1;
55
+ }
56
+ }
57
+ if (lastRangeLocation < range.location + range.length) {
58
+ [nonNewlineRanges
59
+ addObject:[NSValue
60
+ valueWithRange:NSMakeRange(lastRangeLocation,
61
+ range.location + range.length -
62
+ lastRangeLocation)]];
63
+ }
64
+
65
+ return nonNewlineRanges;
66
+ }
67
+
68
+ // Condenses an array of NSRange to make sure the overlapping ones are connected
69
+ // + sorted based on NSRange.location
70
+ + (NSArray *)connectAndDedupeRanges:(NSArray *)ranges {
71
+ if (ranges.count == 0) {
72
+ return @[];
73
+ }
74
+
75
+ // We sort primarily by location. If locations match, shorter length goes
76
+ // first
77
+ NSArray<NSValue *> *sortedRanges =
78
+ [ranges sortedArrayUsingComparator:^NSComparisonResult(NSValue *obj1,
79
+ NSValue *obj2) {
80
+ NSRange range1 = obj1.rangeValue;
81
+ NSRange range2 = obj2.rangeValue;
82
+
83
+ if (range1.location < range2.location)
84
+ return NSOrderedAscending;
85
+ if (range1.location > range2.location)
86
+ return NSOrderedDescending;
87
+
88
+ if (range1.length < range2.length)
89
+ return NSOrderedAscending;
90
+ if (range1.length > range2.length)
91
+ return NSOrderedDescending;
92
+
93
+ return NSOrderedSame;
94
+ }];
95
+
96
+ NSMutableArray<NSValue *> *mergedRanges = [[NSMutableArray alloc] init];
97
+
98
+ // We work by comparing each two ranges.
99
+ // If we connected some ranges, the newly created one is still compared with
100
+ // the next ranges from the sorted list.
101
+ NSRange currentRange = sortedRanges[0].rangeValue;
102
+
103
+ for (NSUInteger i = 1; i < sortedRanges.count; i++) {
104
+ NSRange nextRange = sortedRanges[i].rangeValue;
105
+
106
+ // Calculate the end points
107
+ NSUInteger currentMax = currentRange.location + currentRange.length;
108
+ NSUInteger nextMax = nextRange.location + nextRange.length;
109
+
110
+ // If next range starts before (or exactly when) the current one ends.
111
+ if (nextRange.location <= currentMax) {
112
+ // Merge them; the new end is the maximum of the two ends
113
+ NSUInteger newMax = MAX(currentMax, nextMax);
114
+ currentRange.length = newMax - currentRange.location;
115
+ } else {
116
+ // No overlap; push the current range and start a new one
117
+ [mergedRanges addObject:[NSValue valueWithRange:currentRange]];
118
+ currentRange = nextRange;
119
+ }
120
+ }
121
+
122
+ // Add the final range
123
+ [mergedRanges addObject:[NSValue valueWithRange:currentRange]];
124
+
125
+ return [mergedRanges copy];
126
+ }
127
+
128
+ // Updates a list of NSRanges based on a text change, so that they are still
129
+ // pointing to the same characters. editedRange is the post-change range of the
130
+ // edited fragment. delta tells what is the length change of the edited
131
+ // fragment. While the ranges outside of the change are being just shifted, the
132
+ // ones intersecting with it are just merging with the change.
133
+ + (NSArray *)shiftRanges:(NSArray *)ranges
134
+ withEditedRange:(NSRange)editedRange
135
+ changeInLength:(NSInteger)delta {
136
+ NSMutableArray *result = [[NSMutableArray alloc] init];
137
+
138
+ // Calculate what the changed range was like before being edited
139
+ NSUInteger oldEditLength = editedRange.length - delta;
140
+ NSUInteger oldEditEnd = editedRange.location + oldEditLength;
141
+
142
+ NSUInteger newEditEnd = editedRange.location + editedRange.length;
143
+
144
+ for (NSValue *value in ranges) {
145
+ NSRange range = [value rangeValue];
146
+ NSUInteger rangeEnd = range.location + range.length;
147
+
148
+ if (rangeEnd <= editedRange.location) {
149
+ // Range was strictly before the old edit range.
150
+ // Do nothing.
151
+ [result addObject:value];
152
+ } else if (range.location >= oldEditEnd) {
153
+ // Range was strictly after the old edit range.
154
+ // Shift it by the delta.
155
+ [result
156
+ addObject:[NSValue valueWithRange:NSMakeRange(range.location + delta,
157
+ range.length)]];
158
+ } else {
159
+ // Range overlaps the old edit range in some way.
160
+ // Our best bet is to merge it with the edit range.
161
+
162
+ NSUInteger newStart = MIN(range.location, editedRange.location);
163
+
164
+ NSUInteger newEnd;
165
+ if (rangeEnd <= oldEditEnd) {
166
+ // The range was inside the editedRange before.
167
+ // So we use the newer editRange as the end here.
168
+ newEnd = newEditEnd;
169
+ } else {
170
+ // The range sticked outside of the editedRange before.
171
+ // It is safe to shift its end and use it.
172
+ newEnd = rangeEnd + delta;
173
+ }
174
+
175
+ NSRange adjustedRange = NSMakeRange(newStart, newEnd - newStart);
176
+ [result addObject:[NSValue valueWithRange:adjustedRange]];
177
+ }
178
+ }
179
+
180
+ return result;
181
+ }
182
+
183
+ @end
@@ -0,0 +1,21 @@
1
+ #pragma once
2
+
3
+ #import "EnrichedTextInputView.h"
4
+ #import "StyleTypeEnum.h"
5
+ #import <UIKit/UIKit.h>
6
+
7
+ NS_ASSUME_NONNULL_BEGIN
8
+
9
+ @interface ShortcutsUtils : NSObject
10
+
11
+ + (BOOL)tryHandlingParagraphShortcutsInRange:(NSRange)range
12
+ replacementText:(NSString *)text
13
+ input:(EnrichedTextInputView *)input;
14
+
15
+ + (BOOL)tryHandlingInlineShortcutsInRange:(NSRange)range
16
+ replacementText:(NSString *)text
17
+ input:(EnrichedTextInputView *)input;
18
+
19
+ @end
20
+
21
+ NS_ASSUME_NONNULL_END