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
@@ -16,7 +16,9 @@ var _path = _interopRequireDefault(require("path"));
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
18
  const logoFileName = "bootsplash_logo";
19
- const xcassetName = "BootSplashLogo";
19
+ const xcassetName = "BootSplashLogo"; // https://github.com/androidx/androidx/blob/androidx-main/core/core-splashscreen/src/main/res/values/dimens.xml#L22
20
+
21
+ const splashScreenIconSizeNoBackground = 288;
20
22
  const androidColorName = "bootsplash_background";
21
23
  const androidColorRegex = /<color name="bootsplash_background">#\w+<\/color>/g;
22
24
  const ContentsJson = `{
@@ -44,11 +46,12 @@ const ContentsJson = `{
44
46
  }
45
47
  `;
46
48
 
47
- const getStoryboard = ({
48
- height,
49
- width,
50
- backgroundColor: hex
51
- }) => {
49
+ const getStoryboard = _ref => {
50
+ let {
51
+ height,
52
+ width,
53
+ backgroundColor: hex
54
+ } = _ref;
52
55
  const r = (parseInt(hex[1] + hex[2], 16) / 255).toPrecision(15);
53
56
  const g = (parseInt(hex[3] + hex[4], 16) / 255).toPrecision(15);
54
57
  const b = (parseInt(hex[5] + hex[6], 16) / 255).toPrecision(15);
@@ -100,18 +103,8 @@ const getStoryboard = ({
100
103
  `;
101
104
  };
102
105
 
103
- const bootSplashXml = `<?xml version="1.0" encoding="utf-8"?>
104
-
105
- <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
106
- <item android:drawable="@color/${androidColorName}" />
107
-
108
- <item>
109
- <bitmap android:src="@mipmap/${logoFileName}" android:gravity="center" />
110
- </item>
111
- </layer-list>
112
- `;
113
-
114
- const log = (text, dim = false) => {
106
+ const log = function (text) {
107
+ let dim = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
115
108
  console.log(dim ? _chalk.default.dim(text) : text);
116
109
  };
117
110
 
@@ -123,63 +116,63 @@ const toFullHexadecimal = hex => {
123
116
  return up.length === 4 ? "#" + up[1] + up[1] + up[2] + up[2] + up[3] + up[3] : up;
124
117
  };
125
118
 
126
- const generate = async ({
127
- android,
128
- ios,
129
- workingDirectory,
130
- logoPath,
131
- backgroundColor,
132
- logoWidth,
133
- flavor,
134
- assetsPath
135
- }) => {
119
+ const generate = async _ref2 => {
120
+ let {
121
+ android,
122
+ ios,
123
+ workingPath,
124
+ logoPath,
125
+ backgroundColor,
126
+ logoWidth,
127
+ flavor,
128
+ assetsPath
129
+ } = _ref2;
130
+
136
131
  if (!isValidHexadecimal(backgroundColor)) {
137
132
  throw new Error("--background-color value is not a valid hexadecimal color.");
138
133
  }
139
134
 
140
135
  const image = await _jimp.default.read(logoPath);
141
136
  const backgroundColorHex = toFullHexadecimal(backgroundColor);
142
- const images = [];
143
137
 
144
138
  const getHeight = size => Math.ceil(size * (image.bitmap.height / image.bitmap.width));
145
139
 
146
- const width = {
147
- "@1x": logoWidth,
148
- "@1,5x": logoWidth * 1.5,
149
- "@2x": logoWidth * 2,
150
- "@3x": logoWidth * 3,
151
- "@4x": logoWidth * 4
152
- };
153
- const height = {
154
- "@1x": getHeight(width["@1x"]),
155
- "@1,5x": getHeight(width["@1,5x"]),
156
- "@2x": getHeight(width["@2x"]),
157
- "@3x": getHeight(width["@3x"]),
158
- "@4x": getHeight(width["@4x"])
159
- };
140
+ const logWrite = (emoji, filePath, dimensions) => log(`${emoji} ${_path.default.relative(workingPath, filePath)}` + (dimensions != null ? ` (${dimensions.width}x${dimensions.height})` : ""), true);
160
141
 
161
142
  if (assetsPath && _fsExtra.default.existsSync(assetsPath)) {
162
- images.push({
163
- filePath: _path.default.resolve(assetsPath, logoFileName + ".png"),
164
- width: width["@1x"],
165
- height: height["@1x"]
143
+ await Promise.all([{
144
+ ratio: 1,
145
+ suffix: ""
166
146
  }, {
167
- filePath: _path.default.resolve(assetsPath, logoFileName + "@1,5x.png"),
168
- width: width["@1,5x"],
169
- height: height["@1,5x"]
147
+ ratio: 1.5,
148
+ suffix: "@1,5x"
170
149
  }, {
171
- filePath: _path.default.resolve(assetsPath, logoFileName + "@2x.png"),
172
- width: width["@2x"],
173
- height: height["@2x"]
150
+ ratio: 2,
151
+ suffix: "@2x"
174
152
  }, {
175
- filePath: _path.default.resolve(assetsPath, logoFileName + "@3x.png"),
176
- width: width["@3x"],
177
- height: height["@3x"]
153
+ ratio: 3,
154
+ suffix: "@3x"
178
155
  }, {
179
- filePath: _path.default.resolve(assetsPath, logoFileName + "@4x.png"),
180
- width: width["@4x"],
181
- height: height["@4x"]
182
- });
156
+ ratio: 4,
157
+ suffix: "@4x"
158
+ }].map(_ref3 => {
159
+ let {
160
+ ratio,
161
+ suffix
162
+ } = _ref3;
163
+ const fileName = `${logoFileName}${suffix}.png`;
164
+
165
+ const filePath = _path.default.resolve(assetsPath, fileName);
166
+
167
+ const width = logoWidth * ratio;
168
+ const height = getHeight(width);
169
+ return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
170
+ logWrite("✨", filePath, {
171
+ width,
172
+ height
173
+ });
174
+ });
175
+ }));
183
176
  }
184
177
 
185
178
  if (android) {
@@ -187,20 +180,10 @@ const generate = async ({
187
180
 
188
181
  const resPath = _path.default.resolve(appPath, "src", flavor, "res");
189
182
 
190
- const drawablePath = _path.default.resolve(resPath, "drawable");
191
-
192
183
  const valuesPath = _path.default.resolve(resPath, "values");
193
184
 
194
- _fsExtra.default.ensureDirSync(drawablePath);
195
-
196
185
  _fsExtra.default.ensureDirSync(valuesPath);
197
186
 
198
- const bootSplashXmlPath = _path.default.resolve(drawablePath, "bootsplash.xml");
199
-
200
- _fsExtra.default.writeFileSync(bootSplashXmlPath, bootSplashXml, "utf-8");
201
-
202
- log(`✨ ${_path.default.relative(workingDirectory, bootSplashXmlPath)}`, true);
203
-
204
187
  const colorsXmlPath = _path.default.resolve(valuesPath, "colors.xml");
205
188
 
206
189
  const colorsXmlEntry = `<color name="${androidColorName}">${backgroundColorHex}</color>`;
@@ -214,34 +197,52 @@ const generate = async ({
214
197
  _fsExtra.default.writeFileSync(colorsXmlPath, colorsXml.replace(/<\/resources>/g, ` ${colorsXmlEntry}\n</resources>`), "utf-8");
215
198
  }
216
199
 
217
- log(`✏️ ${_path.default.relative(workingDirectory, colorsXmlPath)}`, true);
200
+ logWrite("✏️ ", colorsXmlPath);
218
201
  } else {
219
202
  _fsExtra.default.writeFileSync(colorsXmlPath, `<resources>\n ${colorsXmlEntry}\n</resources>\n`, "utf-8");
220
203
 
221
- log(`✨ ${_path.default.relative(workingDirectory, colorsXmlPath)}`, true);
204
+ logWrite("✨", colorsXmlPath);
222
205
  }
223
206
 
224
- images.push({
225
- filePath: _path.default.resolve(resPath, "mipmap-mdpi", logoFileName + ".png"),
226
- width: width["@1x"],
227
- height: height["@1x"]
207
+ await Promise.all([{
208
+ ratio: 1,
209
+ directory: "mipmap-mdpi"
228
210
  }, {
229
- filePath: _path.default.resolve(resPath, "mipmap-hdpi", logoFileName + ".png"),
230
- width: width["@1,5x"],
231
- height: height["@1,5x"]
211
+ ratio: 1.5,
212
+ directory: "mipmap-hdpi"
232
213
  }, {
233
- filePath: _path.default.resolve(resPath, "mipmap-xhdpi", logoFileName + ".png"),
234
- width: width["@2x"],
235
- height: height["@2x"]
214
+ ratio: 2,
215
+ directory: "mipmap-xhdpi"
236
216
  }, {
237
- filePath: _path.default.resolve(resPath, "mipmap-xxhdpi", logoFileName + ".png"),
238
- width: width["@3x"],
239
- height: height["@3x"]
217
+ ratio: 3,
218
+ directory: "mipmap-xxhdpi"
240
219
  }, {
241
- filePath: _path.default.resolve(resPath, "mipmap-xxxhdpi", logoFileName + ".png"),
242
- width: width["@4x"],
243
- height: height["@4x"]
244
- });
220
+ ratio: 4,
221
+ directory: "mipmap-xxxhdpi"
222
+ }].map(_ref4 => {
223
+ let {
224
+ ratio,
225
+ directory
226
+ } = _ref4;
227
+ const fileName = `${logoFileName}.png`;
228
+
229
+ const filePath = _path.default.resolve(resPath, directory, fileName);
230
+
231
+ const width = logoWidth * ratio;
232
+ const height = getHeight(width);
233
+ const canvasSize = splashScreenIconSizeNoBackground * ratio; // https://github.com/oliver-moran/jimp/tree/master/packages/jimp#creating-new-images
234
+
235
+ const canvas = new _jimp.default(canvasSize, canvasSize, 0xffffff00);
236
+ const logo = image.clone().resize(width, height);
237
+ const x = (canvasSize - width) / 2;
238
+ const y = (canvasSize - height) / 2;
239
+ return canvas.blit(logo, x, y).quality(100).writeAsync(filePath).then(() => {
240
+ logWrite("✨", filePath, {
241
+ width: canvasSize,
242
+ height: canvasSize
243
+ });
244
+ });
245
+ }));
245
246
  }
246
247
 
247
248
  if (ios) {
@@ -253,12 +254,12 @@ const generate = async ({
253
254
  const storyboardPath = _path.default.resolve(projectPath, "BootSplash.storyboard");
254
255
 
255
256
  _fsExtra.default.writeFileSync(storyboardPath, getStoryboard({
256
- height: height["@1x"],
257
- width: width["@1x"],
257
+ height: getHeight(logoWidth),
258
+ width: logoWidth,
258
259
  backgroundColor: backgroundColorHex
259
260
  }), "utf-8");
260
261
 
261
- log(`✨ ${_path.default.relative(workingDirectory, storyboardPath)}`, true);
262
+ log(`✨ ${_path.default.relative(workingPath, storyboardPath)}`, true);
262
263
  } else {
263
264
  log(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
264
265
  }
@@ -270,31 +271,38 @@ const generate = async ({
270
271
 
271
272
  _fsExtra.default.writeFileSync(_path.default.resolve(imageSetPath, "Contents.json"), ContentsJson, "utf-8");
272
273
 
273
- images.push({
274
- filePath: _path.default.resolve(imageSetPath, logoFileName + ".png"),
275
- width: width["@1x"],
276
- height: height["@1x"]
274
+ await Promise.all([{
275
+ ratio: 1,
276
+ suffix: ""
277
277
  }, {
278
- filePath: _path.default.resolve(imageSetPath, logoFileName + "@2x.png"),
279
- width: width["@2x"],
280
- height: height["@2x"]
278
+ ratio: 2,
279
+ suffix: "@2x"
281
280
  }, {
282
- filePath: _path.default.resolve(imageSetPath, logoFileName + "@3x.png"),
283
- width: width["@3x"],
284
- height: height["@3x"]
285
- });
281
+ ratio: 3,
282
+ suffix: "@3x"
283
+ }].map(_ref5 => {
284
+ let {
285
+ ratio,
286
+ suffix
287
+ } = _ref5;
288
+ const fileName = `${logoFileName}${suffix}.png`;
289
+
290
+ const filePath = _path.default.resolve(imageSetPath, fileName);
291
+
292
+ const width = logoWidth * ratio;
293
+ const height = getHeight(width);
294
+ return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
295
+ logWrite("✨", filePath, {
296
+ width,
297
+ height
298
+ });
299
+ });
300
+ }));
286
301
  } else {
287
302
  log(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
288
303
  }
289
304
  }
290
305
 
291
- await Promise.all(images.map(({
292
- filePath,
293
- width,
294
- height
295
- }) => image.clone().cover(width, height).writeAsync(filePath).then(() => {
296
- log(`✨ ${_path.default.relative(workingDirectory, filePath)} (${width}x${height})`, true);
297
- })));
298
306
  log(`✅ Done! Thanks for using ${_chalk.default.underline("react-native-bootsplash")}.`);
299
307
  };
300
308
 
@@ -1 +1 @@
1
- {"version":3,"sources":["generate.ts"],"names":["logoFileName","xcassetName","androidColorName","androidColorRegex","ContentsJson","getStoryboard","height","width","backgroundColor","hex","r","parseInt","toPrecision","g","b","bootSplashXml","log","text","dim","console","chalk","isValidHexadecimal","value","test","toFullHexadecimal","prefixed","up","toUpperCase","length","generate","android","ios","workingDirectory","logoPath","logoWidth","flavor","assetsPath","Error","image","jimp","read","backgroundColorHex","images","getHeight","size","Math","ceil","bitmap","fs","existsSync","push","filePath","path","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":["logoFileName","xcassetName","splashScreenIconSizeNoBackground","androidColorName","androidColorRegex","ContentsJson","getStoryboard","height","width","backgroundColor","hex","r","parseInt","toPrecision","g","b","log","text","dim","console","chalk","isValidHexadecimal","value","test","toFullHexadecimal","prefixed","up","toUpperCase","length","generate","android","ios","workingPath","logoPath","logoWidth","flavor","assetsPath","Error","image","Jimp","read","backgroundColorHex","getHeight","size","Math","ceil","bitmap","logWrite","emoji","filePath","dimensions","path","relative","fs","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"]}
@@ -3,23 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.show = show;
7
- exports.hide = hide;
6
+ exports.default = void 0;
8
7
  exports.getVisibilityStatus = getVisibilityStatus;
9
- exports.default = exports.navigationBarHeight = exports.statusBarHeight = void 0;
8
+ exports.hide = hide;
10
9
 
11
10
  var _reactNative = require("react-native");
12
11
 
13
12
  const NativeModule = _reactNative.NativeModules.RNBootSplash;
14
13
 
15
- function show(config = {}) {
16
- return NativeModule.show({
17
- fade: false,
18
- ...config
19
- }.fade).then(() => {});
20
- }
21
-
22
- function hide(config = {}) {
14
+ function hide() {
15
+ let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
23
16
  return NativeModule.hide({
24
17
  fade: false,
25
18
  ...config
@@ -30,16 +23,9 @@ function getVisibilityStatus() {
30
23
  return NativeModule.getVisibilityStatus();
31
24
  }
32
25
 
33
- const statusBarHeight = NativeModule.statusBarHeight;
34
- exports.statusBarHeight = statusBarHeight;
35
- const navigationBarHeight = NativeModule.navigationBarHeight;
36
- exports.navigationBarHeight = navigationBarHeight;
37
26
  var _default = {
38
- show,
39
27
  hide,
40
- getVisibilityStatus,
41
- statusBarHeight,
42
- navigationBarHeight
28
+ getVisibilityStatus
43
29
  };
44
30
  exports.default = _default;
45
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":["NativeModule","NativeModules","RNBootSplash","show","config","fade","then","hide","getVisibilityStatus","statusBarHeight","navigationBarHeight"],"mappings":";;;;;;;;;;AAAA;;AAKA,MAAMA,YAML,GAAGC,2BAAcC,YANlB;;AAQO,SAASC,IAAT,CAAcC,MAAc,GAAG,EAA/B,EAAkD;AACvD,SAAOJ,YAAY,CAACG,IAAb,CAAkB;AAAEE,IAAAA,IAAI,EAAE,KAAR;AAAe,OAAGD;AAAlB,IAA2BC,IAA7C,EAAmDC,IAAnD,CAAwD,MAAM,CAAE,CAAhE,CAAP;AACD;;AAEM,SAASC,IAAT,CAAcH,MAAc,GAAG,EAA/B,EAAkD;AACvD,SAAOJ,YAAY,CAACO,IAAb,CAAkB;AAAEF,IAAAA,IAAI,EAAE,KAAR;AAAe,OAAGD;AAAlB,IAA2BC,IAA7C,EAAmDC,IAAnD,CAAwD,MAAM,CAAE,CAAhE,CAAP;AACD;;AAEM,SAASE,mBAAT,GAA0D;AAC/D,SAAOR,YAAY,CAACQ,mBAAb,EAAP;AACD;;AAEM,MAAMC,eAAe,GAAGT,YAAY,CAACS,eAArC;;AACA,MAAMC,mBAAmB,GAAGV,YAAY,CAACU,mBAAzC;;eAEQ;AACbP,EAAAA,IADa;AAEbI,EAAAA,IAFa;AAGbC,EAAAA,mBAHa;AAIbC,EAAAA,eAJa;AAKbC,EAAAA;AALa,C","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":["NativeModule","NativeModules","RNBootSplash","hide","config","fade","then","getVisibilityStatus"],"mappings":";;;;;;;;;AAAA;;AAKA,MAAMA,YAGL,GAAGC,2BAAcC,YAHlB;;AAKO,SAASC,IAAT,GAAkD;AAAA,MAApCC,MAAoC,uEAAnB,EAAmB;AACvD,SAAOJ,YAAY,CAACG,IAAb,CAAkB;AAAEE,IAAAA,IAAI,EAAE,KAAR;AAAe,OAAGD;AAAlB,IAA2BC,IAA7C,EAAmDC,IAAnD,CAAwD,MAAM,CAAE,CAAhE,CAAP;AACD;;AAEM,SAASC,mBAAT,GAA0D;AAC/D,SAAOP,YAAY,CAACO,mBAAb,EAAP;AACD;;eAEc;AACbJ,EAAAA,IADa;AAEbI,EAAAA;AAFa,C","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"]}