react-native-enriched 0.2.0 → 0.3.0

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 (186) hide show
  1. package/README.md +16 -17
  2. package/android/build.gradle +77 -72
  3. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +21 -0
  4. package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +7 -0
  5. package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.cpp +156 -0
  6. package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.h +147 -0
  7. package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/Props.cpp +10 -0
  8. package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/Props.h +194 -0
  9. package/android/lint.gradle +70 -0
  10. package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputConnectionWrapper.kt +140 -0
  11. package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputView.kt +304 -83
  12. package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewLayoutManager.kt +3 -1
  13. package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewManager.kt +166 -51
  14. package/android/src/main/java/com/swmansion/enriched/EnrichedTextInputViewPackage.kt +1 -3
  15. package/android/src/main/java/com/swmansion/enriched/MeasurementStore.kt +70 -21
  16. package/android/src/main/java/com/swmansion/enriched/events/MentionHandler.kt +21 -11
  17. package/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt +8 -9
  18. package/android/src/main/java/com/swmansion/enriched/events/OnChangeSelectionEvent.kt +10 -9
  19. package/android/src/main/java/com/swmansion/enriched/events/OnChangeStateDeprecatedEvent.kt +21 -0
  20. package/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt +9 -12
  21. package/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt +10 -10
  22. package/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt +7 -9
  23. package/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt +7 -9
  24. package/android/src/main/java/com/swmansion/enriched/events/OnInputKeyPressEvent.kt +27 -0
  25. package/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt +13 -11
  26. package/android/src/main/java/com/swmansion/enriched/events/OnMentionDetectedEvent.kt +10 -9
  27. package/android/src/main/java/com/swmansion/enriched/events/OnMentionEvent.kt +9 -8
  28. package/android/src/main/java/com/swmansion/enriched/events/OnRequestHtmlResultEvent.kt +32 -0
  29. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBlockQuoteSpan.kt +24 -5
  30. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBoldSpan.kt +8 -1
  31. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedCodeBlockSpan.kt +10 -2
  32. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH1Span.kt +8 -1
  33. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH2Span.kt +8 -1
  34. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH3Span.kt +8 -1
  35. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH4Span.kt +24 -0
  36. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH5Span.kt +24 -0
  37. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH6Span.kt +24 -0
  38. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedImageSpan.kt +34 -17
  39. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedInlineCodeSpan.kt +8 -1
  40. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedItalicSpan.kt +7 -1
  41. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedLinkSpan.kt +10 -4
  42. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedMentionSpan.kt +14 -11
  43. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedOrderedListSpan.kt +18 -11
  44. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedSpans.kt +174 -72
  45. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedStrikeThroughSpan.kt +7 -1
  46. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedUnderlineSpan.kt +7 -1
  47. package/android/src/main/java/com/swmansion/enriched/spans/EnrichedUnorderedListSpan.kt +11 -5
  48. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedBlockSpan.kt +3 -2
  49. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedHeadingSpan.kt +1 -2
  50. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedInlineSpan.kt +1 -2
  51. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedParagraphSpan.kt +3 -2
  52. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedSpan.kt +5 -0
  53. package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedZeroWidthSpaceSpan.kt +1 -2
  54. package/android/src/main/java/com/swmansion/enriched/spans/utils/ForceRedrawSpan.kt +2 -1
  55. package/android/src/main/java/com/swmansion/enriched/styles/HtmlStyle.kt +155 -20
  56. package/android/src/main/java/com/swmansion/enriched/styles/InlineStyles.kt +25 -8
  57. package/android/src/main/java/com/swmansion/enriched/styles/ListStyles.kt +60 -20
  58. package/android/src/main/java/com/swmansion/enriched/styles/ParagraphStyles.kt +161 -25
  59. package/android/src/main/java/com/swmansion/enriched/styles/ParametrizedStyles.kt +128 -52
  60. package/android/src/main/java/com/swmansion/enriched/utils/AsyncDrawable.kt +10 -7
  61. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedConstants.kt +11 -0
  62. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedEditableFactory.kt +17 -0
  63. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedParser.java +136 -87
  64. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSelection.kt +71 -42
  65. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpanState.kt +183 -48
  66. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpannable.kt +82 -0
  67. package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpannableStringBuilder.kt +15 -0
  68. package/android/src/main/java/com/swmansion/enriched/utils/Utils.kt +0 -70
  69. package/android/src/main/java/com/swmansion/enriched/watchers/EnrichedSpanWatcher.kt +46 -14
  70. package/android/src/main/java/com/swmansion/enriched/watchers/EnrichedTextWatcher.kt +34 -11
  71. package/android/src/main/new_arch/CMakeLists.txt +6 -0
  72. package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.cpp +6 -6
  73. package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.h +6 -6
  74. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputComponentDescriptor.h +19 -19
  75. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputMeasurementManager.cpp +40 -51
  76. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputMeasurementManager.h +13 -15
  77. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputShadowNode.cpp +23 -21
  78. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputShadowNode.h +35 -36
  79. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputState.cpp +4 -4
  80. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/EnrichedTextInputState.h +13 -14
  81. package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/conversions.h +33 -14
  82. package/ios/EnrichedTextInputView.h +26 -14
  83. package/ios/EnrichedTextInputView.mm +1209 -586
  84. package/ios/config/InputConfig.h +24 -6
  85. package/ios/config/InputConfig.mm +154 -38
  86. package/ios/{utils → extensions}/ColorExtension.mm +7 -5
  87. package/ios/extensions/FontExtension.mm +106 -0
  88. package/ios/{utils → extensions}/LayoutManagerExtension.h +1 -1
  89. package/ios/extensions/LayoutManagerExtension.mm +396 -0
  90. package/ios/{utils → extensions}/StringExtension.mm +19 -16
  91. package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.cpp +156 -0
  92. package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.h +147 -0
  93. package/ios/generated/RNEnrichedTextInputViewSpec/Props.cpp +10 -0
  94. package/ios/generated/RNEnrichedTextInputViewSpec/Props.h +194 -0
  95. package/ios/generated/RNEnrichedTextInputViewSpec/RCTComponentViewHelpers.h +95 -0
  96. package/ios/inputParser/InputParser.h +5 -5
  97. package/ios/inputParser/InputParser.mm +864 -380
  98. package/ios/inputTextView/InputTextView.h +1 -1
  99. package/ios/inputTextView/InputTextView.mm +100 -59
  100. package/ios/{utils → interfaces}/BaseStyleProtocol.h +2 -2
  101. package/ios/interfaces/ImageAttachment.h +10 -0
  102. package/ios/interfaces/ImageAttachment.mm +36 -0
  103. package/ios/interfaces/LinkRegexConfig.h +19 -0
  104. package/ios/interfaces/LinkRegexConfig.mm +37 -0
  105. package/ios/interfaces/MediaAttachment.h +23 -0
  106. package/ios/interfaces/MediaAttachment.mm +31 -0
  107. package/ios/{utils → interfaces}/MentionParams.h +0 -1
  108. package/ios/{utils → interfaces}/MentionStyleProps.mm +27 -20
  109. package/ios/{utils → interfaces}/StyleHeaders.h +37 -15
  110. package/ios/{utils → interfaces}/StyleTypeEnum.h +3 -0
  111. package/ios/internals/EnrichedTextInputViewComponentDescriptor.h +11 -9
  112. package/ios/internals/EnrichedTextInputViewShadowNode.h +28 -25
  113. package/ios/internals/EnrichedTextInputViewShadowNode.mm +45 -40
  114. package/ios/internals/EnrichedTextInputViewState.h +3 -1
  115. package/ios/styles/BlockQuoteStyle.mm +189 -118
  116. package/ios/styles/BoldStyle.mm +110 -63
  117. package/ios/styles/CodeBlockStyle.mm +204 -128
  118. package/ios/styles/H1Style.mm +10 -4
  119. package/ios/styles/H2Style.mm +10 -4
  120. package/ios/styles/H3Style.mm +10 -4
  121. package/ios/styles/H4Style.mm +17 -0
  122. package/ios/styles/H5Style.mm +17 -0
  123. package/ios/styles/H6Style.mm +17 -0
  124. package/ios/styles/HeadingStyleBase.mm +148 -86
  125. package/ios/styles/ImageStyle.mm +75 -73
  126. package/ios/styles/InlineCodeStyle.mm +162 -88
  127. package/ios/styles/ItalicStyle.mm +76 -52
  128. package/ios/styles/LinkStyle.mm +411 -232
  129. package/ios/styles/MentionStyle.mm +363 -246
  130. package/ios/styles/OrderedListStyle.mm +171 -106
  131. package/ios/styles/StrikethroughStyle.mm +52 -35
  132. package/ios/styles/UnderlineStyle.mm +68 -46
  133. package/ios/styles/UnorderedListStyle.mm +169 -106
  134. package/ios/utils/OccurenceUtils.h +42 -42
  135. package/ios/utils/OccurenceUtils.mm +142 -119
  136. package/ios/utils/ParagraphAttributesUtils.h +10 -2
  137. package/ios/utils/ParagraphAttributesUtils.mm +182 -71
  138. package/ios/utils/ParagraphsUtils.h +2 -1
  139. package/ios/utils/ParagraphsUtils.mm +41 -27
  140. package/ios/utils/TextInsertionUtils.h +13 -2
  141. package/ios/utils/TextInsertionUtils.mm +38 -20
  142. package/ios/utils/WordsUtils.h +2 -1
  143. package/ios/utils/WordsUtils.mm +32 -22
  144. package/ios/utils/ZeroWidthSpaceUtils.h +3 -1
  145. package/ios/utils/ZeroWidthSpaceUtils.mm +145 -79
  146. package/lib/module/EnrichedTextInput.js +61 -2
  147. package/lib/module/EnrichedTextInput.js.map +1 -1
  148. package/lib/module/EnrichedTextInputNativeComponent.ts +149 -12
  149. package/lib/module/{normalizeHtmlStyle.js → utils/normalizeHtmlStyle.js} +12 -0
  150. package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
  151. package/lib/module/utils/regexParser.js +46 -0
  152. package/lib/module/utils/regexParser.js.map +1 -0
  153. package/lib/typescript/src/EnrichedTextInput.d.ts +24 -14
  154. package/lib/typescript/src/EnrichedTextInput.d.ts.map +1 -1
  155. package/lib/typescript/src/EnrichedTextInputNativeComponent.d.ts +129 -12
  156. package/lib/typescript/src/EnrichedTextInputNativeComponent.d.ts.map +1 -1
  157. package/lib/typescript/src/index.d.ts +1 -1
  158. package/lib/typescript/src/index.d.ts.map +1 -1
  159. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +4 -0
  160. package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
  161. package/lib/typescript/src/utils/regexParser.d.ts +3 -0
  162. package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
  163. package/package.json +17 -6
  164. package/src/EnrichedTextInput.tsx +96 -13
  165. package/src/EnrichedTextInputNativeComponent.ts +149 -12
  166. package/src/index.tsx +2 -0
  167. package/src/{normalizeHtmlStyle.ts → utils/normalizeHtmlStyle.ts} +14 -2
  168. package/src/utils/regexParser.ts +56 -0
  169. package/ios/utils/FontExtension.mm +0 -91
  170. package/ios/utils/LayoutManagerExtension.mm +0 -286
  171. package/lib/module/normalizeHtmlStyle.js.map +0 -1
  172. package/lib/typescript/src/normalizeHtmlStyle.d.ts +0 -4
  173. package/lib/typescript/src/normalizeHtmlStyle.d.ts.map +0 -1
  174. package/ios/{utils → extensions}/ColorExtension.h +0 -0
  175. package/ios/{utils → extensions}/FontExtension.h +0 -0
  176. package/ios/{utils → extensions}/StringExtension.h +1 -1
  177. package/ios/{utils → interfaces}/ImageData.h +0 -0
  178. package/ios/{utils → interfaces}/ImageData.mm +0 -0
  179. package/ios/{utils → interfaces}/LinkData.h +0 -0
  180. package/ios/{utils → interfaces}/LinkData.mm +0 -0
  181. package/ios/{utils → interfaces}/MentionParams.mm +0 -0
  182. package/ios/{utils → interfaces}/MentionStyleProps.h +1 -1
  183. /package/ios/{utils → interfaces}/StylePair.h +0 -0
  184. /package/ios/{utils → interfaces}/StylePair.mm +0 -0
  185. /package/ios/{utils → interfaces}/TextDecorationLineEnum.h +0 -0
  186. /package/ios/{utils → interfaces}/TextDecorationLineEnum.mm +0 -0
@@ -1,9 +1,10 @@
1
1
 
2
2
  /**
3
- * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ * This code was generated by
4
+ * [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
5
  *
5
- * Do not edit this file as changes may cause incorrect behavior and will be lost
6
- * once the code is regenerated.
6
+ * Do not edit this file as changes may cause incorrect behavior and will be
7
+ * lost once the code is regenerated.
7
8
  *
8
9
  * @generated by codegen project: GenerateModuleJniH.js
9
10
  */
@@ -18,9 +19,8 @@
18
19
 
19
20
  namespace facebook::react {
20
21
 
21
-
22
-
23
22
  JSI_EXPORT
24
- std::shared_ptr<TurboModule> RNEnrichedTextInputViewSpec_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params);
23
+ std::shared_ptr<TurboModule> RNEnrichedTextInputViewSpec_ModuleProvider(
24
+ const std::string &moduleName, const JavaTurboModule::InitParams &params);
25
25
 
26
26
  } // namespace facebook::react
@@ -8,28 +8,28 @@
8
8
  namespace facebook::react {
9
9
 
10
10
  class EnrichedTextInputComponentDescriptor final
11
- : public ConcreteComponentDescriptor<EnrichedTextInputShadowNode> {
11
+ : public ConcreteComponentDescriptor<EnrichedTextInputShadowNode> {
12
12
  public:
13
- EnrichedTextInputComponentDescriptor(
14
- const ComponentDescriptorParameters& parameters)
15
- : ConcreteComponentDescriptor(parameters),
16
- measurementsManager_(
17
- std::make_shared<EnrichedTextInputMeasurementManager>(
18
- contextContainer_)) {}
19
-
20
- void adopt(ShadowNode& shadowNode) const override {
21
- ConcreteComponentDescriptor::adopt(shadowNode);
22
- auto& editorShadowNode = static_cast<EnrichedTextInputShadowNode&>(shadowNode);
23
-
24
- // `EnrichedTextInputShadowNode` uses
25
- // `EnrichedTextInputMeasurementManager` to provide measurements to Yoga.
26
- editorShadowNode.setMeasurementsManager(measurementsManager_);
27
- }
13
+ EnrichedTextInputComponentDescriptor(
14
+ const ComponentDescriptorParameters &parameters)
15
+ : ConcreteComponentDescriptor(parameters),
16
+ measurementsManager_(
17
+ std::make_shared<EnrichedTextInputMeasurementManager>(
18
+ contextContainer_)) {}
19
+
20
+ void adopt(ShadowNode &shadowNode) const override {
21
+ ConcreteComponentDescriptor::adopt(shadowNode);
22
+ auto &editorShadowNode =
23
+ static_cast<EnrichedTextInputShadowNode &>(shadowNode);
24
+
25
+ // `EnrichedTextInputShadowNode` uses
26
+ // `EnrichedTextInputMeasurementManager` to provide measurements to Yoga.
27
+ editorShadowNode.setMeasurementsManager(measurementsManager_);
28
+ }
28
29
 
29
30
  private:
30
- const std::shared_ptr<EnrichedTextInputMeasurementManager>
31
- measurementsManager_;
31
+ const std::shared_ptr<EnrichedTextInputMeasurementManager>
32
+ measurementsManager_;
32
33
  };
33
34
 
34
35
  } // namespace facebook::react
35
-
@@ -9,56 +9,45 @@ using namespace facebook::jni;
9
9
 
10
10
  namespace facebook::react {
11
11
 
12
- Size EnrichedTextInputMeasurementManager::measure(
13
- SurfaceId surfaceId,
14
- int viewTag,
15
- const EnrichedTextInputViewProps& props,
16
- LayoutConstraints layoutConstraints) const {
17
- const jni::global_ref<jobject>& fabricUIManager =
18
- contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
19
-
20
- static const auto measure = facebook::jni::findClassStatic(
21
- "com/facebook/react/fabric/FabricUIManager")
22
- ->getMethod<jlong(
23
- jint,
24
- jstring,
25
- ReadableMap::javaobject,
26
- ReadableMap::javaobject,
27
- ReadableMap::javaobject,
28
- jfloat,
29
- jfloat,
30
- jfloat,
31
- jfloat)>("measure");
32
-
33
- auto minimumSize = layoutConstraints.minimumSize;
34
- auto maximumSize = layoutConstraints.maximumSize;
35
-
36
- local_ref<JString> componentName = make_jstring("EnrichedTextInputView");
37
-
38
- // Prepare extraData map with viewTag
39
- folly::dynamic extraData = folly::dynamic::object();
40
- extraData["viewTag"] = viewTag;
41
- local_ref<ReadableNativeMap::javaobject> extraDataRNM = ReadableNativeMap::newObjectCxxArgs(extraData);
42
- local_ref<ReadableMap::javaobject> extraDataRM = make_local(reinterpret_cast<ReadableMap::javaobject>(extraDataRNM.get()));
43
-
44
- // Prepare layout metrics affecting props
45
- auto serializedProps = toDynamic(props);
46
- local_ref<ReadableNativeMap::javaobject> propsRNM = ReadableNativeMap::newObjectCxxArgs(serializedProps);
47
- local_ref<ReadableMap::javaobject> propsRM = make_local(reinterpret_cast<ReadableMap::javaobject>(propsRNM.get()));
48
-
49
- auto measurement = yogaMeassureToSize(measure(
50
- fabricUIManager,
51
- surfaceId,
52
- componentName.get(),
53
- extraDataRM.get(),
54
- propsRM.get(),
55
- nullptr,
56
- minimumSize.width,
57
- maximumSize.width,
58
- minimumSize.height,
59
- maximumSize.height));
60
-
61
- return measurement;
62
- }
12
+ Size EnrichedTextInputMeasurementManager::measure(
13
+ SurfaceId surfaceId, int viewTag, const EnrichedTextInputViewProps &props,
14
+ LayoutConstraints layoutConstraints) const {
15
+ const jni::global_ref<jobject> &fabricUIManager =
16
+ contextContainer_->at<jni::global_ref<jobject>>("FabricUIManager");
17
+
18
+ static const auto measure =
19
+ facebook::jni::findClassStatic(
20
+ "com/facebook/react/fabric/FabricUIManager")
21
+ ->getMethod<jlong(jint, jstring, ReadableMap::javaobject,
22
+ ReadableMap::javaobject, ReadableMap::javaobject,
23
+ jfloat, jfloat, jfloat, jfloat)>("measure");
24
+
25
+ auto minimumSize = layoutConstraints.minimumSize;
26
+ auto maximumSize = layoutConstraints.maximumSize;
27
+
28
+ local_ref<JString> componentName = make_jstring("EnrichedTextInputView");
29
+
30
+ // Prepare extraData map with viewTag
31
+ folly::dynamic extraData = folly::dynamic::object();
32
+ extraData["viewTag"] = viewTag;
33
+ local_ref<ReadableNativeMap::javaobject> extraDataRNM =
34
+ ReadableNativeMap::newObjectCxxArgs(extraData);
35
+ local_ref<ReadableMap::javaobject> extraDataRM =
36
+ make_local(reinterpret_cast<ReadableMap::javaobject>(extraDataRNM.get()));
37
+
38
+ // Prepare layout metrics affecting props
39
+ auto serializedProps = toDynamic(props);
40
+ local_ref<ReadableNativeMap::javaobject> propsRNM =
41
+ ReadableNativeMap::newObjectCxxArgs(serializedProps);
42
+ local_ref<ReadableMap::javaobject> propsRM =
43
+ make_local(reinterpret_cast<ReadableMap::javaobject>(propsRNM.get()));
44
+
45
+ auto measurement = yogaMeassureToSize(
46
+ measure(fabricUIManager, surfaceId, componentName.get(),
47
+ extraDataRM.get(), propsRM.get(), nullptr, minimumSize.width,
48
+ maximumSize.width, minimumSize.height, maximumSize.height));
49
+
50
+ return measurement;
51
+ }
63
52
 
64
53
  } // namespace facebook::react
@@ -2,26 +2,24 @@
2
2
 
3
3
  #include "ComponentDescriptors.h"
4
4
 
5
- #include <react/utils/ContextContainer.h>
6
- #include <react/renderer/core/LayoutConstraints.h>
7
5
  #include <react/renderer/components/RNEnrichedTextInputViewSpec/Props.h>
6
+ #include <react/renderer/core/LayoutConstraints.h>
7
+ #include <react/utils/ContextContainer.h>
8
8
 
9
9
  namespace facebook::react {
10
10
 
11
- class EnrichedTextInputMeasurementManager {
12
- public:
13
- EnrichedTextInputMeasurementManager(
14
- const std::shared_ptr<const ContextContainer>& contextContainer)
15
- : contextContainer_(contextContainer) {}
11
+ class EnrichedTextInputMeasurementManager {
12
+ public:
13
+ EnrichedTextInputMeasurementManager(
14
+ const std::shared_ptr<const ContextContainer> &contextContainer)
15
+ : contextContainer_(contextContainer) {}
16
16
 
17
- Size measure(
18
- SurfaceId surfaceId,
19
- int viewTag,
20
- const EnrichedTextInputViewProps& props,
21
- LayoutConstraints layoutConstraints) const;
17
+ Size measure(SurfaceId surfaceId, int viewTag,
18
+ const EnrichedTextInputViewProps &props,
19
+ LayoutConstraints layoutConstraints) const;
22
20
 
23
- private:
24
- const std::shared_ptr<const ContextContainer> contextContainer_;
25
- };
21
+ private:
22
+ const std::shared_ptr<const ContextContainer> contextContainer_;
23
+ };
26
24
 
27
25
  } // namespace facebook::react
@@ -4,30 +4,32 @@
4
4
 
5
5
  namespace facebook::react {
6
6
  extern const char EnrichedTextInputComponentName[] = "EnrichedTextInputView";
7
- void EnrichedTextInputShadowNode::setMeasurementsManager(
8
- const std::shared_ptr<EnrichedTextInputMeasurementManager>&
9
- measurementsManager) {
10
- ensureUnsealed();
11
- measurementsManager_ = measurementsManager;
12
- }
7
+ void EnrichedTextInputShadowNode::setMeasurementsManager(
8
+ const std::shared_ptr<EnrichedTextInputMeasurementManager>
9
+ &measurementsManager) {
10
+ ensureUnsealed();
11
+ measurementsManager_ = measurementsManager;
12
+ }
13
13
 
14
- // Mark layout as dirty after state has been updated
15
- // Once layout is marked as dirty, `measureContent` will be called in order to recalculate layout
16
- void EnrichedTextInputShadowNode::dirtyLayoutIfNeeded() {
17
- const auto state = this->getStateData();
18
- const auto counter = state.getForceHeightRecalculationCounter();
14
+ // Mark layout as dirty after state has been updated
15
+ // Once layout is marked as dirty, `measureContent` will be called in order to
16
+ // recalculate layout
17
+ void EnrichedTextInputShadowNode::dirtyLayoutIfNeeded() {
18
+ const auto state = this->getStateData();
19
+ const auto counter = state.getForceHeightRecalculationCounter();
19
20
 
20
- if (forceHeightRecalculationCounter_ != counter) {
21
- forceHeightRecalculationCounter_ = counter;
21
+ if (forceHeightRecalculationCounter_ != counter) {
22
+ forceHeightRecalculationCounter_ = counter;
22
23
 
23
- dirtyLayout();
24
- }
25
- }
24
+ dirtyLayout();
25
+ }
26
+ }
26
27
 
27
- Size EnrichedTextInputShadowNode::measureContent(
28
- const LayoutContext &layoutContext,
29
- const LayoutConstraints &layoutConstraints) const {
30
- return measurementsManager_->measure(getSurfaceId(), getTag(), getConcreteProps(), layoutConstraints);
31
- }
28
+ Size EnrichedTextInputShadowNode::measureContent(
29
+ const LayoutContext &layoutContext,
30
+ const LayoutConstraints &layoutConstraints) const {
31
+ return measurementsManager_->measure(getSurfaceId(), getTag(),
32
+ getConcreteProps(), layoutConstraints);
33
+ }
32
34
 
33
35
  } // namespace facebook::react
@@ -3,9 +3,9 @@
3
3
  #include "EnrichedTextInputMeasurementManager.h"
4
4
  #include "EnrichedTextInputState.h"
5
5
 
6
- #include <react/renderer/components/view/ConcreteViewShadowNode.h>
7
- #include <react/renderer/components/RNEnrichedTextInputViewSpec/Props.h>
8
6
  #include <react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.h>
7
+ #include <react/renderer/components/RNEnrichedTextInputViewSpec/Props.h>
8
+ #include <react/renderer/components/view/ConcreteViewShadowNode.h>
9
9
 
10
10
  namespace facebook::react {
11
11
 
@@ -13,42 +13,41 @@ JSI_EXPORT extern const char EnrichedTextInputComponentName[];
13
13
  /*
14
14
  * `ShadowNode` for <EnrichedTextInputView> component.
15
15
  */
16
- class EnrichedTextInputShadowNode final : public ConcreteViewShadowNode<
17
- EnrichedTextInputComponentName,
18
- EnrichedTextInputViewProps,
19
- EnrichedTextInputViewEventEmitter,
20
- EnrichedTextInputState> {
16
+ class EnrichedTextInputShadowNode final
17
+ : public ConcreteViewShadowNode<
18
+ EnrichedTextInputComponentName, EnrichedTextInputViewProps,
19
+ EnrichedTextInputViewEventEmitter, EnrichedTextInputState> {
21
20
  public:
22
- using ConcreteViewShadowNode::ConcreteViewShadowNode;
23
-
24
- // This constructor is called when we "update" shadow node, e.g. after updating shadow node's state
25
- EnrichedTextInputShadowNode(
26
- ShadowNode const &sourceShadowNode,
27
- ShadowNodeFragment const &fragment)
28
- : ConcreteViewShadowNode(sourceShadowNode, fragment) {
29
- dirtyLayoutIfNeeded();
30
- }
31
-
32
- static ShadowNodeTraits BaseTraits() {
33
- auto traits = ConcreteViewShadowNode::BaseTraits();
34
- traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
35
- traits.set(ShadowNodeTraits::Trait::MeasurableYogaNode);
36
- return traits;
37
- }
38
-
39
- // Associates a shared `EnrichedTextInputMeasurementManager` with the node.
40
- void setMeasurementsManager(
41
- const std::shared_ptr<EnrichedTextInputMeasurementManager>&
42
- measurementsManager);
43
-
44
- void dirtyLayoutIfNeeded();
45
-
46
- Size measureContent(
47
- const LayoutContext& layoutContext,
48
- const LayoutConstraints& layoutConstraints) const override;
21
+ using ConcreteViewShadowNode::ConcreteViewShadowNode;
22
+
23
+ // This constructor is called when we "update" shadow node, e.g. after
24
+ // updating shadow node's state
25
+ EnrichedTextInputShadowNode(ShadowNode const &sourceShadowNode,
26
+ ShadowNodeFragment const &fragment)
27
+ : ConcreteViewShadowNode(sourceShadowNode, fragment) {
28
+ dirtyLayoutIfNeeded();
29
+ }
30
+
31
+ static ShadowNodeTraits BaseTraits() {
32
+ auto traits = ConcreteViewShadowNode::BaseTraits();
33
+ traits.set(ShadowNodeTraits::Trait::LeafYogaNode);
34
+ traits.set(ShadowNodeTraits::Trait::MeasurableYogaNode);
35
+ return traits;
36
+ }
37
+
38
+ // Associates a shared `EnrichedTextInputMeasurementManager` with the node.
39
+ void setMeasurementsManager(
40
+ const std::shared_ptr<EnrichedTextInputMeasurementManager>
41
+ &measurementsManager);
42
+
43
+ void dirtyLayoutIfNeeded();
44
+
45
+ Size
46
+ measureContent(const LayoutContext &layoutContext,
47
+ const LayoutConstraints &layoutConstraints) const override;
49
48
 
50
49
  private:
51
- int forceHeightRecalculationCounter_;
52
- std::shared_ptr<EnrichedTextInputMeasurementManager> measurementsManager_;
50
+ int forceHeightRecalculationCounter_;
51
+ std::shared_ptr<EnrichedTextInputMeasurementManager> measurementsManager_;
53
52
  };
54
53
  } // namespace facebook::react
@@ -2,8 +2,8 @@
2
2
 
3
3
  namespace facebook::react {
4
4
 
5
- int EnrichedTextInputState::getForceHeightRecalculationCounter() const {
6
- return forceHeightRecalculationCounter_;
7
- }
8
-
5
+ int EnrichedTextInputState::getForceHeightRecalculationCounter() const {
6
+ return forceHeightRecalculationCounter_;
9
7
  }
8
+
9
+ } // namespace facebook::react
@@ -4,22 +4,21 @@
4
4
 
5
5
  namespace facebook::react {
6
6
 
7
- class EnrichedTextInputState {
8
- public:
9
- EnrichedTextInputState()
10
- : forceHeightRecalculationCounter_(0) {}
7
+ class EnrichedTextInputState {
8
+ public:
9
+ EnrichedTextInputState() : forceHeightRecalculationCounter_(0) {}
11
10
 
12
- // Used by Kotlin to set current text value
13
- EnrichedTextInputState(EnrichedTextInputState const &previousState, folly::dynamic data)
14
- : forceHeightRecalculationCounter_((int)data["forceHeightRecalculationCounter"].getInt()){};
15
- folly::dynamic getDynamic() const {
16
- return {};
17
- };
11
+ // Used by Kotlin to set current text value
12
+ EnrichedTextInputState(EnrichedTextInputState const &previousState,
13
+ folly::dynamic data)
14
+ : forceHeightRecalculationCounter_(
15
+ (int)data["forceHeightRecalculationCounter"].getInt()){};
16
+ folly::dynamic getDynamic() const { return {}; };
18
17
 
19
- int getForceHeightRecalculationCounter() const;
18
+ int getForceHeightRecalculationCounter() const;
20
19
 
21
- private:
22
- const int forceHeightRecalculationCounter_{};
23
- };
20
+ private:
21
+ const int forceHeightRecalculationCounter_{};
22
+ };
24
23
 
25
24
  } // namespace facebook::react
@@ -1,26 +1,45 @@
1
1
  #pragma once
2
2
 
3
3
  #include <folly/dynamic.h>
4
- #include <react/renderer/components/FBReactNativeSpec/Props.h>
5
- #include <react/renderer/core/propsConversions.h>
6
4
  #include <react/renderer/components/RNEnrichedTextInputViewSpec/Props.h>
5
+ #include <react/renderer/core/propsConversions.h>
6
+
7
+ #if REACT_NATIVE_MINOR_VERSION >= 81
8
+ #include <react/renderer/components/FBReactNativeSpec/Props.h>
9
+ #else
10
+ #include <react/renderer/components/rncore/Props.h>
11
+ #endif
7
12
 
8
13
  namespace facebook::react {
9
14
 
10
15
  #ifdef RN_SERIALIZABLE_STATE
11
- inline folly::dynamic toDynamic(const EnrichedTextInputViewProps &props)
12
- {
13
- // Serialize only metrics affecting props
14
- folly::dynamic serializedProps = folly::dynamic::object();
15
- serializedProps["defaultValue"] = props.defaultValue;
16
- serializedProps["placeholder"] = props.placeholder;
17
- serializedProps["fontSize"] = props.fontSize;
18
- serializedProps["fontWeight"] = props.fontWeight;
19
- serializedProps["fontStyle"] = props.fontStyle;
20
- serializedProps["fontFamily"] = props.fontFamily;
21
- serializedProps["htmlStyle"] = toDynamic(props.htmlStyle);
16
+ inline folly::dynamic toDynamic(const EnrichedTextInputViewProps &props) {
17
+ // Serialize only metrics affecting props
18
+ folly::dynamic serializedProps = folly::dynamic::object();
19
+ serializedProps["defaultValue"] = props.defaultValue;
20
+ serializedProps["placeholder"] = props.placeholder;
21
+ serializedProps["fontSize"] = props.fontSize;
22
+ serializedProps["fontWeight"] = props.fontWeight;
23
+ serializedProps["fontStyle"] = props.fontStyle;
24
+ serializedProps["fontFamily"] = props.fontFamily;
25
+ serializedProps["htmlStyle"] = toDynamic(props.htmlStyle);
26
+
27
+ return serializedProps;
28
+ }
29
+ #elif REACT_NATIVE_MINOR_VERSION >= 79
30
+ inline folly::dynamic toDynamic(const EnrichedTextInputViewProps &props) {
31
+ folly::dynamic serializedProps = folly::dynamic::object();
32
+ serializedProps["defaultValue"] = props.defaultValue;
33
+ serializedProps["placeholder"] = props.placeholder;
34
+ serializedProps["fontSize"] = props.fontSize;
35
+ serializedProps["fontWeight"] = props.fontWeight;
36
+ serializedProps["fontStyle"] = props.fontStyle;
37
+ serializedProps["fontFamily"] = props.fontFamily;
38
+ // Ideally we should also serialize htmlStyle, but toDynamic function is not
39
+ // generated in this RN version
40
+ // As RN 0.79 and 0.80 is no longer supported, we can skip it for now
22
41
 
23
- return serializedProps;
42
+ return serializedProps;
24
43
  }
25
44
  #endif
26
45
 
@@ -1,33 +1,45 @@
1
1
  #pragma once
2
- #import <React/RCTViewComponentView.h>
3
- #import <UIKit/UIKit.h>
2
+ #import "BaseStyleProtocol.h"
4
3
  #import "InputConfig.h"
5
4
  #import "InputParser.h"
6
- #import "BaseStyleProtocol.h"
7
5
  #import "InputTextView.h"
6
+ #import "MediaAttachment.h"
7
+ #import <React/RCTViewComponentView.h>
8
+ #import <UIKit/UIKit.h>
8
9
 
9
10
  #ifndef EnrichedTextInputViewNativeComponent_h
10
11
  #define EnrichedTextInputViewNativeComponent_h
11
12
 
12
13
  NS_ASSUME_NONNULL_BEGIN
13
14
 
14
- @interface EnrichedTextInputView : RCTViewComponentView {
15
- @public InputTextView *textView;
16
- @public NSRange recentlyChangedRange;
17
- @public InputConfig *config;
18
- @public InputParser *parser;
19
- @public NSMutableDictionary<NSAttributedStringKey, id> *defaultTypingAttributes;
20
- @public NSDictionary<NSNumber *, id<BaseStyleProtocol>> *stylesDict;
15
+ @interface EnrichedTextInputView
16
+ : RCTViewComponentView <MediaAttachmentDelegate> {
17
+ @public
18
+ InputTextView *textView;
19
+ @public
20
+ NSRange recentlyChangedRange;
21
+ @public
22
+ InputConfig *config;
23
+ @public
24
+ InputParser *parser;
25
+ @public
26
+ NSMutableDictionary<NSAttributedStringKey, id> *defaultTypingAttributes;
27
+ @public
28
+ NSDictionary<NSNumber *, id<BaseStyleProtocol>> *stylesDict;
21
29
  NSDictionary<NSNumber *, NSArray<NSNumber *> *> *conflictingStyles;
22
- NSDictionary<NSNumber *, NSArray<NSNumber *> *> *blockingStyles;
23
- @public BOOL blockEmitting;
30
+ NSMutableDictionary<NSNumber *, NSArray<NSNumber *> *> *blockingStyles;
31
+ @public
32
+ BOOL blockEmitting;
24
33
  }
25
34
  - (CGSize)measureSize:(CGFloat)maxWidth;
26
- - (void)emitOnLinkDetectedEvent:(NSString *)text url:(NSString *)url range:(NSRange)range;
35
+ - (void)emitOnLinkDetectedEvent:(NSString *)text
36
+ url:(NSString *)url
37
+ range:(NSRange)range;
27
38
  - (void)emitOnMentionEvent:(NSString *)indicator text:(nullable NSString *)text;
28
39
  - (void)anyTextMayHaveBeenModified;
29
40
  - (BOOL)handleStyleBlocksAndConflicts:(StyleType)type range:(NSRange)range;
30
- - (NSArray<NSNumber *> *)getPresentStyleTypesFrom:(NSArray<NSNumber *> *)types range:(NSRange)range;
41
+ - (NSArray<NSNumber *> *)getPresentStyleTypesFrom:(NSArray<NSNumber *> *)types
42
+ range:(NSRange)range;
31
43
  @end
32
44
 
33
45
  NS_ASSUME_NONNULL_END