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
@@ -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,84 +116,76 @@ 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})` : ""));
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
+ log(`\n ${_chalk.default.underline("Assets")}`);
144
+ await Promise.all([{
145
+ ratio: 1,
146
+ suffix: ""
166
147
  }, {
167
- filePath: _path.default.resolve(assetsPath, logoFileName + "@1,5x.png"),
168
- width: width["@1,5x"],
169
- height: height["@1,5x"]
148
+ ratio: 1.5,
149
+ suffix: "@1,5x"
170
150
  }, {
171
- filePath: _path.default.resolve(assetsPath, logoFileName + "@2x.png"),
172
- width: width["@2x"],
173
- height: height["@2x"]
151
+ ratio: 2,
152
+ suffix: "@2x"
174
153
  }, {
175
- filePath: _path.default.resolve(assetsPath, logoFileName + "@3x.png"),
176
- width: width["@3x"],
177
- height: height["@3x"]
154
+ ratio: 3,
155
+ suffix: "@3x"
178
156
  }, {
179
- filePath: _path.default.resolve(assetsPath, logoFileName + "@4x.png"),
180
- width: width["@4x"],
181
- height: height["@4x"]
182
- });
157
+ ratio: 4,
158
+ suffix: "@4x"
159
+ }].map(_ref3 => {
160
+ let {
161
+ ratio,
162
+ suffix
163
+ } = _ref3;
164
+ const fileName = `${logoFileName}${suffix}.png`;
165
+
166
+ const filePath = _path.default.resolve(assetsPath, fileName);
167
+
168
+ const width = logoWidth * ratio;
169
+ const height = getHeight(width);
170
+ return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
171
+ logWrite("✨", filePath, {
172
+ width,
173
+ height
174
+ });
175
+ });
176
+ }));
183
177
  }
184
178
 
185
179
  if (android) {
180
+ log(`\n ${_chalk.default.underline("Android")}`);
186
181
  const appPath = android.appName ? _path.default.resolve(android.sourceDir, android.appName) : _path.default.resolve(android.sourceDir); // @react-native-community/cli 2.x & 3.x support
187
182
 
188
183
  const resPath = _path.default.resolve(appPath, "src", flavor, "res");
189
184
 
190
- const drawablePath = _path.default.resolve(resPath, "drawable");
191
-
192
185
  const valuesPath = _path.default.resolve(resPath, "values");
193
186
 
194
- _fsExtra.default.ensureDirSync(drawablePath);
195
-
196
187
  _fsExtra.default.ensureDirSync(valuesPath);
197
188
 
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
189
  const colorsXmlPath = _path.default.resolve(valuesPath, "colors.xml");
205
190
 
206
191
  const colorsXmlEntry = `<color name="${androidColorName}">${backgroundColorHex}</color>`;
@@ -214,37 +199,56 @@ const generate = async ({
214
199
  _fsExtra.default.writeFileSync(colorsXmlPath, colorsXml.replace(/<\/resources>/g, ` ${colorsXmlEntry}\n</resources>`), "utf-8");
215
200
  }
216
201
 
217
- log(`✏️ ${_path.default.relative(workingDirectory, colorsXmlPath)}`, true);
202
+ logWrite("✏️ ", colorsXmlPath);
218
203
  } else {
219
204
  _fsExtra.default.writeFileSync(colorsXmlPath, `<resources>\n ${colorsXmlEntry}\n</resources>\n`, "utf-8");
220
205
 
221
- log(`✨ ${_path.default.relative(workingDirectory, colorsXmlPath)}`, true);
206
+ logWrite("✨", colorsXmlPath);
222
207
  }
223
208
 
224
- images.push({
225
- filePath: _path.default.resolve(resPath, "mipmap-mdpi", logoFileName + ".png"),
226
- width: width["@1x"],
227
- height: height["@1x"]
209
+ await Promise.all([{
210
+ ratio: 1,
211
+ directory: "mipmap-mdpi"
228
212
  }, {
229
- filePath: _path.default.resolve(resPath, "mipmap-hdpi", logoFileName + ".png"),
230
- width: width["@1,5x"],
231
- height: height["@1,5x"]
213
+ ratio: 1.5,
214
+ directory: "mipmap-hdpi"
232
215
  }, {
233
- filePath: _path.default.resolve(resPath, "mipmap-xhdpi", logoFileName + ".png"),
234
- width: width["@2x"],
235
- height: height["@2x"]
216
+ ratio: 2,
217
+ directory: "mipmap-xhdpi"
236
218
  }, {
237
- filePath: _path.default.resolve(resPath, "mipmap-xxhdpi", logoFileName + ".png"),
238
- width: width["@3x"],
239
- height: height["@3x"]
219
+ ratio: 3,
220
+ directory: "mipmap-xxhdpi"
240
221
  }, {
241
- filePath: _path.default.resolve(resPath, "mipmap-xxxhdpi", logoFileName + ".png"),
242
- width: width["@4x"],
243
- height: height["@4x"]
244
- });
222
+ ratio: 4,
223
+ directory: "mipmap-xxxhdpi"
224
+ }].map(_ref4 => {
225
+ let {
226
+ ratio,
227
+ directory
228
+ } = _ref4;
229
+ const fileName = `${logoFileName}.png`;
230
+
231
+ const filePath = _path.default.resolve(resPath, directory, fileName);
232
+
233
+ const width = logoWidth * ratio;
234
+ const height = getHeight(width);
235
+ const canvasSize = splashScreenIconSizeNoBackground * ratio; // https://github.com/oliver-moran/jimp/tree/master/packages/jimp#creating-new-images
236
+
237
+ const canvas = new _jimp.default(canvasSize, canvasSize, 0xffffff00);
238
+ const logo = image.clone().resize(width, height);
239
+ const x = (canvasSize - width) / 2;
240
+ const y = (canvasSize - height) / 2;
241
+ return canvas.blit(logo, x, y).quality(100).writeAsync(filePath).then(() => {
242
+ logWrite("✨", filePath, {
243
+ width: canvasSize,
244
+ height: canvasSize
245
+ });
246
+ });
247
+ }));
245
248
  }
246
249
 
247
250
  if (ios) {
251
+ log(`\n ${_chalk.default.underline("iOS")}`);
248
252
  const projectPath = ios.projectPath.replace(/.xcodeproj$/, "");
249
253
 
250
254
  const imagesPath = _path.default.resolve(projectPath, "Images.xcassets");
@@ -253,12 +257,12 @@ const generate = async ({
253
257
  const storyboardPath = _path.default.resolve(projectPath, "BootSplash.storyboard");
254
258
 
255
259
  _fsExtra.default.writeFileSync(storyboardPath, getStoryboard({
256
- height: height["@1x"],
257
- width: width["@1x"],
260
+ height: getHeight(logoWidth),
261
+ width: logoWidth,
258
262
  backgroundColor: backgroundColorHex
259
263
  }), "utf-8");
260
264
 
261
- log(`✨ ${_path.default.relative(workingDirectory, storyboardPath)}`, true);
265
+ logWrite("✨", storyboardPath);
262
266
  } else {
263
267
  log(`No "${projectPath}" directory found. Skipping iOS storyboard generation…`);
264
268
  }
@@ -270,31 +274,45 @@ const generate = async ({
270
274
 
271
275
  _fsExtra.default.writeFileSync(_path.default.resolve(imageSetPath, "Contents.json"), ContentsJson, "utf-8");
272
276
 
273
- images.push({
274
- filePath: _path.default.resolve(imageSetPath, logoFileName + ".png"),
275
- width: width["@1x"],
276
- height: height["@1x"]
277
+ await Promise.all([{
278
+ ratio: 1,
279
+ suffix: ""
277
280
  }, {
278
- filePath: _path.default.resolve(imageSetPath, logoFileName + "@2x.png"),
279
- width: width["@2x"],
280
- height: height["@2x"]
281
+ ratio: 2,
282
+ suffix: "@2x"
281
283
  }, {
282
- filePath: _path.default.resolve(imageSetPath, logoFileName + "@3x.png"),
283
- width: width["@3x"],
284
- height: height["@3x"]
285
- });
284
+ ratio: 3,
285
+ suffix: "@3x"
286
+ }].map(_ref5 => {
287
+ let {
288
+ ratio,
289
+ suffix
290
+ } = _ref5;
291
+ const fileName = `${logoFileName}${suffix}.png`;
292
+
293
+ const filePath = _path.default.resolve(imageSetPath, fileName);
294
+
295
+ const width = logoWidth * ratio;
296
+ const height = getHeight(width);
297
+ return image.clone().resize(width, height).quality(100).writeAsync(filePath).then(() => {
298
+ logWrite("✨", filePath, {
299
+ width,
300
+ height
301
+ });
302
+ });
303
+ }));
286
304
  } else {
287
305
  log(`No "${imagesPath}" directory found. Skipping iOS images generation…`);
288
306
  }
289
307
  }
290
308
 
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
- })));
309
+ log(`
310
+ ${_chalk.default.blue("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓")}
311
+ ${_chalk.default.blue("┃")} 💖 ${_chalk.default.bold("Love this library? Consider sponsoring!")} ${_chalk.default.blue("┃")}
312
+ ${_chalk.default.blue("┃")} One-time amounts are available. ${_chalk.default.blue("┃")}
313
+ ${_chalk.default.blue("┃")} ${_chalk.default.underline("https://github.com/sponsors/zoontek")} ${_chalk.default.blue("┃")}
314
+ ${_chalk.default.blue("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛")}
315
+ `);
298
316
  log(`✅ Done! Thanks for using ${_chalk.default.underline("react-native-bootsplash")}.`);
299
317
  };
300
318
 
@@ -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","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":"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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 );\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"]}
@@ -3,25 +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
- var _NativeModule$statusB, _NativeModule$navigat;
14
-
15
12
  const NativeModule = _reactNative.NativeModules.RNBootSplash;
16
13
 
17
- function show(config = {}) {
18
- return NativeModule.show({
19
- fade: false,
20
- ...config
21
- }.fade).then(() => {});
22
- }
23
-
24
- function hide(config = {}) {
14
+ function hide() {
15
+ let config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
25
16
  return NativeModule.hide({
26
17
  fade: false,
27
18
  ...config
@@ -32,16 +23,9 @@ function getVisibilityStatus() {
32
23
  return NativeModule.getVisibilityStatus();
33
24
  }
34
25
 
35
- const statusBarHeight = (_NativeModule$statusB = NativeModule.statusBarHeight) !== null && _NativeModule$statusB !== void 0 ? _NativeModule$statusB : 0;
36
- exports.statusBarHeight = statusBarHeight;
37
- const navigationBarHeight = (_NativeModule$navigat = NativeModule.navigationBarHeight) !== null && _NativeModule$navigat !== void 0 ? _NativeModule$navigat : 0;
38
- exports.navigationBarHeight = navigationBarHeight;
39
26
  var _default = {
40
- show,
41
27
  hide,
42
- getVisibilityStatus,
43
- statusBarHeight,
44
- navigationBarHeight
28
+ getVisibilityStatus
45
29
  };
46
30
  exports.default = _default;
47
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,eAAuB,4BAAGT,YAAY,CAACS,eAAhB,yEAAmC,CAAhE;;AACA,MAAMC,mBAA2B,4BACtCV,YAAY,CAACU,mBADyB,yEACF,CAD/B;;eAGQ;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: 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":["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"]}