react-native-bootsplash 4.0.0-alpha.0 → 4.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +76 -135
  3. package/RNBootSplash.podspec +1 -1
  4. package/{ReactNativeBootsplash.res → RNBootsplash.res} +4 -8
  5. package/android/build.gradle +13 -11
  6. package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplash.java +2 -11
  7. package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashModule.java +79 -198
  8. package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashPackage.java +6 -2
  9. package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashTask.java +1 -15
  10. package/bsconfig.json +0 -1
  11. package/dist/commonjs/generate.js +118 -110
  12. package/dist/commonjs/generate.js.map +1 -1
  13. package/dist/commonjs/index.js +5 -19
  14. package/dist/commonjs/index.js.map +1 -1
  15. package/dist/module/generate.js +114 -107
  16. package/dist/module/generate.js.map +1 -1
  17. package/dist/module/index.js +3 -13
  18. package/dist/module/index.js.map +1 -1
  19. package/dist/typescript/generate.d.ts +4 -4
  20. package/dist/typescript/index.d.ts +0 -6
  21. package/ios/RNBootSplash.h +3 -13
  22. package/ios/RNBootSplash.m +44 -93
  23. package/ios/RNBootSplash.xcodeproj/project.pbxproj +2 -2
  24. package/package.json +21 -23
  25. package/react-native.config.js +21 -8
  26. package/src/generate.ts +98 -139
  27. package/src/index.ts +0 -13
  28. package/android/src/main/java/com/zoontek/rnbootsplash/RNBootSplashDialog.java +0 -36
  29. package/android/src/main/res/anim/bootsplash_fade_in.xml +0 -7
  30. package/android/src/main/res/anim/bootsplash_fade_out.xml +0 -7
  31. package/android/src/main/res/values/styles.xml +0 -13
@@ -1,9 +1,11 @@
1
1
  import chalk from "chalk";
2
2
  import fs from "fs-extra";
3
- import jimp from "jimp";
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
- height,
36
- width,
37
- backgroundColor: hex
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 bootSplashXml = `<?xml version="1.0" encoding="utf-8"?>
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
- android,
115
- ios,
116
- workingDirectory,
117
- logoPath,
118
- backgroundColor,
119
- logoWidth,
120
- flavor,
121
- assetsPath
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 jimp.read(logoPath);
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 width = {
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
- images.push({
150
- filePath: path.resolve(assetsPath, logoFileName + ".png"),
151
- width: width["@1x"],
152
- height: height["@1x"]
130
+ await Promise.all([{
131
+ ratio: 1,
132
+ suffix: ""
153
133
  }, {
154
- filePath: path.resolve(assetsPath, logoFileName + "@1,5x.png"),
155
- width: width["@1,5x"],
156
- height: height["@1,5x"]
134
+ ratio: 1.5,
135
+ suffix: "@1,5x"
157
136
  }, {
158
- filePath: path.resolve(assetsPath, logoFileName + "@2x.png"),
159
- width: width["@2x"],
160
- height: height["@2x"]
137
+ ratio: 2,
138
+ suffix: "@2x"
161
139
  }, {
162
- filePath: path.resolve(assetsPath, logoFileName + "@3x.png"),
163
- width: width["@3x"],
164
- height: height["@3x"]
140
+ ratio: 3,
141
+ suffix: "@3x"
165
142
  }, {
166
- filePath: path.resolve(assetsPath, logoFileName + "@4x.png"),
167
- width: width["@4x"],
168
- height: height["@4x"]
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
- log(`✏️ ${path.relative(workingDirectory, colorsXmlPath)}`, true);
181
+ logWrite("✏️ ", colorsXmlPath);
196
182
  } else {
197
183
  fs.writeFileSync(colorsXmlPath, `<resources>\n ${colorsXmlEntry}\n</resources>\n`, "utf-8");
198
- log(`✨ ${path.relative(workingDirectory, colorsXmlPath)}`, true);
184
+ logWrite("✨", colorsXmlPath);
199
185
  }
200
186
 
201
- images.push({
202
- filePath: path.resolve(resPath, "mipmap-mdpi", logoFileName + ".png"),
203
- width: width["@1x"],
204
- height: height["@1x"]
187
+ await Promise.all([{
188
+ ratio: 1,
189
+ directory: "mipmap-mdpi"
205
190
  }, {
206
- filePath: path.resolve(resPath, "mipmap-hdpi", logoFileName + ".png"),
207
- width: width["@1,5x"],
208
- height: height["@1,5x"]
191
+ ratio: 1.5,
192
+ directory: "mipmap-hdpi"
209
193
  }, {
210
- filePath: path.resolve(resPath, "mipmap-xhdpi", logoFileName + ".png"),
211
- width: width["@2x"],
212
- height: height["@2x"]
194
+ ratio: 2,
195
+ directory: "mipmap-xhdpi"
213
196
  }, {
214
- filePath: path.resolve(resPath, "mipmap-xxhdpi", logoFileName + ".png"),
215
- width: width["@3x"],
216
- height: height["@3x"]
197
+ ratio: 3,
198
+ directory: "mipmap-xxhdpi"
217
199
  }, {
218
- filePath: path.resolve(resPath, "mipmap-xxxhdpi", logoFileName + ".png"),
219
- width: width["@4x"],
220
- height: height["@4x"]
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: height["@1x"],
232
- width: width["@1x"],
233
+ height: getHeight(logoWidth),
234
+ width: logoWidth,
233
235
  backgroundColor: backgroundColorHex
234
236
  }), "utf-8");
235
- log(`✨ ${path.relative(workingDirectory, storyboardPath)}`, true);
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
- images.push({
245
- filePath: path.resolve(imageSetPath, logoFileName + ".png"),
246
- width: width["@1x"],
247
- height: height["@1x"]
246
+ await Promise.all([{
247
+ ratio: 1,
248
+ suffix: ""
248
249
  }, {
249
- filePath: path.resolve(imageSetPath, logoFileName + "@2x.png"),
250
- width: width["@2x"],
251
- height: height["@2x"]
250
+ ratio: 2,
251
+ suffix: "@2x"
252
252
  }, {
253
- filePath: path.resolve(imageSetPath, logoFileName + "@3x.png"),
254
- width: width["@3x"],
255
- height: height["@3x"]
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"]}
@@ -1,12 +1,7 @@
1
1
  import { NativeModules } from "react-native";
2
2
  const NativeModule = NativeModules.RNBootSplash;
3
- export function show(config = {}) {
4
- return NativeModule.show({
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
@@ -15,13 +10,8 @@ export function hide(config = {}) {
15
10
  export function getVisibilityStatus() {
16
11
  return NativeModule.getVisibilityStatus();
17
12
  }
18
- export const statusBarHeight = NativeModule.statusBarHeight;
19
- export const navigationBarHeight = NativeModule.navigationBarHeight;
20
13
  export default {
21
- show,
22
14
  hide,
23
- getVisibilityStatus,
24
- statusBarHeight,
25
- navigationBarHeight
15
+ getVisibilityStatus
26
16
  };
27
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["NativeModules","NativeModule","RNBootSplash","show","config","fade","then","hide","getVisibilityStatus","statusBarHeight","navigationBarHeight"],"mappings":"AAAA,SAASA,aAAT,QAA8B,cAA9B;AAKA,MAAMC,YAML,GAAGD,aAAa,CAACE,YANlB;AAQA,OAAO,SAASC,IAAT,CAAcC,MAAc,GAAG,EAA/B,EAAkD;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,IAAT,CAAcH,MAAc,GAAG,EAA/B,EAAkD;AACvD,SAAOH,YAAY,CAACM,IAAb,CAAkB;AAAEF,IAAAA,IAAI,EAAE,KAAR;AAAe,OAAGD;AAAlB,IAA2BC,IAA7C,EAAmDC,IAAnD,CAAwD,MAAM,CAAE,CAAhE,CAAP;AACD;AAED,OAAO,SAASE,mBAAT,GAA0D;AAC/D,SAAOP,YAAY,CAACO,mBAAb,EAAP;AACD;AAED,OAAO,MAAMC,eAAe,GAAGR,YAAY,CAACQ,eAArC;AACP,OAAO,MAAMC,mBAAmB,GAAGT,YAAY,CAACS,mBAAzC;AAEP,eAAe;AACbP,EAAAA,IADa;AAEbI,EAAAA,IAFa;AAGbC,EAAAA,mBAHa;AAIbC,EAAAA,eAJa;AAKbC,EAAAA;AALa,CAAf","sourcesContent":["import { NativeModules } from \"react-native\";\n\nexport type VisibilityStatus = \"visible\" | \"hidden\" | \"transitioning\";\nexport type Config = { fade?: boolean };\n\nconst NativeModule: {\n show: (fade: boolean) => Promise<true>;\n hide: (fade: boolean) => Promise<true>;\n getVisibilityStatus: () => Promise<VisibilityStatus>;\n statusBarHeight: number;\n navigationBarHeight: number;\n} = NativeModules.RNBootSplash;\n\nexport function show(config: Config = {}): Promise<void> {\n return NativeModule.show({ fade: false, ...config }.fade).then(() => {});\n}\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 const statusBarHeight = NativeModule.statusBarHeight;\nexport const navigationBarHeight = NativeModule.navigationBarHeight;\n\nexport default {\n show,\n hide,\n getVisibilityStatus,\n statusBarHeight,\n navigationBarHeight,\n};\n"]}
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, workingDirectory, logoPath, backgroundColor, logoWidth, flavor, assetsPath, }: {
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
- workingDirectory: string;
9
+ workingPath: string;
10
10
  logoPath: string;
11
+ assetsPath?: string | undefined;
11
12
  backgroundColor: string;
12
- logoWidth: number;
13
13
  flavor: string;
14
- assetsPath?: string | undefined;
14
+ logoWidth: number;
15
15
  }) => Promise<void>;
@@ -2,16 +2,10 @@ 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
- export declare const statusBarHeight: number;
9
- export declare const navigationBarHeight: number;
10
7
  declare const _default: {
11
- show: typeof show;
12
8
  hide: typeof hide;
13
9
  getVisibilityStatus: typeof getVisibilityStatus;
14
- statusBarHeight: number;
15
- navigationBarHeight: number;
16
10
  };
17
11
  export default _default;
@@ -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
- RNBootSplashStatusTransitioningToVisible = 2,
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)initWithType:(RNBootSplashTaskType)type
24
- fade:(BOOL)fade
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