@sentry/react-native 8.5.0 → 8.7.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/RNSentry.podspec +1 -1
- package/android/build.gradle +2 -2
- package/android/expo-handler/build.gradle +20 -0
- package/android/expo-handler/src/main/java/io/sentry/react/expo/SentryExpoPackage.java +22 -0
- package/android/expo-handler/src/main/java/io/sentry/react/expo/SentryReactNativeHostHandler.java +48 -0
- package/android/expo-stubs/README.md +7 -0
- package/android/expo-stubs/build.gradle +23 -0
- package/android/expo-stubs/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/expo-stubs/gradle/wrapper/gradle-wrapper.properties +7 -0
- package/android/expo-stubs/gradlew +251 -0
- package/android/expo-stubs/gradlew.bat +94 -0
- package/android/expo-stubs/settings.gradle +1 -0
- package/android/expo-stubs/src/main/java/expo/modules/core/interfaces/Package.java +11 -0
- package/android/expo-stubs/src/main/java/expo/modules/core/interfaces/ReactNativeHostHandler.java +7 -0
- package/android/libs/expo-stubs.jar +0 -0
- package/android/libs/replay-stubs.jar +0 -0
- package/android/replay-stubs/build.gradle +1 -1
- package/android/src/main/java/io/sentry/react/RNSentryFrameDelayCollector.java +128 -0
- package/android/src/main/java/io/sentry/react/RNSentryModuleImpl.java +63 -11
- package/android/src/main/java/io/sentry/react/RNSentryVersion.java +1 -1
- package/android/src/newarch/java/io/sentry/react/RNSentryModule.java +6 -0
- package/android/src/oldarch/java/io/sentry/react/RNSentryModule.java +6 -0
- package/dist/js/NativeLogListener.d.ts.map +1 -1
- package/dist/js/NativeLogListener.js.map +1 -1
- package/dist/js/NativeRNSentry.d.ts +1 -0
- package/dist/js/NativeRNSentry.d.ts.map +1 -1
- package/dist/js/NativeRNSentry.js.map +1 -1
- package/dist/js/RNSentryReplayMaskNativeComponent.d.ts.map +1 -1
- package/dist/js/RNSentryReplayMaskNativeComponent.js +1 -2
- package/dist/js/RNSentryReplayMaskNativeComponent.js.map +1 -1
- package/dist/js/RNSentryReplayUnmaskNativeComponent.d.ts.map +1 -1
- package/dist/js/RNSentryReplayUnmaskNativeComponent.js +1 -2
- package/dist/js/RNSentryReplayUnmaskNativeComponent.js.map +1 -1
- package/dist/js/breadcrumb.d.ts.map +1 -1
- package/dist/js/breadcrumb.js.map +1 -1
- package/dist/js/client.d.ts.map +1 -1
- package/dist/js/client.js +1 -1
- package/dist/js/client.js.map +1 -1
- package/dist/js/feedback/FeedbackButton.d.ts +2 -1
- package/dist/js/feedback/FeedbackButton.d.ts.map +1 -1
- package/dist/js/feedback/FeedbackButton.js +5 -4
- package/dist/js/feedback/FeedbackButton.js.map +1 -1
- package/dist/js/feedback/{FeedbackWidget.d.ts → FeedbackForm.d.ts} +5 -5
- package/dist/js/feedback/FeedbackForm.d.ts.map +1 -0
- package/dist/js/feedback/{FeedbackWidget.js → FeedbackForm.js} +32 -30
- package/dist/js/feedback/FeedbackForm.js.map +1 -0
- package/dist/js/feedback/FeedbackForm.styles.d.ts +11 -0
- package/dist/js/feedback/FeedbackForm.styles.d.ts.map +1 -0
- package/dist/js/feedback/{FeedbackWidget.styles.js → FeedbackForm.styles.js} +1 -1
- package/dist/js/feedback/FeedbackForm.styles.js.map +1 -0
- package/dist/js/feedback/{FeedbackWidget.theme.d.ts → FeedbackForm.theme.d.ts} +7 -5
- package/dist/js/feedback/FeedbackForm.theme.d.ts.map +1 -0
- package/dist/js/feedback/{FeedbackWidget.theme.js → FeedbackForm.theme.js} +1 -1
- package/dist/js/feedback/FeedbackForm.theme.js.map +1 -0
- package/{ts3.8/dist/js/feedback/FeedbackWidget.types.d.ts → dist/js/feedback/FeedbackForm.types.d.ts} +305 -299
- package/dist/js/feedback/FeedbackForm.types.d.ts.map +1 -0
- package/dist/js/feedback/FeedbackForm.types.js +2 -0
- package/dist/js/feedback/FeedbackForm.types.js.map +1 -0
- package/dist/js/feedback/{FeedbackWidgetManager.d.ts → FeedbackFormManager.d.ts} +12 -4
- package/dist/js/feedback/FeedbackFormManager.d.ts.map +1 -0
- package/dist/js/feedback/{FeedbackWidgetManager.js → FeedbackFormManager.js} +22 -13
- package/dist/js/feedback/FeedbackFormManager.js.map +1 -0
- package/dist/js/feedback/{FeedbackWidgetProvider.d.ts → FeedbackFormProvider.d.ts} +10 -10
- package/dist/js/feedback/FeedbackFormProvider.d.ts.map +1 -0
- package/dist/js/feedback/{FeedbackWidgetProvider.js → FeedbackFormProvider.js} +18 -15
- package/dist/js/feedback/FeedbackFormProvider.js.map +1 -0
- package/dist/js/feedback/ScreenshotButton.d.ts +2 -2
- package/dist/js/feedback/ScreenshotButton.d.ts.map +1 -1
- package/dist/js/feedback/ScreenshotButton.js +6 -5
- package/dist/js/feedback/ScreenshotButton.js.map +1 -1
- package/dist/js/feedback/ShakeToReportBug.d.ts.map +1 -1
- package/dist/js/feedback/ShakeToReportBug.js.map +1 -1
- package/dist/js/feedback/defaults.d.ts +2 -2
- package/dist/js/feedback/defaults.d.ts.map +1 -1
- package/dist/js/feedback/defaults.js.map +1 -1
- package/dist/js/feedback/integration.d.ts +13 -13
- package/dist/js/feedback/integration.d.ts.map +1 -1
- package/dist/js/feedback/integration.js.map +1 -1
- package/dist/js/feedback/lazy.d.ts +5 -0
- package/dist/js/feedback/lazy.d.ts.map +1 -1
- package/dist/js/feedback/lazy.js +12 -0
- package/dist/js/feedback/lazy.js.map +1 -1
- package/dist/js/feedback/utils.d.ts.map +1 -1
- package/dist/js/feedback/utils.js +1 -0
- package/dist/js/feedback/utils.js.map +1 -1
- package/dist/js/index.d.ts +12 -3
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js +12 -3
- package/dist/js/index.js.map +1 -1
- package/dist/js/integrations/appRegistry.d.ts.map +1 -1
- package/dist/js/integrations/appRegistry.js.map +1 -1
- package/dist/js/integrations/breadcrumbs.d.ts.map +1 -1
- package/dist/js/integrations/breadcrumbs.js +1 -1
- package/dist/js/integrations/breadcrumbs.js.map +1 -1
- package/dist/js/integrations/debugsymbolicator.d.ts.map +1 -1
- package/dist/js/integrations/debugsymbolicator.js +4 -5
- package/dist/js/integrations/debugsymbolicator.js.map +1 -1
- package/dist/js/integrations/debugsymbolicatorutils.d.ts.map +1 -1
- package/dist/js/integrations/debugsymbolicatorutils.js.map +1 -1
- package/dist/js/integrations/default.d.ts.map +1 -1
- package/dist/js/integrations/default.js +1 -2
- package/dist/js/integrations/default.js.map +1 -1
- package/dist/js/integrations/devicecontext.d.ts.map +1 -1
- package/dist/js/integrations/devicecontext.js +1 -1
- package/dist/js/integrations/devicecontext.js.map +1 -1
- package/dist/js/integrations/expoconstants.d.ts.map +1 -1
- package/dist/js/integrations/expoconstants.js.map +1 -1
- package/dist/js/integrations/expocontext.d.ts.map +1 -1
- package/dist/js/integrations/expocontext.js.map +1 -1
- package/dist/js/integrations/expoupdateslistener.d.ts.map +1 -1
- package/dist/js/integrations/expoupdateslistener.js +0 -1
- package/dist/js/integrations/expoupdateslistener.js.map +1 -1
- package/dist/js/integrations/graphql.d.ts.map +1 -1
- package/dist/js/integrations/graphql.js.map +1 -1
- package/dist/js/integrations/logEnricherIntegration.d.ts.map +1 -1
- package/dist/js/integrations/logEnricherIntegration.js +1 -1
- package/dist/js/integrations/logEnricherIntegration.js.map +1 -1
- package/dist/js/integrations/modulesloader.d.ts.map +1 -1
- package/dist/js/integrations/modulesloader.js.map +1 -1
- package/dist/js/integrations/nativelinkederrors.d.ts.map +1 -1
- package/dist/js/integrations/nativelinkederrors.js +1 -0
- package/dist/js/integrations/nativelinkederrors.js.map +1 -1
- package/dist/js/integrations/primitiveTagIntegration.d.ts.map +1 -1
- package/dist/js/integrations/primitiveTagIntegration.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js +2 -1
- package/dist/js/integrations/reactnativeerrorhandlers.js.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlersutils.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeerrorhandlersutils.js +0 -5
- package/dist/js/integrations/reactnativeerrorhandlersutils.js.map +1 -1
- package/dist/js/integrations/reactnativeinfo.d.ts.map +1 -1
- package/dist/js/integrations/reactnativeinfo.js.map +1 -1
- package/dist/js/integrations/release.d.ts.map +1 -1
- package/dist/js/integrations/release.js +1 -1
- package/dist/js/integrations/release.js.map +1 -1
- package/dist/js/integrations/rewriteframes.d.ts.map +1 -1
- package/dist/js/integrations/rewriteframes.js.map +1 -1
- package/dist/js/integrations/screenshot.d.ts.map +1 -1
- package/dist/js/integrations/screenshot.js +1 -1
- package/dist/js/integrations/screenshot.js.map +1 -1
- package/dist/js/integrations/sdkinfo.d.ts.map +1 -1
- package/dist/js/integrations/sdkinfo.js.map +1 -1
- package/dist/js/integrations/spotlight.d.ts.map +1 -1
- package/dist/js/integrations/spotlight.js.map +1 -1
- package/dist/js/integrations/supabase.d.ts.map +1 -1
- package/dist/js/integrations/supabase.js.map +1 -1
- package/dist/js/integrations/viewhierarchy.d.ts.map +1 -1
- package/dist/js/integrations/viewhierarchy.js +1 -1
- package/dist/js/integrations/viewhierarchy.js.map +1 -1
- package/dist/js/misc.js.map +1 -1
- package/dist/js/options.d.ts +1 -1
- package/dist/js/options.d.ts.map +1 -1
- package/dist/js/options.js.map +1 -1
- package/dist/js/playground/examples.d.ts.map +1 -1
- package/dist/js/playground/examples.js.map +1 -1
- package/dist/js/playground/modal.d.ts +2 -2
- package/dist/js/playground/modal.d.ts.map +1 -1
- package/dist/js/playground/modal.js +5 -103
- package/dist/js/playground/modal.js.map +1 -1
- package/dist/js/playground/modal.styles.d.ts +100 -0
- package/dist/js/playground/modal.styles.d.ts.map +1 -0
- package/dist/js/playground/modal.styles.js +98 -0
- package/dist/js/playground/modal.styles.js.map +1 -0
- package/dist/js/profiling/cache.js +2 -2
- package/dist/js/profiling/cache.js.map +1 -1
- package/dist/js/profiling/convertHermesProfile.d.ts.map +1 -1
- package/dist/js/profiling/convertHermesProfile.js.map +1 -1
- package/dist/js/profiling/debugid.d.ts.map +1 -1
- package/dist/js/profiling/debugid.js.map +1 -1
- package/dist/js/profiling/hermes.d.ts.map +1 -1
- package/dist/js/profiling/hermes.js.map +1 -1
- package/dist/js/profiling/integration.d.ts.map +1 -1
- package/dist/js/profiling/integration.js.map +1 -1
- package/dist/js/profiling/types.d.ts.map +1 -1
- package/dist/js/profiling/types.js.map +1 -1
- package/dist/js/profiling/utils.d.ts.map +1 -1
- package/dist/js/profiling/utils.js +1 -1
- package/dist/js/profiling/utils.js.map +1 -1
- package/dist/js/replay/CustomMask.d.ts +1 -1
- package/dist/js/replay/CustomMask.d.ts.map +1 -1
- package/dist/js/replay/CustomMask.js +1 -1
- package/dist/js/replay/CustomMask.js.map +1 -1
- package/dist/js/replay/CustomMask.web.d.ts +1 -1
- package/dist/js/replay/CustomMask.web.d.ts.map +1 -1
- package/dist/js/replay/CustomMask.web.js +2 -2
- package/dist/js/replay/CustomMask.web.js.map +1 -1
- package/dist/js/replay/browserReplay.d.ts.map +1 -1
- package/dist/js/replay/browserReplay.js +0 -2
- package/dist/js/replay/browserReplay.js.map +1 -1
- package/dist/js/replay/mobilereplay.d.ts.map +1 -1
- package/dist/js/replay/mobilereplay.js +21 -2
- package/dist/js/replay/mobilereplay.js.map +1 -1
- package/dist/js/replay/networkUtils.d.ts +0 -1
- package/dist/js/replay/networkUtils.d.ts.map +1 -1
- package/dist/js/replay/networkUtils.js.map +1 -1
- package/dist/js/replay/xhrUtils.d.ts.map +1 -1
- package/dist/js/replay/xhrUtils.js.map +1 -1
- package/dist/js/scopeSync.d.ts.map +1 -1
- package/dist/js/scopeSync.js +1 -1
- package/dist/js/scopeSync.js.map +1 -1
- package/dist/js/sdk.d.ts +21 -0
- package/dist/js/sdk.d.ts.map +1 -1
- package/dist/js/sdk.js +42 -18
- package/dist/js/sdk.js.map +1 -1
- package/dist/js/tools/ModulesCollector.js +1 -1
- package/dist/js/tools/ModulesCollector.js.map +1 -1
- package/dist/js/tools/collectModules.js +0 -1
- package/dist/js/tools/collectModules.js.map +1 -1
- package/dist/js/tools/easBuildHooks.d.ts.map +1 -1
- package/dist/js/tools/easBuildHooks.js +13 -14
- package/dist/js/tools/easBuildHooks.js.map +1 -1
- package/dist/js/tools/enableLogger.js +1 -2
- package/dist/js/tools/enableLogger.js.map +1 -1
- package/dist/js/tools/metroMiddleware.d.ts.map +1 -1
- package/dist/js/tools/metroMiddleware.js.map +1 -1
- package/dist/js/tools/metroconfig.d.ts.map +1 -1
- package/dist/js/tools/metroconfig.js +10 -12
- package/dist/js/tools/metroconfig.js.map +1 -1
- package/dist/js/tools/sentryBabelTransformerUtils.d.ts.map +1 -1
- package/dist/js/tools/sentryBabelTransformerUtils.js +9 -10
- package/dist/js/tools/sentryBabelTransformerUtils.js.map +1 -1
- package/dist/js/tools/sentryMetroSerializer.d.ts.map +1 -1
- package/dist/js/tools/sentryMetroSerializer.js +6 -7
- package/dist/js/tools/sentryMetroSerializer.js.map +1 -1
- package/dist/js/tools/sentryOptionsSerializer.d.ts.map +1 -1
- package/dist/js/tools/sentryOptionsSerializer.js +3 -5
- package/dist/js/tools/sentryOptionsSerializer.js.map +1 -1
- package/dist/js/tools/sentryReleaseInjector.d.ts +1 -1
- package/dist/js/tools/sentryReleaseInjector.d.ts.map +1 -1
- package/dist/js/tools/sentryReleaseInjector.js.map +1 -1
- package/dist/js/tools/utils.d.ts.map +1 -1
- package/dist/js/tools/utils.js +7 -10
- package/dist/js/tools/utils.js.map +1 -1
- package/dist/js/tools/vendor/metro/countLines.d.ts.map +1 -1
- package/dist/js/tools/vendor/metro/utils.d.ts.map +1 -1
- package/dist/js/tools/vendor/metro/utils.js +5 -5
- package/dist/js/tools/vendor/metro/utils.js.map +1 -1
- package/dist/js/touchevents.d.ts.map +1 -1
- package/dist/js/touchevents.js +19 -19
- package/dist/js/touchevents.js.map +1 -1
- package/dist/js/tracing/expoAsset.js.map +1 -1
- package/dist/js/tracing/expoImage.d.ts.map +1 -1
- package/dist/js/tracing/expoImage.js +1 -1
- package/dist/js/tracing/expoImage.js.map +1 -1
- package/dist/js/tracing/expoRouter.d.ts.map +1 -1
- package/dist/js/tracing/expoRouter.js.map +1 -1
- package/dist/js/tracing/gesturetracing.d.ts.map +1 -1
- package/dist/js/tracing/gesturetracing.js.map +1 -1
- package/dist/js/tracing/integrations/appStart.d.ts +19 -1
- package/dist/js/tracing/integrations/appStart.d.ts.map +1 -1
- package/dist/js/tracing/integrations/appStart.js +144 -9
- package/dist/js/tracing/integrations/appStart.js.map +1 -1
- package/dist/js/tracing/integrations/nativeFrames.d.ts.map +1 -1
- package/dist/js/tracing/integrations/nativeFrames.js +47 -1
- package/dist/js/tracing/integrations/nativeFrames.js.map +1 -1
- package/dist/js/tracing/integrations/stalltracking.d.ts +1 -1
- package/dist/js/tracing/integrations/stalltracking.d.ts.map +1 -1
- package/dist/js/tracing/integrations/stalltracking.js +4 -2
- package/dist/js/tracing/integrations/stalltracking.js.map +1 -1
- package/dist/js/tracing/integrations/timeToDisplayIntegration.d.ts.map +1 -1
- package/dist/js/tracing/integrations/timeToDisplayIntegration.js +15 -15
- package/dist/js/tracing/integrations/timeToDisplayIntegration.js.map +1 -1
- package/dist/js/tracing/integrations/userInteraction.d.ts.map +1 -1
- package/dist/js/tracing/integrations/userInteraction.js.map +1 -1
- package/dist/js/tracing/onSpanEndUtils.d.ts.map +1 -1
- package/dist/js/tracing/onSpanEndUtils.js +43 -14
- package/dist/js/tracing/onSpanEndUtils.js.map +1 -1
- package/dist/js/tracing/reactnativenavigation.d.ts.map +1 -1
- package/dist/js/tracing/reactnativenavigation.js.map +1 -1
- package/dist/js/tracing/reactnativeprofiler.d.ts.map +1 -1
- package/dist/js/tracing/reactnativeprofiler.js +2 -2
- package/dist/js/tracing/reactnativeprofiler.js.map +1 -1
- package/dist/js/tracing/reactnativetracing.d.ts.map +1 -1
- package/dist/js/tracing/reactnativetracing.js +0 -1
- package/dist/js/tracing/reactnativetracing.js.map +1 -1
- package/dist/js/tracing/reactnavigation.d.ts +3 -0
- package/dist/js/tracing/reactnavigation.d.ts.map +1 -1
- package/dist/js/tracing/reactnavigation.js +6 -4
- package/dist/js/tracing/reactnavigation.js.map +1 -1
- package/dist/js/tracing/span.d.ts +2 -17
- package/dist/js/tracing/span.d.ts.map +1 -1
- package/dist/js/tracing/span.js +1 -1
- package/dist/js/tracing/span.js.map +1 -1
- package/dist/js/tracing/timeToDisplayFallback.d.ts.map +1 -1
- package/dist/js/tracing/timetodisplay.d.ts.map +1 -1
- package/dist/js/tracing/timetodisplay.js +42 -19
- package/dist/js/tracing/timetodisplay.js.map +1 -1
- package/dist/js/tracing/timetodisplaynative.d.ts +1 -1
- package/dist/js/tracing/timetodisplaynative.d.ts.map +1 -1
- package/dist/js/tracing/timetodisplaynative.js +5 -4
- package/dist/js/tracing/timetodisplaynative.js.map +1 -1
- package/dist/js/tracing/types.js.map +1 -1
- package/dist/js/tracing/utils.d.ts.map +1 -1
- package/dist/js/tracing/utils.js.map +1 -1
- package/dist/js/transports/encodePolyfill.d.ts +1 -1
- package/dist/js/transports/encodePolyfill.d.ts.map +1 -1
- package/dist/js/transports/encodePolyfill.js.map +1 -1
- package/dist/js/transports/native.d.ts.map +1 -1
- package/dist/js/transports/native.js.map +1 -1
- package/dist/js/utils/AsyncExpiringMap.js.map +1 -1
- package/dist/js/utils/encode.js.map +1 -1
- package/dist/js/utils/envelope.d.ts.map +1 -1
- package/dist/js/utils/envelope.js.map +1 -1
- package/dist/js/utils/environment.d.ts.map +1 -1
- package/dist/js/utils/environment.js.map +1 -1
- package/dist/js/utils/expomodules.d.ts.map +1 -1
- package/dist/js/utils/expomodules.js.map +1 -1
- package/dist/js/utils/fill.js +1 -1
- package/dist/js/utils/fill.js.map +1 -1
- package/dist/js/utils/ignorerequirecyclelogs.js.map +1 -1
- package/dist/js/utils/normalize.js +2 -2
- package/dist/js/utils/normalize.js.map +1 -1
- package/dist/js/utils/outcome.js.map +1 -1
- package/dist/js/utils/primitiveConverter.js.map +1 -1
- package/dist/js/utils/release.js.map +1 -1
- package/dist/js/utils/rnlibraries.d.ts.map +1 -1
- package/dist/js/utils/rnlibraries.js +1 -7
- package/dist/js/utils/rnlibraries.js.map +1 -1
- package/dist/js/utils/safe.d.ts.map +1 -1
- package/dist/js/utils/safe.js.map +1 -1
- package/dist/js/utils/span.d.ts.map +1 -1
- package/dist/js/utils/span.js.map +1 -1
- package/dist/js/utils/worldwide.d.ts +0 -1
- package/dist/js/utils/worldwide.d.ts.map +1 -1
- package/dist/js/utils/worldwide.js.map +1 -1
- package/dist/js/utils/xhr.d.ts +0 -1
- package/dist/js/utils/xhr.d.ts.map +1 -1
- package/dist/js/utils/xhr.js.map +1 -1
- package/dist/js/vendor/base64-js/fromByteArray.js +1 -1
- package/dist/js/vendor/base64-js/fromByteArray.js.map +1 -1
- package/dist/js/vendor/buffer/utf8ToBytes.js +1 -1
- package/dist/js/vendor/buffer/utf8ToBytes.js.map +1 -1
- package/dist/js/vendor/react-native/index.d.ts.map +1 -1
- package/dist/js/vendor/react-native/index.js.map +1 -1
- package/dist/js/version.d.ts +1 -1
- package/dist/js/version.js +1 -1
- package/dist/js/version.js.map +1 -1
- package/dist/js/wrapper.d.ts +1 -0
- package/dist/js/wrapper.d.ts.map +1 -1
- package/dist/js/wrapper.js +20 -9
- package/dist/js/wrapper.js.map +1 -1
- package/expo-module.config.json +7 -0
- package/ios/RNSentry.mm +18 -1
- package/ios/RNSentryReplay.mm +1 -1
- package/ios/RNSentrySDK.m +1 -1
- package/ios/RNSentryStart.m +4 -1
- package/ios/RNSentryTimeToDisplay.m +48 -32
- package/ios/RNSentryVersion.m +1 -1
- package/ios/SentryScreenFramesWrapper.h +2 -0
- package/ios/SentryScreenFramesWrapper.m +35 -0
- package/package.json +18 -22
- package/plugin/build/logger.js +1 -1
- package/plugin/build/utils.js +2 -0
- package/plugin/build/withSentry.js +1 -2
- package/plugin/build/withSentryAndroid.js +2 -0
- package/plugin/build/withSentryAndroidGradlePlugin.d.ts +1 -1
- package/plugin/build/withSentryAndroidGradlePlugin.js +1 -1
- package/plugin/build/withSentryIOS.js +1 -3
- package/scripts/eas-build-hook.js +0 -2
- package/scripts/expo-upload-sourcemaps.js +0 -1
- package/src/js/NativeRNSentry.ts +3 -0
- package/src/js/RNSentryReplayMaskNativeComponent.ts +2 -3
- package/src/js/RNSentryReplayUnmaskNativeComponent.ts +2 -3
- package/ts3.8/dist/js/NativeRNSentry.d.ts +1 -0
- package/ts3.8/dist/js/feedback/FeedbackButton.d.ts +2 -1
- package/ts3.8/dist/js/feedback/{FeedbackWidget.d.ts → FeedbackForm.d.ts} +5 -5
- package/ts3.8/dist/js/feedback/FeedbackForm.styles.d.ts +11 -0
- package/ts3.8/dist/js/feedback/{FeedbackWidget.theme.d.ts → FeedbackForm.theme.d.ts} +7 -5
- package/{dist/js/feedback/FeedbackWidget.types.d.ts → ts3.8/dist/js/feedback/FeedbackForm.types.d.ts} +305 -299
- package/ts3.8/dist/js/feedback/{FeedbackWidgetManager.d.ts → FeedbackFormManager.d.ts} +12 -4
- package/ts3.8/dist/js/feedback/{FeedbackWidgetProvider.d.ts → FeedbackFormProvider.d.ts} +10 -10
- package/ts3.8/dist/js/feedback/ScreenshotButton.d.ts +2 -2
- package/ts3.8/dist/js/feedback/defaults.d.ts +2 -2
- package/ts3.8/dist/js/feedback/integration.d.ts +13 -13
- package/ts3.8/dist/js/feedback/lazy.d.ts +5 -0
- package/ts3.8/dist/js/index.d.ts +12 -3
- package/ts3.8/dist/js/options.d.ts +1 -1
- package/ts3.8/dist/js/playground/modal.d.ts +2 -2
- package/ts3.8/dist/js/playground/modal.styles.d.ts +100 -0
- package/ts3.8/dist/js/replay/CustomMask.d.ts +1 -1
- package/ts3.8/dist/js/replay/CustomMask.web.d.ts +1 -1
- package/ts3.8/dist/js/replay/networkUtils.d.ts +0 -1
- package/ts3.8/dist/js/sdk.d.ts +21 -0
- package/ts3.8/dist/js/tracing/integrations/appStart.d.ts +19 -1
- package/ts3.8/dist/js/tracing/integrations/stalltracking.d.ts +1 -1
- package/ts3.8/dist/js/tracing/reactnavigation.d.ts +3 -0
- package/ts3.8/dist/js/tracing/span.d.ts +2 -17
- package/ts3.8/dist/js/tracing/timetodisplaynative.d.ts +1 -1
- package/ts3.8/dist/js/transports/encodePolyfill.d.ts +1 -1
- package/ts3.8/dist/js/utils/worldwide.d.ts +0 -1
- package/ts3.8/dist/js/utils/xhr.d.ts +0 -1
- package/ts3.8/dist/js/version.d.ts +1 -1
- package/ts3.8/dist/js/wrapper.d.ts +1 -0
- package/dist/js/feedback/FeedbackWidget.d.ts.map +0 -1
- package/dist/js/feedback/FeedbackWidget.js.map +0 -1
- package/dist/js/feedback/FeedbackWidget.styles.d.ts +0 -11
- package/dist/js/feedback/FeedbackWidget.styles.d.ts.map +0 -1
- package/dist/js/feedback/FeedbackWidget.styles.js.map +0 -1
- package/dist/js/feedback/FeedbackWidget.theme.d.ts.map +0 -1
- package/dist/js/feedback/FeedbackWidget.theme.js.map +0 -1
- package/dist/js/feedback/FeedbackWidget.types.d.ts.map +0 -1
- package/dist/js/feedback/FeedbackWidget.types.js +0 -2
- package/dist/js/feedback/FeedbackWidget.types.js.map +0 -1
- package/dist/js/feedback/FeedbackWidgetManager.d.ts.map +0 -1
- package/dist/js/feedback/FeedbackWidgetManager.js.map +0 -1
- package/dist/js/feedback/FeedbackWidgetProvider.d.ts.map +0 -1
- package/dist/js/feedback/FeedbackWidgetProvider.js.map +0 -1
- package/ts3.8/dist/js/feedback/FeedbackWidget.styles.d.ts +0 -11
|
@@ -9,14 +9,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
};
|
|
10
10
|
import { captureFeedback, debug, getCurrentScope, getGlobalScope, getIsolationScope, lastEventId } from '@sentry/core';
|
|
11
11
|
import * as React from 'react';
|
|
12
|
-
import { Appearance, Image, Keyboard, Text, TextInput, TouchableOpacity, TouchableWithoutFeedback, View } from 'react-native';
|
|
12
|
+
import { Appearance, Image, Keyboard, Text, TextInput, TouchableOpacity, TouchableWithoutFeedback, View, } from 'react-native';
|
|
13
13
|
import { isExpoGo, isWeb, notWeb } from '../utils/environment';
|
|
14
14
|
import { getDataFromUri, NATIVE } from '../wrapper';
|
|
15
15
|
import { sentryLogo } from './branding';
|
|
16
16
|
import { defaultConfiguration } from './defaults';
|
|
17
|
-
import defaultStyles from './
|
|
18
|
-
import { getTheme } from './
|
|
19
|
-
import { hideFeedbackButton, showScreenshotButton } from './
|
|
17
|
+
import defaultStyles from './FeedbackForm.styles';
|
|
18
|
+
import { getTheme } from './FeedbackForm.theme';
|
|
19
|
+
import { hideFeedbackButton, showScreenshotButton } from './FeedbackFormManager';
|
|
20
20
|
import { lazyLoadFeedbackIntegration } from './lazy';
|
|
21
21
|
import { getCapturedScreenshot } from './ScreenshotButton';
|
|
22
22
|
import { base64ToUint8Array, feedbackAlertDialog, isValidEmail } from './utils';
|
|
@@ -24,7 +24,7 @@ import { base64ToUint8Array, feedbackAlertDialog, isValidEmail } from './utils';
|
|
|
24
24
|
* @beta
|
|
25
25
|
* Implements a feedback form screen that sends feedback to Sentry using Sentry.captureFeedback.
|
|
26
26
|
*/
|
|
27
|
-
export class
|
|
27
|
+
export class FeedbackForm extends React.Component {
|
|
28
28
|
constructor(props) {
|
|
29
29
|
var _a, _b, _c, _d, _e, _f;
|
|
30
30
|
super(props);
|
|
@@ -86,7 +86,7 @@ export class FeedbackWidget extends React.Component {
|
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
this.onScreenshotButtonPress = () => __awaiter(this, void 0, void 0, function* () {
|
|
89
|
-
var
|
|
89
|
+
var _a, _b, _c, _d, _e;
|
|
90
90
|
if (!this._hasScreenshot()) {
|
|
91
91
|
const { imagePicker } = this.props;
|
|
92
92
|
if (imagePicker) {
|
|
@@ -107,9 +107,9 @@ export class FeedbackWidget extends React.Component {
|
|
|
107
107
|
const result = yield launchImageLibrary();
|
|
108
108
|
if ((result === null || result === void 0 ? void 0 : result.assets) && result.assets.length > 0) {
|
|
109
109
|
if (isWeb()) {
|
|
110
|
-
const filename = (
|
|
111
|
-
const imageUri = (
|
|
112
|
-
const base64 = (
|
|
110
|
+
const filename = (_a = result.assets[0]) === null || _a === void 0 ? void 0 : _a.fileName;
|
|
111
|
+
const imageUri = (_b = result.assets[0]) === null || _b === void 0 ? void 0 : _b.uri;
|
|
112
|
+
const base64 = (_c = result.assets[0]) === null || _c === void 0 ? void 0 : _c.base64;
|
|
113
113
|
const data = base64 ? base64ToUint8Array(base64) : undefined;
|
|
114
114
|
if (data) {
|
|
115
115
|
this.setState({ filename, attachment: data, attachmentUri: imageUri });
|
|
@@ -119,11 +119,11 @@ export class FeedbackWidget extends React.Component {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
else {
|
|
122
|
-
const filename = (
|
|
123
|
-
const imageUri = (
|
|
122
|
+
const filename = (_d = result.assets[0]) === null || _d === void 0 ? void 0 : _d.fileName;
|
|
123
|
+
const imageUri = (_e = result.assets[0]) === null || _e === void 0 ? void 0 : _e.uri;
|
|
124
124
|
imageUri &&
|
|
125
125
|
getDataFromUri(imageUri)
|
|
126
|
-
.then(
|
|
126
|
+
.then(data => {
|
|
127
127
|
if (data != null) {
|
|
128
128
|
this.setState({ filename, attachment: data, attachmentUri: imageUri });
|
|
129
129
|
}
|
|
@@ -132,7 +132,7 @@ export class FeedbackWidget extends React.Component {
|
|
|
132
132
|
debug.error('Failed to read image data from uri:', imageUri);
|
|
133
133
|
}
|
|
134
134
|
})
|
|
135
|
-
.catch(
|
|
135
|
+
.catch(error => {
|
|
136
136
|
this._showImageRetrievalDevelopmentNote();
|
|
137
137
|
debug.error('Failed to read image data from uri:', imageUri, 'error: ', error);
|
|
138
138
|
});
|
|
@@ -143,7 +143,8 @@ export class FeedbackWidget extends React.Component {
|
|
|
143
143
|
// Defaulting to the onAddScreenshot callback
|
|
144
144
|
const { onAddScreenshot } = Object.assign(Object.assign({}, defaultConfiguration), this.props);
|
|
145
145
|
onAddScreenshot((uri) => {
|
|
146
|
-
getDataFromUri(uri)
|
|
146
|
+
getDataFromUri(uri)
|
|
147
|
+
.then(data => {
|
|
147
148
|
if (data != null) {
|
|
148
149
|
this.setState({ filename: 'feedback_screenshot', attachment: data, attachmentUri: uri });
|
|
149
150
|
}
|
|
@@ -151,7 +152,8 @@ export class FeedbackWidget extends React.Component {
|
|
|
151
152
|
this._showImageRetrievalDevelopmentNote();
|
|
152
153
|
debug.error('Failed to read image data from uri:', uri);
|
|
153
154
|
}
|
|
154
|
-
})
|
|
155
|
+
})
|
|
156
|
+
.catch(error => {
|
|
155
157
|
this._showImageRetrievalDevelopmentNote();
|
|
156
158
|
debug.error('Failed to read image data from uri:', uri, 'error: ', error);
|
|
157
159
|
});
|
|
@@ -184,10 +186,10 @@ export class FeedbackWidget extends React.Component {
|
|
|
184
186
|
}
|
|
185
187
|
};
|
|
186
188
|
this._saveFormState = () => {
|
|
187
|
-
|
|
189
|
+
FeedbackForm._savedState = Object.assign({}, this.state);
|
|
188
190
|
};
|
|
189
191
|
this._clearFormState = () => {
|
|
190
|
-
|
|
192
|
+
FeedbackForm._savedState = {
|
|
191
193
|
name: '',
|
|
192
194
|
email: '',
|
|
193
195
|
description: '',
|
|
@@ -197,7 +199,7 @@ export class FeedbackWidget extends React.Component {
|
|
|
197
199
|
};
|
|
198
200
|
};
|
|
199
201
|
this._hasScreenshot = () => {
|
|
200
|
-
return this.state.filename !== undefined && this.state.attachment !== undefined && this.state.attachmentUri !== undefined;
|
|
202
|
+
return (this.state.filename !== undefined && this.state.attachment !== undefined && this.state.attachmentUri !== undefined);
|
|
201
203
|
};
|
|
202
204
|
this._getUser = () => {
|
|
203
205
|
const currentUser = getCurrentScope().getUser();
|
|
@@ -219,16 +221,16 @@ export class FeedbackWidget extends React.Component {
|
|
|
219
221
|
useSentryUser: {
|
|
220
222
|
email: ((_b = (_a = this.props) === null || _a === void 0 ? void 0 : _a.useSentryUser) === null || _b === void 0 ? void 0 : _b.email) || ((_c = this._getUser()) === null || _c === void 0 ? void 0 : _c.email) || '',
|
|
221
223
|
name: ((_e = (_d = this.props) === null || _d === void 0 ? void 0 : _d.useSentryUser) === null || _e === void 0 ? void 0 : _e.name) || ((_f = this._getUser()) === null || _f === void 0 ? void 0 : _f.name) || '',
|
|
222
|
-
}
|
|
224
|
+
},
|
|
223
225
|
};
|
|
224
226
|
this.state = {
|
|
225
227
|
isVisible: true,
|
|
226
|
-
name:
|
|
227
|
-
email:
|
|
228
|
-
description:
|
|
229
|
-
filename:
|
|
230
|
-
attachment:
|
|
231
|
-
attachmentUri:
|
|
228
|
+
name: FeedbackForm._savedState.name || currentUser.useSentryUser.name,
|
|
229
|
+
email: FeedbackForm._savedState.email || currentUser.useSentryUser.email,
|
|
230
|
+
description: FeedbackForm._savedState.description || '',
|
|
231
|
+
filename: FeedbackForm._savedState.filename || undefined,
|
|
232
|
+
attachment: FeedbackForm._savedState.attachment || undefined,
|
|
233
|
+
attachmentUri: FeedbackForm._savedState.attachmentUri || undefined,
|
|
232
234
|
};
|
|
233
235
|
lazyLoadFeedbackIntegration();
|
|
234
236
|
}
|
|
@@ -236,7 +238,7 @@ export class FeedbackWidget extends React.Component {
|
|
|
236
238
|
* For testing purposes only.
|
|
237
239
|
*/
|
|
238
240
|
static reset() {
|
|
239
|
-
|
|
241
|
+
FeedbackForm._savedState = {
|
|
240
242
|
name: '',
|
|
241
243
|
email: '',
|
|
242
244
|
description: '',
|
|
@@ -334,15 +336,15 @@ export class FeedbackWidget extends React.Component {
|
|
|
334
336
|
onCancel();
|
|
335
337
|
showScreenshotButton();
|
|
336
338
|
} },
|
|
337
|
-
React.createElement(Text, { style: styles.takeScreenshotText, testID:
|
|
339
|
+
React.createElement(Text, { style: styles.takeScreenshotText, testID: "sentry-feedback-take-screenshot-button" }, text.captureScreenshotButtonLabel))),
|
|
338
340
|
React.createElement(TouchableOpacity, { style: styles.submitButton, onPress: this.handleFeedbackSubmit },
|
|
339
341
|
React.createElement(Text, { style: styles.submitText, testID: "sentry-feedback-submit-button" }, text.submitButtonLabel)),
|
|
340
342
|
React.createElement(TouchableOpacity, { style: styles.cancelButton, onPress: onCancel },
|
|
341
343
|
React.createElement(Text, { style: styles.cancelText }, text.cancelButtonLabel)))));
|
|
342
344
|
}
|
|
343
345
|
}
|
|
344
|
-
|
|
345
|
-
|
|
346
|
+
FeedbackForm.defaultProps = defaultConfiguration;
|
|
347
|
+
FeedbackForm._savedState = {
|
|
346
348
|
name: '',
|
|
347
349
|
email: '',
|
|
348
350
|
description: '',
|
|
@@ -350,4 +352,4 @@ FeedbackWidget._savedState = {
|
|
|
350
352
|
attachment: undefined,
|
|
351
353
|
attachmentUri: undefined,
|
|
352
354
|
};
|
|
353
|
-
//# sourceMappingURL=
|
|
355
|
+
//# sourceMappingURL=FeedbackForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackForm.js","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackForm.tsx"],"names":[],"mappings":"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","sourcesContent":["/* oxlint-disable eslint(max-lines) */\nimport type { SendFeedbackParams, User } from '@sentry/core';\nimport type { KeyboardTypeOptions, NativeEventSubscription } from 'react-native';\n\nimport { captureFeedback, debug, getCurrentScope, getGlobalScope, getIsolationScope, lastEventId } from '@sentry/core';\nimport * as React from 'react';\nimport {\n Appearance,\n Image,\n Keyboard,\n Text,\n TextInput,\n TouchableOpacity,\n TouchableWithoutFeedback,\n View,\n} from 'react-native';\n\nimport type { Screenshot } from '../wrapper';\nimport type {\n FeedbackGeneralConfiguration,\n FeedbackTextConfiguration,\n FeedbackFormProps,\n FeedbackFormState,\n FeedbackFormStyles,\n ImagePickerConfiguration,\n} from './FeedbackForm.types';\n\nimport { isExpoGo, isWeb, notWeb } from '../utils/environment';\nimport { getDataFromUri, NATIVE } from '../wrapper';\nimport { sentryLogo } from './branding';\nimport { defaultConfiguration } from './defaults';\nimport defaultStyles from './FeedbackForm.styles';\nimport { getTheme } from './FeedbackForm.theme';\nimport { hideFeedbackButton, showScreenshotButton } from './FeedbackFormManager';\nimport { lazyLoadFeedbackIntegration } from './lazy';\nimport { getCapturedScreenshot } from './ScreenshotButton';\nimport { base64ToUint8Array, feedbackAlertDialog, isValidEmail } from './utils';\n\n/**\n * @beta\n * Implements a feedback form screen that sends feedback to Sentry using Sentry.captureFeedback.\n */\nexport class FeedbackForm extends React.Component<FeedbackFormProps, FeedbackFormState> {\n public static defaultProps = defaultConfiguration;\n\n private static _savedState: Omit<FeedbackFormState, 'isVisible'> = {\n name: '',\n email: '',\n description: '',\n filename: undefined,\n attachment: undefined,\n attachmentUri: undefined,\n };\n\n private _themeListener: NativeEventSubscription | undefined;\n\n private _didSubmitForm: boolean = false;\n\n public constructor(props: FeedbackFormProps) {\n super(props);\n\n const currentUser = {\n useSentryUser: {\n email: this.props?.useSentryUser?.email || this._getUser()?.email || '',\n name: this.props?.useSentryUser?.name || this._getUser()?.name || '',\n },\n };\n\n this.state = {\n isVisible: true,\n name: FeedbackForm._savedState.name || currentUser.useSentryUser.name,\n email: FeedbackForm._savedState.email || currentUser.useSentryUser.email,\n description: FeedbackForm._savedState.description || '',\n filename: FeedbackForm._savedState.filename || undefined,\n attachment: FeedbackForm._savedState.attachment || undefined,\n attachmentUri: FeedbackForm._savedState.attachmentUri || undefined,\n };\n\n lazyLoadFeedbackIntegration();\n }\n\n /**\n * For testing purposes only.\n */\n public static reset(): void {\n FeedbackForm._savedState = {\n name: '',\n email: '',\n description: '',\n filename: undefined,\n attachment: undefined,\n attachmentUri: undefined,\n };\n }\n\n public handleFeedbackSubmit: () => void = () => {\n const { name, email, description } = this.state;\n const { onSubmitSuccess, onSubmitError, onFormSubmitted } = this.props;\n const text = this.props;\n\n const trimmedName = name?.trim();\n const trimmedEmail = email?.trim();\n const trimmedDescription = description?.trim();\n\n if (\n (this.props.isNameRequired && !trimmedName) ||\n (this.props.isEmailRequired && !trimmedEmail) ||\n !trimmedDescription\n ) {\n feedbackAlertDialog(text.errorTitle, text.formError);\n return;\n }\n\n if (\n this.props.shouldValidateEmail &&\n (this.props.isEmailRequired || trimmedEmail.length > 0) &&\n !isValidEmail(trimmedEmail)\n ) {\n feedbackAlertDialog(text.errorTitle, text.emailError);\n return;\n }\n\n const attachments =\n this.state.filename && this.state.attachment\n ? [\n {\n filename: this.state.filename,\n data: this.state.attachment,\n },\n ]\n : undefined;\n\n const eventId = lastEventId();\n const userFeedback: SendFeedbackParams = {\n message: trimmedDescription,\n name: trimmedName,\n email: trimmedEmail,\n associatedEventId: eventId,\n };\n\n try {\n if (!onFormSubmitted) {\n this.setState({ isVisible: false });\n }\n captureFeedback(userFeedback, attachments ? { attachments } : undefined);\n onSubmitSuccess({\n name: trimmedName,\n email: trimmedEmail,\n message: trimmedDescription,\n attachments: attachments,\n });\n feedbackAlertDialog(text.successMessageText, '');\n onFormSubmitted();\n this._didSubmitForm = true;\n } catch (error) {\n const errorString = `Feedback form submission failed: ${error}`;\n onSubmitError(new Error(errorString));\n feedbackAlertDialog(text.errorTitle, text.genericError);\n debug.error(`Feedback form submission failed: ${error}`);\n }\n };\n\n public onScreenshotButtonPress: () => void = async () => {\n if (!this._hasScreenshot()) {\n const { imagePicker } = this.props;\n if (imagePicker) {\n const launchImageLibrary = imagePicker.launchImageLibraryAsync\n ? // expo-image-picker library is available\n () => imagePicker.launchImageLibraryAsync?.({ mediaTypes: ['images'], base64: isWeb() })\n : // react-native-image-picker library is available\n imagePicker.launchImageLibrary\n ? () => imagePicker.launchImageLibrary?.({ mediaType: 'photo', includeBase64: isWeb() })\n : null;\n if (!launchImageLibrary) {\n debug.warn('No compatible image picker library found. Please provide a valid image picker library.');\n if (__DEV__) {\n feedbackAlertDialog(\n 'Development note',\n 'No compatible image picker library found. Please provide a compatible version of `expo-image-picker` or `react-native-image-picker`.',\n );\n }\n return;\n }\n\n const result = await launchImageLibrary();\n if (result?.assets && result.assets.length > 0) {\n if (isWeb()) {\n const filename = result.assets[0]?.fileName;\n const imageUri = result.assets[0]?.uri;\n const base64 = result.assets[0]?.base64;\n const data = base64 ? base64ToUint8Array(base64) : undefined;\n if (data) {\n this.setState({ filename, attachment: data, attachmentUri: imageUri });\n } else {\n debug.error('Failed to read image data on the web');\n }\n } else {\n const filename = result.assets[0]?.fileName;\n const imageUri = result.assets[0]?.uri;\n imageUri &&\n getDataFromUri(imageUri)\n .then(data => {\n if (data != null) {\n this.setState({ filename, attachment: data, attachmentUri: imageUri });\n } else {\n this._showImageRetrievalDevelopmentNote();\n debug.error('Failed to read image data from uri:', imageUri);\n }\n })\n .catch(error => {\n this._showImageRetrievalDevelopmentNote();\n debug.error('Failed to read image data from uri:', imageUri, 'error: ', error);\n });\n }\n }\n } else {\n // Defaulting to the onAddScreenshot callback\n const { onAddScreenshot } = { ...defaultConfiguration, ...this.props };\n onAddScreenshot((uri: string) => {\n getDataFromUri(uri)\n .then(data => {\n if (data != null) {\n this.setState({ filename: 'feedback_screenshot', attachment: data, attachmentUri: uri });\n } else {\n this._showImageRetrievalDevelopmentNote();\n debug.error('Failed to read image data from uri:', uri);\n }\n })\n .catch(error => {\n this._showImageRetrievalDevelopmentNote();\n debug.error('Failed to read image data from uri:', uri, 'error: ', error);\n });\n });\n }\n } else {\n this.setState({ filename: undefined, attachment: undefined, attachmentUri: undefined });\n }\n };\n\n /**\n * Add a listener to the theme change event.\n */\n public componentDidMount(): void {\n this._themeListener = Appearance.addChangeListener(() => {\n this.forceUpdate();\n });\n }\n\n /**\n * Save the state before unmounting the component and remove the theme listener.\n */\n public componentWillUnmount(): void {\n if (this._didSubmitForm) {\n this._clearFormState();\n this._didSubmitForm = false;\n } else {\n this._saveFormState();\n }\n if (this._themeListener) {\n this._themeListener.remove();\n }\n }\n\n /**\n * Renders the feedback form screen.\n */\n public render(): React.ReactNode {\n const theme = getTheme();\n const { name, email, description } = this.state;\n const { onFormClose } = this.props;\n const config: FeedbackGeneralConfiguration = this.props;\n const imagePickerConfiguration: ImagePickerConfiguration = this.props;\n const text: FeedbackTextConfiguration = this.props;\n const _defaultStyles = defaultStyles(theme);\n const _propStyles = this.props.styles || {};\n const autoCorrect = config.autoCorrect !== false;\n const spellCheck = config.spellCheck !== false;\n const styles = (Object.keys(_defaultStyles) as Array<keyof FeedbackFormStyles>).reduce<FeedbackFormStyles>(\n (merged, key) => {\n (merged as Record<string, unknown>)[key] = {\n ...(_defaultStyles[key] as object),\n ...(_propStyles[key] as object),\n };\n return merged;\n },\n {},\n );\n const onCancel = (): void => {\n if (onFormClose) {\n onFormClose();\n } else {\n this.setState({ isVisible: false });\n }\n };\n\n if (!this.state.isVisible) {\n return null;\n }\n\n const screenshot = getCapturedScreenshot();\n if (screenshot === 'ErrorCapturingScreenshot') {\n setTimeout(async () => {\n feedbackAlertDialog(text.errorTitle, text.captureScreenshotError);\n }, 100);\n } else if (screenshot) {\n this._setCapturedScreenshot(screenshot);\n }\n\n return (\n <TouchableWithoutFeedback\n onPress={notWeb() ? Keyboard.dismiss : undefined}\n accessible={false}\n accessibilityElementsHidden={false}\n >\n <View style={styles.container}>\n <View style={styles.titleContainer}>\n <Text style={styles.title} testID=\"sentry-feedback-form-title\">\n {text.formTitle}\n </Text>\n {config.showBranding && (\n <Image source={{ uri: sentryLogo }} style={styles.sentryLogo} testID=\"sentry-logo\" />\n )}\n </View>\n\n {config.showName && (\n <>\n <Text style={styles.label}>\n {text.nameLabel}\n {config.isNameRequired && ` ${text.isRequiredLabel}`}\n </Text>\n <TextInput\n style={styles.input}\n testID=\"sentry-feedback-name-input\"\n placeholder={text.namePlaceholder}\n value={name}\n onChangeText={value => this.setState({ name: value })}\n autoCorrect={false}\n spellCheck={false}\n />\n </>\n )}\n\n {config.showEmail && (\n <>\n <Text style={styles.label}>\n {text.emailLabel}\n {config.isEmailRequired && ` ${text.isRequiredLabel}`}\n </Text>\n <TextInput\n style={styles.input}\n testID=\"sentry-feedback-email-input\"\n placeholder={text.emailPlaceholder}\n keyboardType={'email-address' as KeyboardTypeOptions}\n autoCapitalize=\"none\"\n autoCorrect={false}\n spellCheck={false}\n value={email}\n onChangeText={value => this.setState({ email: value })}\n />\n </>\n )}\n\n <Text style={styles.label}>\n {text.messageLabel}\n {` ${text.isRequiredLabel}`}\n </Text>\n <TextInput\n style={[styles.input, styles.textArea]}\n testID=\"sentry-feedback-message-input\"\n placeholder={text.messagePlaceholder}\n value={description}\n onChangeText={value => this.setState({ description: value })}\n multiline\n autoCorrect={autoCorrect}\n spellCheck={spellCheck}\n />\n {(config.enableScreenshot || imagePickerConfiguration.imagePicker || this._hasScreenshot()) && (\n <View style={styles.screenshotContainer}>\n {this.state.attachmentUri && (\n <Image source={{ uri: this.state.attachmentUri }} style={styles.screenshotThumbnail} />\n )}\n <TouchableOpacity style={styles.screenshotButton} onPress={this.onScreenshotButtonPress}>\n <Text style={styles.screenshotText}>\n {!this._hasScreenshot() ? text.addScreenshotButtonLabel : text.removeScreenshotButtonLabel}\n </Text>\n </TouchableOpacity>\n </View>\n )}\n {notWeb() && config.enableTakeScreenshot && !this.state.attachmentUri && (\n <TouchableOpacity\n style={styles.takeScreenshotButton}\n onPress={() => {\n hideFeedbackButton();\n onCancel();\n showScreenshotButton();\n }}\n >\n <Text style={styles.takeScreenshotText} testID=\"sentry-feedback-take-screenshot-button\">\n {text.captureScreenshotButtonLabel}\n </Text>\n </TouchableOpacity>\n )}\n <TouchableOpacity style={styles.submitButton} onPress={this.handleFeedbackSubmit}>\n <Text style={styles.submitText} testID=\"sentry-feedback-submit-button\">\n {text.submitButtonLabel}\n </Text>\n </TouchableOpacity>\n\n <TouchableOpacity style={styles.cancelButton} onPress={onCancel}>\n <Text style={styles.cancelText}>{text.cancelButtonLabel}</Text>\n </TouchableOpacity>\n </View>\n </TouchableWithoutFeedback>\n );\n }\n\n private _setCapturedScreenshot = (screenshot: Screenshot): void => {\n if (screenshot.data != null) {\n debug.log('Setting captured screenshot:', screenshot.filename);\n NATIVE.encodeToBase64(screenshot.data)\n .then(base64String => {\n if (base64String != null) {\n const dataUri = `data:${screenshot.contentType};base64,${base64String}`;\n this.setState({ filename: screenshot.filename, attachment: screenshot.data, attachmentUri: dataUri });\n } else {\n debug.error('Failed to read image data from:', screenshot.filename);\n }\n })\n .catch(error => {\n debug.error('Failed to read image data from:', screenshot.filename, 'error: ', error);\n });\n } else {\n debug.error('Failed to read image data from:', screenshot.filename);\n }\n };\n\n private _saveFormState = (): void => {\n FeedbackForm._savedState = { ...this.state };\n };\n\n private _clearFormState = (): void => {\n FeedbackForm._savedState = {\n name: '',\n email: '',\n description: '',\n filename: undefined,\n attachment: undefined,\n attachmentUri: undefined,\n };\n };\n\n private _hasScreenshot = (): boolean => {\n return (\n this.state.filename !== undefined && this.state.attachment !== undefined && this.state.attachmentUri !== undefined\n );\n };\n\n private _getUser = (): User | undefined => {\n const currentUser = getCurrentScope().getUser();\n if (currentUser) {\n return currentUser;\n }\n const isolationUser = getIsolationScope().getUser();\n if (isolationUser) {\n return isolationUser;\n }\n return getGlobalScope().getUser();\n };\n\n private _showImageRetrievalDevelopmentNote = (): void => {\n if (isExpoGo()) {\n feedbackAlertDialog(\n 'Development note',\n 'The feedback widget cannot retrieve image data in Expo Go. Please build your app to test this functionality.',\n );\n }\n };\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ViewStyle } from 'react-native';
|
|
2
|
+
import type { FeedbackFormTheme } from './FeedbackForm.theme';
|
|
3
|
+
import type { FeedbackButtonStyles, FeedbackFormStyles } from './FeedbackForm.types';
|
|
4
|
+
declare const defaultStyles: (theme: FeedbackFormTheme) => FeedbackFormStyles;
|
|
5
|
+
export declare const defaultButtonStyles: (theme: FeedbackFormTheme) => FeedbackButtonStyles;
|
|
6
|
+
export declare const defaultScreenshotButtonStyles: (theme: FeedbackFormTheme) => FeedbackButtonStyles;
|
|
7
|
+
export declare const modalWrapper: ViewStyle;
|
|
8
|
+
export declare const modalSheetContainer: (theme: FeedbackFormTheme) => ViewStyle;
|
|
9
|
+
export declare const topSpacer: ViewStyle;
|
|
10
|
+
export default defaultStyles;
|
|
11
|
+
//# sourceMappingURL=FeedbackForm.styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackForm.styles.d.ts","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackForm.styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAErF,QAAA,MAAM,aAAa,GAAI,OAAO,iBAAiB,KAAG,kBA2GjD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,iBAAiB,KAAG,oBAgC9D,CAAC;AAEF,eAAO,MAAM,6BAA6B,UAlCC,iBAAiB,KAAG,oBAkCC,CAAC;AAEjE,eAAO,MAAM,YAAY,EAAE,SAM1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,iBAAiB,KAAG,SAc9D,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,SAEvB,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackForm.styles.js","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackForm.styles.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ViewStyle } from 'react-native';\n\nimport type { FeedbackFormTheme } from './FeedbackForm.theme';\nimport type { FeedbackButtonStyles, FeedbackFormStyles } from './FeedbackForm.types';\n\nconst defaultStyles = (theme: FeedbackFormTheme): FeedbackFormStyles => {\n return {\n container: {\n flex: 1,\n padding: 20,\n backgroundColor: theme.background,\n },\n title: {\n fontSize: 24,\n fontWeight: 'bold',\n marginBottom: 20,\n textAlign: 'left',\n flex: 1,\n color: theme.foreground,\n },\n label: {\n marginBottom: 4,\n fontSize: 16,\n color: theme.foreground,\n },\n input: {\n height: 50,\n borderColor: theme.border,\n borderWidth: 1,\n borderRadius: 5,\n paddingHorizontal: 10,\n marginBottom: 15,\n fontSize: 16,\n color: theme.foreground,\n },\n textArea: {\n height: 100,\n textAlignVertical: 'top',\n color: theme.foreground,\n },\n screenshotButton: {\n backgroundColor: theme.background,\n padding: 15,\n borderRadius: 5,\n alignItems: 'center',\n flex: 1,\n borderWidth: 1,\n borderColor: theme.border,\n },\n screenshotContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n marginBottom: 20,\n },\n screenshotThumbnail: {\n width: 50,\n height: 50,\n borderRadius: 5,\n marginRight: 10,\n },\n screenshotText: {\n color: theme.foreground,\n fontSize: 16,\n },\n takeScreenshotButton: {\n backgroundColor: theme.background,\n padding: 15,\n borderRadius: 5,\n alignItems: 'center',\n borderWidth: 1,\n borderColor: theme.border,\n marginTop: -10,\n marginBottom: 20,\n },\n takeScreenshotText: {\n color: theme.foreground,\n fontSize: 16,\n },\n submitButton: {\n backgroundColor: theme.accentBackground,\n paddingVertical: 15,\n borderRadius: 5,\n alignItems: 'center',\n marginBottom: 10,\n },\n submitText: {\n color: theme.accentForeground,\n fontSize: 18,\n },\n cancelButton: {\n backgroundColor: theme.background,\n padding: 15,\n borderRadius: 5,\n alignItems: 'center',\n borderWidth: 1,\n borderColor: theme.border,\n },\n cancelText: {\n color: theme.foreground,\n fontSize: 16,\n },\n titleContainer: {\n flexDirection: 'row',\n width: '100%',\n },\n sentryLogo: {\n width: 40,\n height: 40,\n tintColor: theme.sentryLogo,\n },\n };\n};\n\nexport const defaultButtonStyles = (theme: FeedbackFormTheme): FeedbackButtonStyles => {\n return {\n triggerButton: {\n position: 'absolute',\n bottom: 30,\n right: 30,\n backgroundColor: theme.background,\n padding: 15,\n borderRadius: 40,\n justifyContent: 'center',\n alignItems: 'center',\n elevation: 5,\n shadowColor: theme.border,\n shadowOffset: { width: 1, height: 2 },\n shadowOpacity: 0.5,\n shadowRadius: 3,\n flexDirection: 'row',\n borderWidth: 1,\n borderColor: theme.border,\n },\n triggerText: {\n color: theme.foreground,\n fontSize: 18,\n },\n triggerIcon: {\n width: 24,\n height: 24,\n padding: 2,\n marginEnd: 6,\n tintColor: theme.sentryLogo,\n },\n };\n};\n\nexport const defaultScreenshotButtonStyles = defaultButtonStyles;\n\nexport const modalWrapper: ViewStyle = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n};\n\nexport const modalSheetContainer = (theme: FeedbackFormTheme): ViewStyle => {\n return {\n backgroundColor: theme.background,\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n overflow: 'hidden',\n alignSelf: 'stretch',\n shadowColor: '#000',\n shadowOffset: { width: 0, height: -3 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 5,\n flex: 1,\n };\n};\n\nexport const topSpacer: ViewStyle = {\n height: 64, // magic number\n};\n\nexport default defaultStyles;\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Get the theme for the feedback widget based on the current color scheme
|
|
3
3
|
*/
|
|
4
|
-
export declare function getTheme():
|
|
5
|
-
export interface
|
|
4
|
+
export declare function getTheme(): FeedbackFormTheme;
|
|
5
|
+
export interface FeedbackFormTheme {
|
|
6
6
|
/**
|
|
7
7
|
* Background color for surfaces
|
|
8
8
|
*/
|
|
@@ -32,6 +32,8 @@ export interface FeedbackWidgetTheme {
|
|
|
32
32
|
*/
|
|
33
33
|
sentryLogo?: string;
|
|
34
34
|
}
|
|
35
|
-
export declare const LightTheme:
|
|
36
|
-
export declare const DarkTheme:
|
|
37
|
-
|
|
35
|
+
export declare const LightTheme: FeedbackFormTheme;
|
|
36
|
+
export declare const DarkTheme: FeedbackFormTheme;
|
|
37
|
+
/** @deprecated Use `FeedbackFormTheme` instead. */
|
|
38
|
+
export type FeedbackWidgetTheme = FeedbackFormTheme;
|
|
39
|
+
//# sourceMappingURL=FeedbackForm.theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackForm.theme.d.ts","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackForm.theme.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C;AAED,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,iBAQxB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,iBAQvB,CAAC;AAEF,mDAAmD;AACnD,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackForm.theme.js","sourceRoot":"","sources":["../../../src/js/feedback/FeedbackForm.theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE5F;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,MAAM,SAAS,GAAG,cAAc,EAAE,CAAC;IACnC,MAAM,WAAW,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,MAAM,UAAU,mCAAQ,UAAU,GAAK,qBAAqB,EAAE,CAAE,CAAC;IACjE,MAAM,SAAS,mCAAQ,SAAS,GAAK,oBAAoB,EAAE,CAAE,CAAC;IAC9D,OAAO,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;AACzD,CAAC;AAuCD,MAAM,CAAC,MAAM,UAAU,GAAsB;IAC3C,gBAAgB,EAAE,sBAAsB;IACxC,gBAAgB,EAAE,SAAS;IAC3B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE,wBAAwB;IAChC,YAAY,EAAE,qBAAqB;IACnC,UAAU,EAAE,qBAAqB;CAClC,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAsB;IAC1C,gBAAgB,EAAE,sBAAsB;IACxC,gBAAgB,EAAE,SAAS;IAC3B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE,2BAA2B;IACnC,YAAY,EAAE,SAAS;IACvB,UAAU,EAAE,SAAS;CACtB,CAAC","sourcesContent":["import { Appearance } from 'react-native';\n\nimport { getColorScheme, getFeedbackDarkTheme, getFeedbackLightTheme } from './integration';\n\n/**\n * Get the theme for the feedback widget based on the current color scheme\n */\nexport function getTheme(): FeedbackFormTheme {\n const userTheme = getColorScheme();\n const colorScheme = userTheme === 'system' ? Appearance.getColorScheme() : userTheme;\n const lightTheme = { ...LightTheme, ...getFeedbackLightTheme() };\n const darkTheme = { ...DarkTheme, ...getFeedbackDarkTheme() };\n return colorScheme === 'dark' ? darkTheme : lightTheme;\n}\n\nexport interface FeedbackFormTheme {\n /**\n * Background color for surfaces\n */\n background: string;\n\n /**\n * Foreground color (i.e. text color)\n */\n foreground: string;\n\n /**\n * Foreground color for accented elements\n */\n accentForeground?: string;\n\n /**\n * Background color for accented elements\n */\n accentBackground?: string;\n\n /**\n * Border color\n */\n border?: string;\n\n /**\n * Color for feedback icon\n */\n feedbackIcon?: string;\n\n /**\n * Color for Sentry logo\n */\n sentryLogo?: string;\n}\n\nexport const LightTheme: FeedbackFormTheme = {\n accentBackground: 'rgba(88, 74, 192, 1)',\n accentForeground: '#ffffff',\n foreground: '#2b2233',\n background: '#ffffff',\n border: 'rgba(41, 35, 47, 0.13)',\n feedbackIcon: 'rgba(54, 45, 89, 1)',\n sentryLogo: 'rgba(54, 45, 89, 1)',\n};\n\nexport const DarkTheme: FeedbackFormTheme = {\n accentBackground: 'rgba(88, 74, 192, 1)',\n accentForeground: '#ffffff',\n foreground: '#ebe6ef',\n background: '#29232f',\n border: 'rgba(235, 230, 239, 0.15)',\n feedbackIcon: '#ffffff',\n sentryLogo: '#ffffff',\n};\n\n/** @deprecated Use `FeedbackFormTheme` instead. */\nexport type FeedbackWidgetTheme = FeedbackFormTheme;\n"]}
|