package com.sbaiahmed1.reactnativeblur import com.facebook.react.module.annotations.ReactModule import com.facebook.react.uimanager.ViewGroupManager import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewManagerDelegate import com.facebook.react.uimanager.annotations.ReactProp import com.facebook.react.viewmanagers.ReactNativeBlurViewManagerInterface import com.facebook.react.viewmanagers.ReactNativeBlurViewManagerDelegate @ReactModule(name = ReactNativeBlurViewManager.NAME) class ReactNativeBlurViewManager : ViewGroupManager(), ReactNativeBlurViewManagerInterface { private val mDelegate: ViewManagerDelegate init { mDelegate = ReactNativeBlurViewManagerDelegate(this) } override fun getDelegate(): ViewManagerDelegate? { return mDelegate } override fun getName(): String { return NAME } public override fun createViewInstance(context: ThemedReactContext): ReactNativeBlurView { return ReactNativeBlurView(context) } @ReactProp(name = "blurType") override fun setBlurType(view: ReactNativeBlurView?, blurType: String?) { view?.setBlurType(blurType ?: "xlight") } @ReactProp(name = "blurAmount") override fun setBlurAmount(view: ReactNativeBlurView?, blurAmount: Double) { view?.setBlurAmount(blurAmount.toFloat()) } @ReactProp(name = "blurRounds") override fun setBlurRounds(view: ReactNativeBlurView?, blurRounds: Int) { view?.setRounds(blurRounds) } @ReactProp(name = "borderRadius") override fun setBorderRadius(view: ReactNativeBlurView?, borderRadius: Float) { view?.setBorderRadius(borderRadius) } @ReactProp(name = "borderTopLeftRadius") override fun setBorderTopLeftRadius(view: ReactNativeBlurView?, borderTopLeftRadius: Float) { view?.setBorderTopLeftRadius(borderTopLeftRadius) } @ReactProp(name = "borderTopRightRadius") override fun setBorderTopRightRadius(view: ReactNativeBlurView?, borderTopRightRadius: Float) { view?.setBorderTopRightRadius(borderTopRightRadius) } @ReactProp(name = "borderBottomLeftRadius") override fun setBorderBottomLeftRadius(view: ReactNativeBlurView?, borderBottomLeftRadius: Float) { view?.setBorderBottomLeftRadius(borderBottomLeftRadius) } @ReactProp(name = "borderBottomRightRadius") override fun setBorderBottomRightRadius(view: ReactNativeBlurView?, borderBottomRightRadius: Float) { view?.setBorderBottomRightRadius(borderBottomRightRadius) } @ReactProp(name = "reducedTransparencyFallbackColor") override fun setReducedTransparencyFallbackColor(view: ReactNativeBlurView?, reducedTransparencyFallbackColor: String?) { // no-op } @ReactProp(name = "ignoreSafeArea") override fun setIgnoreSafeArea(view: ReactNativeBlurView?, ignoreSafeArea: Boolean) { // no-op } /** * Called when view is detached from view hierarchy and allows for cleanup. * This prevents the white screen issue during navigation transitions on Android. */ override fun onDropViewInstance(view: ReactNativeBlurView) { super.onDropViewInstance(view) // Call cleanup to reset state and prevent white screen artifacts view.cleanup() } /** * Indicates that React Native's Yoga layout should handle child positioning. * Returns false to let React Native manage the layout of children. */ override fun needsCustomLayoutForChildren(): Boolean { return false } companion object { const val NAME = "ReactNativeBlurView" } }