react-native-ios-translate-sheet 1.2.0 → 1.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 (35) hide show
  1. package/README.md +30 -5
  2. package/android/generated/java/com/facebook/react/viewmanagers/IOSTranslateSheetViewManagerDelegate.java +3 -0
  3. package/android/generated/java/com/facebook/react/viewmanagers/IOSTranslateSheetViewManagerInterface.java +1 -0
  4. package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/EventEmitters.cpp +9 -0
  5. package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/EventEmitters.h +6 -0
  6. package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/Props.cpp +2 -1
  7. package/android/generated/jni/react/renderer/components/RNIOSTranslateSheetViewSpec/Props.h +1 -0
  8. package/ios/IOSTranslateSheet.swift +7 -1
  9. package/ios/IOSTranslateSheetProvider.swift +14 -0
  10. package/ios/IOSTranslateSheetView.mm +12 -1
  11. package/ios/IOSTranslateSheetViewManager.mm +2 -0
  12. package/ios/generated/RNIOSTranslateSheetViewSpec/EventEmitters.cpp +9 -0
  13. package/ios/generated/RNIOSTranslateSheetViewSpec/EventEmitters.h +6 -0
  14. package/ios/generated/RNIOSTranslateSheetViewSpec/Props.cpp +2 -1
  15. package/ios/generated/RNIOSTranslateSheetViewSpec/Props.h +1 -0
  16. package/lib/commonjs/IOSTranslateSheetViewNativeComponent.ts +6 -0
  17. package/lib/commonjs/TranslateContext.js +8 -2
  18. package/lib/commonjs/TranslateContext.js.map +1 -1
  19. package/lib/commonjs/hooks/useInternalTranslate.js +5 -2
  20. package/lib/commonjs/hooks/useInternalTranslate.js.map +1 -1
  21. package/lib/module/IOSTranslateSheetViewNativeComponent.ts +6 -0
  22. package/lib/module/TranslateContext.js +8 -2
  23. package/lib/module/TranslateContext.js.map +1 -1
  24. package/lib/module/hooks/useInternalTranslate.js +5 -2
  25. package/lib/module/hooks/useInternalTranslate.js.map +1 -1
  26. package/lib/typescript/IOSTranslateSheetViewNativeComponent.d.ts +5 -0
  27. package/lib/typescript/IOSTranslateSheetViewNativeComponent.d.ts.map +1 -1
  28. package/lib/typescript/TranslateContext.d.ts +1 -1
  29. package/lib/typescript/TranslateContext.d.ts.map +1 -1
  30. package/lib/typescript/hooks/useInternalTranslate.d.ts +2 -1
  31. package/lib/typescript/hooks/useInternalTranslate.d.ts.map +1 -1
  32. package/package.json +1 -1
  33. package/src/IOSTranslateSheetViewNativeComponent.ts +6 -0
  34. package/src/TranslateContext.tsx +17 -3
  35. package/src/hooks/useInternalTranslate.tsx +7 -1
package/README.md CHANGED
@@ -75,19 +75,44 @@ function MyComponent() {
75
75
 
76
76
  const handleTranslate = () => {
77
77
  presentIOSTranslateSheet('Text to translate');
78
- // Optional: You can pass an opacity value (0-1) as a second parameter
79
- // presentIOSTranslateSheet('Text to translate', 0.5);
80
78
  };
81
79
 
82
80
  return (
83
- <Button
84
- title="Translate"
85
- onPress={handleTranslate}
81
+ <Button
82
+ title="Translate"
83
+ onPress={handleTranslate}
86
84
  />
87
85
  );
88
86
  }
89
87
  ```
90
88
 
89
+ ### Replacement Action
90
+
91
+ The Replacement Action feature allows you to capture and handle the translated text after a user completes a translation. This is particularly useful for:
92
+ - Saving translations for later use
93
+ - Updating UI elements with translated content
94
+ - Implementing "translate and replace" functionality
95
+ - Storing translations in your app's state or database
96
+
97
+ #### Basic Usage
98
+
99
+ To handle translated text, provide a callback function as the second parameter to `presentIOSTranslateSheet`:
100
+
101
+ ```tsx
102
+ const { presentIOSTranslateSheet } = useIOSTranslateSheet();
103
+
104
+ const handleTranslate = () => {
105
+ presentIOSTranslateSheet(
106
+ 'Hello, how are you?',
107
+ (translatedText) => {
108
+ // Handle the translated text here
109
+ setTranslatedContent(translatedText);
110
+ }
111
+ );
112
+ };
113
+ ```
114
+
115
+
91
116
  ### Checking Platform Support
92
117
 
93
118
  The `useIOSTranslateSheet` hook provides an `isSupported` boolean that you can use to check if the translation functionality is available on the current device:
@@ -28,6 +28,9 @@ public class IOSTranslateSheetViewManagerDelegate<T extends View, U extends Base
28
28
  case "isPresented":
29
29
  mViewManager.setIsPresented(view, value == null ? false : (boolean) value);
30
30
  break;
31
+ case "hasReplacementAction":
32
+ mViewManager.setHasReplacementAction(view, value == null ? false : (boolean) value);
33
+ break;
31
34
  default:
32
35
  super.setProperty(view, propName, value);
33
36
  }
@@ -16,4 +16,5 @@ import com.facebook.react.uimanager.ViewManagerWithGeneratedInterface;
16
16
  public interface IOSTranslateSheetViewManagerInterface<T extends View> extends ViewManagerWithGeneratedInterface {
17
17
  void setText(T view, @Nullable String value);
18
18
  void setIsPresented(T view, boolean value);
19
+ void setHasReplacementAction(T view, boolean value);
19
20
  }
@@ -21,4 +21,13 @@ void IOSTranslateSheetViewEventEmitter::onHide(OnHide $event) const {
21
21
  });
22
22
  }
23
23
 
24
+
25
+ void IOSTranslateSheetViewEventEmitter::onReplacementAction(OnReplacementAction $event) const {
26
+ dispatchEvent("replacementAction", [$event=std::move($event)](jsi::Runtime &runtime) {
27
+ auto $payload = jsi::Object(runtime);
28
+ $payload.setProperty(runtime, "text", $event.text);
29
+ return $payload;
30
+ });
31
+ }
32
+
24
33
  } // namespace facebook::react
@@ -20,6 +20,12 @@ class IOSTranslateSheetViewEventEmitter : public ViewEventEmitter {
20
20
  struct OnHide {
21
21
 
22
22
  };
23
+
24
+ struct OnReplacementAction {
25
+ std::string text;
26
+ };
23
27
  void onHide(OnHide value) const;
28
+
29
+ void onReplacementAction(OnReplacementAction value) const;
24
30
  };
25
31
  } // namespace facebook::react
@@ -20,7 +20,8 @@ IOSTranslateSheetViewProps::IOSTranslateSheetViewProps(
20
20
  const RawProps &rawProps): ViewProps(context, sourceProps, rawProps),
21
21
 
22
22
  text(convertRawProp(context, rawProps, "text", sourceProps.text, {})),
23
- isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false}))
23
+ isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false})),
24
+ hasReplacementAction(convertRawProp(context, rawProps, "hasReplacementAction", sourceProps.hasReplacementAction, {false}))
24
25
  {}
25
26
 
26
27
  } // namespace facebook::react
@@ -23,6 +23,7 @@ class IOSTranslateSheetViewProps final : public ViewProps {
23
23
 
24
24
  std::string text{};
25
25
  bool isPresented{false};
26
+ bool hasReplacementAction{false};
26
27
  };
27
28
 
28
29
  } // namespace facebook::react
@@ -4,7 +4,9 @@ import Translation
4
4
  class Props: ObservableObject {
5
5
  @Published var text: String = ""
6
6
  @Published var isPresented: Bool = false
7
+ @Published var hasReplacementAction: Bool = false
7
8
  @Published var onHide: () -> Void = {}
9
+ @Published var onReplacementAction: (String) -> Void = { _ in }
8
10
  }
9
11
 
10
12
  struct IOSTranslateSheet: View {
@@ -14,7 +16,11 @@ struct IOSTranslateSheet: View {
14
16
  if #available(iOS 17.4, *) {
15
17
  Color.clear
16
18
  .frame(maxWidth: .infinity, maxHeight: .infinity)
17
- .translationPresentation(isPresented: $props.isPresented, text: props.text)
19
+ .translationPresentation(
20
+ isPresented: $props.isPresented,
21
+ text: props.text,
22
+ replacementAction: props.hasReplacementAction ? props.onReplacementAction : nil
23
+ )
18
24
  .onChange(of: props.isPresented) { oldValue, newValue in
19
25
  if oldValue == true && newValue == false {
20
26
  props.onHide()
@@ -33,6 +33,12 @@ public typealias RCTBubblingEventBlock = @convention(block) (_ body: [AnyHashabl
33
33
  }
34
34
  }
35
35
 
36
+ @objc public var hasReplacementAction: Bool = false {
37
+ didSet {
38
+ props.hasReplacementAction = hasReplacementAction
39
+ }
40
+ }
41
+
36
42
  @objc public var onHide: RCTBubblingEventBlock? {
37
43
  didSet {
38
44
  props.onHide = { [weak self] in
@@ -40,6 +46,14 @@ public typealias RCTBubblingEventBlock = @convention(block) (_ body: [AnyHashabl
40
46
  }
41
47
  }
42
48
  }
49
+
50
+ @objc public var onReplacementAction: RCTBubblingEventBlock? {
51
+ didSet {
52
+ props.onReplacementAction = { [weak self] text in
53
+ self?.onReplacementAction?(["text": text])
54
+ }
55
+ }
56
+ }
43
57
 
44
58
  public override func layoutSubviews() {
45
59
  super.layoutSubviews()
@@ -43,7 +43,15 @@ using namespace facebook::react;
43
43
  ->onHide({});
44
44
  }
45
45
  };
46
-
46
+
47
+ _view.onReplacementAction = ^(NSDictionary *text) {
48
+ __typeof__(self) strongSelf = weakSelf;
49
+ if (strongSelf && strongSelf->_eventEmitter) {
50
+ std::dynamic_pointer_cast<const IOSTranslateSheetViewEventEmitter>(strongSelf->_eventEmitter)
51
+ ->onReplacementAction({.text = [text[@"text"] UTF8String]});
52
+ }
53
+ };
54
+
47
55
  self.contentView = _view;
48
56
  }
49
57
  return self;
@@ -60,6 +68,9 @@ using namespace facebook::react;
60
68
  if (oldViewProps.isPresented != newViewProps.isPresented) {
61
69
  _view.isPresented = newViewProps.isPresented;
62
70
  }
71
+ if (oldViewProps.hasReplacementAction != newViewProps.hasReplacementAction) {
72
+ _view.hasReplacementAction = newViewProps.hasReplacementAction;
73
+ }
63
74
 
64
75
  [super updateProps:props oldProps:oldProps];
65
76
  }
@@ -30,7 +30,9 @@ RCT_EXPORT_MODULE(IOSTranslateSheetView)
30
30
 
31
31
  RCT_EXPORT_VIEW_PROPERTY(text, NSString)
32
32
  RCT_EXPORT_VIEW_PROPERTY(isPresented, BOOL)
33
+ RCT_EXPORT_VIEW_PROPERTY(hasReplacementAction, BOOL)
33
34
  RCT_EXPORT_VIEW_PROPERTY(onHide, RCTDirectEventBlock)
35
+ RCT_EXPORT_VIEW_PROPERTY(onReplacementAction, RCTDirectEventBlock)
34
36
 
35
37
  #ifdef RCT_NEW_ARCH_ENABLED
36
38
  + (BOOL)requiresMainQueueSetup
@@ -21,4 +21,13 @@ void IOSTranslateSheetViewEventEmitter::onHide(OnHide $event) const {
21
21
  });
22
22
  }
23
23
 
24
+
25
+ void IOSTranslateSheetViewEventEmitter::onReplacementAction(OnReplacementAction $event) const {
26
+ dispatchEvent("replacementAction", [$event=std::move($event)](jsi::Runtime &runtime) {
27
+ auto $payload = jsi::Object(runtime);
28
+ $payload.setProperty(runtime, "text", $event.text);
29
+ return $payload;
30
+ });
31
+ }
32
+
24
33
  } // namespace facebook::react
@@ -20,6 +20,12 @@ class IOSTranslateSheetViewEventEmitter : public ViewEventEmitter {
20
20
  struct OnHide {
21
21
 
22
22
  };
23
+
24
+ struct OnReplacementAction {
25
+ std::string text;
26
+ };
23
27
  void onHide(OnHide value) const;
28
+
29
+ void onReplacementAction(OnReplacementAction value) const;
24
30
  };
25
31
  } // namespace facebook::react
@@ -20,7 +20,8 @@ IOSTranslateSheetViewProps::IOSTranslateSheetViewProps(
20
20
  const RawProps &rawProps): ViewProps(context, sourceProps, rawProps),
21
21
 
22
22
  text(convertRawProp(context, rawProps, "text", sourceProps.text, {})),
23
- isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false}))
23
+ isPresented(convertRawProp(context, rawProps, "isPresented", sourceProps.isPresented, {false})),
24
+ hasReplacementAction(convertRawProp(context, rawProps, "hasReplacementAction", sourceProps.hasReplacementAction, {false}))
24
25
  {}
25
26
 
26
27
  } // namespace facebook::react
@@ -23,6 +23,7 @@ class IOSTranslateSheetViewProps final : public ViewProps {
23
23
 
24
24
  std::string text{};
25
25
  bool isPresented{false};
26
+ bool hasReplacementAction{false};
26
27
  };
27
28
 
28
29
  } // namespace facebook::react
@@ -2,10 +2,16 @@ import type { ViewProps } from "react-native";
2
2
  import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
3
3
  import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
4
4
 
5
+ export interface OnReplacementActionEvent {
6
+ text: string;
7
+ }
8
+
5
9
  interface IOSTranslateSheetProps extends ViewProps {
6
10
  text: string;
7
11
  isPresented: boolean;
12
+ hasReplacementAction: boolean;
8
13
  onHide: DirectEventHandler<null>;
14
+ onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
9
15
  }
10
16
 
11
17
  export default codegenNativeComponent<IOSTranslateSheetProps>(
@@ -19,8 +19,12 @@ const IOSTranslateSheetProvider = ({
19
19
  isIOSTranslateSheetPresented,
20
20
  text,
21
21
  hideTranslateSheet,
22
- isSupported
22
+ isSupported,
23
+ replacementAction
23
24
  } = (0, _useInternalTranslate.useInternalTranslateSheet)();
25
+ const onReplacementAction = event => {
26
+ replacementAction?.(event.nativeEvent.text);
27
+ };
24
28
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(TranslateContext.Provider, {
25
29
  value: {
26
30
  presentIOSTranslateSheet,
@@ -30,7 +34,9 @@ const IOSTranslateSheetProvider = ({
30
34
  text: text,
31
35
  isPresented: isIOSTranslateSheetPresented,
32
36
  onHide: hideTranslateSheet,
33
- style: _reactNative.StyleSheet.absoluteFillObject
37
+ style: _reactNative.StyleSheet.absoluteFillObject,
38
+ hasReplacementAction: !!replacementAction,
39
+ onReplacementAction: onReplacementAction
34
40
  }), children]
35
41
  });
36
42
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_IOSTranslateSheetViewNativeComponent","_interopRequireDefault","_useInternalTranslate","_jsxRuntime","e","__esModule","default","TranslateContext","createContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","useInternalTranslateSheet","jsxs","Provider","value","jsx","isPresented","onHide","style","StyleSheet","absoluteFillObject","exports","useIOSTranslateSheet","context","useContext","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,qCAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,qBAAA,GAAAJ,OAAA;AAAyE,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAOzE,MAAMG,gBAAgB,gBAAG,IAAAC,oBAAa,EAA8B,IAAI,CAAC;AAElE,MAAMC,yBAAyB,GAAGA,CAAC;EACxCC;AACuB,CAAC,KAAK;EAC7B,MAAM;IACJC,wBAAwB;IACxBC,4BAA4B;IAC5BC,IAAI;IACJC,kBAAkB;IAClBC;EACF,CAAC,GAAG,IAAAC,+CAAyB,EAAC,CAAC;EAE/B,oBACE,IAAAb,WAAA,CAAAc,IAAA,EAACV,gBAAgB,CAACW,QAAQ;IACxBC,KAAK,EAAE;MACLR,wBAAwB;MACxBI;IACF,CAAE;IAAAL,QAAA,gBAEF,IAAAP,WAAA,CAAAiB,GAAA,EAACpB,qCAAA,CAAAM,OAAiB;MAChBO,IAAI,EAAEA,IAAK;MACXQ,WAAW,EAAET,4BAA6B;MAC1CU,MAAM,EAAER,kBAAmB;MAC3BS,KAAK,EAAEC,uBAAU,CAACC;IAAmB,CACtC,CAAC,EACDf,QAAQ;EAAA,CACgB,CAAC;AAEhC,CAAC;AAACgB,OAAA,CAAAjB,yBAAA,GAAAA,yBAAA;AAEK,MAAMkB,oBAAoB,GAAGA,CAAA,KAAM;EACxC,MAAMC,OAAO,GAAG,IAAAC,iBAAU,EAACtB,gBAAgB,CAAC;EAC5C,IAAI,CAACqB,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CACb,sEACF,CAAC;EACH;EACA,OAAOF,OAAO;AAChB,CAAC;AAACF,OAAA,CAAAC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_IOSTranslateSheetViewNativeComponent","_interopRequireDefault","_useInternalTranslate","_jsxRuntime","e","__esModule","default","TranslateContext","createContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","replacementAction","useInternalTranslateSheet","onReplacementAction","event","nativeEvent","jsxs","Provider","value","jsx","isPresented","onHide","style","StyleSheet","absoluteFillObject","hasReplacementAction","exports","useIOSTranslateSheet","context","useContext","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,qCAAA,GAAAC,sBAAA,CAAAH,OAAA;AAGA,IAAAI,qBAAA,GAAAJ,OAAA;AAAyE,IAAAK,WAAA,GAAAL,OAAA;AAAA,SAAAG,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAUzE,MAAMG,gBAAgB,gBAAG,IAAAC,oBAAa,EAA8B,IAAI,CAAC;AAElE,MAAMC,yBAAyB,GAAGA,CAAC;EACxCC;AACuB,CAAC,KAAK;EAC7B,MAAM;IACJC,wBAAwB;IACxBC,4BAA4B;IAC5BC,IAAI;IACJC,kBAAkB;IAClBC,WAAW;IACXC;EACF,CAAC,GAAG,IAAAC,+CAAyB,EAAC,CAAC;EAE/B,MAAMC,mBAAmB,GACvBC,KAAqD,IAClD;IACHH,iBAAiB,GAAGG,KAAK,CAACC,WAAW,CAACP,IAAI,CAAC;EAC7C,CAAC;EAED,oBACE,IAAAV,WAAA,CAAAkB,IAAA,EAACd,gBAAgB,CAACe,QAAQ;IACxBC,KAAK,EAAE;MACLZ,wBAAwB;MACxBI;IACF,CAAE;IAAAL,QAAA,gBAEF,IAAAP,WAAA,CAAAqB,GAAA,EAACxB,qCAAA,CAAAM,OAAiB;MAChBO,IAAI,EAAEA,IAAK;MACXY,WAAW,EAAEb,4BAA6B;MAC1Cc,MAAM,EAAEZ,kBAAmB;MAC3Ba,KAAK,EAAEC,uBAAU,CAACC,kBAAmB;MACrCC,oBAAoB,EAAE,CAAC,CAACd,iBAAkB;MAC1CE,mBAAmB,EAAEA;IAAoB,CAC1C,CAAC,EACDR,QAAQ;EAAA,CACgB,CAAC;AAEhC,CAAC;AAACqB,OAAA,CAAAtB,yBAAA,GAAAA,yBAAA;AAEK,MAAMuB,oBAAoB,GAAGA,CAAA,KAAM;EACxC,MAAMC,OAAO,GAAG,IAAAC,iBAAU,EAAC3B,gBAAgB,CAAC;EAC5C,IAAI,CAAC0B,OAAO,EAAE;IACZ,MAAM,IAAIE,KAAK,CACb,sEACF,CAAC;EACH;EACA,OAAOF,OAAO;AAChB,CAAC;AAACF,OAAA,CAAAC,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -10,8 +10,10 @@ const isSupported = _reactNative.Platform.OS === "ios" && Number.parseFloat(Stri
10
10
  const useInternalTranslateSheet = () => {
11
11
  const [isIOSTranslateSheetPresented, setIsIOSTranslateSheetPresented] = (0, _react.useState)(false);
12
12
  const textRef = (0, _react.useRef)("");
13
- const presentIOSTranslateSheet = (_text, _opacity) => {
13
+ const replacementActionRef = (0, _react.useRef)(undefined);
14
+ const presentIOSTranslateSheet = (_text, _replacementAction) => {
14
15
  textRef.current = _text;
16
+ replacementActionRef.current = _replacementAction;
15
17
  setIsIOSTranslateSheetPresented(true);
16
18
  };
17
19
  const hideTranslateSheet = () => {
@@ -22,7 +24,8 @@ const useInternalTranslateSheet = () => {
22
24
  presentIOSTranslateSheet,
23
25
  hideTranslateSheet,
24
26
  text: textRef.current,
25
- isSupported
27
+ isSupported,
28
+ replacementAction: replacementActionRef.current
26
29
  };
27
30
  };
28
31
  exports.useInternalTranslateSheet = useInternalTranslateSheet;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","isSupported","Platform","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","useState","textRef","useRef","presentIOSTranslateSheet","_text","_opacity","current","hideTranslateSheet","text","exports"],"sourceRoot":"../../../src","sources":["hooks/useInternalTranslate.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,MAAME,WAAW,GACfC,qBAAQ,CAACC,EAAE,KAAK,KAAK,IAAIC,MAAM,CAACC,UAAU,CAACC,MAAM,CAACJ,qBAAQ,CAACK,OAAO,CAAC,CAAC,IAAI,IAAI;AAEvE,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAM,CAACC,4BAA4B,EAAEC,+BAA+B,CAAC,GACnE,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACjB,MAAMC,OAAO,GAAG,IAAAC,aAAM,EAAC,EAAE,CAAC;EAE1B,MAAMC,wBAAwB,GAAGA,CAACC,KAAa,EAAEC,QAAiB,KAAK;IACrEJ,OAAO,CAACK,OAAO,GAAGF,KAAK;IACvBL,+BAA+B,CAAC,IAAI,CAAC;EACvC,CAAC;EAED,MAAMQ,kBAAkB,GAAGA,CAAA,KAAM;IAC/BR,+BAA+B,CAAC,KAAK,CAAC;EACxC,CAAC;EAED,OAAO;IACLD,4BAA4B;IAC5BK,wBAAwB;IACxBI,kBAAkB;IAClBC,IAAI,EAAEP,OAAO,CAACK,OAAO;IACrBhB;EACF,CAAC;AACH,CAAC;AAACmB,OAAA,CAAAZ,yBAAA,GAAAA,yBAAA","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","isSupported","Platform","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","useState","textRef","useRef","replacementActionRef","undefined","presentIOSTranslateSheet","_text","_replacementAction","current","hideTranslateSheet","text","replacementAction","exports"],"sourceRoot":"../../../src","sources":["hooks/useInternalTranslate.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,MAAME,WAAW,GACfC,qBAAQ,CAACC,EAAE,KAAK,KAAK,IAAIC,MAAM,CAACC,UAAU,CAACC,MAAM,CAACJ,qBAAQ,CAACK,OAAO,CAAC,CAAC,IAAI,IAAI;AAEvE,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAM,CAACC,4BAA4B,EAAEC,+BAA+B,CAAC,GACnE,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACjB,MAAMC,OAAO,GAAG,IAAAC,aAAM,EAAC,EAAE,CAAC;EAC1B,MAAMC,oBAAoB,GAAG,IAAAD,aAAM,EAAyBE,SAAS,CAAC;EAEtE,MAAMC,wBAAwB,GAAGA,CAC/BC,KAAa,EACbC,kBAA2C,KACxC;IACHN,OAAO,CAACO,OAAO,GAAGF,KAAK;IACvBH,oBAAoB,CAACK,OAAO,GAAGD,kBAAkB;IACjDR,+BAA+B,CAAC,IAAI,CAAC;EACvC,CAAC;EAED,MAAMU,kBAAkB,GAAGA,CAAA,KAAM;IAC/BV,+BAA+B,CAAC,KAAK,CAAC;EACxC,CAAC;EAED,OAAO;IACLD,4BAA4B;IAC5BO,wBAAwB;IACxBI,kBAAkB;IAClBC,IAAI,EAAET,OAAO,CAACO,OAAO;IACrBlB,WAAW;IACXqB,iBAAiB,EAAER,oBAAoB,CAACK;EAC1C,CAAC;AACH,CAAC;AAACI,OAAA,CAAAf,yBAAA,GAAAA,yBAAA","ignoreList":[]}
@@ -2,10 +2,16 @@ import type { ViewProps } from "react-native";
2
2
  import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
3
3
  import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
4
4
 
5
+ export interface OnReplacementActionEvent {
6
+ text: string;
7
+ }
8
+
5
9
  interface IOSTranslateSheetProps extends ViewProps {
6
10
  text: string;
7
11
  isPresented: boolean;
12
+ hasReplacementAction: boolean;
8
13
  onHide: DirectEventHandler<null>;
14
+ onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
9
15
  }
10
16
 
11
17
  export default codegenNativeComponent<IOSTranslateSheetProps>(
@@ -14,8 +14,12 @@ export const IOSTranslateSheetProvider = ({
14
14
  isIOSTranslateSheetPresented,
15
15
  text,
16
16
  hideTranslateSheet,
17
- isSupported
17
+ isSupported,
18
+ replacementAction
18
19
  } = useInternalTranslateSheet();
20
+ const onReplacementAction = event => {
21
+ replacementAction?.(event.nativeEvent.text);
22
+ };
19
23
  return /*#__PURE__*/_jsxs(TranslateContext.Provider, {
20
24
  value: {
21
25
  presentIOSTranslateSheet,
@@ -25,7 +29,9 @@ export const IOSTranslateSheetProvider = ({
25
29
  text: text,
26
30
  isPresented: isIOSTranslateSheetPresented,
27
31
  onHide: hideTranslateSheet,
28
- style: StyleSheet.absoluteFillObject
32
+ style: StyleSheet.absoluteFillObject,
33
+ hasReplacementAction: !!replacementAction,
34
+ onReplacementAction: onReplacementAction
29
35
  }), children]
30
36
  });
31
37
  };
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","StyleSheet","IOSTranslateSheet","useInternalTranslateSheet","jsx","_jsx","jsxs","_jsxs","TranslateContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","Provider","value","isPresented","onHide","style","absoluteFillObject","useIOSTranslateSheet","context","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;AAAA,SAAyBA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AACjE,SAASC,UAAU,QAAQ,cAAc;AACzC,OAAOC,iBAAiB,MAAM,wCAAwC;AACtE,SAASC,yBAAyB,QAAQ,8BAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOzE,MAAMC,gBAAgB,gBAAGT,aAAa,CAA8B,IAAI,CAAC;AAEzE,OAAO,MAAMU,yBAAyB,GAAGA,CAAC;EACxCC;AACuB,CAAC,KAAK;EAC7B,MAAM;IACJC,wBAAwB;IACxBC,4BAA4B;IAC5BC,IAAI;IACJC,kBAAkB;IAClBC;EACF,CAAC,GAAGZ,yBAAyB,CAAC,CAAC;EAE/B,oBACEI,KAAA,CAACC,gBAAgB,CAACQ,QAAQ;IACxBC,KAAK,EAAE;MACLN,wBAAwB;MACxBI;IACF,CAAE;IAAAL,QAAA,gBAEFL,IAAA,CAACH,iBAAiB;MAChBW,IAAI,EAAEA,IAAK;MACXK,WAAW,EAAEN,4BAA6B;MAC1CO,MAAM,EAAEL,kBAAmB;MAC3BM,KAAK,EAAEnB,UAAU,CAACoB;IAAmB,CACtC,CAAC,EACDX,QAAQ;EAAA,CACgB,CAAC;AAEhC,CAAC;AAED,OAAO,MAAMY,oBAAoB,GAAGA,CAAA,KAAM;EACxC,MAAMC,OAAO,GAAGvB,UAAU,CAACQ,gBAAgB,CAAC;EAC5C,IAAI,CAACe,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,sEACF,CAAC;EACH;EACA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","StyleSheet","IOSTranslateSheet","useInternalTranslateSheet","jsx","_jsx","jsxs","_jsxs","TranslateContext","IOSTranslateSheetProvider","children","presentIOSTranslateSheet","isIOSTranslateSheetPresented","text","hideTranslateSheet","isSupported","replacementAction","onReplacementAction","event","nativeEvent","Provider","value","isPresented","onHide","style","absoluteFillObject","hasReplacementAction","useIOSTranslateSheet","context","Error"],"sourceRoot":"../../src","sources":["TranslateContext.tsx"],"mappings":";;AAAA,SAAyBA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AACjE,SAAoCC,UAAU,QAAQ,cAAc;AACpE,OAAOC,iBAAiB,MAEjB,wCAAwC;AAC/C,SAASC,yBAAyB,QAAQ,8BAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAUzE,MAAMC,gBAAgB,gBAAGT,aAAa,CAA8B,IAAI,CAAC;AAEzE,OAAO,MAAMU,yBAAyB,GAAGA,CAAC;EACxCC;AACuB,CAAC,KAAK;EAC7B,MAAM;IACJC,wBAAwB;IACxBC,4BAA4B;IAC5BC,IAAI;IACJC,kBAAkB;IAClBC,WAAW;IACXC;EACF,CAAC,GAAGb,yBAAyB,CAAC,CAAC;EAE/B,MAAMc,mBAAmB,GACvBC,KAAqD,IAClD;IACHF,iBAAiB,GAAGE,KAAK,CAACC,WAAW,CAACN,IAAI,CAAC;EAC7C,CAAC;EAED,oBACEN,KAAA,CAACC,gBAAgB,CAACY,QAAQ;IACxBC,KAAK,EAAE;MACLV,wBAAwB;MACxBI;IACF,CAAE;IAAAL,QAAA,gBAEFL,IAAA,CAACH,iBAAiB;MAChBW,IAAI,EAAEA,IAAK;MACXS,WAAW,EAAEV,4BAA6B;MAC1CW,MAAM,EAAET,kBAAmB;MAC3BU,KAAK,EAAEvB,UAAU,CAACwB,kBAAmB;MACrCC,oBAAoB,EAAE,CAAC,CAACV,iBAAkB;MAC1CC,mBAAmB,EAAEA;IAAoB,CAC1C,CAAC,EACDP,QAAQ;EAAA,CACgB,CAAC;AAEhC,CAAC;AAED,OAAO,MAAMiB,oBAAoB,GAAGA,CAAA,KAAM;EACxC,MAAMC,OAAO,GAAG5B,UAAU,CAACQ,gBAAgB,CAAC;EAC5C,IAAI,CAACoB,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,sEACF,CAAC;EACH;EACA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
@@ -6,8 +6,10 @@ const isSupported = Platform.OS === "ios" && Number.parseFloat(String(Platform.V
6
6
  export const useInternalTranslateSheet = () => {
7
7
  const [isIOSTranslateSheetPresented, setIsIOSTranslateSheetPresented] = useState(false);
8
8
  const textRef = useRef("");
9
- const presentIOSTranslateSheet = (_text, _opacity) => {
9
+ const replacementActionRef = useRef(undefined);
10
+ const presentIOSTranslateSheet = (_text, _replacementAction) => {
10
11
  textRef.current = _text;
12
+ replacementActionRef.current = _replacementAction;
11
13
  setIsIOSTranslateSheetPresented(true);
12
14
  };
13
15
  const hideTranslateSheet = () => {
@@ -18,7 +20,8 @@ export const useInternalTranslateSheet = () => {
18
20
  presentIOSTranslateSheet,
19
21
  hideTranslateSheet,
20
22
  text: textRef.current,
21
- isSupported
23
+ isSupported,
24
+ replacementAction: replacementActionRef.current
22
25
  };
23
26
  };
24
27
  //# sourceMappingURL=useInternalTranslate.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useRef","useState","Platform","isSupported","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","textRef","presentIOSTranslateSheet","_text","_opacity","current","hideTranslateSheet","text"],"sourceRoot":"../../../src","sources":["hooks/useInternalTranslate.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACxC,SAASC,QAAQ,QAAQ,cAAc;AAEvC,MAAMC,WAAW,GACfD,QAAQ,CAACE,EAAE,KAAK,KAAK,IAAIC,MAAM,CAACC,UAAU,CAACC,MAAM,CAACL,QAAQ,CAACM,OAAO,CAAC,CAAC,IAAI,IAAI;AAE9E,OAAO,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAM,CAACC,4BAA4B,EAAEC,+BAA+B,CAAC,GACnEV,QAAQ,CAAC,KAAK,CAAC;EACjB,MAAMW,OAAO,GAAGZ,MAAM,CAAC,EAAE,CAAC;EAE1B,MAAMa,wBAAwB,GAAGA,CAACC,KAAa,EAAEC,QAAiB,KAAK;IACrEH,OAAO,CAACI,OAAO,GAAGF,KAAK;IACvBH,+BAA+B,CAAC,IAAI,CAAC;EACvC,CAAC;EAED,MAAMM,kBAAkB,GAAGA,CAAA,KAAM;IAC/BN,+BAA+B,CAAC,KAAK,CAAC;EACxC,CAAC;EAED,OAAO;IACLD,4BAA4B;IAC5BG,wBAAwB;IACxBI,kBAAkB;IAClBC,IAAI,EAAEN,OAAO,CAACI,OAAO;IACrBb;EACF,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useRef","useState","Platform","isSupported","OS","Number","parseFloat","String","Version","useInternalTranslateSheet","isIOSTranslateSheetPresented","setIsIOSTranslateSheetPresented","textRef","replacementActionRef","undefined","presentIOSTranslateSheet","_text","_replacementAction","current","hideTranslateSheet","text","replacementAction"],"sourceRoot":"../../../src","sources":["hooks/useInternalTranslate.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACxC,SAASC,QAAQ,QAAQ,cAAc;AAEvC,MAAMC,WAAW,GACfD,QAAQ,CAACE,EAAE,KAAK,KAAK,IAAIC,MAAM,CAACC,UAAU,CAACC,MAAM,CAACL,QAAQ,CAACM,OAAO,CAAC,CAAC,IAAI,IAAI;AAE9E,OAAO,MAAMC,yBAAyB,GAAGA,CAAA,KAAM;EAC7C,MAAM,CAACC,4BAA4B,EAAEC,+BAA+B,CAAC,GACnEV,QAAQ,CAAC,KAAK,CAAC;EACjB,MAAMW,OAAO,GAAGZ,MAAM,CAAC,EAAE,CAAC;EAC1B,MAAMa,oBAAoB,GAAGb,MAAM,CAAyBc,SAAS,CAAC;EAEtE,MAAMC,wBAAwB,GAAGA,CAC/BC,KAAa,EACbC,kBAA2C,KACxC;IACHL,OAAO,CAACM,OAAO,GAAGF,KAAK;IACvBH,oBAAoB,CAACK,OAAO,GAAGD,kBAAkB;IACjDN,+BAA+B,CAAC,IAAI,CAAC;EACvC,CAAC;EAED,MAAMQ,kBAAkB,GAAGA,CAAA,KAAM;IAC/BR,+BAA+B,CAAC,KAAK,CAAC;EACxC,CAAC;EAED,OAAO;IACLD,4BAA4B;IAC5BK,wBAAwB;IACxBI,kBAAkB;IAClBC,IAAI,EAAER,OAAO,CAACM,OAAO;IACrBf,WAAW;IACXkB,iBAAiB,EAAER,oBAAoB,CAACK;EAC1C,CAAC;AACH,CAAC","ignoreList":[]}
@@ -1,9 +1,14 @@
1
1
  import type { ViewProps } from "react-native";
2
2
  import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
3
+ export interface OnReplacementActionEvent {
4
+ text: string;
5
+ }
3
6
  interface IOSTranslateSheetProps extends ViewProps {
4
7
  text: string;
5
8
  isPresented: boolean;
9
+ hasReplacementAction: boolean;
6
10
  onHide: DirectEventHandler<null>;
11
+ onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
7
12
  }
8
13
  declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<IOSTranslateSheetProps>;
9
14
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"IOSTranslateSheetViewNativeComponent.d.ts","sourceRoot":"","sources":["../../src/IOSTranslateSheetViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAGpF,UAAU,sBAAuB,SAAQ,SAAS;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;CAClC;;AAED,wBAEE"}
1
+ {"version":3,"file":"IOSTranslateSheetViewNativeComponent.d.ts","sourceRoot":"","sources":["../../src/IOSTranslateSheetViewNativeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAGpF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,sBAAuB,SAAQ,SAAS;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC;IACjC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,wBAAwB,CAAC,CAAC;CACpE;;AAED,wBAEE"}
@@ -1,7 +1,7 @@
1
1
  import { type ReactNode } from "react";
2
2
  type TranslateContextType = {
3
3
  isSupported: boolean;
4
- presentIOSTranslateSheet: (text: string, opacity?: number) => void;
4
+ presentIOSTranslateSheet: (text: string, replacementAction?: (text: string) => void) => void;
5
5
  };
6
6
  export declare const IOSTranslateSheetProvider: ({ children, }: {
7
7
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"TranslateContext.d.ts","sourceRoot":"","sources":["../../src/TranslateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;AAKlE,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,wBAAwB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CACpE,CAAC;AAIF,eAAO,MAAM,yBAAyB,GAAI,eAEvC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,4CAyBzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,4BAQhC,CAAC"}
1
+ {"version":3,"file":"TranslateContext.d.ts","sourceRoot":"","sources":["../../src/TranslateContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAA6B,MAAM,OAAO,CAAC;AAOlE,KAAK,oBAAoB,GAAG;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,wBAAwB,EAAE,CACxB,IAAI,EAAE,MAAM,EACZ,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KACvC,IAAI,CAAC;CACX,CAAC;AAIF,eAAO,MAAM,yBAAyB,GAAI,eAEvC;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,4CAkCzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,4BAQhC,CAAC"}
@@ -1,8 +1,9 @@
1
1
  export declare const useInternalTranslateSheet: () => {
2
2
  isIOSTranslateSheetPresented: boolean;
3
- presentIOSTranslateSheet: (_text: string, _opacity?: number) => void;
3
+ presentIOSTranslateSheet: (_text: string, _replacementAction?: (text: string) => void) => void;
4
4
  hideTranslateSheet: () => void;
5
5
  text: string;
6
6
  isSupported: boolean;
7
+ replacementAction: ((text: string) => void) | undefined;
7
8
  };
8
9
  //# sourceMappingURL=useInternalTranslate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInternalTranslate.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInternalTranslate.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB;;sCAKK,MAAM,aAAa,MAAM;;;;CAgBnE,CAAC"}
1
+ {"version":3,"file":"useInternalTranslate.d.ts","sourceRoot":"","sources":["../../../src/hooks/useInternalTranslate.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,yBAAyB;;sCAO3B,MAAM,uBACQ,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;;;;+BAJF,MAAM,KAAK,IAAI;CAuB3D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-ios-translate-sheet",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "SwiftUI Translate Sheet on React Native",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "lib/commonjs/index.js",
@@ -2,10 +2,16 @@ import type { ViewProps } from "react-native";
2
2
  import type { DirectEventHandler } from "react-native/Libraries/Types/CodegenTypes";
3
3
  import codegenNativeComponent from "react-native/Libraries/Utilities/codegenNativeComponent";
4
4
 
5
+ export interface OnReplacementActionEvent {
6
+ text: string;
7
+ }
8
+
5
9
  interface IOSTranslateSheetProps extends ViewProps {
6
10
  text: string;
7
11
  isPresented: boolean;
12
+ hasReplacementAction: boolean;
8
13
  onHide: DirectEventHandler<null>;
14
+ onReplacementAction?: DirectEventHandler<OnReplacementActionEvent>;
9
15
  }
10
16
 
11
17
  export default codegenNativeComponent<IOSTranslateSheetProps>(
@@ -1,11 +1,16 @@
1
1
  import { type ReactNode, createContext, useContext } from "react";
2
- import { StyleSheet } from "react-native";
3
- import IOSTranslateSheet from "./IOSTranslateSheetViewNativeComponent";
2
+ import { type NativeSyntheticEvent, StyleSheet } from "react-native";
3
+ import IOSTranslateSheet, {
4
+ type OnReplacementActionEvent,
5
+ } from "./IOSTranslateSheetViewNativeComponent";
4
6
  import { useInternalTranslateSheet } from "./hooks/useInternalTranslate";
5
7
 
6
8
  type TranslateContextType = {
7
9
  isSupported: boolean;
8
- presentIOSTranslateSheet: (text: string, opacity?: number) => void;
10
+ presentIOSTranslateSheet: (
11
+ text: string,
12
+ replacementAction?: (text: string) => void,
13
+ ) => void;
9
14
  };
10
15
 
11
16
  const TranslateContext = createContext<TranslateContextType | null>(null);
@@ -19,8 +24,15 @@ export const IOSTranslateSheetProvider = ({
19
24
  text,
20
25
  hideTranslateSheet,
21
26
  isSupported,
27
+ replacementAction,
22
28
  } = useInternalTranslateSheet();
23
29
 
30
+ const onReplacementAction = (
31
+ event: NativeSyntheticEvent<OnReplacementActionEvent>,
32
+ ) => {
33
+ replacementAction?.(event.nativeEvent.text);
34
+ };
35
+
24
36
  return (
25
37
  <TranslateContext.Provider
26
38
  value={{
@@ -33,6 +45,8 @@ export const IOSTranslateSheetProvider = ({
33
45
  isPresented={isIOSTranslateSheetPresented}
34
46
  onHide={hideTranslateSheet}
35
47
  style={StyleSheet.absoluteFillObject}
48
+ hasReplacementAction={!!replacementAction}
49
+ onReplacementAction={onReplacementAction}
36
50
  />
37
51
  {children}
38
52
  </TranslateContext.Provider>
@@ -8,9 +8,14 @@ export const useInternalTranslateSheet = () => {
8
8
  const [isIOSTranslateSheetPresented, setIsIOSTranslateSheetPresented] =
9
9
  useState(false);
10
10
  const textRef = useRef("");
11
+ const replacementActionRef = useRef<(text: string) => void>(undefined);
11
12
 
12
- const presentIOSTranslateSheet = (_text: string, _opacity?: number) => {
13
+ const presentIOSTranslateSheet = (
14
+ _text: string,
15
+ _replacementAction?: (text: string) => void,
16
+ ) => {
13
17
  textRef.current = _text;
18
+ replacementActionRef.current = _replacementAction;
14
19
  setIsIOSTranslateSheetPresented(true);
15
20
  };
16
21
 
@@ -24,5 +29,6 @@ export const useInternalTranslateSheet = () => {
24
29
  hideTranslateSheet,
25
30
  text: textRef.current,
26
31
  isSupported,
32
+ replacementAction: replacementActionRef.current,
27
33
  };
28
34
  };