create-expo-stack 2.4.3 → 2.5.0-next.00da55e
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.
- package/README.md +213 -156
- package/build/commands/create-expo-stack.js +62 -56
- package/build/templates/base/App.tsx.ejs +51 -91
- package/build/templates/base/app.json.ejs +6 -0
- package/build/templates/base/components/BackButton.tsx.ejs +23 -0
- package/build/templates/base/components/Button.tsx.ejs +40 -0
- package/build/templates/base/components/EditScreenInfo.tsx.ejs +55 -0
- package/build/templates/base/components/HeaderButton.tsx.ejs +28 -0
- package/build/templates/base/components/ScreenContent.tsx.ejs +38 -0
- package/build/templates/base/components/TabBarIcon.tsx.ejs +15 -0
- package/build/templates/base/package.json.ejs +17 -7
- package/build/templates/base/prettier.config.js.ejs +11 -0
- package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/_layout.tsx.ejs +1 -13
- package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/index.tsx.ejs +18 -84
- package/build/templates/packages/expo-router/drawer/app/(drawer)/(tabs)/two.tsx.ejs +18 -84
- package/build/templates/packages/expo-router/drawer/app/(drawer)/_layout.tsx.ejs +4 -18
- package/build/templates/packages/expo-router/drawer/app/(drawer)/index.tsx.ejs +12 -80
- package/build/templates/packages/expo-router/drawer/app/_layout.tsx.ejs +4 -0
- package/build/templates/packages/expo-router/drawer/app/modal.tsx.ejs +16 -92
- package/build/templates/packages/expo-router/stack/app/_layout.tsx.ejs +3 -0
- package/build/templates/packages/expo-router/stack/app/details.tsx.ejs +17 -171
- package/build/templates/packages/expo-router/stack/app/index.tsx.ejs +23 -187
- package/build/templates/packages/expo-router/tabs/app/(tabs)/_layout.tsx.ejs +6 -50
- package/build/templates/packages/expo-router/tabs/app/(tabs)/index.tsx.ejs +18 -84
- package/build/templates/packages/expo-router/tabs/app/(tabs)/two.tsx.ejs +18 -83
- package/build/templates/packages/expo-router/tabs/app/_layout.tsx.ejs +3 -0
- package/build/templates/packages/expo-router/tabs/app/modal.tsx.ejs +17 -92
- package/build/templates/packages/i18next/components/InternalizationExample.tsx.ejs +23 -0
- package/build/templates/packages/i18next/core/i18n/fallbackChecker.ts.ejs +13 -0
- package/build/templates/packages/i18next/core/i18n/init.ts.ejs +24 -0
- package/build/templates/packages/i18next/core/i18n/languageDetector.ts.ejs +13 -0
- package/build/templates/packages/i18next/translation/en.json.ejs +8 -0
- package/build/templates/packages/i18next/translation/fr.json.ejs +8 -0
- package/build/templates/packages/i18next/translation/index.ts.ejs +20 -0
- package/build/templates/packages/nativewind/components/BackButton.tsx.ejs +18 -0
- package/build/templates/packages/nativewind/components/Button.tsx.ejs +14 -0
- package/build/templates/packages/nativewind/components/EditScreenInfo.tsx.ejs +40 -0
- package/build/templates/packages/nativewind/components/ScreenContent.tsx.ejs +25 -0
- package/build/templates/packages/react-navigation/App.tsx.ejs +4 -1
- package/build/templates/packages/react-navigation/navigation/drawer-navigator.tsx.ejs +14 -26
- package/build/templates/packages/react-navigation/navigation/index.tsx.ejs +2 -101
- package/build/templates/packages/react-navigation/navigation/tab-navigator.tsx.ejs +8 -62
- package/build/templates/packages/react-navigation/screens/details.tsx.ejs +22 -108
- package/build/templates/packages/react-navigation/screens/home.tsx.ejs +3 -82
- package/build/templates/packages/react-navigation/screens/modal.tsx.ejs +16 -104
- package/build/templates/packages/react-navigation/screens/one.tsx.ejs +2 -97
- package/build/templates/packages/react-navigation/screens/overview.tsx.ejs +37 -182
- package/build/templates/packages/react-navigation/screens/two.tsx.ejs +3 -98
- package/build/templates/packages/restyle/components/BackButton.tsx.ejs +15 -0
- package/build/templates/packages/restyle/components/Button.tsx.ejs +32 -0
- package/build/templates/packages/restyle/components/EditScreenInfo.tsx.ejs +29 -0
- package/build/templates/packages/restyle/components/ScreenContent.tsx.ejs +20 -0
- package/build/templates/packages/tamagui/components/BackButton.tsx.ejs +19 -0
- package/build/templates/packages/tamagui/components/Button.tsx.ejs +9 -0
- package/build/templates/packages/tamagui/components/EditScreenInfo.tsx.ejs +29 -0
- package/build/templates/packages/tamagui/components/ScreenContent.tsx.ejs +22 -0
- package/build/templates/packages/unistyles/components/BackButton.tsx.ejs +26 -0
- package/build/templates/packages/unistyles/components/Button.tsx.ejs +12 -0
- package/build/templates/packages/unistyles/components/EditScreenInfo.tsx.ejs +61 -0
- package/build/templates/packages/unistyles/components/ScreenContent.tsx.ejs +24 -0
- package/build/templates/packages/unistyles/theme.ts.ejs +30 -46
- package/build/types/types.d.ts +3 -2
- package/build/types/utilities/configureProjectFiles.d.ts +1 -1
- package/build/types/utilities/generateProjectFiles.d.ts +1 -1
- package/build/types/utilities/getPackageManager.d.ts +1 -0
- package/build/types/utilities/validateProjectName.d.ts +1 -1
- package/build/types.js +3 -2
- package/build/utilities/configureProjectFiles.js +86 -19
- package/build/utilities/generateProjectFiles.js +8 -4
- package/build/utilities/getPackageManager.js +9 -2
- package/build/utilities/printOutput.js +4 -2
- package/build/utilities/renderTitle.js +8 -1
- package/build/utilities/runCLI.js +124 -34
- package/build/utilities/showHelp.js +4 -1
- package/build/utilities/validateProjectName.js +14 -8
- package/package.json +66 -66
- package/build/templates/base/.prettierrc +0 -7
- package/build/templates/packages/expo-router/drawer/components/edit-screen-info.tsx.ejs +0 -153
- package/build/templates/packages/expo-router/index.js +0 -4
- package/build/templates/packages/expo-router/index.ts +0 -1
- package/build/templates/packages/expo-router/tabs/components/edit-screen-info.tsx.ejs +0 -153
- package/build/templates/packages/react-navigation/components/edit-screen-info.tsx.ejs +0 -180
- package/build/types/templates/packages/expo-router/index.d.ts +0 -1
- /package/build/templates/packages/expo-router/drawer/app/{[...unmatched].tsx.ejs → +not-found.tsx.ejs} +0 -0
- /package/build/templates/packages/expo-router/stack/app/{[...unmatched].tsx.ejs → +not-found.tsx.ejs} +0 -0
- /package/build/templates/packages/expo-router/tabs/app/{[...unmatched].tsx.ejs → +not-found.tsx.ejs} +0 -0
|
@@ -46,11 +46,13 @@ 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',
|
|
52
54
|
run: function (toolbox) { return __awaiter(void 0, void 0, void 0, function () {
|
|
53
|
-
var _a, exists, removeAsync, _b, first, options, _c, error, info, highlight, success, warning, prompt, printSomethingWentWrong, useDefault, skipCLI, useBlankTypescript, optionsPassedIn, cliResults, askName, name, pathSegments, err_1, generateRerunScript, packageManager, packages, authenticationPackage, navigationPackage, stylingPackage, files, formattedFiles, err_2;
|
|
55
|
+
var _a, exists, removeAsync, _b, first, options, _c, error, info, highlight, success, warning, prompt, printSomethingWentWrong, useDefault, skipCLI, useBlankTypescript, optionsPassedIn, cliResults, askName, name, pathSegments, err_1, generateRerunScript, packageManager, packages, authenticationPackage, navigationPackage, stylingPackage, internalizationPackage, files, formattedFiles, err_2;
|
|
54
56
|
return __generator(this, function (_d) {
|
|
55
57
|
switch (_d.label) {
|
|
56
58
|
case 0:
|
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
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*/,
|
|
108
|
-
case
|
|
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 =
|
|
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
|
-
|
|
122
|
-
case
|
|
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
|
-
|
|
134
|
-
|
|
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
|
|
138
|
-
_d.trys.push([
|
|
139
|
-
if (!options.ignite) return [3 /*break*/,
|
|
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
|
|
145
|
+
case 10:
|
|
142
146
|
_d.sent();
|
|
143
|
-
return [3 /*break*/,
|
|
144
|
-
case
|
|
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*/,
|
|
160
|
+
if (!!(useDefault || optionsPassedIn || skipCLI || useBlankTypescript)) return [3 /*break*/, 13];
|
|
166
161
|
return [4 /*yield*/, (0, utilities_1.runCLI)(toolbox, cliResults.projectName)];
|
|
167
|
-
case
|
|
162
|
+
case 12:
|
|
168
163
|
// Run the CLI to prompt the user for input
|
|
169
164
|
cliResults = _d.sent();
|
|
170
|
-
_d.label =
|
|
171
|
-
case
|
|
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) {
|
|
@@ -263,6 +255,13 @@ var command = {
|
|
|
263
255
|
type: 'authentication'
|
|
264
256
|
});
|
|
265
257
|
}
|
|
258
|
+
// Internalization packages
|
|
259
|
+
if (options.i18next) {
|
|
260
|
+
cliResults.packages.push({
|
|
261
|
+
name: 'i18next',
|
|
262
|
+
type: 'internationalization'
|
|
263
|
+
});
|
|
264
|
+
}
|
|
266
265
|
// By this point, all cliResults should be set
|
|
267
266
|
info('');
|
|
268
267
|
highlight('Your project configuration:');
|
|
@@ -309,29 +308,36 @@ var command = {
|
|
|
309
308
|
authenticationPackage = packages.find(function (p) { return p.type === 'authentication'; }) || undefined;
|
|
310
309
|
navigationPackage = packages.find(function (p) { return p.type === 'navigation'; }) || undefined;
|
|
311
310
|
stylingPackage = packages.find(function (p) { return p.type === 'styling'; });
|
|
311
|
+
internalizationPackage = packages.find(function (p) { return p.type === 'internationalization'; });
|
|
312
312
|
files = [];
|
|
313
|
-
files = (0, utilities_1.configureProjectFiles)(authenticationPackage, files, navigationPackage, stylingPackage, toolbox, cliResults);
|
|
313
|
+
files = (0, utilities_1.configureProjectFiles)(authenticationPackage, files, navigationPackage, stylingPackage, toolbox, cliResults, internalizationPackage);
|
|
314
314
|
formattedFiles = [];
|
|
315
|
-
formattedFiles = (0, utilities_1.generateProjectFiles)(authenticationPackage, cliResults, files, formattedFiles, navigationPackage, packageManager, stylingPackage, toolbox);
|
|
315
|
+
formattedFiles = (0, utilities_1.generateProjectFiles)(authenticationPackage, cliResults, files, formattedFiles, navigationPackage, packageManager, stylingPackage, toolbox, internalizationPackage);
|
|
316
316
|
return [4 /*yield*/, (0, utilities_1.printOutput)(cliResults, formattedFiles, toolbox, stylingPackage)];
|
|
317
|
-
case
|
|
317
|
+
case 14:
|
|
318
318
|
_d.sent();
|
|
319
|
-
_d.label =
|
|
320
|
-
case
|
|
321
|
-
case
|
|
319
|
+
_d.label = 15;
|
|
320
|
+
case 15: return [3 /*break*/, 18];
|
|
321
|
+
case 16:
|
|
322
322
|
err_2 = _d.sent();
|
|
323
323
|
if (err_2 === '') {
|
|
324
324
|
// user cancelled/exited the interactive CLI
|
|
325
325
|
return [2 /*return*/, void success("\nCancelled... \uD83D\uDC4B \n")];
|
|
326
326
|
}
|
|
327
|
-
|
|
328
|
-
|
|
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();
|
|
329
335
|
printSomethingWentWrong();
|
|
330
336
|
throw err_2;
|
|
331
|
-
case
|
|
337
|
+
case 18: return [2 /*return*/];
|
|
332
338
|
}
|
|
333
339
|
});
|
|
334
340
|
}); }
|
|
335
341
|
};
|
|
336
342
|
exports.default = command;
|
|
337
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsMENBU3NCO0FBQ3RCLDBDQUFnRTtBQUNoRSxrQ0FBeUQ7QUFDekQsMkZBQXFFO0FBQ3JFLHdFQUF1RTtBQUV2RSxJQUFNLHlCQUF5QixHQUFHLG9IQUFvSCxDQUFDO0FBRXZKLElBQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLFdBQVcsRUFBRSwyQkFBMkI7SUFDeEMsR0FBRyxFQUFFLFVBQU8sT0FBTzs7Ozs7b0JBRWYsS0FJRSxPQUFPLFdBSjBCLEVBQXJCLE1BQU0sWUFBQSxFQUFFLFdBQVcsaUJBQUEsRUFDakMsS0FHRSxPQUFPLFdBSHFCLEVBQWhCLEtBQUssV0FBQSxFQUFFLE9BQU8sYUFBQSxFQUM1QixLQUVFLE9BQU8sTUFGMEMsRUFBMUMsS0FBSyxXQUFBLEVBQUUsSUFBSSxVQUFBLEVBQUUsU0FBUyxlQUFBLEVBQUUsT0FBTyxhQUFBLEVBQUUsT0FBTyxhQUFBLEVBQ2pELE1BQU0sR0FDSixPQUFPLE9BREgsQ0FDSTtvQkFFTix1QkFBdUIsR0FBRzt3QkFDOUIsSUFBSSxDQUFDLHVFQUE2RCxDQUFDLENBQUM7d0JBQ3BFLElBQUksQ0FDRiwySEFBMkgsQ0FDNUgsQ0FBQzt3QkFDRixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ1gsQ0FBQyxDQUFDO29CQUNGLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUM7d0JBQzlCLElBQUEsb0JBQVEsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxD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
|
|
343
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWV4cG8tc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvY3JlYXRlLWV4cG8tc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxJQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFN0IsMENBU3NCO0FBQ3RCLDBDQUFnRTtBQUNoRSxrQ0FBeUQ7QUFDekQsMkZBQXFFO0FBQ3JFLHdFQUF1RTtBQUV2RSxJQUFNLHlCQUF5QixHQUFHLG9IQUFvSCxDQUFDO0FBQ3ZKLElBQU0sMEJBQTBCLEdBQUcseUJBQXlCLENBQUM7QUFDN0QsSUFBTSxvQkFBb0IsR0FBRyx1REFBdUQsQ0FBQztBQUVyRixJQUFNLE9BQU8sR0FBbUI7SUFDOUIsSUFBSSxFQUFFLG1CQUFtQjtJQUN6QixXQUFXLEVBQUUsMkJBQTJCO0lBQ3hDLEdBQUcsRUFBRSxVQUFPLE9BQU87Ozs7O29CQUVmLEtBSUUsT0FBTyxXQUowQixFQUFyQixNQUFNLFlBQUEsRUFBRSxXQUFXLGlCQUFBLEVBQ2pDLEtBR0UsT0FBTyxXQUhxQixFQUFoQixLQUFLLFdBQUEsRUFBRSxPQUFPLGFBQUEsRUFDNUIsS0FFRSxPQUFPLE1BRjBDLEVBQTFDLEtBQUssV0FBQSxFQUFFLElBQUksVUFBQSxFQUFFLFNBQVMsZUFBQSxFQUFFLE9BQU8sYUFBQSxFQUFFLE9BQU8sYUFBQSxFQUNqRCxNQUFNLEdBQ0osT0FBTyxPQURILENBQ0k7b0JBRU4sdUJBQXVCLEdBQUc7d0JBQzlCLElBQUksQ0FBQyx1RUFBNkQsQ0FBQyxDQUFDO3dCQUNwRSxJQUFJLENBQ0YsMkhBQTJILENBQzVILENBQUM7d0JBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNYLENBQUMsQ0FBQztvQkFDRixJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFD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
|
|
@@ -1,101 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
import '
|
|
1
|
+
import { ScreenContent } from 'components/ScreenContent';
|
|
2
|
+
import { StatusBar } from 'expo-status-bar';
|
|
3
|
+
|
|
4
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
5
|
+
import './translation';
|
|
6
|
+
import { InternalizationExample } from 'components/InternalizationExample';
|
|
3
7
|
<% } %>
|
|
4
|
-
import React from 'react';
|
|
5
8
|
|
|
6
|
-
<% if (props.stylingPackage?.name === "nativewind") {%>
|
|
7
|
-
|
|
8
|
-
<% } else if (props.stylingPackage?.name === "
|
|
9
|
-
import { View } from 'react-native';
|
|
10
|
-
import { TamaguiProvider, Text, styled } from 'tamagui';
|
|
11
|
-
import config from './tamagui.config'
|
|
12
|
-
<% } else if (props.stylingPackage?.name === "restyle") {%>
|
|
9
|
+
<% if (props.stylingPackage?.name === "nativewind") { %>
|
|
10
|
+
import './global.css';
|
|
11
|
+
<% } else if (props.stylingPackage?.name === "restyle") { %>
|
|
13
12
|
import { ThemeProvider } from '@shopify/restyle';
|
|
14
|
-
import {theme
|
|
15
|
-
<% } else if (props.stylingPackage?.name === "
|
|
16
|
-
import {
|
|
17
|
-
import
|
|
18
|
-
<% } else {%>
|
|
19
|
-
import { StyleSheet, Text, View } from 'react-native';
|
|
13
|
+
import { theme } from 'theme';
|
|
14
|
+
<% } else if (props.stylingPackage?.name === "tamagui") { %>
|
|
15
|
+
import { TamaguiProvider } from 'tamagui';
|
|
16
|
+
import config from './tamagui.config';
|
|
20
17
|
<% } %>
|
|
21
18
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
19
|
+
<% if (props.stylingPackage?.name === "restyle") {%>
|
|
20
|
+
export default function App() {
|
|
21
|
+
return (
|
|
22
|
+
<ThemeProvider theme={theme}>
|
|
23
|
+
<ScreenContent title="Home" path="App.tsx">
|
|
24
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
25
|
+
<InternalizationExample />
|
|
26
|
+
<% } %>
|
|
27
|
+
</ScreenContent>
|
|
29
28
|
<StatusBar style="auto" />
|
|
30
|
-
</
|
|
29
|
+
</ThemeProvider>
|
|
31
30
|
);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const styles = {
|
|
35
|
-
container: 'flex flex-1 items-center justify-center bg-white',
|
|
36
|
-
};
|
|
31
|
+
}
|
|
37
32
|
<% } else if (props.stylingPackage?.name === "tamagui") {%>
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
export default function App() {
|
|
46
|
-
return (
|
|
47
|
-
<TamaguiProvider config={config}>
|
|
48
|
-
<MyView>
|
|
49
|
-
<Text>Open up App.tsx to start working on your app!</Text>
|
|
50
|
-
<StatusBar style="auto" />
|
|
51
|
-
</MyView>
|
|
52
|
-
</TamaguiProvider >
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
<% } else if (props.stylingPackage?.name === "restyle") {%>
|
|
56
|
-
export default function App() {
|
|
57
|
-
return (
|
|
58
|
-
<ThemeProvider theme={theme}>
|
|
33
|
+
export default function App() {
|
|
34
|
+
return (
|
|
35
|
+
<TamaguiProvider config={config}>
|
|
36
|
+
<ScreenContent title="Home" path="App.tsx">
|
|
37
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
38
|
+
<InternalizationExample />
|
|
39
|
+
<% } else { %>
|
|
59
40
|
<Text>Open up App.tsx to start working on your app!</Text>
|
|
60
|
-
|
|
61
|
-
</
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
justifyContent: 'center',
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
<% } else {%>
|
|
84
|
-
export default function App() {
|
|
85
|
-
return (
|
|
86
|
-
<View style={styles.container}>
|
|
87
|
-
<Text>Open up App.tsx to start working on your app!</Text>
|
|
88
|
-
<StatusBar style="auto" />
|
|
89
|
-
</View >
|
|
90
|
-
);
|
|
91
|
-
}
|
|
41
|
+
<% } %>
|
|
42
|
+
</ScreenContent>
|
|
43
|
+
<StatusBar style="auto" />
|
|
44
|
+
</TamaguiProvider>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
<% } else { %>
|
|
48
|
+
export default function App() {
|
|
49
|
+
return (
|
|
50
|
+
<>
|
|
51
|
+
<ScreenContent title="Home" path="App.tsx">
|
|
52
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
53
|
+
<InternalizationExample />
|
|
54
|
+
<% } %>
|
|
55
|
+
</ScreenContent>
|
|
56
|
+
<StatusBar style="auto" />
|
|
57
|
+
</>
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
<% } %>
|
|
92
61
|
|
|
93
|
-
const styles = StyleSheet.create({
|
|
94
|
-
container: {
|
|
95
|
-
flex: 1,
|
|
96
|
-
backgroundColor: '#fff',
|
|
97
|
-
alignItems: 'center',
|
|
98
|
-
justifyContent: 'center',
|
|
99
|
-
},
|
|
100
|
-
});
|
|
101
|
-
<% } %>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Feather } from '@expo/vector-icons';
|
|
2
|
+
import { Text, View, StyleSheet } from 'react-native';
|
|
3
|
+
|
|
4
|
+
export const BackButton = ({ onPress }: { onPress: () => void }) => {
|
|
5
|
+
return (
|
|
6
|
+
<View style={styles.backButton}>
|
|
7
|
+
<Feather name="chevron-left" size={16} color="#007AFF" />
|
|
8
|
+
<Text style={styles.backButtonText} onPress={onPress}>
|
|
9
|
+
Back
|
|
10
|
+
</Text>
|
|
11
|
+
</View>
|
|
12
|
+
);
|
|
13
|
+
};
|
|
14
|
+
const styles = StyleSheet.create({
|
|
15
|
+
backButton: {
|
|
16
|
+
flexDirection: 'row',
|
|
17
|
+
paddingLeft: 20,
|
|
18
|
+
},
|
|
19
|
+
backButtonText: {
|
|
20
|
+
color: '#007AFF',
|
|
21
|
+
marginLeft: 4,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { forwardRef } from 'react';
|
|
2
|
+
import { StyleSheet, Text, TouchableOpacity, TouchableOpacityProps } from 'react-native';
|
|
3
|
+
|
|
4
|
+
type ButtonProps = {
|
|
5
|
+
onPress?: TouchableOpacityProps['onPress'];
|
|
6
|
+
title?: string;
|
|
7
|
+
} & TouchableOpacityProps;
|
|
8
|
+
|
|
9
|
+
export const Button = forwardRef<TouchableOpacity, ButtonProps>(({ onPress, title }, ref) => {
|
|
10
|
+
return (
|
|
11
|
+
<TouchableOpacity ref={ref} style={styles.button} onPress={onPress}>
|
|
12
|
+
<Text style={styles.buttonText}>{title}</Text>
|
|
13
|
+
</TouchableOpacity>
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const styles = StyleSheet.create({
|
|
18
|
+
button: {
|
|
19
|
+
alignItems: 'center',
|
|
20
|
+
backgroundColor: '#6366F1',
|
|
21
|
+
borderRadius: 24,
|
|
22
|
+
elevation: 5,
|
|
23
|
+
flexDirection: 'row',
|
|
24
|
+
justifyContent: 'center',
|
|
25
|
+
padding: 16,
|
|
26
|
+
shadowColor: '#000',
|
|
27
|
+
shadowOffset: {
|
|
28
|
+
height: 2,
|
|
29
|
+
width: 0,
|
|
30
|
+
},
|
|
31
|
+
shadowOpacity: 0.25,
|
|
32
|
+
shadowRadius: 3.84,
|
|
33
|
+
},
|
|
34
|
+
buttonText: {
|
|
35
|
+
color: '#FFFFFF',
|
|
36
|
+
fontSize: 16,
|
|
37
|
+
fontWeight: '600',
|
|
38
|
+
textAlign: 'center',
|
|
39
|
+
},
|
|
40
|
+
});
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
2
|
+
|
|
3
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
4
|
+
import { useTranslation } from 'react-i18next';
|
|
5
|
+
<% } %>
|
|
6
|
+
|
|
7
|
+
export default function EditScreenInfo({ path }: { path: string }) {
|
|
8
|
+
<% if (props.internalizationPackage?.name === "i18next") { %>
|
|
9
|
+
const { t } = useTranslation();
|
|
10
|
+
const title = t('getStarted');
|
|
11
|
+
const description = t('changeCode')
|
|
12
|
+
<% } else { %>
|
|
13
|
+
const title = "Open up the code for this screen:"
|
|
14
|
+
const description = "Change any of the text, save the file, and your app will automatically update."
|
|
15
|
+
<% } %>
|
|
16
|
+
return (
|
|
17
|
+
<View style={styles.getStartedContainer}>
|
|
18
|
+
<Text style={styles.getStartedText}>{title}</Text>
|
|
19
|
+
<View style={[styles.codeHighlightContainer, styles.homeScreenFilename]}>
|
|
20
|
+
<Text>{path}</Text>
|
|
21
|
+
</View>
|
|
22
|
+
<Text style={styles.getStartedText}>{description}</Text>
|
|
23
|
+
</View>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const styles = StyleSheet.create({
|
|
28
|
+
codeHighlightContainer: {
|
|
29
|
+
borderRadius: 3,
|
|
30
|
+
paddingHorizontal: 4,
|
|
31
|
+
},
|
|
32
|
+
getStartedContainer: {
|
|
33
|
+
alignItems: 'center',
|
|
34
|
+
marginHorizontal: 50,
|
|
35
|
+
},
|
|
36
|
+
getStartedText: {
|
|
37
|
+
fontSize: 17,
|
|
38
|
+
lineHeight: 24,
|
|
39
|
+
textAlign: 'center',
|
|
40
|
+
},
|
|
41
|
+
helpContainer: {
|
|
42
|
+
alignItems: 'center',
|
|
43
|
+
marginHorizontal: 20,
|
|
44
|
+
marginTop: 15,
|
|
45
|
+
},
|
|
46
|
+
helpLink: {
|
|
47
|
+
paddingVertical: 15,
|
|
48
|
+
},
|
|
49
|
+
helpLinkText: {
|
|
50
|
+
textAlign: 'center',
|
|
51
|
+
},
|
|
52
|
+
homeScreenFilename: {
|
|
53
|
+
marginVertical: 7,
|
|
54
|
+
},
|
|
55
|
+
});
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import FontAwesome from '@expo/vector-icons/FontAwesome';
|
|
2
|
+
import { Pressable, StyleSheet } from 'react-native';
|
|
3
|
+
|
|
4
|
+
export const HeaderButton = ({ onPress }: { onPress?: () => void }) => {
|
|
5
|
+
return (
|
|
6
|
+
<Pressable onPress={onPress}>
|
|
7
|
+
{({ pressed }) => (
|
|
8
|
+
<FontAwesome
|
|
9
|
+
name="info-circle"
|
|
10
|
+
size={25}
|
|
11
|
+
color="gray"
|
|
12
|
+
style={[
|
|
13
|
+
styles.headerRight,
|
|
14
|
+
{
|
|
15
|
+
opacity: pressed ? 0.5 : 1,
|
|
16
|
+
},
|
|
17
|
+
]}
|
|
18
|
+
/>
|
|
19
|
+
)}
|
|
20
|
+
</Pressable>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const styles = StyleSheet.create({
|
|
25
|
+
headerRight: {
|
|
26
|
+
marginRight: 15,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { StyleSheet, Text, View } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import EditScreenInfo from './EditScreenInfo';
|
|
4
|
+
|
|
5
|
+
type ScreenContentProps = {
|
|
6
|
+
title: string;
|
|
7
|
+
path: string;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const ScreenContent = ({ title, path, children }: ScreenContentProps) => {
|
|
12
|
+
return (
|
|
13
|
+
<View style={styles.container}>
|
|
14
|
+
<Text style={styles.title}>{title}</Text>
|
|
15
|
+
<View style={styles.separator} />
|
|
16
|
+
<EditScreenInfo path={path} />
|
|
17
|
+
{children}
|
|
18
|
+
</View>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const styles = StyleSheet.create({
|
|
23
|
+
container: {
|
|
24
|
+
alignItems: 'center',
|
|
25
|
+
flex: 1,
|
|
26
|
+
justifyContent: 'center',
|
|
27
|
+
},
|
|
28
|
+
separator: {
|
|
29
|
+
backgroundColor: '#d1d5db',
|
|
30
|
+
height: 1,
|
|
31
|
+
marginVertical: 30,
|
|
32
|
+
width: '80%',
|
|
33
|
+
},
|
|
34
|
+
title: {
|
|
35
|
+
fontSize: 20,
|
|
36
|
+
fontWeight: 'bold',
|
|
37
|
+
},
|
|
38
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import FontAwesome from '@expo/vector-icons/FontAwesome';
|
|
2
|
+
import { StyleSheet } from 'react-native';
|
|
3
|
+
|
|
4
|
+
export const TabBarIcon = (props: {
|
|
5
|
+
name: React.ComponentProps<typeof FontAwesome>['name'];
|
|
6
|
+
color: string;
|
|
7
|
+
}) => {
|
|
8
|
+
return <FontAwesome size={28} style={styles.tabBarIcon} {...props} />;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const styles = StyleSheet.create({
|
|
12
|
+
tabBarIcon: {
|
|
13
|
+
marginBottom: -3,
|
|
14
|
+
},
|
|
15
|
+
});
|