react-native-bootsplash 4.0.0-alpha.1 → 4.0.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.
Files changed (31) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +80 -144
  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 +128 -110
  12. package/dist/commonjs/generate.js.map +1 -1
  13. package/dist/commonjs/index.js +5 -21
  14. package/dist/commonjs/index.js.map +1 -1
  15. package/dist/module/generate.js +124 -107
  16. package/dist/module/generate.js.map +1 -1
  17. package/dist/module/index.js +3 -15
  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 -99
  23. package/ios/RNBootSplash.xcodeproj/project.pbxproj +2 -2
  24. package/package.json +19 -21
  25. package/react-native.config.js +21 -8
  26. package/src/generate.ts +116 -138
  27. package/src/index.ts +0 -14
  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,71 @@ 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})` : ""));
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
+ log(`\n ${chalk.underline("Assets")}`);
131
+ await Promise.all([{
132
+ ratio: 1,
133
+ suffix: ""
153
134
  }, {
154
- filePath: path.resolve(assetsPath, logoFileName + "@1,5x.png"),
155
- width: width["@1,5x"],
156
- height: height["@1,5x"]
135
+ ratio: 1.5,
136
+ suffix: "@1,5x"
157
137
  }, {
158
- filePath: path.resolve(assetsPath, logoFileName + "@2x.png"),
159
- width: width["@2x"],
160
- height: height["@2x"]
138
+ ratio: 2,
139
+ suffix: "@2x"
161
140
  }, {
162
- filePath: path.resolve(assetsPath, logoFileName + "@3x.png"),
163
- width: width["@3x"],
164
- height: height["@3x"]
141
+ ratio: 3,
142
+ suffix: "@3x"
165
143
  }, {
166
- filePath: path.resolve(assetsPath, logoFileName + "@4x.png"),
167
- width: width["@4x"],
168
- height: height["@4x"]
169
- });
144
+ ratio: 4,
145
+ suffix: "@4x"
146
+ }].map(_ref3 => {
147
+ let {
148
+ ratio,
149
+ suffix
150
+ } = _ref3;
151
+ const fileName = `${logoFileName}${suffix}.png`;
152
+ const filePath = path.resolve(assetsPath, fileName);
153
+ const width = logoWidth * ratio;
154
+ const height = getHeight(width);
155
+ return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
156
+ logWrite("✨", filePath, {
157
+ width,
158
+ height
159
+ });
160
+ });
161
+ }));
170
162
  }
171
163
 
172
164
  if (android) {
165
+ log(`\n ${chalk.underline("Android")}`);
173
166
  const appPath = android.appName ? path.resolve(android.sourceDir, android.appName) : path.resolve(android.sourceDir); // @react-native-community/cli 2.x & 3.x support
174
167
 
175
168
  const resPath = path.resolve(appPath, "src", flavor, "res");
176
- const drawablePath = path.resolve(resPath, "drawable");
177
169
  const valuesPath = path.resolve(resPath, "values");
178
- fs.ensureDirSync(drawablePath);
179
170
  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
171
  const colorsXmlPath = path.resolve(valuesPath, "colors.xml");
184
172
  const colorsXmlEntry = `<color name="${androidColorName}">${backgroundColorHex}</color>`;
185
173
 
@@ -192,47 +180,64 @@ export const generate = async ({
192
180
  fs.writeFileSync(colorsXmlPath, colorsXml.replace(/<\/resources>/g, ` ${colorsXmlEntry}\n</resources>`), "utf-8");
193
181
  }
194
182
 
195
- log(`✏️ ${path.relative(workingDirectory, colorsXmlPath)}`, true);
183
+ logWrite("✏️ ", colorsXmlPath);
196
184
  } else {
197
185
  fs.writeFileSync(colorsXmlPath, `<resources>\n ${colorsXmlEntry}\n</resources>\n`, "utf-8");
198
- log(`✨ ${path.relative(workingDirectory, colorsXmlPath)}`, true);
186
+ logWrite("✨", colorsXmlPath);
199
187
  }
200
188
 
201
- images.push({
202
- filePath: path.resolve(resPath, "mipmap-mdpi", logoFileName + ".png"),
203
- width: width["@1x"],
204
- height: height["@1x"]
189
+ await Promise.all([{
190
+ ratio: 1,
191
+ directory: "mipmap-mdpi"
205
192
  }, {
206
- filePath: path.resolve(resPath, "mipmap-hdpi", logoFileName + ".png"),
207
- width: width["@1,5x"],
208
- height: height["@1,5x"]
193
+ ratio: 1.5,
194
+ directory: "mipmap-hdpi"
209
195
  }, {
210
- filePath: path.resolve(resPath, "mipmap-xhdpi", logoFileName + ".png"),
211
- width: width["@2x"],
212
- height: height["@2x"]
196
+ ratio: 2,
197
+ directory: "mipmap-xhdpi"
213
198
  }, {
214
- filePath: path.resolve(resPath, "mipmap-xxhdpi", logoFileName + ".png"),
215
- width: width["@3x"],
216
- height: height["@3x"]
199
+ ratio: 3,
200
+ directory: "mipmap-xxhdpi"
217
201
  }, {
218
- filePath: path.resolve(resPath, "mipmap-xxxhdpi", logoFileName + ".png"),
219
- width: width["@4x"],
220
- height: height["@4x"]
221
- });
202
+ ratio: 4,
203
+ directory: "mipmap-xxxhdpi"
204
+ }].map(_ref4 => {
205
+ let {
206
+ ratio,
207
+ directory
208
+ } = _ref4;
209
+ const fileName = `${logoFileName}.png`;
210
+ const filePath = path.resolve(resPath, directory, fileName);
211
+ const width = logoWidth * ratio;
212
+ const height = getHeight(width);
213
+ const canvasSize = splashScreenIconSizeNoBackground * ratio; // https://github.com/oliver-moran/jimp/tree/master/packages/jimp#creating-new-images
214
+
215
+ const canvas = new Jimp(canvasSize, canvasSize, 0xffffff00);
216
+ const logo = image.clone().resize(width, height);
217
+ const x = (canvasSize - width) / 2;
218
+ const y = (canvasSize - height) / 2;
219
+ return canvas.blit(logo, x, y).quality(100).writeAsync(filePath).then(() => {
220
+ logWrite("✨", filePath, {
221
+ width: canvasSize,
222
+ height: canvasSize
223
+ });
224
+ });
225
+ }));
222
226
  }
223
227
 
224
228
  if (ios) {
229
+ log(`\n ${chalk.underline("iOS")}`);
225
230
  const projectPath = ios.projectPath.replace(/.xcodeproj$/, "");
226
231
  const imagesPath = path.resolve(projectPath, "Images.xcassets");
227
232
 
228
233
  if (fs.existsSync(projectPath)) {
229
234
  const storyboardPath = path.resolve(projectPath, "BootSplash.storyboard");
230
235
  fs.writeFileSync(storyboardPath, getStoryboard({
231
- height: height["@1x"],
232
- width: width["@1x"],
236
+ height: getHeight(logoWidth),
237
+ width: logoWidth,
233
238
  backgroundColor: backgroundColorHex
234
239
  }), "utf-8");
235
- log(`✨ ${path.relative(workingDirectory, storyboardPath)}`, true);
240
+ logWrite("✨", storyboardPath);
236
241
  } else {
237
242
  log(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
238
243
  }
@@ -241,31 +246,43 @@ export const generate = async ({
241
246
  const imageSetPath = path.resolve(imagesPath, xcassetName + ".imageset");
242
247
  fs.ensureDirSync(imageSetPath);
243
248
  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"]
249
+ await Promise.all([{
250
+ ratio: 1,
251
+ suffix: ""
248
252
  }, {
249
- filePath: path.resolve(imageSetPath, logoFileName + "@2x.png"),
250
- width: width["@2x"],
251
- height: height["@2x"]
253
+ ratio: 2,
254
+ suffix: "@2x"
252
255
  }, {
253
- filePath: path.resolve(imageSetPath, logoFileName + "@3x.png"),
254
- width: width["@3x"],
255
- height: height["@3x"]
256
- });
256
+ ratio: 3,
257
+ suffix: "@3x"
258
+ }].map(_ref5 => {
259
+ let {
260
+ ratio,
261
+ suffix
262
+ } = _ref5;
263
+ const fileName = `${logoFileName}${suffix}.png`;
264
+ const filePath = path.resolve(imageSetPath, fileName);
265
+ const width = logoWidth * ratio;
266
+ const height = getHeight(width);
267
+ return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
268
+ logWrite("✨", filePath, {
269
+ width,
270
+ height
271
+ });
272
+ });
273
+ }));
257
274
  } else {
258
275
  log(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
259
276
  }
260
277
  }
261
278
 
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
- })));
279
+ log(`
280
+ ${chalk.blue("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓")}
281
+ ${chalk.blue("┃")} 💖 ${chalk.bold("Love this library? Consider sponsoring!")} ${chalk.blue("┃")}
282
+ ${chalk.blue("┃")} One-time amounts are available. ${chalk.blue("┃")}
283
+ ${chalk.blue("┃")} ${chalk.underline("https://github.com/sponsors/zoontek")} ${chalk.blue("┃")}
284
+ ${chalk.blue("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛")}
285
+ `);
269
286
  log(`✅ Done! Thanks for using ${chalk.underline("react-native-bootsplash")}.`);
270
287
  };
271
288
  //# 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","underline","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","blue","bold"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,EAAP,MAAe,UAAf;AACA,OAAOC,IAAP,MAAiB,MAAjB;AACA,OAAOC,IAAP,MAAiB,MAAjB;AAEA,MAAMC,YAAY,GAAG,iBAArB;AACA,MAAMC,WAAW,GAAG,gBAApB,C,CACA;;AACA,MAAMC,gCAAgC,GAAG,GAAzC;AACA,MAAMC,gBAAgB,GAAG,uBAAzB;AACA,MAAMC,iBAAiB,GAAG,oDAA1B;AAEA,MAAMC,YAAY,GAAI;AACtB;AACA;AACA;AACA,qBAAqBL,YAAa;AAClC;AACA;AACA;AACA;AACA,qBAAqBA,YAAa;AAClC;AACA;AACA;AACA;AACA,qBAAqBA,YAAa;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAvBA;;AAyBA,MAAMM,aAAa,GAAG,QAQhB;AAAA,MARiB;AACrBC,IAAAA,MADqB;AAErBC,IAAAA,KAFqB;AAGrBC,IAAAA,eAAe,EAAEC;AAHI,GAQjB;AACJ,QAAMC,CAAC,GAAG,CAACC,QAAQ,CAACF,GAAG,CAAC,CAAD,CAAH,GAASA,GAAG,CAAC,CAAD,CAAb,EAAkB,EAAlB,CAAR,GAAgC,GAAjC,EAAsCG,WAAtC,CAAkD,EAAlD,CAAV;AACA,QAAMC,CAAC,GAAG,CAACF,QAAQ,CAACF,GAAG,CAAC,CAAD,CAAH,GAASA,GAAG,CAAC,CAAD,CAAb,EAAkB,EAAlB,CAAR,GAAgC,GAAjC,EAAsCG,WAAtC,CAAkD,EAAlD,CAAV;AACA,QAAME,CAAC,GAAG,CAACH,QAAQ,CAACF,GAAG,CAAC,CAAD,CAAH,GAASA,GAAG,CAAC,CAAD,CAAb,EAAkB,EAAlB,CAAR,GAAgC,GAAjC,EAAsCG,WAAtC,CAAkD,EAAlD,CAAV;AAEA,SAAQ;AACV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uDAAuD,CAAC,MAAML,KAAP,IAAgB,CAAE,QACrE,CAAC,MAAMD,MAAP,IAAiB,CAClB,YAAWC,KAAM,aAAYD,MAAO;AACvC;AACA;AACA;AACA;AACA;AACA;AACA,4DAA4DI,CAAE,YAAWG,CAAE,WAAUC,CAAE;AACvF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuBd,WAAY,YAAWO,KAAM,aAAYD,MAAO;AACvE;AACA;AACA,CA/CE;AAgDD,CA7DD;;AA+DA,MAAMS,GAAG,GAAG,UAACC,IAAD,EAA+B;AAAA,MAAhBC,GAAgB,uEAAV,KAAU;AACzCC,EAAAA,OAAO,CAACH,GAAR,CAAYE,GAAG,GAAGtB,KAAK,CAACsB,GAAN,CAAUD,IAAV,CAAH,GAAqBA,IAApC;AACD,CAFD;;AAIA,MAAMG,kBAAkB,GAAIC,KAAD,IACzB,0BAA0BC,IAA1B,CAA+BD,KAA/B,CADF;;AAGA,MAAME,iBAAiB,GAAIb,GAAD,IAAiB;AACzC,QAAMc,QAAQ,GAAGd,GAAG,CAAC,CAAD,CAAH,KAAW,GAAX,GAAiBA,GAAjB,GAAwB,IAAGA,GAAI,EAAhD;AACA,QAAMe,EAAE,GAAGD,QAAQ,CAACE,WAAT,EAAX;AAEA,SAAOD,EAAE,CAACE,MAAH,KAAc,CAAd,GACH,MAAMF,EAAE,CAAC,CAAD,CAAR,GAAcA,EAAE,CAAC,CAAD,CAAhB,GAAsBA,EAAE,CAAC,CAAD,CAAxB,GAA8BA,EAAE,CAAC,CAAD,CAAhC,GAAsCA,EAAE,CAAC,CAAD,CAAxC,GAA8CA,EAAE,CAAC,CAAD,CAD7C,GAEHA,EAFJ;AAGD,CAPD;;AASA,OAAO,MAAMG,QAAQ,GAAG,eA0BlB;AAAA,MA1ByB;AAC7BC,IAAAA,OAD6B;AAE7BC,IAAAA,GAF6B;AAI7BC,IAAAA,WAJ6B;AAK7BC,IAAAA,QAL6B;AAM7BvB,IAAAA,eAN6B;AAO7BwB,IAAAA,SAP6B;AAQ7BC,IAAAA,MAR6B;AAS7BC,IAAAA;AAT6B,GA0BzB;;AACJ,MAAI,CAACf,kBAAkB,CAACX,eAAD,CAAvB,EAA0C;AACxC,UAAM,IAAI2B,KAAJ,CACJ,4DADI,CAAN;AAGD;;AAED,QAAMC,KAAK,GAAG,MAAMvC,IAAI,CAACwC,IAAL,CAAUN,QAAV,CAApB;AACA,QAAMO,kBAAkB,GAAGhB,iBAAiB,CAACd,eAAD,CAA5C;;AAEA,QAAM+B,SAAS,GAAIC,IAAD,IAChBC,IAAI,CAACC,IAAL,CAAUF,IAAI,IAAIJ,KAAK,CAACO,MAAN,CAAarC,MAAb,GAAsB8B,KAAK,CAACO,MAAN,CAAapC,KAAvC,CAAd,CADF;;AAGA,QAAMqC,QAAQ,GAAG,CACfC,KADe,EAEfC,QAFe,EAGfC,UAHe,KAKfhC,GAAG,CACA,GAAE8B,KAAM,KAAI/C,IAAI,CAACkD,QAAL,CAAclB,WAAd,EAA2BgB,QAA3B,CAAqC,EAAlD,IACGC,UAAU,IAAI,IAAd,GACI,KAAIA,UAAU,CAACxC,KAAM,IAAGwC,UAAU,CAACzC,MAAO,GAD9C,GAEG,EAHN,CADC,CALL;;AAYA,MAAI4B,UAAU,IAAItC,EAAE,CAACqD,UAAH,CAAcf,UAAd,CAAlB,EAA6C;AAC3CnB,IAAAA,GAAG,CAAE,SAAQpB,KAAK,CAACuD,SAAN,CAAgB,QAAhB,CAA0B,EAApC,CAAH;AAEA,UAAMC,OAAO,CAACC,GAAR,CACJ,CACE;AAAEC,MAAAA,KAAK,EAAE,CAAT;AAAYC,MAAAA,MAAM,EAAE;AAApB,KADF,EAEE;AAAED,MAAAA,KAAK,EAAE,GAAT;AAAcC,MAAAA,MAAM,EAAE;AAAtB,KAFF,EAGE;AAAED,MAAAA,KAAK,EAAE,CAAT;AAAYC,MAAAA,MAAM,EAAE;AAApB,KAHF,EAIE;AAAED,MAAAA,KAAK,EAAE,CAAT;AAAYC,MAAAA,MAAM,EAAE;AAApB,KAJF,EAKE;AAAED,MAAAA,KAAK,EAAE,CAAT;AAAYC,MAAAA,MAAM,EAAE;AAApB,KALF,EAMEC,GANF,CAMM,SAAuB;AAAA,UAAtB;AAAEF,QAAAA,KAAF;AAASC,QAAAA;AAAT,OAAsB;AAC3B,YAAME,QAAQ,GAAI,GAAEzD,YAAa,GAAEuD,MAAO,MAA1C;AACA,YAAMR,QAAQ,GAAGhD,IAAI,CAAC2D,OAAL,CAAavB,UAAb,EAAyBsB,QAAzB,CAAjB;AACA,YAAMjD,KAAK,GAAGyB,SAAS,GAAGqB,KAA1B;AACA,YAAM/C,MAAM,GAAGiC,SAAS,CAAChC,KAAD,CAAxB;AAEA,aAAO6B,KAAK,CACTsB,KADI,GAEJC,MAFI,CAEGpD,KAFH,EAEUD,MAFV,EAGJsD,OAHI,CAGI,GAHJ,EAIJC,UAJI,CAIOf,QAJP,EAKJgB,IALI,CAKC,MAAM;AACVlB,QAAAA,QAAQ,CAAC,GAAD,EAAME,QAAN,EAAgB;AAAEvC,UAAAA,KAAF;AAASD,UAAAA;AAAT,SAAhB,CAAR;AACD,OAPI,CAAP;AAQD,KApBD,CADI,CAAN;AAuBD;;AAED,MAAIsB,OAAJ,EAAa;AACXb,IAAAA,GAAG,CAAE,SAAQpB,KAAK,CAACuD,SAAN,CAAgB,SAAhB,CAA2B,EAArC,CAAH;AAEA,UAAMa,OAAO,GAAGnC,OAAO,CAACoC,OAAR,GACZlE,IAAI,CAAC2D,OAAL,CAAa7B,OAAO,CAACqC,SAArB,EAAgCrC,OAAO,CAACoC,OAAxC,CADY,GAEZlE,IAAI,CAAC2D,OAAL,CAAa7B,OAAO,CAACqC,SAArB,CAFJ,CAHW,CAK0B;;AAErC,UAAMC,OAAO,GAAGpE,IAAI,CAAC2D,OAAL,CAAaM,OAAb,EAAsB,KAAtB,EAA6B9B,MAA7B,EAAqC,KAArC,CAAhB;AACA,UAAMkC,UAAU,GAAGrE,IAAI,CAAC2D,OAAL,CAAaS,OAAb,EAAsB,QAAtB,CAAnB;AAEAtE,IAAAA,EAAE,CAACwE,aAAH,CAAiBD,UAAjB;AAEA,UAAME,aAAa,GAAGvE,IAAI,CAAC2D,OAAL,CAAaU,UAAb,EAAyB,YAAzB,CAAtB;AACA,UAAMG,cAAc,GAAI,gBAAepE,gBAAiB,KAAIoC,kBAAmB,UAA/E;;AAEA,QAAI1C,EAAE,CAACqD,UAAH,CAAcoB,aAAd,CAAJ,EAAkC;AAChC,YAAME,SAAS,GAAG3E,EAAE,CAAC4E,YAAH,CAAgBH,aAAhB,EAA+B,OAA/B,CAAlB;;AAEA,UAAIE,SAAS,CAACE,KAAV,CAAgBtE,iBAAhB,CAAJ,EAAwC;AACtCP,QAAAA,EAAE,CAAC8E,aAAH,CACEL,aADF,EAEEE,SAAS,CAACI,OAAV,CAAkBxE,iBAAlB,EAAqCmE,cAArC,CAFF,EAGE,OAHF;AAKD,OAND,MAMO;AACL1E,QAAAA,EAAE,CAAC8E,aAAH,CACEL,aADF,EAEEE,SAAS,CAACI,OAAV,CACE,gBADF,EAEG,OAAML,cAAe,gBAFxB,CAFF,EAME,OANF;AAQD;;AAED1B,MAAAA,QAAQ,CAAC,KAAD,EAAQyB,aAAR,CAAR;AACD,KArBD,MAqBO;AACLzE,MAAAA,EAAE,CAAC8E,aAAH,CACEL,aADF,EAEG,oBAAmBC,cAAe,kBAFrC,EAGE,OAHF;AAMA1B,MAAAA,QAAQ,CAAC,GAAD,EAAMyB,aAAN,CAAR;AACD;;AAED,UAAMlB,OAAO,CAACC,GAAR,CACJ,CACE;AAAEC,MAAAA,KAAK,EAAE,CAAT;AAAYuB,MAAAA,SAAS,EAAE;AAAvB,KADF,EAEE;AAAEvB,MAAAA,KAAK,EAAE,GAAT;AAAcuB,MAAAA,SAAS,EAAE;AAAzB,KAFF,EAGE;AAAEvB,MAAAA,KAAK,EAAE,CAAT;AAAYuB,MAAAA,SAAS,EAAE;AAAvB,KAHF,EAIE;AAAEvB,MAAAA,KAAK,EAAE,CAAT;AAAYuB,MAAAA,SAAS,EAAE;AAAvB,KAJF,EAKE;AAAEvB,MAAAA,KAAK,EAAE,CAAT;AAAYuB,MAAAA,SAAS,EAAE;AAAvB,KALF,EAMErB,GANF,CAMM,SAA0B;AAAA,UAAzB;AAAEF,QAAAA,KAAF;AAASuB,QAAAA;AAAT,OAAyB;AAC9B,YAAMpB,QAAQ,GAAI,GAAEzD,YAAa,MAAjC;AACA,YAAM+C,QAAQ,GAAGhD,IAAI,CAAC2D,OAAL,CAAaS,OAAb,EAAsBU,SAAtB,EAAiCpB,QAAjC,CAAjB;AACA,YAAMjD,KAAK,GAAGyB,SAAS,GAAGqB,KAA1B;AACA,YAAM/C,MAAM,GAAGiC,SAAS,CAAChC,KAAD,CAAxB;AAEA,YAAMsE,UAAU,GAAG5E,gCAAgC,GAAGoD,KAAtD,CAN8B,CAQ9B;;AACA,YAAMyB,MAAM,GAAG,IAAIjF,IAAJ,CAASgF,UAAT,EAAqBA,UAArB,EAAiC,UAAjC,CAAf;AACA,YAAME,IAAI,GAAG3C,KAAK,CAACsB,KAAN,GAAcC,MAAd,CAAqBpD,KAArB,EAA4BD,MAA5B,CAAb;AAEA,YAAM0E,CAAC,GAAG,CAACH,UAAU,GAAGtE,KAAd,IAAuB,CAAjC;AACA,YAAM0E,CAAC,GAAG,CAACJ,UAAU,GAAGvE,MAAd,IAAwB,CAAlC;AAEA,aAAOwE,MAAM,CACVI,IADI,CACCH,IADD,EACOC,CADP,EACUC,CADV,EAEJrB,OAFI,CAEI,GAFJ,EAGJC,UAHI,CAGOf,QAHP,EAIJgB,IAJI,CAIC,MAAM;AACVlB,QAAAA,QAAQ,CAAC,GAAD,EAAME,QAAN,EAAgB;AAAEvC,UAAAA,KAAK,EAAEsE,UAAT;AAAqBvE,UAAAA,MAAM,EAAEuE;AAA7B,SAAhB,CAAR;AACD,OANI,CAAP;AAOD,KA5BD,CADI,CAAN;AA+BD;;AAED,MAAIhD,GAAJ,EAAS;AACPd,IAAAA,GAAG,CAAE,SAAQpB,KAAK,CAACuD,SAAN,CAAgB,KAAhB,CAAuB,EAAjC,CAAH;AAEA,UAAMiC,WAAW,GAAGtD,GAAG,CAACsD,WAAJ,CAAgBR,OAAhB,CAAwB,aAAxB,EAAuC,EAAvC,CAApB;AACA,UAAMS,UAAU,GAAGtF,IAAI,CAAC2D,OAAL,CAAa0B,WAAb,EAA0B,iBAA1B,CAAnB;;AAEA,QAAIvF,EAAE,CAACqD,UAAH,CAAckC,WAAd,CAAJ,EAAgC;AAC9B,YAAME,cAAc,GAAGvF,IAAI,CAAC2D,OAAL,CAAa0B,WAAb,EAA0B,uBAA1B,CAAvB;AAEAvF,MAAAA,EAAE,CAAC8E,aAAH,CACEW,cADF,EAEEhF,aAAa,CAAC;AACZC,QAAAA,MAAM,EAAEiC,SAAS,CAACP,SAAD,CADL;AAEZzB,QAAAA,KAAK,EAAEyB,SAFK;AAGZxB,QAAAA,eAAe,EAAE8B;AAHL,OAAD,CAFf,EAOE,OAPF;AAUAM,MAAAA,QAAQ,CAAC,GAAD,EAAMyC,cAAN,CAAR;AACD,KAdD,MAcO;AACLtE,MAAAA,GAAG,CACA,OAAMoE,WAAY,wDADlB,CAAH;AAGD;;AAED,QAAIvF,EAAE,CAACqD,UAAH,CAAcmC,UAAd,CAAJ,EAA+B;AAC7B,YAAME,YAAY,GAAGxF,IAAI,CAAC2D,OAAL,CAAa2B,UAAb,EAAyBpF,WAAW,GAAG,WAAvC,CAArB;AACAJ,MAAAA,EAAE,CAACwE,aAAH,CAAiBkB,YAAjB;AAEA1F,MAAAA,EAAE,CAAC8E,aAAH,CACE5E,IAAI,CAAC2D,OAAL,CAAa6B,YAAb,EAA2B,eAA3B,CADF,EAEElF,YAFF,EAGE,OAHF;AAMA,YAAM+C,OAAO,CAACC,GAAR,CACJ,CACE;AAAEC,QAAAA,KAAK,EAAE,CAAT;AAAYC,QAAAA,MAAM,EAAE;AAApB,OADF,EAEE;AAAED,QAAAA,KAAK,EAAE,CAAT;AAAYC,QAAAA,MAAM,EAAE;AAApB,OAFF,EAGE;AAAED,QAAAA,KAAK,EAAE,CAAT;AAAYC,QAAAA,MAAM,EAAE;AAApB,OAHF,EAIEC,GAJF,CAIM,SAAuB;AAAA,YAAtB;AAAEF,UAAAA,KAAF;AAASC,UAAAA;AAAT,SAAsB;AAC3B,cAAME,QAAQ,GAAI,GAAEzD,YAAa,GAAEuD,MAAO,MAA1C;AACA,cAAMR,QAAQ,GAAGhD,IAAI,CAAC2D,OAAL,CAAa6B,YAAb,EAA2B9B,QAA3B,CAAjB;AACA,cAAMjD,KAAK,GAAGyB,SAAS,GAAGqB,KAA1B;AACA,cAAM/C,MAAM,GAAGiC,SAAS,CAAChC,KAAD,CAAxB;AAEA,eAAO6B,KAAK,CACTsB,KADI,GAEJC,MAFI,CAEGpD,KAFH,EAEUD,MAFV,EAGJsD,OAHI,CAGI,GAHJ,EAIJC,UAJI,CAIOf,QAJP,EAKJgB,IALI,CAKC,MAAM;AACVlB,UAAAA,QAAQ,CAAC,GAAD,EAAME,QAAN,EAAgB;AAAEvC,YAAAA,KAAF;AAASD,YAAAA;AAAT,WAAhB,CAAR;AACD,SAPI,CAAP;AAQD,OAlBD,CADI,CAAN;AAqBD,KA/BD,MA+BO;AACLS,MAAAA,GAAG,CACA,OAAMqE,UAAW,oDADjB,CAAH;AAGD;AACF;;AAEDrE,EAAAA,GAAG,CAAE;AACP,GAAGpB,KAAK,CAAC4F,IAAN,CAAW,mDAAX,CAAgE;AACnE,GAAG5F,KAAK,CAAC4F,IAAN,CAAW,GAAX,CAAgB,SAAQ5F,KAAK,CAAC6F,IAAN,CACvB,yCADuB,CAEvB,KAAI7F,KAAK,CAAC4F,IAAN,CAAW,GAAX,CAAgB;AACxB,GAAG5F,KAAK,CAAC4F,IAAN,CAAW,GAAX,CAAgB,kDAAiD5F,KAAK,CAAC4F,IAAN,CAChE,GADgE,CAEhE;AACJ,GAAG5F,KAAK,CAAC4F,IAAN,CAAW,GAAX,CAAgB,KAAI5F,KAAK,CAACuD,SAAN,CACnB,qCADmB,CAEnB,aAAYvD,KAAK,CAAC4F,IAAN,CAAW,GAAX,CAAgB;AAChC,GAAG5F,KAAK,CAAC4F,IAAN,CAAW,mDAAX,CAAgE;AACnE,CAZK,CAAH;AAcAxE,EAAAA,GAAG,CACA,6BAA4BpB,KAAK,CAACuD,SAAN,CAAgB,yBAAhB,CAA2C,GADvE,CAAH;AAGD,CA/OM","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 );\n\n if (assetsPath && fs.existsSync(assetsPath)) {\n log(`\\n ${chalk.underline(\"Assets\")}`);\n\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 log(`\\n ${chalk.underline(\"Android\")}`);\n\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 log(`\\n ${chalk.underline(\"iOS\")}`);\n\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 logWrite(\"✨\", storyboardPath);\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 ${chalk.blue(\"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\")}\n ${chalk.blue(\"┃\")} 💖 ${chalk.bold(\n \"Love this library? Consider sponsoring!\",\n )} ${chalk.blue(\"┃\")}\n ${chalk.blue(\"┃\")} One-time amounts are available. ${chalk.blue(\n \"┃\",\n )}\n ${chalk.blue(\"┃\")} ${chalk.underline(\n \"https://github.com/sponsors/zoontek\",\n )} ${chalk.blue(\"┃\")}\n ${chalk.blue(\"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\")}\n`);\n\n log(\n `✅ Done! Thanks for using ${chalk.underline(\"react-native-bootsplash\")}.`,\n );\n};\n"]}
@@ -1,14 +1,7 @@
1
- var _NativeModule$statusB, _NativeModule$navigat;
2
-
3
1
  import { NativeModules } from "react-native";
4
2
  const NativeModule = NativeModules.RNBootSplash;
5
- export function show(config = {}) {
6
- return NativeModule.show({
7
- fade: false,
8
- ...config
9
- }.fade).then(() => {});
10
- }
11
- export function hide(config = {}) {
3
+ export function hide() {
4
+ let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
12
5
  return NativeModule.hide({
13
6
  fade: false,
14
7
  ...config
@@ -17,13 +10,8 @@ export function hide(config = {}) {
17
10
  export function getVisibilityStatus() {
18
11
  return NativeModule.getVisibilityStatus();
19
12
  }
20
- export const statusBarHeight = (_NativeModule$statusB = NativeModule.statusBarHeight) !== null && _NativeModule$statusB !== void 0 ? _NativeModule$statusB : 0;
21
- export const navigationBarHeight = (_NativeModule$navigat = NativeModule.navigationBarHeight) !== null && _NativeModule$navigat !== void 0 ? _NativeModule$navigat : 0;
22
13
  export default {
23
- show,
24
14
  hide,
25
- getVisibilityStatus,
26
- statusBarHeight,
27
- navigationBarHeight
15
+ getVisibilityStatus
28
16
  };
29
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,eAAuB,4BAAGR,YAAY,CAACQ,eAAhB,yEAAmC,CAAhE;AACP,OAAO,MAAMC,mBAA2B,4BACtCT,YAAY,CAACS,mBADyB,yEACF,CAD/B;AAGP,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: number = NativeModule.statusBarHeight ?? 0;\nexport const navigationBarHeight: number =\n NativeModule.navigationBarHeight ?? 0;\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