@abeman/react-native-nitro-blur 0.1.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/LICENSE +20 -0
- package/NitroBlur.podspec +29 -0
- package/README.md +200 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +120 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/nitroblur/NitroBlur.kt +229 -0
- package/android/src/main/java/com/margelo/nitro/nitroblur/NitroBlurPackage.kt +31 -0
- package/android/src/main/java/com/margelo/nitro/nitroblur/NitroBlurTarget.kt +149 -0
- package/android/src/main/java/com/margelo/nitro/nitroblur/NitroBlurTargetViewGroupManager.kt +47 -0
- package/android/src/main/java/com/margelo/nitro/nitroblur/TintStyle.kt +85 -0
- package/ios/NitroBlur.swift +173 -0
- package/ios/NitroBlurTarget.swift +5 -0
- package/lib/module/NitroBlur.nitro.js +4 -0
- package/lib/module/NitroBlur.nitro.js.map +1 -0
- package/lib/module/NitroBlurTarget.nitro.js +4 -0
- package/lib/module/NitroBlurTarget.nitro.js.map +1 -0
- package/lib/module/index.js +114 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NitroBlur.nitro.d.ts +25 -0
- package/lib/typescript/src/NitroBlur.nitro.d.ts.map +1 -0
- package/lib/typescript/src/NitroBlurTarget.nitro.d.ts +7 -0
- package/lib/typescript/src/NitroBlurTarget.nitro.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +201 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +33 -0
- package/nitrogen/generated/android/c++/JBlurMethod.hpp +61 -0
- package/nitrogen/generated/android/c++/JBlurTint.hpp +115 -0
- package/nitrogen/generated/android/c++/JHybridNitroBlurSpec.cpp +99 -0
- package/nitrogen/generated/android/c++/JHybridNitroBlurSpec.hpp +72 -0
- package/nitrogen/generated/android/c++/JHybridNitroBlurTargetSpec.cpp +49 -0
- package/nitrogen/generated/android/c++/JHybridNitroBlurTargetSpec.hpp +63 -0
- package/nitrogen/generated/android/c++/views/JHybridNitroBlurStateUpdater.cpp +72 -0
- package/nitrogen/generated/android/c++/views/JHybridNitroBlurStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/c++/views/JHybridNitroBlurTargetStateUpdater.cpp +53 -0
- package/nitrogen/generated/android/c++/views/JHybridNitroBlurTargetStateUpdater.hpp +49 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/BlurMethod.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/BlurTint.kt +42 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/HybridNitroBlurSpec.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/HybridNitroBlurTargetSpec.kt +53 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/nitroblurOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/views/HybridNitroBlurManager.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/views/HybridNitroBlurStateUpdater.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/views/HybridNitroBlurTargetManager.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitroblur/views/HybridNitroBlurTargetStateUpdater.kt +23 -0
- package/nitrogen/generated/android/nitroblur+autolinking.cmake +87 -0
- package/nitrogen/generated/android/nitroblur+autolinking.gradle +27 -0
- package/nitrogen/generated/android/nitroblurOnLoad.cpp +74 -0
- package/nitrogen/generated/android/nitroblurOnLoad.hpp +34 -0
- package/nitrogen/generated/ios/NitroBlur+autolinking.rb +60 -0
- package/nitrogen/generated/ios/NitroBlur-Swift-Cxx-Bridge.cpp +50 -0
- package/nitrogen/generated/ios/NitroBlur-Swift-Cxx-Bridge.hpp +57 -0
- package/nitrogen/generated/ios/NitroBlur-Swift-Cxx-Umbrella.hpp +52 -0
- package/nitrogen/generated/ios/NitroBlurAutolinking.mm +41 -0
- package/nitrogen/generated/ios/NitroBlurAutolinking.swift +38 -0
- package/nitrogen/generated/ios/c++/HybridNitroBlurSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroBlurSpecSwift.hpp +110 -0
- package/nitrogen/generated/ios/c++/HybridNitroBlurTargetSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroBlurTargetSpecSwift.hpp +75 -0
- package/nitrogen/generated/ios/c++/views/HybridNitroBlurComponent.mm +142 -0
- package/nitrogen/generated/ios/c++/views/HybridNitroBlurTargetComponent.mm +118 -0
- package/nitrogen/generated/ios/swift/BlurMethod.swift +44 -0
- package/nitrogen/generated/ios/swift/BlurTint.swift +116 -0
- package/nitrogen/generated/ios/swift/HybridNitroBlurSpec.swift +59 -0
- package/nitrogen/generated/ios/swift/HybridNitroBlurSpec_cxx.swift +200 -0
- package/nitrogen/generated/ios/swift/HybridNitroBlurTargetSpec.swift +55 -0
- package/nitrogen/generated/ios/swift/HybridNitroBlurTargetSpec_cxx.swift +147 -0
- package/nitrogen/generated/shared/c++/BlurMethod.hpp +80 -0
- package/nitrogen/generated/shared/c++/BlurTint.hpp +152 -0
- package/nitrogen/generated/shared/c++/HybridNitroBlurSpec.cpp +30 -0
- package/nitrogen/generated/shared/c++/HybridNitroBlurSpec.hpp +75 -0
- package/nitrogen/generated/shared/c++/HybridNitroBlurTargetSpec.cpp +21 -0
- package/nitrogen/generated/shared/c++/HybridNitroBlurTargetSpec.hpp +62 -0
- package/nitrogen/generated/shared/c++/views/HybridNitroBlurComponent.cpp +127 -0
- package/nitrogen/generated/shared/c++/views/HybridNitroBlurComponent.hpp +116 -0
- package/nitrogen/generated/shared/c++/views/HybridNitroBlurTargetComponent.cpp +72 -0
- package/nitrogen/generated/shared/c++/views/HybridNitroBlurTargetComponent.hpp +109 -0
- package/nitrogen/generated/shared/json/NitroBlurConfig.json +14 -0
- package/nitrogen/generated/shared/json/NitroBlurTargetConfig.json +9 -0
- package/package.json +174 -0
- package/src/NitroBlur.nitro.ts +56 -0
- package/src/NitroBlurTarget.nitro.ts +13 -0
- package/src/index.tsx +215 -0
package/package.json
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@abeman/react-native-nitro-blur",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Blur view",
|
|
5
|
+
"main": "./lib/module/index.js",
|
|
6
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"source": "./src/index.tsx",
|
|
10
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
11
|
+
"default": "./lib/module/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"src",
|
|
17
|
+
"lib",
|
|
18
|
+
"android",
|
|
19
|
+
"ios",
|
|
20
|
+
"cpp",
|
|
21
|
+
"nitrogen",
|
|
22
|
+
"nitro.json",
|
|
23
|
+
"*.podspec",
|
|
24
|
+
"react-native.config.js",
|
|
25
|
+
"!ios/build",
|
|
26
|
+
"!android/build",
|
|
27
|
+
"!android/gradle",
|
|
28
|
+
"!android/gradlew",
|
|
29
|
+
"!android/gradlew.bat",
|
|
30
|
+
"!android/local.properties",
|
|
31
|
+
"!**/__tests__",
|
|
32
|
+
"!**/__fixtures__",
|
|
33
|
+
"!**/__mocks__",
|
|
34
|
+
"!**/.*"
|
|
35
|
+
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"example": "yarn workspace react-native-nitro-blur-example",
|
|
38
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
39
|
+
"prepare": "bob build",
|
|
40
|
+
"nitrogen": "nitrogen",
|
|
41
|
+
"typecheck": "tsc",
|
|
42
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
43
|
+
"test": "jest",
|
|
44
|
+
"release": "release-it --only-version"
|
|
45
|
+
},
|
|
46
|
+
"keywords": [
|
|
47
|
+
"react-native",
|
|
48
|
+
"ios",
|
|
49
|
+
"android"
|
|
50
|
+
],
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "git+https://github.com/huynq1175/react-native-nitro-blur.git"
|
|
54
|
+
},
|
|
55
|
+
"author": "huynq2 <99823149+huynq1175@users.noreply.github.com> (https://github.com/huynq1175)",
|
|
56
|
+
"license": "MIT",
|
|
57
|
+
"bugs": {
|
|
58
|
+
"url": "https://github.com/huynq1175/react-native-nitro-blur/issues"
|
|
59
|
+
},
|
|
60
|
+
"homepage": "https://github.com/huynq1175/react-native-nitro-blur#readme",
|
|
61
|
+
"publishConfig": {
|
|
62
|
+
"registry": "https://registry.npmjs.org/"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
66
|
+
"@eslint/compat": "^1.3.2",
|
|
67
|
+
"@eslint/eslintrc": "^3.3.1",
|
|
68
|
+
"@eslint/js": "^9.35.0",
|
|
69
|
+
"@react-native/babel-preset": "0.83.0",
|
|
70
|
+
"@react-native/eslint-config": "0.83.0",
|
|
71
|
+
"@release-it/conventional-changelog": "^10.0.1",
|
|
72
|
+
"@types/jest": "^29.5.14",
|
|
73
|
+
"@types/react": "^19.2.0",
|
|
74
|
+
"commitlint": "^19.8.1",
|
|
75
|
+
"del-cli": "^6.0.0",
|
|
76
|
+
"eslint": "^9.35.0",
|
|
77
|
+
"eslint-config-prettier": "^10.1.8",
|
|
78
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
79
|
+
"jest": "^29.7.0",
|
|
80
|
+
"lefthook": "^2.0.3",
|
|
81
|
+
"nitrogen": "^0.35.2",
|
|
82
|
+
"prettier": "^2.8.8",
|
|
83
|
+
"react": "19.2.0",
|
|
84
|
+
"react-native": "0.83.0",
|
|
85
|
+
"react-native-builder-bob": "^0.40.13",
|
|
86
|
+
"react-native-nitro-modules": "^0.35.2",
|
|
87
|
+
"release-it": "^19.0.4",
|
|
88
|
+
"turbo": "^2.5.6",
|
|
89
|
+
"typescript": "^5.9.2"
|
|
90
|
+
},
|
|
91
|
+
"peerDependencies": {
|
|
92
|
+
"react": "*",
|
|
93
|
+
"react-native": "*",
|
|
94
|
+
"react-native-nitro-modules": "^0.35.2"
|
|
95
|
+
},
|
|
96
|
+
"workspaces": [
|
|
97
|
+
"example"
|
|
98
|
+
],
|
|
99
|
+
"packageManager": "yarn@4.11.0",
|
|
100
|
+
"react-native-builder-bob": {
|
|
101
|
+
"source": "src",
|
|
102
|
+
"output": "lib",
|
|
103
|
+
"targets": [
|
|
104
|
+
[
|
|
105
|
+
"custom",
|
|
106
|
+
{
|
|
107
|
+
"script": "nitrogen",
|
|
108
|
+
"clean": "nitrogen/"
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
[
|
|
112
|
+
"module",
|
|
113
|
+
{
|
|
114
|
+
"esm": true
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
[
|
|
118
|
+
"typescript",
|
|
119
|
+
{
|
|
120
|
+
"project": "tsconfig.build.json"
|
|
121
|
+
}
|
|
122
|
+
]
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"prettier": {
|
|
126
|
+
"quoteProps": "consistent",
|
|
127
|
+
"singleQuote": true,
|
|
128
|
+
"tabWidth": 2,
|
|
129
|
+
"trailingComma": "es5",
|
|
130
|
+
"useTabs": false
|
|
131
|
+
},
|
|
132
|
+
"jest": {
|
|
133
|
+
"preset": "react-native",
|
|
134
|
+
"modulePathIgnorePatterns": [
|
|
135
|
+
"<rootDir>/example/node_modules",
|
|
136
|
+
"<rootDir>/lib/"
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
"commitlint": {
|
|
140
|
+
"extends": [
|
|
141
|
+
"@commitlint/config-conventional"
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
"release-it": {
|
|
145
|
+
"git": {
|
|
146
|
+
"commitMessage": "chore: release ${version}",
|
|
147
|
+
"tagName": "v${version}"
|
|
148
|
+
},
|
|
149
|
+
"npm": {
|
|
150
|
+
"publish": true
|
|
151
|
+
},
|
|
152
|
+
"github": {
|
|
153
|
+
"release": true
|
|
154
|
+
},
|
|
155
|
+
"plugins": {
|
|
156
|
+
"@release-it/conventional-changelog": {
|
|
157
|
+
"preset": {
|
|
158
|
+
"name": "angular"
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
"create-react-native-library": {
|
|
164
|
+
"type": "nitro-view",
|
|
165
|
+
"languages": "kotlin-swift",
|
|
166
|
+
"tools": [
|
|
167
|
+
"eslint",
|
|
168
|
+
"jest",
|
|
169
|
+
"lefthook",
|
|
170
|
+
"release-it"
|
|
171
|
+
],
|
|
172
|
+
"version": "0.57.2"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
HybridView,
|
|
3
|
+
HybridViewMethods,
|
|
4
|
+
HybridViewProps,
|
|
5
|
+
} from 'react-native-nitro-modules';
|
|
6
|
+
|
|
7
|
+
export type BlurTint =
|
|
8
|
+
| 'light'
|
|
9
|
+
| 'dark'
|
|
10
|
+
| 'default'
|
|
11
|
+
| 'extraLight'
|
|
12
|
+
| 'regular'
|
|
13
|
+
| 'prominent'
|
|
14
|
+
| 'systemUltraThinMaterial'
|
|
15
|
+
| 'systemThinMaterial'
|
|
16
|
+
| 'systemMaterial'
|
|
17
|
+
| 'systemThickMaterial'
|
|
18
|
+
| 'systemChromeMaterial'
|
|
19
|
+
| 'systemUltraThinMaterialLight'
|
|
20
|
+
| 'systemThinMaterialLight'
|
|
21
|
+
| 'systemMaterialLight'
|
|
22
|
+
| 'systemThickMaterialLight'
|
|
23
|
+
| 'systemChromeMaterialLight'
|
|
24
|
+
| 'systemUltraThinMaterialDark'
|
|
25
|
+
| 'systemThinMaterialDark'
|
|
26
|
+
| 'systemMaterialDark'
|
|
27
|
+
| 'systemThickMaterialDark'
|
|
28
|
+
| 'systemChromeMaterialDark';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Blur method to use on Android.
|
|
32
|
+
*
|
|
33
|
+
* - `'none'` - Renders a semi-transparent view instead of rendering a blur effect.
|
|
34
|
+
* - `'dimezisBlurView'` - Uses a native blur view implementation based on BlurView library.
|
|
35
|
+
* This method may lead to decreased performance on Android SDK 30 and below.
|
|
36
|
+
* - `'dimezisBlurViewSdk31Plus'` - Uses BlurView library on Android SDK 31 and above,
|
|
37
|
+
* for older versions falls back to 'none'.
|
|
38
|
+
*
|
|
39
|
+
* @platform android
|
|
40
|
+
*/
|
|
41
|
+
export type BlurMethod =
|
|
42
|
+
| 'none'
|
|
43
|
+
| 'dimezisBlurView'
|
|
44
|
+
| 'dimezisBlurViewSdk31Plus';
|
|
45
|
+
|
|
46
|
+
export interface NitroBlurProps extends HybridViewProps {
|
|
47
|
+
tint: BlurTint;
|
|
48
|
+
intensity: number;
|
|
49
|
+
blurReductionFactor: number;
|
|
50
|
+
blurTargetId: number;
|
|
51
|
+
blurMethod: BlurMethod;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface NitroBlurMethods extends HybridViewMethods {}
|
|
55
|
+
|
|
56
|
+
export type NitroBlur = HybridView<NitroBlurProps, NitroBlurMethods>;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
HybridView,
|
|
3
|
+
HybridViewMethods,
|
|
4
|
+
HybridViewProps,
|
|
5
|
+
} from 'react-native-nitro-modules';
|
|
6
|
+
|
|
7
|
+
export interface NitroBlurTargetProps extends HybridViewProps {}
|
|
8
|
+
export interface NitroBlurTargetMethods extends HybridViewMethods {}
|
|
9
|
+
|
|
10
|
+
export type NitroBlurTarget = HybridView<
|
|
11
|
+
NitroBlurTargetProps,
|
|
12
|
+
NitroBlurTargetMethods
|
|
13
|
+
>;
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import {
|
|
5
|
+
findNodeHandle,
|
|
6
|
+
Platform,
|
|
7
|
+
StyleSheet,
|
|
8
|
+
View,
|
|
9
|
+
type ViewProps,
|
|
10
|
+
} from 'react-native';
|
|
11
|
+
import { getHostComponent } from 'react-native-nitro-modules';
|
|
12
|
+
import type {
|
|
13
|
+
BlurMethod,
|
|
14
|
+
BlurTint,
|
|
15
|
+
NitroBlurMethods,
|
|
16
|
+
NitroBlurProps,
|
|
17
|
+
} from './NitroBlur.nitro';
|
|
18
|
+
import type {
|
|
19
|
+
NitroBlurTargetMethods,
|
|
20
|
+
NitroBlurTargetProps,
|
|
21
|
+
} from './NitroBlurTarget.nitro';
|
|
22
|
+
|
|
23
|
+
const NitroBlurConfig = require('../nitrogen/generated/shared/json/NitroBlurConfig.json');
|
|
24
|
+
const NitroBlurTargetConfig = require('../nitrogen/generated/shared/json/NitroBlurTargetConfig.json');
|
|
25
|
+
|
|
26
|
+
const NativeBlurView = getHostComponent<NitroBlurProps, NitroBlurMethods>(
|
|
27
|
+
'NitroBlur',
|
|
28
|
+
() => NitroBlurConfig
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
const NativeBlurTargetView = getHostComponent<
|
|
32
|
+
NitroBlurTargetProps,
|
|
33
|
+
NitroBlurTargetMethods
|
|
34
|
+
>('NitroBlurTarget', () => NitroBlurTargetConfig);
|
|
35
|
+
|
|
36
|
+
// ----- BlurViewProps -----
|
|
37
|
+
|
|
38
|
+
export type BlurViewProps = {
|
|
39
|
+
/**
|
|
40
|
+
* A ref to a BlurTargetView, which this BlurView will blur as its background.
|
|
41
|
+
*
|
|
42
|
+
* @platform android
|
|
43
|
+
*/
|
|
44
|
+
blurTarget?: React.RefObject<View | null>;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A tint mode which will be applied to the view.
|
|
48
|
+
* @default 'default'
|
|
49
|
+
*/
|
|
50
|
+
tint?: BlurTint;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A number from `1` to `100` to control the intensity of the blur effect.
|
|
54
|
+
*
|
|
55
|
+
* You can animate this property using `react-native-reanimated`.
|
|
56
|
+
*
|
|
57
|
+
* @default 50
|
|
58
|
+
*/
|
|
59
|
+
intensity?: number;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A number by which the blur intensity will be divided on Android.
|
|
63
|
+
*
|
|
64
|
+
* When using blur methods on Android, the perceived blur intensity might differ from iOS
|
|
65
|
+
* at different intensity levels. This property can be used to fine tune it on Android
|
|
66
|
+
* to match it more closely with iOS.
|
|
67
|
+
* @default 4
|
|
68
|
+
* @platform android
|
|
69
|
+
*/
|
|
70
|
+
blurReductionFactor?: number;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Blur method to use on Android.
|
|
74
|
+
*
|
|
75
|
+
* @default 'none'
|
|
76
|
+
* @platform android
|
|
77
|
+
*/
|
|
78
|
+
blurMethod?: BlurMethod;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @hidden
|
|
82
|
+
* @deprecated Use `blurMethod` instead.
|
|
83
|
+
* @default 'none'
|
|
84
|
+
* @platform android
|
|
85
|
+
*/
|
|
86
|
+
experimentalBlurMethod?: BlurMethod;
|
|
87
|
+
} & ViewProps;
|
|
88
|
+
|
|
89
|
+
export type BlurTargetViewProps = {
|
|
90
|
+
ref?: React.RefObject<View | null>;
|
|
91
|
+
} & ViewProps;
|
|
92
|
+
|
|
93
|
+
// ----- BlurView -----
|
|
94
|
+
|
|
95
|
+
type BlurViewState = {
|
|
96
|
+
blurTargetId?: number | null;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
export class BlurView extends React.Component<BlurViewProps, BlurViewState> {
|
|
100
|
+
constructor(props: BlurViewProps) {
|
|
101
|
+
super(props);
|
|
102
|
+
this.state = {
|
|
103
|
+
blurTargetId: undefined,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
componentDidMount(): void {
|
|
108
|
+
this._updateBlurTargetId();
|
|
109
|
+
this._maybeWarnAboutBlurMethod();
|
|
110
|
+
|
|
111
|
+
if (this.props.experimentalBlurMethod != null) {
|
|
112
|
+
console.warn(
|
|
113
|
+
'The `experimentalBlurMethod` prop has been deprecated. Please use the `blurMethod` prop instead.'
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
componentDidUpdate(prevProps: Readonly<BlurViewProps>): void {
|
|
119
|
+
if (prevProps.blurTarget?.current !== this.props.blurTarget?.current) {
|
|
120
|
+
this._updateBlurTargetId();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
_maybeWarnAboutBlurMethod(): void {
|
|
125
|
+
const blurMethod = this._getBlurMethod();
|
|
126
|
+
if (
|
|
127
|
+
Platform.OS === 'android' &&
|
|
128
|
+
(blurMethod === 'dimezisBlurView' ||
|
|
129
|
+
blurMethod === 'dimezisBlurViewSdk31Plus') &&
|
|
130
|
+
!this.props.blurTarget
|
|
131
|
+
) {
|
|
132
|
+
// The fallback happens on the native side
|
|
133
|
+
console.warn(
|
|
134
|
+
`You have selected the "${blurMethod}" blur method, but the \`blurTarget\` prop has not been configured. The blur view will fallback to "none" blur method to avoid errors.`
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
_updateBlurTargetId = () => {
|
|
140
|
+
const blurTarget = this.props.blurTarget?.current;
|
|
141
|
+
const blurTargetId = blurTarget ? findNodeHandle(blurTarget) : undefined;
|
|
142
|
+
this.setState(() => ({
|
|
143
|
+
blurTargetId,
|
|
144
|
+
}));
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
_getBlurMethod(): BlurMethod {
|
|
148
|
+
const providedMethod =
|
|
149
|
+
this.props.blurMethod ?? this.props.experimentalBlurMethod;
|
|
150
|
+
return providedMethod ?? 'none';
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
render() {
|
|
154
|
+
const {
|
|
155
|
+
tint = 'default',
|
|
156
|
+
intensity = 30,
|
|
157
|
+
blurReductionFactor = 4,
|
|
158
|
+
style,
|
|
159
|
+
children,
|
|
160
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
161
|
+
blurTarget,
|
|
162
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
163
|
+
blurMethod,
|
|
164
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
165
|
+
experimentalBlurMethod,
|
|
166
|
+
...props
|
|
167
|
+
} = this.props;
|
|
168
|
+
|
|
169
|
+
return (
|
|
170
|
+
<View {...props} style={[styles.container, style]}>
|
|
171
|
+
<NativeBlurView
|
|
172
|
+
blurTargetId={this.state.blurTargetId ?? 0}
|
|
173
|
+
tint={tint}
|
|
174
|
+
intensity={intensity}
|
|
175
|
+
blurReductionFactor={blurReductionFactor}
|
|
176
|
+
blurMethod={this._getBlurMethod()}
|
|
177
|
+
style={StyleSheet.absoluteFill}
|
|
178
|
+
/>
|
|
179
|
+
{children}
|
|
180
|
+
</View>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const styles = StyleSheet.create({
|
|
186
|
+
container: { backgroundColor: 'transparent' },
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
// ----- BlurTargetView -----
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* A container view that can be used as a blur target on Android.
|
|
193
|
+
* Wrap the content you want to blur with this view, then pass
|
|
194
|
+
* a ref to it via the `blurTarget` prop of `BlurView`.
|
|
195
|
+
*
|
|
196
|
+
* On iOS, this is just a regular View since UIVisualEffectView
|
|
197
|
+
* naturally blurs whatever is behind it.
|
|
198
|
+
*/
|
|
199
|
+
export const BlurTargetView = React.forwardRef<View, ViewProps>(
|
|
200
|
+
(props, ref) => {
|
|
201
|
+
if (Platform.OS === 'android') {
|
|
202
|
+
return <NativeBlurTargetView {...props} ref={ref as any} />;
|
|
203
|
+
}
|
|
204
|
+
return <View {...props} ref={ref as any} collapsable={false} />;
|
|
205
|
+
}
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
// ----- Exports -----
|
|
209
|
+
|
|
210
|
+
export type {
|
|
211
|
+
BlurTint,
|
|
212
|
+
BlurMethod,
|
|
213
|
+
NitroBlurProps,
|
|
214
|
+
NitroBlurMethods,
|
|
215
|
+
} from './NitroBlur.nitro';
|