react-native-bootsplash 3.2.6 → 4.0.0-beta.2
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 +1 -1
- package/README.md +75 -134
- package/RNBootSplash.podspec +1 -1
- package/ReactNativeBootsplash.res +2 -6
- package/android/build.gradle +13 -11
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplash.java +2 -3
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashModule.java +82 -155
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashPackage.java +6 -2
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashTask.java +1 -15
- package/dist/commonjs/generate.js +118 -110
- package/dist/commonjs/generate.js.map +1 -1
- package/dist/commonjs/index.js +4 -12
- package/dist/commonjs/index.js.map +1 -1
- package/dist/module/generate.js +114 -107
- package/dist/module/generate.js.map +1 -1
- package/dist/module/index.js +2 -8
- package/dist/module/index.js.map +1 -1
- package/dist/typescript/generate.d.ts +4 -4
- package/dist/typescript/index.d.ts +0 -2
- package/ios/RNBootSplash.h +3 -13
- package/ios/RNBootSplash.m +44 -93
- package/ios/RNBootSplash.xcodeproj/project.pbxproj +2 -2
- package/package.json +17 -19
- package/react-native.config.js +21 -8
- package/src/generate.ts +98 -139
- package/src/index.ts +4 -6
- package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashActivity.java +0 -55
- package/android/src/main/res/values/ids.xml +0 -3
package/dist/module/generate.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import fs from "fs-extra";
|
|
3
|
-
import
|
|
3
|
+
import Jimp from "jimp";
|
|
4
4
|
import path from "path";
|
|
5
5
|
const logoFileName = "bootsplash_logo";
|
|
6
|
-
const xcassetName = "BootSplashLogo";
|
|
6
|
+
const xcassetName = "BootSplashLogo"; // https://github.com/androidx/androidx/blob/androidx-main/core/core-splashscreen/src/main/res/values/dimens.xml#L22
|
|
7
|
+
|
|
8
|
+
const splashScreenIconSizeNoBackground = 288;
|
|
7
9
|
const androidColorName = "bootsplash_background";
|
|
8
10
|
const androidColorRegex = /<color name="bootsplash_background">#\w+<\/color>/g;
|
|
9
11
|
const ContentsJson = `{
|
|
@@ -31,11 +33,12 @@ const ContentsJson = `{
|
|
|
31
33
|
}
|
|
32
34
|
`;
|
|
33
35
|
|
|
34
|
-
const getStoryboard =
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
const getStoryboard = _ref => {
|
|
37
|
+
let {
|
|
38
|
+
height,
|
|
39
|
+
width,
|
|
40
|
+
backgroundColor: hex
|
|
41
|
+
} = _ref;
|
|
39
42
|
const r = (parseInt(hex[1] + hex[2], 16) / 255).toPrecision(15);
|
|
40
43
|
const g = (parseInt(hex[3] + hex[4], 16) / 255).toPrecision(15);
|
|
41
44
|
const b = (parseInt(hex[5] + hex[6], 16) / 255).toPrecision(15);
|
|
@@ -87,18 +90,8 @@ const getStoryboard = ({
|
|
|
87
90
|
`;
|
|
88
91
|
};
|
|
89
92
|
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
|
|
93
|
-
<item android:drawable="@color/${androidColorName}" />
|
|
94
|
-
|
|
95
|
-
<item>
|
|
96
|
-
<bitmap android:src="@mipmap/${logoFileName}" android:gravity="center" />
|
|
97
|
-
</item>
|
|
98
|
-
</layer-list>
|
|
99
|
-
`;
|
|
100
|
-
|
|
101
|
-
const log = (text, dim = false) => {
|
|
93
|
+
const log = function (text) {
|
|
94
|
+
let dim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
102
95
|
console.log(dim ? chalk.dim(text) : text);
|
|
103
96
|
};
|
|
104
97
|
|
|
@@ -110,76 +103,69 @@ const toFullHexadecimal = hex => {
|
|
|
110
103
|
return up.length === 4 ? "#" + up[1] + up[1] + up[2] + up[2] + up[3] + up[3] : up;
|
|
111
104
|
};
|
|
112
105
|
|
|
113
|
-
export const generate = async
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
106
|
+
export const generate = async _ref2 => {
|
|
107
|
+
let {
|
|
108
|
+
android,
|
|
109
|
+
ios,
|
|
110
|
+
workingPath,
|
|
111
|
+
logoPath,
|
|
112
|
+
backgroundColor,
|
|
113
|
+
logoWidth,
|
|
114
|
+
flavor,
|
|
115
|
+
assetsPath
|
|
116
|
+
} = _ref2;
|
|
117
|
+
|
|
123
118
|
if (!isValidHexadecimal(backgroundColor)) {
|
|
124
119
|
throw new Error("--background-color value is not a valid hexadecimal color.");
|
|
125
120
|
}
|
|
126
121
|
|
|
127
|
-
const image = await
|
|
122
|
+
const image = await Jimp.read(logoPath);
|
|
128
123
|
const backgroundColorHex = toFullHexadecimal(backgroundColor);
|
|
129
|
-
const images = [];
|
|
130
124
|
|
|
131
125
|
const getHeight = size => Math.ceil(size * (image.bitmap.height / image.bitmap.width));
|
|
132
126
|
|
|
133
|
-
const
|
|
134
|
-
"@1x": logoWidth,
|
|
135
|
-
"@1,5x": logoWidth * 1.5,
|
|
136
|
-
"@2x": logoWidth * 2,
|
|
137
|
-
"@3x": logoWidth * 3,
|
|
138
|
-
"@4x": logoWidth * 4
|
|
139
|
-
};
|
|
140
|
-
const height = {
|
|
141
|
-
"@1x": getHeight(width["@1x"]),
|
|
142
|
-
"@1,5x": getHeight(width["@1,5x"]),
|
|
143
|
-
"@2x": getHeight(width["@2x"]),
|
|
144
|
-
"@3x": getHeight(width["@3x"]),
|
|
145
|
-
"@4x": getHeight(width["@4x"])
|
|
146
|
-
};
|
|
127
|
+
const logWrite = (emoji, filePath, dimensions) => log(`${emoji} ${path.relative(workingPath, filePath)}` + (dimensions != null ? ` (${dimensions.width}x${dimensions.height})` : ""), true);
|
|
147
128
|
|
|
148
129
|
if (assetsPath && fs.existsSync(assetsPath)) {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
height: height["@1x"]
|
|
130
|
+
await Promise.all([{
|
|
131
|
+
ratio: 1,
|
|
132
|
+
suffix: ""
|
|
153
133
|
}, {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
height: height["@1,5x"]
|
|
134
|
+
ratio: 1.5,
|
|
135
|
+
suffix: "@1,5x"
|
|
157
136
|
}, {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
height: height["@2x"]
|
|
137
|
+
ratio: 2,
|
|
138
|
+
suffix: "@2x"
|
|
161
139
|
}, {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
height: height["@3x"]
|
|
140
|
+
ratio: 3,
|
|
141
|
+
suffix: "@3x"
|
|
165
142
|
}, {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
143
|
+
ratio: 4,
|
|
144
|
+
suffix: "@4x"
|
|
145
|
+
}].map(_ref3 => {
|
|
146
|
+
let {
|
|
147
|
+
ratio,
|
|
148
|
+
suffix
|
|
149
|
+
} = _ref3;
|
|
150
|
+
const fileName = `${logoFileName}${suffix}.png`;
|
|
151
|
+
const filePath = path.resolve(assetsPath, fileName);
|
|
152
|
+
const width = logoWidth * ratio;
|
|
153
|
+
const height = getHeight(width);
|
|
154
|
+
return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
|
|
155
|
+
logWrite("✨", filePath, {
|
|
156
|
+
width,
|
|
157
|
+
height
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}));
|
|
170
161
|
}
|
|
171
162
|
|
|
172
163
|
if (android) {
|
|
173
164
|
const appPath = android.appName ? path.resolve(android.sourceDir, android.appName) : path.resolve(android.sourceDir); // @react-native-community/cli 2.x & 3.x support
|
|
174
165
|
|
|
175
166
|
const resPath = path.resolve(appPath, "src", flavor, "res");
|
|
176
|
-
const drawablePath = path.resolve(resPath, "drawable");
|
|
177
167
|
const valuesPath = path.resolve(resPath, "values");
|
|
178
|
-
fs.ensureDirSync(drawablePath);
|
|
179
168
|
fs.ensureDirSync(valuesPath);
|
|
180
|
-
const bootSplashXmlPath = path.resolve(drawablePath, "bootsplash.xml");
|
|
181
|
-
fs.writeFileSync(bootSplashXmlPath, bootSplashXml, "utf-8");
|
|
182
|
-
log(`✨ ${path.relative(workingDirectory, bootSplashXmlPath)}`, true);
|
|
183
169
|
const colorsXmlPath = path.resolve(valuesPath, "colors.xml");
|
|
184
170
|
const colorsXmlEntry = `<color name="${androidColorName}">${backgroundColorHex}</color>`;
|
|
185
171
|
|
|
@@ -192,33 +178,49 @@ export const generate = async ({
|
|
|
192
178
|
fs.writeFileSync(colorsXmlPath, colorsXml.replace(/<\/resources>/g, ` ${colorsXmlEntry}\n</resources>`), "utf-8");
|
|
193
179
|
}
|
|
194
180
|
|
|
195
|
-
|
|
181
|
+
logWrite("✏️ ", colorsXmlPath);
|
|
196
182
|
} else {
|
|
197
183
|
fs.writeFileSync(colorsXmlPath, `<resources>\n ${colorsXmlEntry}\n</resources>\n`, "utf-8");
|
|
198
|
-
|
|
184
|
+
logWrite("✨", colorsXmlPath);
|
|
199
185
|
}
|
|
200
186
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
height: height["@1x"]
|
|
187
|
+
await Promise.all([{
|
|
188
|
+
ratio: 1,
|
|
189
|
+
directory: "mipmap-mdpi"
|
|
205
190
|
}, {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
height: height["@1,5x"]
|
|
191
|
+
ratio: 1.5,
|
|
192
|
+
directory: "mipmap-hdpi"
|
|
209
193
|
}, {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
height: height["@2x"]
|
|
194
|
+
ratio: 2,
|
|
195
|
+
directory: "mipmap-xhdpi"
|
|
213
196
|
}, {
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
height: height["@3x"]
|
|
197
|
+
ratio: 3,
|
|
198
|
+
directory: "mipmap-xxhdpi"
|
|
217
199
|
}, {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
200
|
+
ratio: 4,
|
|
201
|
+
directory: "mipmap-xxxhdpi"
|
|
202
|
+
}].map(_ref4 => {
|
|
203
|
+
let {
|
|
204
|
+
ratio,
|
|
205
|
+
directory
|
|
206
|
+
} = _ref4;
|
|
207
|
+
const fileName = `${logoFileName}.png`;
|
|
208
|
+
const filePath = path.resolve(resPath, directory, fileName);
|
|
209
|
+
const width = logoWidth * ratio;
|
|
210
|
+
const height = getHeight(width);
|
|
211
|
+
const canvasSize = splashScreenIconSizeNoBackground * ratio; // https://github.com/oliver-moran/jimp/tree/master/packages/jimp#creating-new-images
|
|
212
|
+
|
|
213
|
+
const canvas = new Jimp(canvasSize, canvasSize, 0xffffff00);
|
|
214
|
+
const logo = image.clone().resize(width, height);
|
|
215
|
+
const x = (canvasSize - width) / 2;
|
|
216
|
+
const y = (canvasSize - height) / 2;
|
|
217
|
+
return canvas.blit(logo, x, y).quality(100).writeAsync(filePath).then(() => {
|
|
218
|
+
logWrite("✨", filePath, {
|
|
219
|
+
width: canvasSize,
|
|
220
|
+
height: canvasSize
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
}));
|
|
222
224
|
}
|
|
223
225
|
|
|
224
226
|
if (ios) {
|
|
@@ -228,11 +230,11 @@ export const generate = async ({
|
|
|
228
230
|
if (fs.existsSync(projectPath)) {
|
|
229
231
|
const storyboardPath = path.resolve(projectPath, "BootSplash.storyboard");
|
|
230
232
|
fs.writeFileSync(storyboardPath, getStoryboard({
|
|
231
|
-
height:
|
|
232
|
-
width:
|
|
233
|
+
height: getHeight(logoWidth),
|
|
234
|
+
width: logoWidth,
|
|
233
235
|
backgroundColor: backgroundColorHex
|
|
234
236
|
}), "utf-8");
|
|
235
|
-
log(`✨ ${path.relative(
|
|
237
|
+
log(`✨ ${path.relative(workingPath, storyboardPath)}`, true);
|
|
236
238
|
} else {
|
|
237
239
|
log(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
|
|
238
240
|
}
|
|
@@ -241,31 +243,36 @@ export const generate = async ({
|
|
|
241
243
|
const imageSetPath = path.resolve(imagesPath, xcassetName + ".imageset");
|
|
242
244
|
fs.ensureDirSync(imageSetPath);
|
|
243
245
|
fs.writeFileSync(path.resolve(imageSetPath, "Contents.json"), ContentsJson, "utf-8");
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
height: height["@1x"]
|
|
246
|
+
await Promise.all([{
|
|
247
|
+
ratio: 1,
|
|
248
|
+
suffix: ""
|
|
248
249
|
}, {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
height: height["@2x"]
|
|
250
|
+
ratio: 2,
|
|
251
|
+
suffix: "@2x"
|
|
252
252
|
}, {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
253
|
+
ratio: 3,
|
|
254
|
+
suffix: "@3x"
|
|
255
|
+
}].map(_ref5 => {
|
|
256
|
+
let {
|
|
257
|
+
ratio,
|
|
258
|
+
suffix
|
|
259
|
+
} = _ref5;
|
|
260
|
+
const fileName = `${logoFileName}${suffix}.png`;
|
|
261
|
+
const filePath = path.resolve(imageSetPath, fileName);
|
|
262
|
+
const width = logoWidth * ratio;
|
|
263
|
+
const height = getHeight(width);
|
|
264
|
+
return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
|
|
265
|
+
logWrite("✨", filePath, {
|
|
266
|
+
width,
|
|
267
|
+
height
|
|
268
|
+
});
|
|
269
|
+
});
|
|
270
|
+
}));
|
|
257
271
|
} else {
|
|
258
272
|
log(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
|
|
259
273
|
}
|
|
260
274
|
}
|
|
261
275
|
|
|
262
|
-
await Promise.all(images.map(({
|
|
263
|
-
filePath,
|
|
264
|
-
width,
|
|
265
|
-
height
|
|
266
|
-
}) => image.clone().cover(width, height).writeAsync(filePath).then(() => {
|
|
267
|
-
log(`✨ ${path.relative(workingDirectory, filePath)} (${width}x${height})`, true);
|
|
268
|
-
})));
|
|
269
276
|
log(`✅ Done! Thanks for using ${chalk.underline("react-native-bootsplash")}.`);
|
|
270
277
|
};
|
|
271
278
|
//# sourceMappingURL=generate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["generate.ts"],"names":["chalk","fs","jimp","path","logoFileName","xcassetName","androidColorName","androidColorRegex","ContentsJson","getStoryboard","height","width","backgroundColor","hex","r","parseInt","toPrecision","g","b","bootSplashXml","log","text","dim","console","isValidHexadecimal","value","test","toFullHexadecimal","prefixed","up","toUpperCase","length","generate","android","ios","workingDirectory","logoPath","logoWidth","flavor","assetsPath","Error","image","read","backgroundColorHex","images","getHeight","size","Math","ceil","bitmap","existsSync","push","filePath","resolve","appPath","appName","sourceDir","resPath","drawablePath","valuesPath","ensureDirSync","bootSplashXmlPath","writeFileSync","relative","colorsXmlPath","colorsXmlEntry","colorsXml","readFileSync","match","replace","projectPath","imagesPath","storyboardPath","imageSetPath","Promise","all","map","clone","cover","writeAsync","then","underline"],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport fs from \"fs-extra\";\nimport jimp from \"jimp\";\nimport path from \"path\";\n\nconst logoFileName = \"bootsplash_logo\";\nconst xcassetName = \"BootSplashLogo\";\nconst androidColorName = \"bootsplash_background\";\nconst androidColorRegex = /<color name=\"bootsplash_background\">#\\w+<\\/color>/g;\n\nconst ContentsJson = `{\n \"images\": [\n {\n \"idiom\": \"universal\",\n \"filename\": \"${logoFileName}.png\",\n \"scale\": \"1x\"\n },\n {\n \"idiom\": \"universal\",\n \"filename\": \"${logoFileName}@2x.png\",\n \"scale\": \"2x\"\n },\n {\n \"idiom\": \"universal\",\n \"filename\": \"${logoFileName}@3x.png\",\n \"scale\": \"3x\"\n }\n ],\n \"info\": {\n \"version\": 1,\n \"author\": \"xcode\"\n }\n}\n`;\n\nconst getStoryboard = ({\n height,\n width,\n backgroundColor: hex,\n}: {\n height: number;\n width: number;\n backgroundColor: string;\n}) => {\n const r = (parseInt(hex[1] + hex[2], 16) / 255).toPrecision(15);\n const g = (parseInt(hex[3] + hex[4], 16) / 255).toPrecision(15);\n const b = (parseInt(hex[5] + hex[6], 16) / 255).toPrecision(15);\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"17147\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n <dependencies>\n <deployment identifier=\"iOS\"/>\n <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17120\"/>\n <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n </dependencies>\n <scenes>\n <!--View Controller-->\n <scene sceneID=\"EHf-IW-A2E\">\n <objects>\n <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n <view key=\"view\" autoresizesSubviews=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n <autoresizingMask key=\"autoresizingMask\"/>\n <subviews>\n <imageView autoresizesSubviews=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" image=\"BootSplashLogo\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3lX-Ut-9ad\">\n <rect key=\"frame\" x=\"${(375 - width) / 2}\" y=\"${\n (667 - height) / 2\n }\" width=\"${width}\" height=\"${height}\"/>\n <accessibility key=\"accessibilityConfiguration\">\n <accessibilityTraits key=\"traits\" image=\"YES\" notEnabled=\"YES\"/>\n </accessibility>\n </imageView>\n </subviews>\n <viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>\n <color key=\"backgroundColor\" red=\"${r}\" green=\"${g}\" blue=\"${b}\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n <accessibility key=\"accessibilityConfiguration\">\n <accessibilityTraits key=\"traits\" notEnabled=\"YES\"/>\n </accessibility>\n <constraints>\n <constraint firstItem=\"3lX-Ut-9ad\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"Fh9-Fy-1nT\"/>\n <constraint firstItem=\"3lX-Ut-9ad\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"nvB-Ic-PnI\"/>\n </constraints>\n </view>\n </viewController>\n <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n </objects>\n <point key=\"canvasLocation\" x=\"0.0\" y=\"0.0\"/>\n </scene>\n </scenes>\n <resources>\n <image name=\"${xcassetName}\" width=\"${width}\" height=\"${height}\"/>\n </resources>\n</document>\n`;\n};\n\nconst bootSplashXml = `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" android:opacity=\"opaque\">\n <item android:drawable=\"@color/${androidColorName}\" />\n\n <item>\n <bitmap android:src=\"@mipmap/${logoFileName}\" android:gravity=\"center\" />\n </item>\n</layer-list>\n`;\n\nconst log = (text: string, dim = false) => {\n console.log(dim ? chalk.dim(text) : text);\n};\n\nconst isValidHexadecimal = (value: string) =>\n /^#?([0-9A-F]{3}){1,2}$/i.test(value);\n\nconst toFullHexadecimal = (hex: string) => {\n const prefixed = hex[0] === \"#\" ? hex : `#${hex}`;\n const up = prefixed.toUpperCase();\n\n return up.length === 4\n ? \"#\" + up[1] + up[1] + up[2] + up[2] + up[3] + up[3]\n : up;\n};\n\nexport const generate = async ({\n android,\n ios,\n\n workingDirectory,\n logoPath,\n backgroundColor,\n logoWidth,\n flavor,\n assetsPath,\n}: {\n android: {\n sourceDir: string;\n appName: string;\n } | null;\n ios: {\n projectPath: string;\n } | null;\n\n workingDirectory: string;\n logoPath: string;\n backgroundColor: string;\n logoWidth: number;\n flavor: string;\n assetsPath?: string;\n}) => {\n if (!isValidHexadecimal(backgroundColor)) {\n throw new Error(\n \"--background-color value is not a valid hexadecimal color.\",\n );\n }\n\n const image = await jimp.read(logoPath);\n const backgroundColorHex = toFullHexadecimal(backgroundColor);\n\n const images: {\n filePath: string;\n width: number;\n height: number;\n }[] = [];\n\n const getHeight = (size: number) =>\n Math.ceil(size * (image.bitmap.height / image.bitmap.width));\n\n const width = {\n \"@1x\": logoWidth,\n \"@1,5x\": logoWidth * 1.5,\n \"@2x\": logoWidth * 2,\n \"@3x\": logoWidth * 3,\n \"@4x\": logoWidth * 4,\n };\n\n const height = {\n \"@1x\": getHeight(width[\"@1x\"]),\n \"@1,5x\": getHeight(width[\"@1,5x\"]),\n \"@2x\": getHeight(width[\"@2x\"]),\n \"@3x\": getHeight(width[\"@3x\"]),\n \"@4x\": getHeight(width[\"@4x\"]),\n };\n\n if (assetsPath && fs.existsSync(assetsPath)) {\n images.push(\n {\n filePath: path.resolve(assetsPath, logoFileName + \".png\"),\n width: width[\"@1x\"],\n height: height[\"@1x\"],\n },\n {\n filePath: path.resolve(assetsPath, logoFileName + \"@1,5x.png\"),\n width: width[\"@1,5x\"],\n height: height[\"@1,5x\"],\n },\n {\n filePath: path.resolve(assetsPath, logoFileName + \"@2x.png\"),\n width: width[\"@2x\"],\n height: height[\"@2x\"],\n },\n {\n filePath: path.resolve(assetsPath, logoFileName + \"@3x.png\"),\n width: width[\"@3x\"],\n height: height[\"@3x\"],\n },\n {\n filePath: path.resolve(assetsPath, logoFileName + \"@4x.png\"),\n width: width[\"@4x\"],\n height: height[\"@4x\"],\n },\n );\n }\n\n if (android) {\n const appPath = android.appName\n ? path.resolve(android.sourceDir, android.appName)\n : path.resolve(android.sourceDir); // @react-native-community/cli 2.x & 3.x support\n\n const resPath = path.resolve(appPath, \"src\", flavor, \"res\");\n const drawablePath = path.resolve(resPath, \"drawable\");\n const valuesPath = path.resolve(resPath, \"values\");\n\n fs.ensureDirSync(drawablePath);\n fs.ensureDirSync(valuesPath);\n\n const bootSplashXmlPath = path.resolve(drawablePath, \"bootsplash.xml\");\n fs.writeFileSync(bootSplashXmlPath, bootSplashXml, \"utf-8\");\n log(`✨ ${path.relative(workingDirectory, bootSplashXmlPath)}`, true);\n\n const colorsXmlPath = path.resolve(valuesPath, \"colors.xml\");\n const colorsXmlEntry = `<color name=\"${androidColorName}\">${backgroundColorHex}</color>`;\n\n if (fs.existsSync(colorsXmlPath)) {\n const colorsXml = fs.readFileSync(colorsXmlPath, \"utf-8\");\n\n if (colorsXml.match(androidColorRegex)) {\n fs.writeFileSync(\n colorsXmlPath,\n colorsXml.replace(androidColorRegex, colorsXmlEntry),\n \"utf-8\",\n );\n } else {\n fs.writeFileSync(\n colorsXmlPath,\n colorsXml.replace(\n /<\\/resources>/g,\n ` ${colorsXmlEntry}\\n</resources>`,\n ),\n \"utf-8\",\n );\n }\n\n log(`✏️ ${path.relative(workingDirectory, colorsXmlPath)}`, true);\n } else {\n fs.writeFileSync(\n colorsXmlPath,\n `<resources>\\n ${colorsXmlEntry}\\n</resources>\\n`,\n \"utf-8\",\n );\n\n log(`✨ ${path.relative(workingDirectory, colorsXmlPath)}`, true);\n }\n\n images.push(\n {\n filePath: path.resolve(resPath, \"mipmap-mdpi\", logoFileName + \".png\"),\n width: width[\"@1x\"],\n height: height[\"@1x\"],\n },\n {\n filePath: path.resolve(resPath, \"mipmap-hdpi\", logoFileName + \".png\"),\n width: width[\"@1,5x\"],\n height: height[\"@1,5x\"],\n },\n {\n filePath: path.resolve(resPath, \"mipmap-xhdpi\", logoFileName + \".png\"),\n width: width[\"@2x\"],\n height: height[\"@2x\"],\n },\n {\n filePath: path.resolve(resPath, \"mipmap-xxhdpi\", logoFileName + \".png\"),\n width: width[\"@3x\"],\n height: height[\"@3x\"],\n },\n {\n filePath: path.resolve(\n resPath,\n \"mipmap-xxxhdpi\",\n logoFileName + \".png\",\n ),\n width: width[\"@4x\"],\n height: height[\"@4x\"],\n },\n );\n }\n\n if (ios) {\n const projectPath = ios.projectPath.replace(/.xcodeproj$/, \"\");\n const imagesPath = path.resolve(projectPath, \"Images.xcassets\");\n\n if (fs.existsSync(projectPath)) {\n const storyboardPath = path.resolve(projectPath, \"BootSplash.storyboard\");\n\n fs.writeFileSync(\n storyboardPath,\n getStoryboard({\n height: height[\"@1x\"],\n width: width[\"@1x\"],\n backgroundColor: backgroundColorHex,\n }),\n \"utf-8\",\n );\n\n log(`✨ ${path.relative(workingDirectory, storyboardPath)}`, true);\n } else {\n log(\n `No \"${projectPath}\" directory found. Skipping iOS storyboard generation…`,\n );\n }\n\n if (fs.existsSync(imagesPath)) {\n const imageSetPath = path.resolve(imagesPath, xcassetName + \".imageset\");\n fs.ensureDirSync(imageSetPath);\n\n fs.writeFileSync(\n path.resolve(imageSetPath, \"Contents.json\"),\n ContentsJson,\n \"utf-8\",\n );\n\n images.push(\n {\n filePath: path.resolve(imageSetPath, logoFileName + \".png\"),\n width: width[\"@1x\"],\n height: height[\"@1x\"],\n },\n {\n filePath: path.resolve(imageSetPath, logoFileName + \"@2x.png\"),\n width: width[\"@2x\"],\n height: height[\"@2x\"],\n },\n {\n filePath: path.resolve(imageSetPath, logoFileName + \"@3x.png\"),\n width: width[\"@3x\"],\n height: height[\"@3x\"],\n },\n );\n } else {\n log(\n `No \"${imagesPath}\" directory found. Skipping iOS images generation…`,\n );\n }\n }\n\n await Promise.all(\n images.map(({ filePath, width, height }) =>\n image\n .clone()\n .cover(width, height)\n .writeAsync(filePath)\n .then(() => {\n log(\n `✨ ${path.relative(\n workingDirectory,\n filePath,\n )} (${width}x${height})`,\n true,\n );\n }),\n ),\n );\n\n log(\n `✅ Done! Thanks for using ${chalk.underline(\"react-native-bootsplash\")}.`,\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["generate.ts"],"names":["chalk","fs","Jimp","path","logoFileName","xcassetName","splashScreenIconSizeNoBackground","androidColorName","androidColorRegex","ContentsJson","getStoryboard","height","width","backgroundColor","hex","r","parseInt","toPrecision","g","b","log","text","dim","console","isValidHexadecimal","value","test","toFullHexadecimal","prefixed","up","toUpperCase","length","generate","android","ios","workingPath","logoPath","logoWidth","flavor","assetsPath","Error","image","read","backgroundColorHex","getHeight","size","Math","ceil","bitmap","logWrite","emoji","filePath","dimensions","relative","existsSync","Promise","all","ratio","suffix","map","fileName","resolve","clone","resize","quality","writeAsync","then","appPath","appName","sourceDir","resPath","valuesPath","ensureDirSync","colorsXmlPath","colorsXmlEntry","colorsXml","readFileSync","match","writeFileSync","replace","directory","canvasSize","canvas","logo","x","y","blit","projectPath","imagesPath","storyboardPath","imageSetPath","underline"],"mappings":"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","sourcesContent":["import chalk from \"chalk\";\nimport fs from \"fs-extra\";\nimport Jimp from \"jimp\";\nimport path from \"path\";\n\nconst logoFileName = \"bootsplash_logo\";\nconst xcassetName = \"BootSplashLogo\";\n// https://github.com/androidx/androidx/blob/androidx-main/core/core-splashscreen/src/main/res/values/dimens.xml#L22\nconst splashScreenIconSizeNoBackground = 288;\nconst androidColorName = \"bootsplash_background\";\nconst androidColorRegex = /<color name=\"bootsplash_background\">#\\w+<\\/color>/g;\n\nconst ContentsJson = `{\n \"images\": [\n {\n \"idiom\": \"universal\",\n \"filename\": \"${logoFileName}.png\",\n \"scale\": \"1x\"\n },\n {\n \"idiom\": \"universal\",\n \"filename\": \"${logoFileName}@2x.png\",\n \"scale\": \"2x\"\n },\n {\n \"idiom\": \"universal\",\n \"filename\": \"${logoFileName}@3x.png\",\n \"scale\": \"3x\"\n }\n ],\n \"info\": {\n \"version\": 1,\n \"author\": \"xcode\"\n }\n}\n`;\n\nconst getStoryboard = ({\n height,\n width,\n backgroundColor: hex,\n}: {\n height: number;\n width: number;\n backgroundColor: string;\n}) => {\n const r = (parseInt(hex[1] + hex[2], 16) / 255).toPrecision(15);\n const g = (parseInt(hex[3] + hex[4], 16) / 255).toPrecision(15);\n const b = (parseInt(hex[5] + hex[6], 16) / 255).toPrecision(15);\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"17147\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" useSafeAreas=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n <device id=\"retina4_7\" orientation=\"portrait\" appearance=\"light\"/>\n <dependencies>\n <deployment identifier=\"iOS\"/>\n <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"17120\"/>\n <capability name=\"Safe area layout guides\" minToolsVersion=\"9.0\"/>\n <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n </dependencies>\n <scenes>\n <!--View Controller-->\n <scene sceneID=\"EHf-IW-A2E\">\n <objects>\n <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n <view key=\"view\" autoresizesSubviews=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n <autoresizingMask key=\"autoresizingMask\"/>\n <subviews>\n <imageView autoresizesSubviews=\"NO\" clipsSubviews=\"YES\" userInteractionEnabled=\"NO\" contentMode=\"scaleAspectFit\" image=\"BootSplashLogo\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"3lX-Ut-9ad\">\n <rect key=\"frame\" x=\"${(375 - width) / 2}\" y=\"${\n (667 - height) / 2\n }\" width=\"${width}\" height=\"${height}\"/>\n <accessibility key=\"accessibilityConfiguration\">\n <accessibilityTraits key=\"traits\" image=\"YES\" notEnabled=\"YES\"/>\n </accessibility>\n </imageView>\n </subviews>\n <viewLayoutGuide key=\"safeArea\" id=\"Bcu-3y-fUS\"/>\n <color key=\"backgroundColor\" red=\"${r}\" green=\"${g}\" blue=\"${b}\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n <accessibility key=\"accessibilityConfiguration\">\n <accessibilityTraits key=\"traits\" notEnabled=\"YES\"/>\n </accessibility>\n <constraints>\n <constraint firstItem=\"3lX-Ut-9ad\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"Fh9-Fy-1nT\"/>\n <constraint firstItem=\"3lX-Ut-9ad\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"nvB-Ic-PnI\"/>\n </constraints>\n </view>\n </viewController>\n <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n </objects>\n <point key=\"canvasLocation\" x=\"0.0\" y=\"0.0\"/>\n </scene>\n </scenes>\n <resources>\n <image name=\"${xcassetName}\" width=\"${width}\" height=\"${height}\"/>\n </resources>\n</document>\n`;\n};\n\nconst log = (text: string, dim = false) => {\n console.log(dim ? chalk.dim(text) : text);\n};\n\nconst isValidHexadecimal = (value: string) =>\n /^#?([0-9A-F]{3}){1,2}$/i.test(value);\n\nconst toFullHexadecimal = (hex: string) => {\n const prefixed = hex[0] === \"#\" ? hex : `#${hex}`;\n const up = prefixed.toUpperCase();\n\n return up.length === 4\n ? \"#\" + up[1] + up[1] + up[2] + up[2] + up[3] + up[3]\n : up;\n};\n\nexport const generate = async ({\n android,\n ios,\n\n workingPath,\n logoPath,\n backgroundColor,\n logoWidth,\n flavor,\n assetsPath,\n}: {\n android: {\n sourceDir: string;\n appName: string;\n } | null;\n ios: {\n projectPath: string;\n } | null;\n\n workingPath: string;\n logoPath: string;\n assetsPath?: string;\n\n backgroundColor: string;\n flavor: string;\n logoWidth: number;\n}) => {\n if (!isValidHexadecimal(backgroundColor)) {\n throw new Error(\n \"--background-color value is not a valid hexadecimal color.\",\n );\n }\n\n const image = await Jimp.read(logoPath);\n const backgroundColorHex = toFullHexadecimal(backgroundColor);\n\n const getHeight = (size: number) =>\n Math.ceil(size * (image.bitmap.height / image.bitmap.width));\n\n const logWrite = (\n emoji: string,\n filePath: string,\n dimensions?: { width: number; height: number },\n ) =>\n log(\n `${emoji} ${path.relative(workingPath, filePath)}` +\n (dimensions != null\n ? ` (${dimensions.width}x${dimensions.height})`\n : \"\"),\n true,\n );\n\n if (assetsPath && fs.existsSync(assetsPath)) {\n await Promise.all(\n [\n { ratio: 1, suffix: \"\" },\n { ratio: 1.5, suffix: \"@1,5x\" },\n { ratio: 2, suffix: \"@2x\" },\n { ratio: 3, suffix: \"@3x\" },\n { ratio: 4, suffix: \"@4x\" },\n ].map(({ ratio, suffix }) => {\n const fileName = `${logoFileName}${suffix}.png`;\n const filePath = path.resolve(assetsPath, fileName);\n const width = logoWidth * ratio;\n const height = getHeight(width);\n\n return image\n .clone()\n .resize(width, height)\n .quality(100)\n .writeAsync(filePath)\n .then(() => {\n logWrite(\"✨\", filePath, { width, height });\n });\n }),\n );\n }\n\n if (android) {\n const appPath = android.appName\n ? path.resolve(android.sourceDir, android.appName)\n : path.resolve(android.sourceDir); // @react-native-community/cli 2.x & 3.x support\n\n const resPath = path.resolve(appPath, \"src\", flavor, \"res\");\n const valuesPath = path.resolve(resPath, \"values\");\n\n fs.ensureDirSync(valuesPath);\n\n const colorsXmlPath = path.resolve(valuesPath, \"colors.xml\");\n const colorsXmlEntry = `<color name=\"${androidColorName}\">${backgroundColorHex}</color>`;\n\n if (fs.existsSync(colorsXmlPath)) {\n const colorsXml = fs.readFileSync(colorsXmlPath, \"utf-8\");\n\n if (colorsXml.match(androidColorRegex)) {\n fs.writeFileSync(\n colorsXmlPath,\n colorsXml.replace(androidColorRegex, colorsXmlEntry),\n \"utf-8\",\n );\n } else {\n fs.writeFileSync(\n colorsXmlPath,\n colorsXml.replace(\n /<\\/resources>/g,\n ` ${colorsXmlEntry}\\n</resources>`,\n ),\n \"utf-8\",\n );\n }\n\n logWrite(\"✏️ \", colorsXmlPath);\n } else {\n fs.writeFileSync(\n colorsXmlPath,\n `<resources>\\n ${colorsXmlEntry}\\n</resources>\\n`,\n \"utf-8\",\n );\n\n logWrite(\"✨\", colorsXmlPath);\n }\n\n await Promise.all(\n [\n { ratio: 1, directory: \"mipmap-mdpi\" },\n { ratio: 1.5, directory: \"mipmap-hdpi\" },\n { ratio: 2, directory: \"mipmap-xhdpi\" },\n { ratio: 3, directory: \"mipmap-xxhdpi\" },\n { ratio: 4, directory: \"mipmap-xxxhdpi\" },\n ].map(({ ratio, directory }) => {\n const fileName = `${logoFileName}.png`;\n const filePath = path.resolve(resPath, directory, fileName);\n const width = logoWidth * ratio;\n const height = getHeight(width);\n\n const canvasSize = splashScreenIconSizeNoBackground * ratio;\n\n // https://github.com/oliver-moran/jimp/tree/master/packages/jimp#creating-new-images\n const canvas = new Jimp(canvasSize, canvasSize, 0xffffff00);\n const logo = image.clone().resize(width, height);\n\n const x = (canvasSize - width) / 2;\n const y = (canvasSize - height) / 2;\n\n return canvas\n .blit(logo, x, y)\n .quality(100)\n .writeAsync(filePath)\n .then(() => {\n logWrite(\"✨\", filePath, { width: canvasSize, height: canvasSize });\n });\n }),\n );\n }\n\n if (ios) {\n const projectPath = ios.projectPath.replace(/.xcodeproj$/, \"\");\n const imagesPath = path.resolve(projectPath, \"Images.xcassets\");\n\n if (fs.existsSync(projectPath)) {\n const storyboardPath = path.resolve(projectPath, \"BootSplash.storyboard\");\n\n fs.writeFileSync(\n storyboardPath,\n getStoryboard({\n height: getHeight(logoWidth),\n width: logoWidth,\n backgroundColor: backgroundColorHex,\n }),\n \"utf-8\",\n );\n\n log(`✨ ${path.relative(workingPath, storyboardPath)}`, true);\n } else {\n log(\n `No \"${projectPath}\" directory found. Skipping iOS storyboard generation…`,\n );\n }\n\n if (fs.existsSync(imagesPath)) {\n const imageSetPath = path.resolve(imagesPath, xcassetName + \".imageset\");\n fs.ensureDirSync(imageSetPath);\n\n fs.writeFileSync(\n path.resolve(imageSetPath, \"Contents.json\"),\n ContentsJson,\n \"utf-8\",\n );\n\n await Promise.all(\n [\n { ratio: 1, suffix: \"\" },\n { ratio: 2, suffix: \"@2x\" },\n { ratio: 3, suffix: \"@3x\" },\n ].map(({ ratio, suffix }) => {\n const fileName = `${logoFileName}${suffix}.png`;\n const filePath = path.resolve(imageSetPath, fileName);\n const width = logoWidth * ratio;\n const height = getHeight(width);\n\n return image\n .clone()\n .resize(width, height)\n .quality(100)\n .writeAsync(filePath)\n .then(() => {\n logWrite(\"✨\", filePath, { width, height });\n });\n }),\n );\n } else {\n log(\n `No \"${imagesPath}\" directory found. Skipping iOS images generation…`,\n );\n }\n }\n\n log(\n `✅ Done! Thanks for using ${chalk.underline(\"react-native-bootsplash\")}.`,\n );\n};\n"]}
|
package/dist/module/index.js
CHANGED
|
@@ -1,12 +1,7 @@
|
|
|
1
1
|
import { NativeModules } from "react-native";
|
|
2
2
|
const NativeModule = NativeModules.RNBootSplash;
|
|
3
|
-
export function
|
|
4
|
-
|
|
5
|
-
fade: false,
|
|
6
|
-
...config
|
|
7
|
-
}.fade).then(() => {});
|
|
8
|
-
}
|
|
9
|
-
export function hide(config = {}) {
|
|
3
|
+
export function hide() {
|
|
4
|
+
let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
10
5
|
return NativeModule.hide({
|
|
11
6
|
fade: false,
|
|
12
7
|
...config
|
|
@@ -16,7 +11,6 @@ export function getVisibilityStatus() {
|
|
|
16
11
|
return NativeModule.getVisibilityStatus();
|
|
17
12
|
}
|
|
18
13
|
export default {
|
|
19
|
-
show,
|
|
20
14
|
hide,
|
|
21
15
|
getVisibilityStatus
|
|
22
16
|
};
|
package/dist/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["NativeModules","NativeModule","RNBootSplash","
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["NativeModules","NativeModule","RNBootSplash","hide","config","fade","then","getVisibilityStatus"],"mappings":"AAAA,SAASA,aAAT,QAA8B,cAA9B;AAKA,MAAMC,YAGL,GAAGD,aAAa,CAACE,YAHlB;AAKA,OAAO,SAASC,IAAT,GAAkD;AAAA,MAApCC,MAAoC,uEAAnB,EAAmB;AACvD,SAAOH,YAAY,CAACE,IAAb,CAAkB;AAAEE,IAAAA,IAAI,EAAE,KAAR;AAAe,OAAGD;AAAlB,IAA2BC,IAA7C,EAAmDC,IAAnD,CAAwD,MAAM,CAAE,CAAhE,CAAP;AACD;AAED,OAAO,SAASC,mBAAT,GAA0D;AAC/D,SAAON,YAAY,CAACM,mBAAb,EAAP;AACD;AAED,eAAe;AACbJ,EAAAA,IADa;AAEbI,EAAAA;AAFa,CAAf","sourcesContent":["import { NativeModules } from \"react-native\";\n\nexport type VisibilityStatus = \"visible\" | \"hidden\" | \"transitioning\";\nexport type Config = { fade?: boolean };\n\nconst NativeModule: {\n hide: (fade: boolean) => Promise<true>;\n getVisibilityStatus: () => Promise<VisibilityStatus>;\n} = NativeModules.RNBootSplash;\n\nexport function hide(config: Config = {}): Promise<void> {\n return NativeModule.hide({ fade: false, ...config }.fade).then(() => {});\n}\n\nexport function getVisibilityStatus(): Promise<VisibilityStatus> {\n return NativeModule.getVisibilityStatus();\n}\n\nexport default {\n hide,\n getVisibilityStatus,\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const generate: ({ android, ios,
|
|
1
|
+
export declare const generate: ({ android, ios, workingPath, logoPath, backgroundColor, logoWidth, flavor, assetsPath, }: {
|
|
2
2
|
android: {
|
|
3
3
|
sourceDir: string;
|
|
4
4
|
appName: string;
|
|
@@ -6,10 +6,10 @@ export declare const generate: ({ android, ios, workingDirectory, logoPath, back
|
|
|
6
6
|
ios: {
|
|
7
7
|
projectPath: string;
|
|
8
8
|
} | null;
|
|
9
|
-
|
|
9
|
+
workingPath: string;
|
|
10
10
|
logoPath: string;
|
|
11
|
+
assetsPath?: string | undefined;
|
|
11
12
|
backgroundColor: string;
|
|
12
|
-
logoWidth: number;
|
|
13
13
|
flavor: string;
|
|
14
|
-
|
|
14
|
+
logoWidth: number;
|
|
15
15
|
}) => Promise<void>;
|
|
@@ -2,11 +2,9 @@ export declare type VisibilityStatus = "visible" | "hidden" | "transitioning";
|
|
|
2
2
|
export declare type Config = {
|
|
3
3
|
fade?: boolean;
|
|
4
4
|
};
|
|
5
|
-
export declare function show(config?: Config): Promise<void>;
|
|
6
5
|
export declare function hide(config?: Config): Promise<void>;
|
|
7
6
|
export declare function getVisibilityStatus(): Promise<VisibilityStatus>;
|
|
8
7
|
declare const _default: {
|
|
9
|
-
show: typeof show;
|
|
10
8
|
hide: typeof hide;
|
|
11
9
|
getVisibilityStatus: typeof getVisibilityStatus;
|
|
12
10
|
};
|
package/ios/RNBootSplash.h
CHANGED
|
@@ -1,29 +1,19 @@
|
|
|
1
1
|
#import <React/RCTBridgeModule.h>
|
|
2
2
|
#import <React/RCTRootView.h>
|
|
3
3
|
|
|
4
|
-
typedef enum {
|
|
5
|
-
RNBootSplashTaskTypeShow = 0,
|
|
6
|
-
RNBootSplashTaskTypeHide = 1
|
|
7
|
-
} RNBootSplashTaskType;
|
|
8
|
-
|
|
9
4
|
typedef enum {
|
|
10
5
|
RNBootSplashStatusVisible = 0,
|
|
11
6
|
RNBootSplashStatusHidden = 1,
|
|
12
|
-
|
|
13
|
-
RNBootSplashStatusTransitioningToHidden = 3
|
|
7
|
+
RNBootSplashStatusTransitioning = 2
|
|
14
8
|
} RNBootSplashStatus;
|
|
15
9
|
|
|
16
10
|
@interface RNBootSplashTask : NSObject
|
|
17
11
|
|
|
18
|
-
@property (nonatomic, readonly) RNBootSplashTaskType type;
|
|
19
12
|
@property (nonatomic, readonly) BOOL fade;
|
|
20
13
|
@property (nonatomic, readonly, strong) RCTPromiseResolveBlock _Nonnull resolve;
|
|
21
|
-
@property (nonatomic, readonly, strong) RCTPromiseRejectBlock _Nonnull reject;
|
|
22
14
|
|
|
23
|
-
- (instancetype _Nonnull)
|
|
24
|
-
|
|
25
|
-
resolver:(RCTPromiseResolveBlock _Nonnull)resolve
|
|
26
|
-
rejecter:(RCTPromiseRejectBlock _Nonnull)reject;
|
|
15
|
+
- (instancetype _Nonnull)initWithFade:(BOOL)fade
|
|
16
|
+
resolver:(RCTPromiseResolveBlock _Nonnull)resolve;
|
|
27
17
|
|
|
28
18
|
@end
|
|
29
19
|
|