create-expo-stack 2.5.0-next.24b962d → 2.5.0-next.4353605

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 (33) hide show
  1. package/README.md +209 -152
  2. package/build/commands/create-expo-stack.js +51 -53
  3. package/build/templates/base/components/Container.tsx.ejs +13 -0
  4. package/build/templates/base/package.json.ejs +1 -1
  5. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/index.tsx.ejs +3 -10
  6. package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/two.tsx.ejs +4 -11
  7. package/build/templates/packages/expo-router/drawer/app/(drawer)/index.tsx.ejs +4 -10
  8. package/build/templates/packages/expo-router/drawer/app/+not-found.tsx.ejs +17 -22
  9. package/build/templates/packages/expo-router/drawer/app/modal.tsx.ejs +2 -1
  10. package/build/templates/packages/expo-router/stack/app/+not-found.tsx.ejs +13 -18
  11. package/build/templates/packages/expo-router/stack/app/details.tsx.ejs +6 -12
  12. package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +5 -13
  13. package/build/templates/packages/expo-router/tabs/app/modal.tsx.ejs +2 -1
  14. package/build/templates/packages/nativewind/components/Button.tsx.ejs +2 -2
  15. package/build/templates/packages/nativewind/components/Container.tsx.ejs +9 -0
  16. package/build/templates/packages/nativewind/tailwind.config.js.ejs +1 -1
  17. package/build/templates/packages/restyle/components/Button.tsx.ejs +3 -2
  18. package/build/templates/packages/restyle/components/Container.tsx.ejs +6 -0
  19. package/build/templates/packages/tamagui/components/Button.tsx.ejs +1 -1
  20. package/build/templates/packages/tamagui/components/Container.tsx.ejs +6 -0
  21. package/build/templates/packages/unistyles/components/Button.tsx.ejs +1 -1
  22. package/build/templates/packages/unistyles/components/Container.tsx.ejs +9 -0
  23. package/build/templates/packages/unistyles/theme.ts.ejs +2 -1
  24. package/build/types/utilities/getPackageManager.d.ts +1 -0
  25. package/build/types/utilities/validateProjectName.d.ts +1 -1
  26. package/build/utilities/configureProjectFiles.js +10 -2
  27. package/build/utilities/getPackageManager.js +9 -2
  28. package/build/utilities/printOutput.js +4 -2
  29. package/build/utilities/renderTitle.js +8 -1
  30. package/build/utilities/runCLI.js +114 -40
  31. package/build/utilities/showHelp.js +3 -3
  32. package/build/utilities/validateProjectName.js +14 -8
  33. package/package.json +1 -1
@@ -46,6 +46,8 @@ var types_1 = require("../types");
46
46
  var clearStylingPackages_1 = __importDefault(require("../utilities/clearStylingPackages"));
47
47
  var validateProjectName_1 = require("../utilities/validateProjectName");
48
48
  var navigationValidationError = "You must pass in either --react-navigation or --expo-router if you want to use the --tabs or --drawer+tabs options";
49
+ var projectNameValidationError = "A project with the name";
50
+ var bunInstallationError = 'User cancelled to install recommended version of Bun.';
49
51
  var command = {
50
52
  name: 'create-expo-stack',
51
53
  description: 'Create a new Expo project',
@@ -69,9 +71,10 @@ var command = {
69
71
  useBlankTypescript = options.blank || false;
70
72
  optionsPassedIn = types_1.availablePackages.some(function (condition) { return options[condition] !== undefined; });
71
73
  cliResults = constants_1.defaultOptions;
74
+ cliResults.flags.packageManager = (0, utilities_1.getPackageManager)(toolbox, cliResults);
72
75
  _d.label = 1;
73
76
  case 1:
74
- _d.trys.push([1, 10, , 11]);
77
+ _d.trys.push([1, 7, , 9]);
75
78
  // Validation: check if the user passed in the tabs/drawer option without passing in either expo router or react navigation. If so, throw an error
76
79
  if ((options.tabs || options['drawer+tabs']) &&
77
80
  !options.reactNavigation &&
@@ -86,41 +89,36 @@ var command = {
86
89
  return [4 /*yield*/, (0, utilities_1.renderTitle)(toolbox)];
87
90
  case 2:
88
91
  _d.sent();
89
- // TODO: this is hacky, figure out a way to do this better
90
- // set timeout for 1 second so that the title can render before the CLI runs
91
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 200); })];
92
- case 3:
93
- // TODO: this is hacky, figure out a way to do this better
94
- // set timeout for 1 second so that the title can render before the CLI runs
95
- _d.sent();
96
- if (!(!first && (options.ignite || !(useDefault || optionsPassedIn || skipCLI || useBlankTypescript)))) return [3 /*break*/, 5];
92
+ if (!(!first && (options.ignite || !(useDefault || optionsPassedIn || skipCLI || useBlankTypescript)))) return [3 /*break*/, 4];
97
93
  askName = {
98
94
  type: 'input',
99
95
  name: 'name',
100
96
  message: "What do you want to name your project? (".concat(constants_1.DEFAULT_APP_NAME, ")")
101
97
  };
102
98
  return [4 /*yield*/, prompt.ask(askName)];
103
- case 4:
99
+ case 3:
104
100
  name = (_d.sent()).name;
105
101
  // if name is undefined or empty string, use default name
106
102
  cliResults.projectName = name || constants_1.DEFAULT_APP_NAME;
107
- return [3 /*break*/, 6];
108
- case 5:
103
+ return [3 /*break*/, 5];
104
+ case 4:
109
105
  // Destructure the results but set the projectName if the first param is passed in
110
106
  cliResults.projectName = first || constants_1.DEFAULT_APP_NAME;
111
107
  pathSegments = cliResults.projectName.split('/');
112
108
  cliResults.projectName = pathSegments.pop(); // get last segment as the project name
113
- _d.label = 6;
109
+ _d.label = 5;
110
+ case 5:
111
+ // Validate the provided project name; check if the directory already exists
112
+ // - We may or may not be interactive, so conditionally pass in prompt.
113
+ // - Ignore validation if the overwrite option is passed in.
114
+ if (options.overwrite) {
115
+ cliResults.flags.overwrite = true;
116
+ }
117
+ return [4 /*yield*/, (0, validateProjectName_1.validateProjectName)(exists, removeAsync, !(useDefault || optionsPassedIn || skipCLI || useBlankTypescript) ? prompt : null, cliResults.projectName, success, cliResults.flags.overwrite)];
114
118
  case 6:
115
- if (!options.overwrite) return [3 /*break*/, 7];
116
- cliResults.flags.overwrite = true;
117
- return [3 /*break*/, 9];
118
- case 7: return [4 /*yield*/, (0, validateProjectName_1.validateProjectName)(exists, removeAsync, !(useDefault || optionsPassedIn || skipCLI || useBlankTypescript) ? prompt : null, cliResults.projectName)];
119
- case 8:
120
119
  _d.sent();
121
- _d.label = 9;
122
- case 9: return [3 /*break*/, 11];
123
- case 10:
120
+ return [3 /*break*/, 9];
121
+ case 7:
124
122
  err_1 = _d.sent();
125
123
  if (err_1 === '') {
126
124
  // user cancelled/exited the interactive CLI
@@ -130,31 +128,28 @@ var command = {
130
128
  // user tried passing in tabs/drawer option without passing in either expo router or react navigation
131
129
  return [2 /*return*/, void error("\n".concat(navigationValidationError, "\n"))];
132
130
  }
133
- // TODO: delete all files with projectName
134
- // await removeAsync(cliResults.projectName);
131
+ if (err_1.message.includes(projectNameValidationError)) {
132
+ return [2 /*return*/, void success("\nCancelled... \uD83D\uDC4B \n")];
133
+ }
134
+ // Delete all files with projectName
135
+ return [4 /*yield*/, removeAsync(cliResults.projectName)];
136
+ case 8:
137
+ // Delete all files with projectName
138
+ _d.sent();
135
139
  printSomethingWentWrong();
136
140
  throw err_1;
137
- case 11:
138
- _d.trys.push([11, 18, , 19]);
139
- if (!options.ignite) return [3 /*break*/, 13];
141
+ case 9:
142
+ _d.trys.push([9, 16, , 18]);
143
+ if (!options.ignite) return [3 /*break*/, 11];
140
144
  return [4 /*yield*/, (0, utilities_1.runIgnite)(toolbox, cliResults.projectName, cliResults)];
141
- case 12:
145
+ case 10:
142
146
  _d.sent();
143
- return [3 /*break*/, 17];
144
- case 13:
147
+ return [3 /*break*/, 15];
148
+ case 11:
145
149
  // Check if the user wants to not install dependencies and/or not initialize git, update cliResults accordingly
146
150
  cliResults.flags.noInstall =
147
151
  options.noInstall || (typeof options.install === 'boolean' && !options.install) || false;
148
152
  cliResults.flags.noGit = options.noGit || (typeof options.git === 'boolean' && !options.git) || false;
149
- cliResults.flags.packageManager = options.bun
150
- ? 'bun'
151
- : options.pnpm
152
- ? 'pnpm'
153
- : options.npm
154
- ? 'npm'
155
- : options.yarn
156
- ? 'yarn'
157
- : undefined;
158
153
  // Validate import alias string forward slash and asterisk
159
154
  if (typeof options.importAlias === 'string') {
160
155
  if (!options.importAlias.endsWith('/*')) {
@@ -162,16 +157,13 @@ var command = {
162
157
  }
163
158
  }
164
159
  cliResults.flags.importAlias = options.importAlias !== false && options['import-alias'] !== false;
165
- if (!!(useDefault || optionsPassedIn || skipCLI || useBlankTypescript)) return [3 /*break*/, 15];
160
+ if (!!(useDefault || optionsPassedIn || skipCLI || useBlankTypescript)) return [3 /*break*/, 13];
166
161
  return [4 /*yield*/, (0, utilities_1.runCLI)(toolbox, cliResults.projectName)];
167
- case 14:
162
+ case 12:
168
163
  // Run the CLI to prompt the user for input
169
164
  cliResults = _d.sent();
170
- _d.label = 15;
171
- case 15:
172
- if (!cliResults.flags.packageManager) {
173
- cliResults.flags.packageManager = 'npm';
174
- }
165
+ _d.label = 13;
166
+ case 13:
175
167
  // Update the cliResults with the options passed in via the command
176
168
  // Navigation packages
177
169
  if (options.reactNavigation || options['react-navigation'] || options.reactnavigation) {
@@ -322,24 +314,30 @@ var command = {
322
314
  formattedFiles = [];
323
315
  formattedFiles = (0, utilities_1.generateProjectFiles)(authenticationPackage, cliResults, files, formattedFiles, navigationPackage, packageManager, stylingPackage, toolbox, internalizationPackage);
324
316
  return [4 /*yield*/, (0, utilities_1.printOutput)(cliResults, formattedFiles, toolbox, stylingPackage)];
325
- case 16:
317
+ case 14:
326
318
  _d.sent();
327
- _d.label = 17;
328
- case 17: return [3 /*break*/, 19];
329
- case 18:
319
+ _d.label = 15;
320
+ case 15: return [3 /*break*/, 18];
321
+ case 16:
330
322
  err_2 = _d.sent();
331
323
  if (err_2 === '') {
332
324
  // user cancelled/exited the interactive CLI
333
325
  return [2 /*return*/, void success("\nCancelled... \uD83D\uDC4B \n")];
334
326
  }
335
- // TODO: delete all files with projectName
336
- // await removeAsync(cliResults.projectName);
327
+ if (err_2.message.includes(bunInstallationError)) {
328
+ return [2 /*return*/, void success("\nUser cancelled to install recommended version of Bun... \uD83D\uDC4B \n")];
329
+ }
330
+ // Delete all files with projectName
331
+ return [4 /*yield*/, removeAsync(cliResults.projectName)];
332
+ case 17:
333
+ // Delete all files with projectName
334
+ _d.sent();
337
335
  printSomethingWentWrong();
338
336
  throw err_2;
339
- case 19: return [2 /*return*/];
337
+ case 18: return [2 /*return*/];
340
338
  }
341
339
  });
342
340
  }); }
343
341
  };
344
342
  exports.default = command;
345
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsMENBU3NCO0FBQ3RCLDBDQUFnRTtBQUNoRSxrQ0FBeUQ7QUFDekQsMkZBQXFFO0FBQ3JFLHdFQUF1RTtBQUV2RSxJQUFNLHlCQUF5QixHQUFHLG9IQUFvSCxDQUFDO0FBRXZKLElBQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLFdBQVcsRUFBRSwyQkFBMkI7SUFDeEMsR0FBRyxFQUFFLFVBQU8sT0FBTzs7Ozs7b0JBRWYsS0FJRSxPQUFPLFdBSjBCLEVBQXJCLE1BQU0sWUFBQSxFQUFFLFdBQVcsaUJBQUEsRUFDakMsS0FHRSxPQUFPLFdBSHFCLEVBQWhCLEtBQUssV0FBQSxFQUFFLE9BQU8sYUFBQSxFQUM1QixLQUVFLE9BQU8sTUFGMEMsRUFBMUMsS0FBSyxXQUFBLEVBQUUsSUFBSSxVQUFBLEVBQUUsU0FBUyxlQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsT0FBTyxhQUFBLEVBQ2pELE1BQU0sR0FDSixPQUFPLE9BREgsQ0FDSTtvQkFFTix1QkFBdUIsR0FBRzt3QkFDOUIsSUFBSSxDQUFDLHVFQUE2RCxDQUFDLENBQUM7d0JBQ3BFLElBQUksQ0FDRiwySEFBMkgsQ0FDNUgsQ0FBQzt3QkFDRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsQ0FBQyxDQUFDO29CQUNGLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzlCLElBQUEsb0JBQVEsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUVuQyxzQkFBTztvQkFDVCxDQUFDO29CQUdLLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7b0JBQ2pDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDO29CQUU1QyxlQUFlLEdBQUcseUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQUMsU0FBUyxJQUFLLE9BQUEsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsRUFBaEMsQ0FBZ0MsQ0FBQyxDQUFDO29CQUc1RixVQUFVLEdBQWUsMEJBQWMsQ0FBQzs7OztvQkFHMUMsa0pBQWtKO29CQUNsSixJQUNFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQ3hDLENBQUMsT0FBTyxDQUFDLGVBQWU7d0JBQ3hCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO3dCQUM1QixDQUFDLE9BQU8sQ0FBQyxlQUFlO3dCQUN4QixDQUFDLE9BQU8sQ0FBQyxVQUFVO3dCQUNuQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7d0JBQ3ZCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFDbkIsQ0FBQzt3QkFDRCx1Q0FBdUM7d0JBQ3ZDLE1BQU0seUJBQXlCLENBQUM7b0JBQ2xDLENBQUM7b0JBRUQscUJBQU0sSUFBQSx1QkFBVyxFQUFDLE9BQU8sQ0FBQyxFQUFBOztvQkFBMUIsU0FBMEIsQ0FBQztvQkFFM0IsMERBQTBEO29CQUMxRCw0RUFBNEU7b0JBQzVFLHFCQUFNLElBQUksT0FBTyxDQUFDLFVBQUMsT0FBTyxJQUFLLE9BQUEsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBeEIsQ0FBd0IsQ0FBQyxFQUFBOztvQkFGeEQsMERBQTBEO29CQUMxRCw0RUFBNEU7b0JBQzVFLFNBQXdELENBQUM7eUJBQ3JELENBQUEsQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksZUFBZSxJQUFJLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUEsRUFBL0Ysd0JBQStGO29CQUMzRixPQUFPLEdBQUc7d0JBQ2QsSUFBSSxFQUFFLE9BQU87d0JBQ2IsSUFBSSxFQUFFLE1BQU07d0JBQ1osT0FBTyxFQUFFLGtEQUEyQyw0QkFBZ0IsTUFBRztxQkFDeEUsQ0FBQztvQkFDZSxxQkFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFBOztvQkFBbEMsSUFBSSxHQUFLLENBQUEsU0FBeUIsQ0FBQSxLQUE5QjtvQkFDWix5REFBeUQ7b0JBQ3pELFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLDRCQUFnQixDQUFDOzs7b0JBRWxELGtGQUFrRjtvQkFDbEYsVUFBVSxDQUFDLFdBQVcsR0FBRyxLQUFLLElBQUksNEJBQWdCLENBQUM7b0JBQzdDLFlBQVksR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDdkQsVUFBVSxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyx1Q0FBdUM7Ozt5QkFNbEYsT0FBTyxDQUFDLFNBQVMsRUFBakIsd0JBQWlCO29CQUNuQixVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7O3dCQUVsQyxxQkFBTSxJQUFBLHlDQUFtQixFQUN2QixNQUFNLEVBQ04sV0FBVyxFQUNYLENBQUMsQ0FBQyxVQUFVLElBQUksZUFBZSxJQUFJLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDakYsVUFBVSxDQUFDLFdBQVcsQ0FDdkIsRUFBQTs7b0JBTEQsU0FLQyxDQUFDOzs7OztvQkFHSixJQUFJLEtBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQzt3QkFDZiw0Q0FBNEM7d0JBQzVDLHNCQUFPLEtBQUssT0FBTyxDQUFDLGdDQUFzQixDQUFDLEVBQUM7b0JBQzlDLENBQUM7b0JBQ0QsSUFBSSxLQUFHLEtBQUsseUJBQXlCLEVBQUUsQ0FBQzt3QkFDdEMscUdBQXFHO3dCQUNyRyxzQkFBTyxLQUFLLEtBQUssQ0FBQyxZQUFLLHlCQUF5QixPQUFJLENBQUMsRUFBQztvQkFDeEQsQ0FBQztvQkFFRCwwQ0FBMEM7b0JBQzFDLDZDQUE2QztvQkFFN0MsdUJBQXVCLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxLQUFHLENBQUM7Ozt5QkFNTixPQUFPLENBQUMsTUFBTSxFQUFkLHlCQUFjO29CQUNoQixxQkFBTSxJQUFBLHFCQUFTLEVBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQUE7O29CQUE1RCxTQUE0RCxDQUFDOzs7b0JBRTdELCtHQUErRztvQkFDL0csVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTO3dCQUN4QixPQUFPLENBQUMsU0FBUyxJQUFJLENBQUMsT0FBTyxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUM7b0JBQzNGLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQztvQkFDdEcsVUFBVSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLEdBQUc7d0JBQzNDLENBQUMsQ0FBQyxLQUFLO3dCQUNQLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSTs0QkFDWixDQUFDLENBQUMsTUFBTTs0QkFDUixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0NBQ1gsQ0FBQyxDQUFDLEtBQUs7Z0NBQ1AsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJO29DQUNaLENBQUMsQ0FBQyxNQUFNO29DQUNSLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBRXBCLDBEQUEwRDtvQkFDMUQsSUFBSSxPQUFPLE9BQU8sQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzVDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUN4QyxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7d0JBQy9FLENBQUM7b0JBQ0gsQ0FBQztvQkFFRCxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxLQUFLLEtBQUssSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssS0FBSyxDQUFDO3lCQUU5RixDQUFDLENBQUMsVUFBVSxJQUFJLGVBQWUsSUFBSSxPQUFPLElBQUksa0JBQWtCLENBQUMsRUFBakUseUJBQWlFO29CQUV0RCxxQkFBTSxJQUFBLGtCQUFNLEVBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBQTs7b0JBRDFELDRDQUE0QztvQkFDNUMsVUFBVSxHQUFHLFNBQTZDLENBQUM7OztvQkFHN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3JDLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztvQkFDMUMsQ0FBQztvQkFFRCxtRUFBbUU7b0JBQ25FLHNCQUFzQjtvQkFDdEIsSUFBSSxPQUFPLENBQUMsZUFBZSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDdEYsK0JBQStCO3dCQUMvQixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDdkIsSUFBSSxFQUFFLGtCQUFrQjs0QkFDeEIsSUFBSSxFQUFFLFlBQVk7NEJBQ2xCLE9BQU8sRUFBRTtnQ0FDUCxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTzs2QkFDakY7eUJBQ0YsQ0FBQyxDQUFDO29CQUNMLENBQUM7b0JBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3ZFLDBCQUEwQjt3QkFDMUIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ3ZCLElBQUksRUFBRSxhQUFhOzRCQUNuQixJQUFJLEVBQUUsWUFBWTs0QkFDbEIsT0FBTyxFQUFFO2dDQUNQLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPOzZCQUNqRjt5QkFDRixDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxtQkFBbUI7b0JBQ25CLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUN2Qix3RUFBd0U7d0JBQ3hFLFVBQVUsR0FBRyxJQUFBLDhCQUFvQixFQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUM5Qyx5QkFBeUI7d0JBQ3pCLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzRCQUN2QixJQUFJLEVBQUUsWUFBWTs0QkFDbEIsSUFBSSxFQUFFLFNBQVM7eUJBQ2hCLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO3dCQUMzQixVQUFVLEdBQUcsSUFBQSw4QkFBb0IsRUFBQyxVQUFVLENBQUMsQ0FBQzt3QkFDOUMsc0JBQXNCO3dCQUN0QixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDdkIsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsSUFBSSxFQUFFLFNBQVM7eUJBQ2hCLENBQUMsQ0FBQztvQkFDTCxDQUFDO3lCQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUM3QixVQUFVLEdBQUcsSUFBQSw4QkFBb0IsRUFBQyxVQUFVLENBQUMsQ0FBQzt3QkFDOUMsd0JBQXdCO3dCQUN4QixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDdkIsSUFBSSxFQUFFLFdBQVc7NEJBQ2pCLElBQUksRUFBRSxTQUFTO3lCQUNoQixDQUFDLENBQUM7b0JBQ0wsQ0FBQzt5QkFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDOUIsVUFBVSxHQUFHLElBQUEsOEJBQW9CLEVBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzlDLHlCQUF5Qjt3QkFDekIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ3ZCLElBQUksRUFBRSxZQUFZOzRCQUNsQixJQUFJLEVBQUUsU0FBUzt5QkFDaEIsQ0FBQyxDQUFDO29CQUNMLENBQUM7eUJBQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQzNCLElBQUksQ0FBQzs0QkFDSCxVQUFVLEdBQUcsSUFBQSw4QkFBb0IsRUFBQyxVQUFVLENBQUMsQ0FBQzs0QkFDOUMseUJBQXlCOzRCQUN6QixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQ0FDdkIsSUFBSSxFQUFFLFNBQVM7Z0NBQ2YsSUFBSSxFQUFFLFNBQVM7NkJBQ2hCLENBQUMsQ0FBQzt3QkFDTCxDQUFDO3dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7NEJBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssT0FBQSxFQUFFLENBQUMsQ0FBQzt3QkFDekIsQ0FBQztvQkFDSCxDQUFDO29CQUNELCtDQUErQzt5QkFDMUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFwQixDQUFvQixDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzdFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzRCQUN2QixJQUFJLEVBQUUsWUFBWTs0QkFDbEIsSUFBSSxFQUFFLFNBQVM7eUJBQ2hCLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUVELDBCQUEwQjtvQkFDMUIsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3JCLHVCQUF1Qjt3QkFDdkIsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7NEJBQ3ZCLElBQUksRUFBRSxVQUFVOzRCQUNoQixJQUFJLEVBQUUsZ0JBQWdCO3lCQUN2QixDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDckIsdUJBQXVCO3dCQUN2QixVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs0QkFDdkIsSUFBSSxFQUFFLFVBQVU7NEJBQ2hCLElBQUksRUFBRSxnQkFBZ0I7eUJBQ3ZCLENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUVELDJCQUEyQjtvQkFDM0IsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3BCLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDOzRCQUN2QixJQUFJLEVBQUUsU0FBUzs0QkFDZixJQUFJLEVBQUUsc0JBQXNCO3lCQUM3QixDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCw4Q0FBOEM7b0JBQzlDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDVCxTQUFTLENBQUMsNkJBQTZCLENBQUMsQ0FBQztvQkFDekMsSUFBSSxDQUFDLFVBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBRSxDQUFDLENBQUM7b0JBRTNFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDVCxTQUFTLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztvQkFHdEMsbUJBQW1CLEdBQUcsVUFBQyxVQUFzQjt3QkFDakQsSUFBSSxNQUFNLEdBQUcsZ0NBQXlCLFVBQVUsQ0FBQyxXQUFXLE1BQUcsQ0FBQzt3QkFFaEUsbUJBQW1CO3dCQUNuQixVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFDLENBQUM7OzRCQUM1QixNQUFNLElBQUksWUFBSyxDQUFDLENBQUMsSUFBSSxNQUFHLENBQUM7NEJBQ3pCLHFFQUFxRTs0QkFDckUsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO2dDQUM1QixJQUFJLENBQUEsTUFBQSxDQUFDLENBQUMsT0FBTywwQ0FBRSxJQUFJLE1BQUssTUFBTSxFQUFFLENBQUM7b0NBQy9CLE1BQU0sSUFBSSxTQUFTLENBQUM7Z0NBQ3RCLENBQUM7cUNBQU0sSUFBSSxDQUFBLE1BQUEsQ0FBQyxDQUFDLE9BQU8sMENBQUUsSUFBSSxNQUFLLGVBQWUsRUFBRSxDQUFDO29DQUMvQyxNQUFNLElBQUksZ0JBQWdCLENBQUM7Z0NBQzdCLENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFFSCxzREFBc0Q7d0JBQ3RELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQzs0QkFDL0IsTUFBTSxJQUFJLGVBQWUsQ0FBQzt3QkFDNUIsQ0FBQzt3QkFFRCxtREFBbUQ7d0JBQ25ELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFDM0IsTUFBTSxJQUFJLFdBQVcsQ0FBQzt3QkFDeEIsQ0FBQzt3QkFFRCw2REFBNkQ7d0JBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNsQyxNQUFNLElBQUksb0JBQW9CLENBQUM7d0JBQ2pDLENBQUM7d0JBRUQsMEJBQTBCO3dCQUMxQixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRSxDQUFDOzRCQUM5QyxNQUFNLElBQUksWUFBSyxVQUFVLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBRSxDQUFDO3dCQUNuRCxDQUFDO3dCQUVELE9BQU8sTUFBTSxDQUFDO29CQUNoQixDQUFDLENBQUM7b0JBRUksY0FBYyxHQUFHLElBQUEsNkJBQWlCLEVBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO29CQUM5RCxPQUFPLENBQUMsWUFBSyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBRSxDQUFDLENBQUM7b0JBRXhDLFFBQVEsR0FBSyxVQUFVLFNBQWYsQ0FBZ0I7b0JBRzFCLHFCQUFxQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBQyxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUEzQixDQUEyQixDQUFDLElBQUksU0FBUyxDQUFDO29CQUN2RixpQkFBaUIsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQXZCLENBQXVCLENBQUMsSUFBSSxTQUFTLENBQUM7b0JBRS9FLGNBQWMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQUMsQ0FBQyxJQUFLLE9BQUEsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQXBCLENBQW9CLENBQUMsQ0FBQztvQkFDNUQsc0JBQXNCLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFDLENBQUMsSUFBSyxPQUFBLENBQUMsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQWpDLENBQWlDLENBQUMsQ0FBQztvQkFFbkYsS0FBSyxHQUFhLEVBQUUsQ0FBQztvQkFFekIsS0FBSyxHQUFHLElBQUEsaUNBQXFCLEVBQzNCLHFCQUFxQixFQUNyQixLQUFLLEVBQ0wsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxPQUFPLEVBQ1AsVUFBVSxFQUNWLHNCQUFzQixDQUN2QixDQUFDO29CQUdFLGNBQWMsR0FBVSxFQUFFLENBQUM7b0JBRS9CLGNBQWMsR0FBRyxJQUFBLGdDQUFvQixFQUNuQyxxQkFBcUIsRUFDckIsVUFBVSxFQUNWLEtBQUssRUFDTCxjQUFjLEVBQ2QsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxjQUFjLEVBQ2QsT0FBTyxFQUNQLHNCQUFzQixDQUN2QixDQUFDO29CQUVGLHFCQUFNLElBQUEsdUJBQVcsRUFBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsRUFBQTs7b0JBQXRFLFNBQXNFLENBQUM7Ozs7O29CQUd6RSxJQUFJLEtBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQzt3QkFDZiw0Q0FBNEM7d0JBQzVDLHNCQUFPLEtBQUssT0FBTyxDQUFDLGdDQUFzQixDQUFDLEVBQUM7b0JBQzlDLENBQUM7b0JBRUQsMENBQTBDO29CQUMxQyw2Q0FBNkM7b0JBRTdDLHVCQUF1QixFQUFFLENBQUM7b0JBQzFCLE1BQU0sS0FBRyxDQUFDOzs7O1NBRWI7Q0FDRixDQUFDO0FBRUYsa0JBQWUsT0FBTyxDQUFDIn0=
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsMENBU3NCO0FBQ3RCLDBDQUFnRTtBQUNoRSxrQ0FBeUQ7QUFDekQsMkZBQXFFO0FBQ3JFLHdFQUF1RTtBQUV2RSxJQUFNLHlCQUF5QixHQUFHLG9IQUFvSCxDQUFDO0FBQ3ZKLElBQU0sMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7QUFDN0QsSUFBTSxvQkFBb0IsR0FBRyx1REFBdUQsQ0FBQztBQUVyRixJQUFNLE9BQU8sR0FBbUI7SUFDOUIsSUFBSSxFQUFFLG1CQUFtQjtJQUN6QixXQUFXLEVBQUUsMkJBQTJCO0lBQ3hDLEdBQUcsRUFBRSxVQUFPLE9BQU87Ozs7O29CQUVmLEtBSUUsT0FBTyxXQUowQixFQUFyQixNQUFNLFlBQUEsRUFBRSxXQUFXLGlCQUFBLEVBQ2pDLEtBR0UsT0FBTyxXQUhxQixFQUFoQixLQUFLLFdBQUEsRUFBRSxPQUFPLGFBQUEsRUFDNUIsS0FFRSxPQUFPLE1BRjBDLEVBQTFDLEtBQUssV0FBQSxFQUFFLElBQUksVUFBQSxFQUFFLFNBQVMsZUFBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLE9BQU8sYUFBQSxFQUNqRCxNQUFNLEdBQ0osT0FBTyxPQURILENBQ0k7b0JBRU4sdUJBQXVCLEdBQUc7d0JBQzlCLElBQUksQ0FBQyx1RUFBNkQsQ0FBQyxDQUFDO3dCQUNwRSxJQUFJLENBQ0YsMkhBQTJILENBQzVILENBQUM7d0JBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNYLENBQUMsQ0FBQztvQkFDRixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFD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
@@ -0,0 +1,13 @@
1
+ import { StyleSheet, SafeAreaView } from 'react-native';
2
+
3
+ export const Container = ({ children }: { children: React.ReactNode }) => {
4
+ return <SafeAreaView style={styles.container}>{children}</View>;
5
+ };
6
+
7
+ const styles = StyleSheet.create({
8
+ container: {
9
+ flex: 1,
10
+ padding: 24,
11
+ },
12
+ });
13
+
@@ -98,7 +98,7 @@
98
98
  "expo": "~50.0.7",
99
99
  "expo-status-bar": "~1.11.1",
100
100
  "react": "18.2.0",
101
- "react-native": "0.73.4"
101
+ "react-native": "0.73.6"
102
102
  },
103
103
  "devDependencies": {
104
104
  <%# patch for this issue : https://github.com/expo/expo/issues/26641 %>
@@ -1,22 +1,15 @@
1
1
  import { Stack } from 'expo-router';
2
- import { StyleSheet, View } from 'react-native';
3
2
 
3
+ import { Container } from '~/components/Container';
4
4
  import { ScreenContent } from '~/components/ScreenContent';
5
5
 
6
6
  export default function Home() {
7
7
  return (
8
8
  <>
9
9
  <Stack.Screen options={{ title: 'Tab One' }} />
10
- <View style={styles.container}>
10
+ <Container>
11
11
  <ScreenContent path="app/(drawer)/(tabs)/index.tsx" title="Tab One" />
12
- </View>
12
+ </Container>
13
13
  </>
14
14
  );
15
15
  }
16
-
17
- const styles = StyleSheet.create({
18
- container: {
19
- flex: 1,
20
- padding: 24,
21
- },
22
- });
@@ -1,22 +1,15 @@
1
1
  import { Stack } from 'expo-router';
2
- import { StyleSheet, View } from 'react-native';
3
2
 
3
+ import { Container } from '~/components/Container';
4
4
  import { ScreenContent } from '~/components/ScreenContent';
5
5
 
6
6
  export default function Home() {
7
7
  return (
8
8
  <>
9
9
  <Stack.Screen options={{ title: 'Tab Two' }} />
10
- <View style={styles.container}>
10
+ <Container>
11
11
  <ScreenContent path="app/(drawer)/(tabs)/two.tsx" title="Tab Two" />
12
- </View>
12
+ </Container>
13
13
  </>
14
14
  );
15
- }
16
-
17
- const styles = StyleSheet.create({
18
- container: {
19
- flex: 1,
20
- padding: 24,
21
- },
22
- });
15
+ }
@@ -1,22 +1,16 @@
1
1
  import { Stack } from 'expo-router';
2
2
  import { StyleSheet, View } from 'react-native';
3
3
 
4
+ import { Container } from '~/components/Container';
4
5
  import { ScreenContent } from '~/components/ScreenContent';
5
6
 
6
7
  export default function Home() {
7
8
  return (
8
9
  <>
9
10
  <Stack.Screen options={{ title: 'Home' }} />
10
- <View style={styles.container}>
11
+ <Container>
11
12
  <ScreenContent path="app/(drawer)/(tabs)/index.tsx" title="Home" />
12
- </View>
13
+ </Container>
13
14
  </>
14
15
  );
15
- }
16
-
17
- const styles = StyleSheet.create({
18
- container: {
19
- flex: 1,
20
- padding: 24,
21
- },
22
- });
16
+ }
@@ -1,16 +1,24 @@
1
1
  import { Link, Stack } from 'expo-router';
2
2
  <% if (props.stylingPackage?.name === "nativewind") {%>
3
- import { Text, View } from 'react-native';
3
+ import { Text } from 'react-native';
4
+
5
+ import { Container } from '~/components/Container';
4
6
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
5
7
  import { createStyleSheet, useStyles } from 'react-native-unistyles'
6
- import { Text, View } from 'react-native';
8
+ import { Text } from 'react-native';
9
+
10
+ import { Container } from '~/components/Container';
7
11
  <% } else if (props.stylingPackage?.name === "stylesheet") { %>
8
- import { StyleSheet, Text, View } from 'react-native';
12
+ import { StyleSheet, Text } from 'react-native';
13
+
14
+ import { Container } from '~/components/Container';
9
15
  <% } else if (props.stylingPackage?.name === "tamagui") { %>
10
16
  import { YStack } from "tamagui";
11
17
  import { Container, Main, Subtitle, Title } from "../tamagui.config";
12
18
  <% } else if (props.stylingPackage?.name === "restyle") { %>
13
19
  import { Box, Text, makeStyles } from 'theme';
20
+
21
+ import { Container } from '~/components/Container';
14
22
  <% } %>
15
23
 
16
24
  export default function NotFoundScreen() {
@@ -24,12 +32,12 @@ export default function NotFoundScreen() {
24
32
  <% if (props.stylingPackage?.name === "nativewind") {%>
25
33
  <>
26
34
  <Stack.Screen options={{ title: "Oops!" }} />
27
- <View className={styles.container}>
35
+ <Container>
28
36
  <Text className={styles.title}>This screen doesn't exist.</Text>
29
37
  <Link href="/" className={styles.link}>
30
38
  <Text className={styles.linkText}>Go to home screen!</Text>
31
39
  </Link>
32
- </View>
40
+ </Container>
33
41
  </>
34
42
  <% } else if (props.stylingPackage?.name === "tamagui") {%>
35
43
  <Container>
@@ -46,24 +54,24 @@ export default function NotFoundScreen() {
46
54
  <% } else if (props.stylingPackage?.name === "restyle") {%>
47
55
  <>
48
56
  <Stack.Screen options={{ title: 'Oops!' }} />
49
- <Box flex={1} justifyContent="center" alignItems="center" padding="ml_24">
57
+ <Container>
50
58
  <Text variant="title">This screen doesn't exist.</Text>
51
59
  <Link href="/" style={styles.link}>
52
60
  <Text variant="body" color="blue">
53
61
  Go to home screen!
54
62
  </Text>
55
63
  </Link>
56
- </Box>
64
+ </Container>
57
65
  </>
58
66
  <% } else { %>
59
67
  <>
60
68
  <Stack.Screen options={{ title: "Oops!" }} />
61
- <View style={styles.container}>
69
+ <Container>
62
70
  <Text style={styles.title}>This screen doesn't exist.</Text>
63
71
  <Link href="/" style={styles.link}>
64
72
  <Text style={styles.linkText}>Go to home screen!</Text>
65
73
  </Link>
66
- </View>
74
+ </Container>
67
75
  </>
68
76
  <% } %>
69
77
  );
@@ -71,19 +79,12 @@ export default function NotFoundScreen() {
71
79
 
72
80
  <% if (props.stylingPackage?.name === "nativewind") { %>
73
81
  const styles = {
74
- container: `items-center flex-1 justify-center p-5`,
75
82
  title: `text-xl font-bold`,
76
83
  link: `mt-4 pt-4`,
77
84
  linkText: `text-base text-[#2e78b7]`,
78
85
  };
79
86
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
80
87
  const stylesheet = createStyleSheet((theme) => ({
81
- container: {
82
- flex: 1,
83
- alignItems: 'center',
84
- justifyContent: 'center',
85
- padding: 20,
86
- },
87
88
  title: {
88
89
  fontSize: 20,
89
90
  fontWeight: 'bold',
@@ -99,12 +100,6 @@ export default function NotFoundScreen() {
99
100
  }));
100
101
  <% } else if (props.stylingPackage?.name === "stylesheet") { %>
101
102
  const styles = StyleSheet.create({
102
- container: {
103
- flex: 1,
104
- alignItems: 'center',
105
- justifyContent: 'center',
106
- padding: 20,
107
- },
108
103
  title: {
109
104
  fontSize: 20,
110
105
  fontWeight: 'bold',
@@ -1,7 +1,8 @@
1
- import { ScreenContent } from 'components/ScreenContent';
2
1
  import { StatusBar } from 'expo-status-bar';
3
2
  import { Platform } from 'react-native';
4
3
 
4
+ import { ScreenContent } from '~/components/ScreenContent';
5
+
5
6
  <% if (props.internalizationPackage?.name === "i18next") { %>
6
7
  import { InternalizationExample } from 'components/InternalizationExample';
7
8
  <% } %>
@@ -1,16 +1,24 @@
1
1
  import { Link, Stack } from 'expo-router';
2
2
  <% if (props.stylingPackage?.name === "nativewind") {%>
3
- import { Text, View } from 'react-native';
3
+ import { Text } from 'react-native';
4
+
5
+ import { Container } from '~/components/Container';
4
6
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
5
7
  import { createStyleSheet, useStyles } from 'react-native-unistyles'
6
8
  import { Text, View } from 'react-native';
9
+
10
+ import { Container } from '~/components/Container';
7
11
  <% } else if (props.stylingPackage?.name === "stylesheet") { %>
8
12
  import { StyleSheet, Text, View } from 'react-native';
13
+
14
+ import { Container } from '~/components/Container';
9
15
  <% } else if (props.stylingPackage?.name === "tamagui") { %>
10
16
  import { YStack } from "tamagui";
11
17
  import { Container, Main, Subtitle, Title } from "../tamagui.config";
12
18
  <% } else if (props.stylingPackage?.name === "restyle") { %>
13
19
  import { Box, Text, makeStyles } from 'theme';
20
+
21
+ import { Container } from '~/components/Container';
14
22
  <% } %>
15
23
 
16
24
  export default function NotFoundScreen() {
@@ -26,12 +34,12 @@ export default function NotFoundScreen() {
26
34
  <% if (props.stylingPackage?.name === "nativewind") {%>
27
35
  <>
28
36
  <Stack.Screen options={{ title: "Oops!" }} />
29
- <View className={styles.container}>
37
+ <Container>
30
38
  <Text className={styles.title}>This screen doesn't exist.</Text>
31
39
  <Link href="/" className={styles.link}>
32
40
  <Text className={styles.linkText}>Go to home screen!</Text>
33
41
  </Link>
34
- </View>
42
+ </Container>
35
43
  </>
36
44
  <% } else if (props.stylingPackage?.name === "tamagui") {%>
37
45
  <Container>
@@ -60,12 +68,12 @@ export default function NotFoundScreen() {
60
68
  <% } else { %>
61
69
  <>
62
70
  <Stack.Screen options={{ title: "Oops!" }} />
63
- <View style={styles.container}>
71
+ <Container>
64
72
  <Text style={styles.title}>This screen doesn't exist.</Text>
65
73
  <Link href="/" style={styles.link}>
66
74
  <Text style={styles.linkText}>Go to home screen!</Text>
67
75
  </Link>
68
- </View>
76
+ </Container>
69
77
  </>
70
78
  <% } %>
71
79
  );
@@ -73,19 +81,12 @@ export default function NotFoundScreen() {
73
81
 
74
82
  <% if (props.stylingPackage?.name === "nativewind") { %>
75
83
  const styles = {
76
- container: `items-center flex-1 justify-center p-5`,
77
84
  title: `text-xl font-bold`,
78
85
  link: `mt-4 pt-4`,
79
86
  linkText: `text-base text-[#2e78b7]`,
80
87
  };
81
88
  <% } else if (props.stylingPackage?.name === "unistyles") { %>
82
89
  const stylesheet = createStyleSheet({
83
- container: {
84
- flex: 1,
85
- alignItems: 'center',
86
- justifyContent: 'center',
87
- padding: 20,
88
- },
89
90
  title: {
90
91
  fontSize: 20,
91
92
  fontWeight: 'bold',
@@ -101,12 +102,6 @@ export default function NotFoundScreen() {
101
102
  });
102
103
  <% } else if (props.stylingPackage?.name === "stylesheet") { %>
103
104
  const styles = StyleSheet.create({
104
- container: {
105
- flex: 1,
106
- alignItems: 'center',
107
- justifyContent: 'center',
108
- padding: 20,
109
- },
110
105
  title: {
111
106
  fontSize: 20,
112
107
  fontWeight: 'bold',
@@ -1,6 +1,7 @@
1
- import { ScreenContent } from 'components/ScreenContent';
2
1
  import { Stack, useLocalSearchParams } from 'expo-router';
3
- import { StyleSheet, View } from 'react-native';
2
+
3
+ import { Container } from '~/components/Container';
4
+ import { ScreenContent } from '~/components/ScreenContent';
4
5
 
5
6
  export default function Details() {
6
7
  const { name } = useLocalSearchParams();
@@ -8,16 +9,9 @@ export default function Details() {
8
9
  return (
9
10
  <>
10
11
  <Stack.Screen options={{ title: 'Details' }} />
11
- <View style={styles.container}>
12
+ <Container>
12
13
  <ScreenContent path="screens/details.tsx" title={`Showing details for user ${name}`} />
13
- </View>
14
+ </Container>
14
15
  </>
15
16
  );
16
- }
17
-
18
- const styles = StyleSheet.create({
19
- container: {
20
- flex: 1,
21
- padding: 24,
22
- },
23
- });
17
+ }
@@ -1,8 +1,7 @@
1
1
  import { Stack, Link } from 'expo-router';
2
- import { StyleSheet, View } from 'react-native';
3
-
4
- import { Button } from '../components/Button';
5
2
 
3
+ import { Button } from '~/components/Button';
4
+ import { Container } from '~/components/Container';
6
5
  import { ScreenContent } from '~/components/ScreenContent';
7
6
 
8
7
  <% if (props.internalizationPackage?.name === "i18next") { %>
@@ -13,7 +12,7 @@ export default function Home() {
13
12
  return (
14
13
  <>
15
14
  <Stack.Screen options={{ title: 'Home' }} />
16
- <View style={styles.container}>
15
+ <Container>
17
16
  <ScreenContent path="app/index.tsx" title="Home">
18
17
  <% if (props.internalizationPackage?.name === "i18next") { %>
19
18
  <InternalizationExample />
@@ -22,14 +21,7 @@ export default function Home() {
22
21
  <Link href={{ pathname: '/details', params: { name: 'Dan' } }} asChild>
23
22
  <Button title="Show Details" />
24
23
  </Link>
25
- </View>
24
+ </Container>
26
25
  </>
27
26
  );
28
- }
29
-
30
- const styles = StyleSheet.create({
31
- container: {
32
- flex: 1,
33
- padding: 24,
34
- },
35
- });
27
+ }
@@ -1,7 +1,8 @@
1
- import { ScreenContent } from 'components/ScreenContent';
2
1
  import { StatusBar } from 'expo-status-bar';
3
2
  import { Platform } from 'react-native';
4
3
 
4
+ import { ScreenContent } from '~/components/ScreenContent';
5
+
5
6
  <% if (props.internalizationPackage?.name === "i18next") { %>
6
7
  import { InternalizationExample } from 'components/InternalizationExample';
7
8
  <% } %>
@@ -1,6 +1,6 @@
1
1
  import { Text, TouchableOpacity } from 'react-native';
2
2
 
3
- export const Button = ({ onPress, title }: { onPress: () => void; title: string }) => {
3
+ export const Button = ({ onPress, title }: { onPress?: () => void; title: string }) => {
4
4
  return (
5
5
  <TouchableOpacity className={styles.button} onPress={onPress}>
6
6
  <Text className={styles.buttonText}>{title}</Text>
@@ -8,7 +8,7 @@ export const Button = ({ onPress, title }: { onPress: () => void; title: string
8
8
  );
9
9
  };
10
10
 
11
- export const styles = {
11
+ const styles = {
12
12
  button: 'items-center bg-indigo-500 rounded-[28px] shadow-md p-4',
13
13
  buttonText: 'text-white text-lg font-semibold text-center',
14
14
  };