react-native-enriched 0.2.1 → 0.4.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.
- package/README.md +21 -16
- package/android/build.gradle +77 -72
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerDelegate.java +21 -0
- package/android/generated/java/com/facebook/react/viewmanagers/EnrichedTextInputViewManagerInterface.java +7 -0
- package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.cpp +1 -1
- package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.h +1 -1
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.cpp +276 -0
- package/android/generated/jni/react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.h +239 -0
- package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.cpp +10 -0
- package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.h +251 -0
- package/android/gradle.properties +5 -5
- package/android/lint.gradle +70 -0
- package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewPackage.kt → ReactNativeEnrichedPackage.kt} +4 -5
- package/android/src/main/java/com/swmansion/enriched/{utils → common}/AsyncDrawable.kt +50 -15
- package/android/src/main/java/com/swmansion/enriched/common/CheckboxDrawable.kt +81 -0
- package/android/src/main/java/com/swmansion/enriched/common/EnrichedConstants.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/common/EnrichedStyle.kt +57 -0
- package/android/src/main/java/com/swmansion/enriched/{spans/utils → common}/ForceRedrawSpan.kt +3 -2
- package/android/src/main/java/com/swmansion/enriched/common/MentionStyle.kt +7 -0
- package/android/src/main/java/com/swmansion/enriched/{utils → common}/ResourceManager.kt +1 -1
- package/android/src/main/java/com/swmansion/enriched/{utils → common/parser}/EnrichedParser.java +228 -160
- package/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedSpanFactory.kt +79 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBlockQuoteSpan.kt +53 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedBoldSpan.kt +12 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedCheckboxListSpan.kt +91 -0
- package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedCodeBlockSpan.kt +12 -14
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH1Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH2Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH3Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH4Span.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH5Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedH6Span.kt +20 -0
- package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedImageSpan.kt +68 -51
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedInlineCodeSpan.kt +24 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedItalicSpan.kt +12 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedLinkSpan.kt +26 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedMentionSpan.kt +35 -0
- package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedOrderedListSpan.kt +21 -29
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedStrikeThroughSpan.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/EnrichedUnderlineSpan.kt +11 -0
- package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/EnrichedUnorderedListSpan.kt +13 -17
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedBlockSpan.kt +5 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedHeadingSpan.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedInlineSpan.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedParagraphSpan.kt +5 -0
- package/android/src/main/java/com/swmansion/enriched/common/spans/interfaces/EnrichedSpan.kt +3 -0
- package/android/src/main/java/com/swmansion/enriched/{spans → common/spans}/interfaces/EnrichedZeroWidthSpaceSpan.kt +2 -3
- package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputConnectionWrapper.kt +140 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/EnrichedTextInputSpannableFactory.kt +83 -0
- package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputView.kt → textinput/EnrichedTextInputView.kt} +322 -157
- package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewLayoutManager.kt → textinput/EnrichedTextInputViewLayoutManager.kt} +4 -2
- package/android/src/main/java/com/swmansion/enriched/{EnrichedTextInputViewManager.kt → textinput/EnrichedTextInputViewManager.kt} +182 -66
- package/android/src/main/java/com/swmansion/enriched/{MeasurementStore.kt → textinput/MeasurementStore.kt} +75 -25
- package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/MentionHandler.kt +22 -12
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeHtmlEvent.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnChangeSelectionEvent.kt +11 -10
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeStateEvent.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnChangeTextEvent.kt +30 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputBlurEvent.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputFocusEvent.kt +25 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnInputKeyPressEvent.kt +27 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnLinkDetectedEvent.kt +32 -0
- package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnMentionDetectedEvent.kt +11 -10
- package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnMentionEvent.kt +10 -9
- package/android/src/main/java/com/swmansion/enriched/textinput/events/OnPasteImagesEvent.kt +47 -0
- package/android/src/main/java/com/swmansion/enriched/{events → textinput/events}/OnRequestHtmlResultEvent.kt +2 -3
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBlockQuoteSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputBoldSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCheckboxListSpan.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputCodeBlockSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH1Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH2Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH3Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH4Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH5Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputH6Span.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputImageSpan.kt +36 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputInlineCodeSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputItalicSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputLinkSpan.kt +15 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputMentionSpan.kt +18 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputOrderedListSpan.kt +21 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputStrikeThroughSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnderlineSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedInputUnorderedListSpan.kt +14 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/EnrichedSpans.kt +241 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/spans/interfaces/EnrichedInputSpan.kt +10 -0
- package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/HtmlStyle.kt +129 -57
- package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/InlineStyles.kt +30 -13
- package/android/src/main/java/com/swmansion/enriched/textinput/styles/ListStyles.kt +263 -0
- package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/ParagraphStyles.kt +94 -34
- package/android/src/main/java/com/swmansion/enriched/{styles → textinput/styles}/ParametrizedStyles.kt +143 -67
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedEditableFactory.kt +17 -0
- package/android/src/main/java/com/swmansion/enriched/{utils → textinput/utils}/EnrichedSelection.kt +84 -54
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpanState.kt +304 -0
- package/android/src/main/java/com/swmansion/enriched/{utils/Utils.kt → textinput/utils/EnrichedSpannable.kt} +22 -31
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/EnrichedSpannableStringBuilder.kt +16 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/RichContentReceiver.kt +127 -0
- package/android/src/main/java/com/swmansion/enriched/textinput/utils/Utils.kt +106 -0
- package/android/src/main/java/com/swmansion/enriched/{watchers → textinput/watchers}/EnrichedSpanWatcher.kt +56 -24
- package/android/src/main/java/com/swmansion/enriched/{watchers → textinput/watchers}/EnrichedTextWatcher.kt +37 -14
- package/android/src/main/new_arch/CMakeLists.txt +7 -1
- package/android/src/main/new_arch/ReactNativeEnrichedSpec.cpp +11 -0
- package/android/src/main/new_arch/ReactNativeEnrichedSpec.h +15 -0
- package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputMeasurementManager.h +1 -1
- package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputShadowNode.h +2 -2
- package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h +46 -0
- package/ios/EnrichedTextInputView.h +2 -1
- package/ios/EnrichedTextInputView.mm +603 -60
- package/ios/config/InputConfig.h +28 -0
- package/ios/config/InputConfig.mm +237 -8
- package/ios/extensions/ImageExtension.h +35 -0
- package/ios/extensions/ImageExtension.mm +156 -0
- package/ios/{utils → extensions}/LayoutManagerExtension.mm +115 -95
- package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.cpp +1 -1
- package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ComponentDescriptors.h +1 -1
- package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.cpp +276 -0
- package/ios/generated/ReactNativeEnrichedSpec/EventEmitters.h +239 -0
- package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.cpp +10 -0
- package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/Props.h +251 -0
- package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/RCTComponentViewHelpers.h +95 -0
- package/ios/inputParser/InputParser.mm +218 -18
- package/ios/inputTextView/InputTextView.mm +118 -0
- package/ios/{attachments → interfaces}/ImageAttachment.h +1 -0
- package/ios/interfaces/ImageAttachment.mm +46 -0
- package/ios/interfaces/LinkRegexConfig.h +19 -0
- package/ios/interfaces/LinkRegexConfig.mm +37 -0
- package/ios/{utils → interfaces}/MentionStyleProps.mm +2 -2
- package/ios/{utils → interfaces}/StyleHeaders.h +22 -1
- package/ios/{utils → interfaces}/StyleTypeEnum.h +4 -0
- package/ios/internals/EnrichedTextInputViewState.cpp +6 -6
- package/ios/styles/BlockQuoteStyle.mm +5 -5
- package/ios/styles/BoldStyle.mm +21 -6
- package/ios/styles/CheckboxListStyle.mm +321 -0
- package/ios/styles/CodeBlockStyle.mm +5 -5
- package/ios/styles/H1Style.mm +3 -0
- package/ios/styles/H2Style.mm +3 -0
- package/ios/styles/H3Style.mm +3 -0
- package/ios/styles/H4Style.mm +20 -0
- package/ios/styles/H5Style.mm +20 -0
- package/ios/styles/H6Style.mm +20 -0
- package/ios/styles/HeadingStyleBase.mm +161 -72
- package/ios/styles/ImageStyle.mm +5 -5
- package/ios/styles/InlineCodeStyle.mm +30 -19
- package/ios/styles/ItalicStyle.mm +5 -5
- package/ios/styles/LinkStyle.mm +98 -40
- package/ios/styles/MentionStyle.mm +4 -4
- package/ios/styles/OrderedListStyle.mm +5 -5
- package/ios/styles/StrikethroughStyle.mm +5 -5
- package/ios/styles/UnderlineStyle.mm +5 -5
- package/ios/styles/UnorderedListStyle.mm +5 -5
- package/ios/utils/CheckboxHitTestUtils.h +10 -0
- package/ios/utils/CheckboxHitTestUtils.mm +123 -0
- package/ios/utils/ParagraphAttributesUtils.h +4 -0
- package/ios/utils/ParagraphAttributesUtils.mm +142 -45
- package/ios/utils/ParagraphsUtils.mm +4 -4
- package/ios/utils/TextBlockTapGestureRecognizer.h +17 -0
- package/ios/utils/TextBlockTapGestureRecognizer.mm +56 -0
- package/ios/utils/ZeroWidthSpaceUtils.mm +14 -3
- package/lib/module/EnrichedTextInput.js +57 -11
- package/lib/module/EnrichedTextInput.js.map +1 -1
- package/lib/module/{EnrichedTextInputNativeComponent.ts → spec/EnrichedTextInputNativeComponent.ts} +175 -18
- package/lib/module/types.js +4 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/{normalizeHtmlStyle.js → utils/normalizeHtmlStyle.js} +18 -0
- package/lib/module/utils/normalizeHtmlStyle.js.map +1 -0
- package/lib/module/utils/nullthrows.js +9 -0
- package/lib/module/utils/nullthrows.js.map +1 -0
- package/lib/module/utils/regexParser.js +46 -0
- package/lib/module/utils/regexParser.js.map +1 -0
- package/lib/typescript/src/EnrichedTextInput.d.ts +20 -51
- package/lib/typescript/src/EnrichedTextInput.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +2 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/{EnrichedTextInputNativeComponent.d.ts → spec/EnrichedTextInputNativeComponent.d.ts} +154 -18
- package/lib/typescript/src/spec/EnrichedTextInputNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +58 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts +4 -0
- package/lib/typescript/src/utils/normalizeHtmlStyle.d.ts.map +1 -0
- package/lib/typescript/src/utils/nullthrows.d.ts +2 -0
- package/lib/typescript/src/utils/nullthrows.d.ts.map +1 -0
- package/lib/typescript/src/utils/regexParser.d.ts +3 -0
- package/lib/typescript/src/utils/regexParser.d.ts.map +1 -0
- package/package.json +13 -9
- package/src/EnrichedTextInput.tsx +88 -63
- package/src/index.tsx +5 -1
- package/src/{EnrichedTextInputNativeComponent.ts → spec/EnrichedTextInputNativeComponent.ts} +175 -18
- package/src/types.ts +59 -0
- package/src/{normalizeHtmlStyle.ts → utils/normalizeHtmlStyle.ts} +20 -5
- package/src/utils/nullthrows.ts +7 -0
- package/src/utils/regexParser.ts +56 -0
- package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.cpp +0 -128
- package/android/generated/jni/react/renderer/components/RNEnrichedTextInputViewSpec/EventEmitters.h +0 -102
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeHtmlEvent.kt +0 -28
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeStateEvent.kt +0 -24
- package/android/src/main/java/com/swmansion/enriched/events/OnChangeTextEvent.kt +0 -30
- package/android/src/main/java/com/swmansion/enriched/events/OnInputBlurEvent.kt +0 -27
- package/android/src/main/java/com/swmansion/enriched/events/OnInputFocusEvent.kt +0 -27
- package/android/src/main/java/com/swmansion/enriched/events/OnLinkDetectedEvent.kt +0 -30
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBlockQuoteSpan.kt +0 -44
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedBoldSpan.kt +0 -16
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH1Span.kt +0 -23
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH2Span.kt +0 -23
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedH3Span.kt +0 -23
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedInlineCodeSpan.kt +0 -27
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedItalicSpan.kt +0 -15
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedLinkSpan.kt +0 -30
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedMentionSpan.kt +0 -42
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedSpans.kt +0 -136
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedStrikeThroughSpan.kt +0 -14
- package/android/src/main/java/com/swmansion/enriched/spans/EnrichedUnderlineSpan.kt +0 -14
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedBlockSpan.kt +0 -4
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedHeadingSpan.kt +0 -4
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedInlineSpan.kt +0 -4
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedParagraphSpan.kt +0 -4
- package/android/src/main/java/com/swmansion/enriched/spans/interfaces/EnrichedSpan.kt +0 -8
- package/android/src/main/java/com/swmansion/enriched/styles/ListStyles.kt +0 -172
- package/android/src/main/java/com/swmansion/enriched/utils/EnrichedSpanState.kt +0 -204
- package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.cpp +0 -22
- package/android/src/main/new_arch/RNEnrichedTextInputViewSpec.h +0 -26
- package/android/src/main/new_arch/react/renderer/components/RNEnrichedTextInputViewSpec/conversions.h +0 -26
- package/ios/attachments/ImageAttachment.mm +0 -34
- package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.cpp +0 -128
- package/ios/generated/RNEnrichedTextInputViewSpec/EventEmitters.h +0 -102
- package/lib/module/normalizeHtmlStyle.js.map +0 -1
- package/lib/typescript/src/EnrichedTextInputNativeComponent.d.ts.map +0 -1
- package/lib/typescript/src/normalizeHtmlStyle.d.ts +0 -4
- package/lib/typescript/src/normalizeHtmlStyle.d.ts.map +0 -1
- /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.cpp +0 -0
- /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.h +0 -0
- /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.cpp +0 -0
- /package/android/generated/jni/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.h +0 -0
- /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputComponentDescriptor.h +0 -0
- /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputMeasurementManager.cpp +0 -0
- /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputShadowNode.cpp +0 -0
- /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputState.cpp +0 -0
- /package/android/src/main/new_arch/react/renderer/components/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/EnrichedTextInputState.h +0 -0
- /package/ios/{utils → extensions}/ColorExtension.h +0 -0
- /package/ios/{utils → extensions}/ColorExtension.mm +0 -0
- /package/ios/{utils → extensions}/FontExtension.h +0 -0
- /package/ios/{utils → extensions}/FontExtension.mm +0 -0
- /package/ios/{utils → extensions}/LayoutManagerExtension.h +0 -0
- /package/ios/{utils → extensions}/StringExtension.h +0 -0
- /package/ios/{utils → extensions}/StringExtension.mm +0 -0
- /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.cpp +0 -0
- /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/ShadowNodes.h +0 -0
- /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.cpp +0 -0
- /package/ios/generated/{RNEnrichedTextInputViewSpec → ReactNativeEnrichedSpec}/States.h +0 -0
- /package/ios/{utils → interfaces}/BaseStyleProtocol.h +0 -0
- /package/ios/{utils → interfaces}/ImageData.h +0 -0
- /package/ios/{utils → interfaces}/ImageData.mm +0 -0
- /package/ios/{utils → interfaces}/LinkData.h +0 -0
- /package/ios/{utils → interfaces}/LinkData.mm +0 -0
- /package/ios/{attachments → interfaces}/MediaAttachment.h +0 -0
- /package/ios/{attachments → interfaces}/MediaAttachment.mm +0 -0
- /package/ios/{utils → interfaces}/MentionParams.h +0 -0
- /package/ios/{utils → interfaces}/MentionParams.mm +0 -0
- /package/ios/{utils → interfaces}/MentionStyleProps.h +0 -0
- /package/ios/{utils → interfaces}/StylePair.h +0 -0
- /package/ios/{utils → interfaces}/StylePair.mm +0 -0
- /package/ios/{utils → interfaces}/TextDecorationLineEnum.h +0 -0
- /package/ios/{utils → interfaces}/TextDecorationLineEnum.mm +0 -0
|
@@ -1,47 +1,74 @@
|
|
|
1
|
-
package com.swmansion.enriched.watchers
|
|
1
|
+
package com.swmansion.enriched.textinput.watchers
|
|
2
2
|
|
|
3
3
|
import android.text.SpanWatcher
|
|
4
4
|
import android.text.Spannable
|
|
5
5
|
import android.text.style.ParagraphStyle
|
|
6
6
|
import com.facebook.react.bridge.ReactContext
|
|
7
7
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
8
|
-
import com.swmansion.enriched.
|
|
9
|
-
import com.swmansion.enriched.
|
|
10
|
-
import com.swmansion.enriched.
|
|
11
|
-
import com.swmansion.enriched.
|
|
12
|
-
import com.swmansion.enriched.spans.
|
|
13
|
-
import com.swmansion.enriched.
|
|
14
|
-
import com.swmansion.enriched.utils.getSafeSpanBoundaries
|
|
8
|
+
import com.swmansion.enriched.common.parser.EnrichedParser
|
|
9
|
+
import com.swmansion.enriched.common.spans.interfaces.EnrichedHeadingSpan
|
|
10
|
+
import com.swmansion.enriched.textinput.EnrichedTextInputView
|
|
11
|
+
import com.swmansion.enriched.textinput.events.OnChangeHtmlEvent
|
|
12
|
+
import com.swmansion.enriched.textinput.spans.EnrichedInputOrderedListSpan
|
|
13
|
+
import com.swmansion.enriched.textinput.spans.interfaces.EnrichedInputSpan
|
|
14
|
+
import com.swmansion.enriched.textinput.utils.getSafeSpanBoundaries
|
|
15
15
|
|
|
16
|
-
class EnrichedSpanWatcher(
|
|
16
|
+
class EnrichedSpanWatcher(
|
|
17
|
+
private val view: EnrichedTextInputView,
|
|
18
|
+
) : SpanWatcher {
|
|
17
19
|
private var previousHtml: String? = null
|
|
18
20
|
|
|
19
|
-
override fun onSpanAdded(
|
|
21
|
+
override fun onSpanAdded(
|
|
22
|
+
text: Spannable,
|
|
23
|
+
what: Any,
|
|
24
|
+
start: Int,
|
|
25
|
+
end: Int,
|
|
26
|
+
) {
|
|
20
27
|
updateNextLineLayout(what, text, end)
|
|
21
28
|
updateUnorderedListSpans(what, text, end)
|
|
22
29
|
emitEvent(text, what)
|
|
23
30
|
}
|
|
24
31
|
|
|
25
|
-
override fun onSpanRemoved(
|
|
32
|
+
override fun onSpanRemoved(
|
|
33
|
+
text: Spannable,
|
|
34
|
+
what: Any,
|
|
35
|
+
start: Int,
|
|
36
|
+
end: Int,
|
|
37
|
+
) {
|
|
26
38
|
updateNextLineLayout(what, text, end)
|
|
27
39
|
updateUnorderedListSpans(what, text, end)
|
|
28
40
|
emitEvent(text, what)
|
|
29
41
|
}
|
|
30
42
|
|
|
31
|
-
override fun onSpanChanged(
|
|
43
|
+
override fun onSpanChanged(
|
|
44
|
+
text: Spannable,
|
|
45
|
+
what: Any,
|
|
46
|
+
ostart: Int,
|
|
47
|
+
oend: Int,
|
|
48
|
+
nstart: Int,
|
|
49
|
+
nend: Int,
|
|
50
|
+
) {
|
|
32
51
|
// Do nothing for now
|
|
33
52
|
}
|
|
34
53
|
|
|
35
|
-
private fun updateUnorderedListSpans(
|
|
36
|
-
|
|
54
|
+
private fun updateUnorderedListSpans(
|
|
55
|
+
what: Any,
|
|
56
|
+
text: Spannable,
|
|
57
|
+
end: Int,
|
|
58
|
+
) {
|
|
59
|
+
if (what is EnrichedInputOrderedListSpan) {
|
|
37
60
|
view.listStyles?.updateOrderedListIndexes(text, end)
|
|
38
61
|
}
|
|
39
62
|
}
|
|
40
63
|
|
|
41
64
|
// After adding/removing heading span, we have to manually set empty paragraph span to the following text
|
|
42
65
|
// This allows us to update the layout (as it's not updated automatically - looks like an Android issue)
|
|
43
|
-
private fun updateNextLineLayout(
|
|
44
|
-
|
|
66
|
+
private fun updateNextLineLayout(
|
|
67
|
+
what: Any,
|
|
68
|
+
text: Spannable,
|
|
69
|
+
end: Int,
|
|
70
|
+
) {
|
|
71
|
+
class EmptySpan : ParagraphStyle
|
|
45
72
|
|
|
46
73
|
if (what is EnrichedHeadingSpan) {
|
|
47
74
|
val finalStart = (end + 1)
|
|
@@ -51,12 +78,15 @@ class EnrichedSpanWatcher(private val view: EnrichedTextInputView) : SpanWatcher
|
|
|
51
78
|
}
|
|
52
79
|
}
|
|
53
80
|
|
|
54
|
-
fun emitEvent(
|
|
81
|
+
fun emitEvent(
|
|
82
|
+
s: Spannable,
|
|
83
|
+
what: Any?,
|
|
84
|
+
) {
|
|
55
85
|
// Do not parse spannable and emit event if onChangeHtml is not provided
|
|
56
86
|
if (!view.shouldEmitHtml) return
|
|
57
87
|
|
|
58
88
|
// Emit event only if we change one of ours spans
|
|
59
|
-
if (what != null && what !is
|
|
89
|
+
if (what != null && what !is EnrichedInputSpan) return
|
|
60
90
|
|
|
61
91
|
val html = EnrichedParser.toHtml(s)
|
|
62
92
|
if (html == previousHtml) return
|
|
@@ -65,11 +95,13 @@ class EnrichedSpanWatcher(private val view: EnrichedTextInputView) : SpanWatcher
|
|
|
65
95
|
val context = view.context as ReactContext
|
|
66
96
|
val surfaceId = UIManagerHelper.getSurfaceId(context)
|
|
67
97
|
val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id)
|
|
68
|
-
dispatcher?.dispatchEvent(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
98
|
+
dispatcher?.dispatchEvent(
|
|
99
|
+
OnChangeHtmlEvent(
|
|
100
|
+
surfaceId,
|
|
101
|
+
view.id,
|
|
102
|
+
html,
|
|
103
|
+
view.experimentalSynchronousEvents,
|
|
104
|
+
),
|
|
105
|
+
)
|
|
74
106
|
}
|
|
75
107
|
}
|
|
@@ -1,21 +1,35 @@
|
|
|
1
|
-
package com.swmansion.enriched.watchers
|
|
1
|
+
package com.swmansion.enriched.textinput.watchers
|
|
2
2
|
|
|
3
3
|
import android.text.Editable
|
|
4
4
|
import android.text.TextWatcher
|
|
5
5
|
import com.facebook.react.bridge.ReactContext
|
|
6
6
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
7
|
-
import com.swmansion.enriched.EnrichedTextInputView
|
|
8
|
-
import com.swmansion.enriched.events.OnChangeTextEvent
|
|
7
|
+
import com.swmansion.enriched.textinput.EnrichedTextInputView
|
|
8
|
+
import com.swmansion.enriched.textinput.events.OnChangeTextEvent
|
|
9
9
|
|
|
10
|
-
class EnrichedTextWatcher(
|
|
10
|
+
class EnrichedTextWatcher(
|
|
11
|
+
private val view: EnrichedTextInputView,
|
|
12
|
+
) : TextWatcher {
|
|
11
13
|
private var endCursorPosition: Int = 0
|
|
14
|
+
private var startCursorPosition: Int = 0
|
|
12
15
|
private var previousTextLength: Int = 0
|
|
13
16
|
|
|
14
|
-
override fun beforeTextChanged(
|
|
17
|
+
override fun beforeTextChanged(
|
|
18
|
+
s: CharSequence?,
|
|
19
|
+
start: Int,
|
|
20
|
+
count: Int,
|
|
21
|
+
after: Int,
|
|
22
|
+
) {
|
|
15
23
|
previousTextLength = s?.length ?: 0
|
|
16
24
|
}
|
|
17
25
|
|
|
18
|
-
override fun onTextChanged(
|
|
26
|
+
override fun onTextChanged(
|
|
27
|
+
s: CharSequence?,
|
|
28
|
+
start: Int,
|
|
29
|
+
before: Int,
|
|
30
|
+
count: Int,
|
|
31
|
+
) {
|
|
32
|
+
startCursorPosition = start
|
|
19
33
|
endCursorPosition = start + count
|
|
20
34
|
view.layoutManager.invalidateLayout()
|
|
21
35
|
view.isRemovingMany = !view.isDuringTransaction && before > count + 1
|
|
@@ -33,19 +47,28 @@ class EnrichedTextWatcher(private val view: EnrichedTextInputView) : TextWatcher
|
|
|
33
47
|
view.inlineStyles?.afterTextChanged(s, endCursorPosition)
|
|
34
48
|
view.paragraphStyles?.afterTextChanged(s, endCursorPosition, previousTextLength)
|
|
35
49
|
view.listStyles?.afterTextChanged(s, endCursorPosition, previousTextLength)
|
|
36
|
-
view.parametrizedStyles?.afterTextChanged(s, endCursorPosition)
|
|
50
|
+
view.parametrizedStyles?.afterTextChanged(s, startCursorPosition, endCursorPosition)
|
|
37
51
|
}
|
|
38
52
|
|
|
39
|
-
private fun
|
|
53
|
+
private fun emitChangeText(editable: Editable) {
|
|
54
|
+
if (!view.shouldEmitOnChangeText) {
|
|
55
|
+
return
|
|
56
|
+
}
|
|
40
57
|
val context = view.context as ReactContext
|
|
41
58
|
val surfaceId = UIManagerHelper.getSurfaceId(context)
|
|
42
59
|
val dispatcher = UIManagerHelper.getEventDispatcherForReactTag(context, view.id)
|
|
43
|
-
dispatcher?.dispatchEvent(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
60
|
+
dispatcher?.dispatchEvent(
|
|
61
|
+
OnChangeTextEvent(
|
|
62
|
+
surfaceId,
|
|
63
|
+
view.id,
|
|
64
|
+
editable,
|
|
65
|
+
view.experimentalSynchronousEvents,
|
|
66
|
+
),
|
|
67
|
+
)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private fun emitEvents(s: Editable) {
|
|
71
|
+
emitChangeText(s)
|
|
49
72
|
view.spanWatcher?.emitEvent(s, null)
|
|
50
73
|
}
|
|
51
74
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
cmake_minimum_required(VERSION 3.13)
|
|
2
2
|
set(CMAKE_VERBOSE_MAKEFILE on)
|
|
3
3
|
|
|
4
|
-
set(LIB_LITERAL
|
|
4
|
+
set(LIB_LITERAL ReactNativeEnrichedSpec)
|
|
5
5
|
set(LIB_TARGET_NAME react_codegen_${LIB_LITERAL})
|
|
6
6
|
|
|
7
7
|
set(LIB_ANDROID_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
|
|
@@ -11,6 +11,12 @@ set(LIB_ANDROID_GENERATED_COMPONENTS_DIR ${LIB_ANDROID_GENERATED_JNI_DIR}/react/
|
|
|
11
11
|
file(GLOB LIB_MODULE_SRCS CONFIGURE_DEPENDS *.cpp react/renderer/components/${LIB_LITERAL}/*.cpp)
|
|
12
12
|
file(GLOB LIB_CODEGEN_SRCS CONFIGURE_DEPENDS ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}/*.cpp)
|
|
13
13
|
|
|
14
|
+
if(NOT DEFINED REACT_NATIVE_MINOR_VERSION)
|
|
15
|
+
set(REACT_NATIVE_MINOR_VERSION ${ReactAndroid_VERSION_MINOR})
|
|
16
|
+
endif()
|
|
17
|
+
|
|
18
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DREACT_NATIVE_MINOR_VERSION=${REACT_NATIVE_MINOR_VERSION}")
|
|
19
|
+
|
|
14
20
|
add_library(
|
|
15
21
|
${LIB_TARGET_NAME}
|
|
16
22
|
SHARED
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#include "ReactNativeEnrichedSpec.h"
|
|
2
|
+
|
|
3
|
+
namespace facebook::react {
|
|
4
|
+
|
|
5
|
+
std::shared_ptr<TurboModule> ReactNativeEnrichedSpec_ModuleProvider(
|
|
6
|
+
const std::string &moduleName, const JavaTurboModule::InitParams ¶ms) {
|
|
7
|
+
|
|
8
|
+
return nullptr;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <ReactCommon/JavaTurboModule.h>
|
|
4
|
+
#include <ReactCommon/TurboModule.h>
|
|
5
|
+
#include <jsi/jsi.h>
|
|
6
|
+
|
|
7
|
+
#include <react/renderer/components/ReactNativeEnrichedSpec/EnrichedTextInputComponentDescriptor.h>
|
|
8
|
+
|
|
9
|
+
namespace facebook::react {
|
|
10
|
+
|
|
11
|
+
JSI_EXPORT
|
|
12
|
+
std::shared_ptr<TurboModule> ReactNativeEnrichedSpec_ModuleProvider(
|
|
13
|
+
const std::string &moduleName, const JavaTurboModule::InitParams ¶ms);
|
|
14
|
+
|
|
15
|
+
} // namespace facebook::react
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
#include "ComponentDescriptors.h"
|
|
4
4
|
|
|
5
|
-
#include <react/renderer/components/
|
|
5
|
+
#include <react/renderer/components/ReactNativeEnrichedSpec/Props.h>
|
|
6
6
|
#include <react/renderer/core/LayoutConstraints.h>
|
|
7
7
|
#include <react/utils/ContextContainer.h>
|
|
8
8
|
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
#include "EnrichedTextInputMeasurementManager.h"
|
|
4
4
|
#include "EnrichedTextInputState.h"
|
|
5
5
|
|
|
6
|
-
#include <react/renderer/components/
|
|
7
|
-
#include <react/renderer/components/
|
|
6
|
+
#include <react/renderer/components/ReactNativeEnrichedSpec/EventEmitters.h>
|
|
7
|
+
#include <react/renderer/components/ReactNativeEnrichedSpec/Props.h>
|
|
8
8
|
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
|
9
9
|
|
|
10
10
|
namespace facebook::react {
|
package/android/src/main/new_arch/react/renderer/components/ReactNativeEnrichedSpec/conversions.h
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <folly/dynamic.h>
|
|
4
|
+
#include <react/renderer/components/ReactNativeEnrichedSpec/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
|
|
12
|
+
|
|
13
|
+
namespace facebook::react {
|
|
14
|
+
|
|
15
|
+
#ifdef RN_SERIALIZABLE_STATE
|
|
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
|
|
41
|
+
|
|
42
|
+
return serializedProps;
|
|
43
|
+
}
|
|
44
|
+
#endif
|
|
45
|
+
|
|
46
|
+
} // namespace facebook::react
|
|
@@ -27,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
27
27
|
@public
|
|
28
28
|
NSDictionary<NSNumber *, id<BaseStyleProtocol>> *stylesDict;
|
|
29
29
|
NSDictionary<NSNumber *, NSArray<NSNumber *> *> *conflictingStyles;
|
|
30
|
-
|
|
30
|
+
NSMutableDictionary<NSNumber *, NSArray<NSNumber *> *> *blockingStyles;
|
|
31
31
|
@public
|
|
32
32
|
BOOL blockEmitting;
|
|
33
33
|
}
|
|
@@ -36,6 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
36
36
|
url:(NSString *)url
|
|
37
37
|
range:(NSRange)range;
|
|
38
38
|
- (void)emitOnMentionEvent:(NSString *)indicator text:(nullable NSString *)text;
|
|
39
|
+
- (void)emitOnPasteImagesEvent:(NSArray<NSDictionary *> *)images;
|
|
39
40
|
- (void)anyTextMayHaveBeenModified;
|
|
40
41
|
- (BOOL)handleStyleBlocksAndConflicts:(StyleType)type range:(NSRange)range;
|
|
41
42
|
- (NSArray<NSNumber *> *)getPresentStyleTypesFrom:(NSArray<NSNumber *> *)types
|