@idealyst/cli 1.2.30 → 1.2.31
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/dist/constants.js +1 -1
- package/dist/generators/core/mobile.js +21 -19
- package/dist/generators/core/mobile.js.map +1 -1
- package/dist/generators/core/shared.js +21 -12
- package/dist/generators/core/shared.js.map +1 -1
- package/dist/generators/core/web.js +69 -12
- package/dist/generators/core/web.js.map +1 -1
- package/dist/templates/copier.js +6 -4
- package/dist/templates/copier.js.map +1 -1
- package/dist/templates/core/mobile/src/App.tsx +8 -0
- package/dist/templates/core/mobile/src/utils/trpc.ts +7 -0
- package/dist/templates/core/shared/src/components/App.tsx +13 -0
- package/dist/templates/core/shared/src/components/index.ts +1 -0
- package/dist/templates/core/shared/src/index.ts +10 -0
- package/dist/templates/core/shared/src/layouts/AppLayout.tsx +218 -0
- package/dist/templates/core/shared/src/navigation/AppRouter.tsx +103 -0
- package/dist/templates/core/shared/src/navigation/index.ts +1 -0
- package/dist/templates/core/shared/src/screens/ExploreScreen.tsx +240 -0
- package/dist/templates/core/shared/src/screens/HomeScreen.tsx +151 -0
- package/dist/templates/core/shared/src/screens/ProfileScreen.tsx +222 -0
- package/dist/templates/core/shared/src/screens/SettingsScreen.tsx +218 -0
- package/dist/templates/core/shared/src/screens/index.ts +4 -0
- package/dist/templates/core/shared/src/styles.ts +45 -0
- package/dist/templates/core/web/index.html +25 -0
- package/dist/templates/core/web/public/vite.svg +10 -0
- package/dist/templates/core/web/src/App.tsx +12 -0
- package/dist/templates/core/web/src/main.tsx +16 -0
- package/dist/templates/core/workspace/gitignore.template +78 -0
- package/dist/templates/core/workspace/package.json +24 -0
- package/dist/templates/core/workspace/react-native.config.js +19 -0
- package/dist/templates/core/workspace/tsconfig.json +17 -0
- package/dist/templates/core/workspace/yarnrc.yml.template +6 -0
- package/dist/types/constants.d.ts +5 -5
- package/package.json +3 -2
package/dist/constants.js
CHANGED
|
@@ -7,7 +7,7 @@ exports.DEPENDENCIES = exports.IGNORE_PATTERNS = exports.TEMPLATE_EXTENSIONS = e
|
|
|
7
7
|
// Package version - updated during build
|
|
8
8
|
exports.VERSION = '0.1.0';
|
|
9
9
|
// Current Idealyst framework version to use in templates
|
|
10
|
-
exports.IDEALYST_VERSION = '1.2.
|
|
10
|
+
exports.IDEALYST_VERSION = '1.2.31';
|
|
11
11
|
// React Native version
|
|
12
12
|
exports.REACT_NATIVE_VERSION = '0.83.0';
|
|
13
13
|
// React version
|
|
@@ -29,21 +29,22 @@ async function generateMobilePackage(projectPath, options) {
|
|
|
29
29
|
skipInstall: options.skipInstall ?? true,
|
|
30
30
|
interactive: options.interactive ?? false,
|
|
31
31
|
});
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// No RN init, copy full template
|
|
41
|
-
await (0, copier_1.copyTemplateDirectory)(templatePath, mobileDir, options);
|
|
42
|
-
}
|
|
32
|
+
// Always generate config files programmatically
|
|
33
|
+
await generateMobileConfigFiles(mobileDir, options);
|
|
34
|
+
// Try to use template src/ files first, or generate programmatically
|
|
35
|
+
const templateSrcPath = (0, copier_1.getTemplatePath)('core', 'mobile', 'src');
|
|
36
|
+
if (await (0, copier_1.templateHasContent)(templateSrcPath)) {
|
|
37
|
+
// Copy src/ from templates (showcase-based)
|
|
38
|
+
await (0, copier_1.copyTemplateDirectory)(templateSrcPath, path_1.default.join(mobileDir, 'src'), options);
|
|
39
|
+
logger_1.logger.dim('Using showcase-based source files');
|
|
43
40
|
}
|
|
44
41
|
else {
|
|
45
|
-
// Generate programmatically
|
|
46
|
-
await
|
|
42
|
+
// Generate src/ programmatically (fallback)
|
|
43
|
+
await generateMobileSrcFiles(mobileDir, options);
|
|
44
|
+
}
|
|
45
|
+
if (!rnResult.success) {
|
|
46
|
+
logger_1.logger.warn('Native folders (android/ios) were not created.');
|
|
47
|
+
logger_1.logger.dim('Run "npx react-native init" in the mobile directory to create them.');
|
|
47
48
|
}
|
|
48
49
|
return {
|
|
49
50
|
success: true,
|
|
@@ -51,9 +52,9 @@ async function generateMobilePackage(projectPath, options) {
|
|
|
51
52
|
};
|
|
52
53
|
}
|
|
53
54
|
/**
|
|
54
|
-
* Generate mobile package files
|
|
55
|
+
* Generate mobile package config files (package.json, app.json, configs)
|
|
55
56
|
*/
|
|
56
|
-
async function
|
|
57
|
+
async function generateMobileConfigFiles(mobileDir, data) {
|
|
57
58
|
// Create directory structure
|
|
58
59
|
await fs_extra_1.default.ensureDir(path_1.default.join(mobileDir, 'src'));
|
|
59
60
|
// Create package.json
|
|
@@ -68,12 +69,13 @@ async function generateMobileFiles(mobileDir, data, hasNative) {
|
|
|
68
69
|
await fs_extra_1.default.writeJson(path_1.default.join(mobileDir, 'tsconfig.json'), createMobileTsConfig(), { spaces: 2 });
|
|
69
70
|
// Create index.js (entry point)
|
|
70
71
|
await fs_extra_1.default.writeFile(path_1.default.join(mobileDir, 'index.js'), createIndexJs(data));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Generate mobile package src files programmatically (fallback)
|
|
75
|
+
*/
|
|
76
|
+
async function generateMobileSrcFiles(mobileDir, data) {
|
|
71
77
|
// Create src/App.tsx
|
|
72
78
|
await fs_extra_1.default.writeFile(path_1.default.join(mobileDir, 'src', 'App.tsx'), createAppTsx(data));
|
|
73
|
-
if (!hasNative) {
|
|
74
|
-
logger_1.logger.warn('Native folders (android/ios) were not created.');
|
|
75
|
-
logger_1.logger.dim('Run "npx react-native init" in the mobile directory to create them.');
|
|
76
|
-
}
|
|
77
79
|
}
|
|
78
80
|
/**
|
|
79
81
|
* Create mobile package.json
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../../src/generators/core/mobile.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAoBH,
|
|
1
|
+
{"version":3,"file":"mobile.js","sourceRoot":"","sources":["../../../src/generators/core/mobile.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,21 +19,34 @@ async function generateSharedPackage(projectPath, data) {
|
|
|
19
19
|
const sharedDir = path_1.default.join(projectPath, 'packages', 'shared');
|
|
20
20
|
logger_1.logger.info('Creating shared package...');
|
|
21
21
|
await fs_extra_1.default.ensureDir(sharedDir);
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
// Always generate config files programmatically (package.json, tsconfig, etc.)
|
|
23
|
+
await generateSharedConfigFiles(sharedDir, data);
|
|
24
|
+
// Try to use template src/ files first, or generate programmatically
|
|
25
|
+
const templateSrcPath = (0, copier_1.getTemplatePath)('core', 'shared', 'src');
|
|
26
|
+
if (await (0, copier_1.templateHasContent)(templateSrcPath)) {
|
|
27
|
+
// Copy src/ from templates (showcase-based)
|
|
28
|
+
await (0, copier_1.copyTemplateDirectory)(templateSrcPath, path_1.default.join(sharedDir, 'src'), data);
|
|
29
|
+
logger_1.logger.dim('Using showcase-based source files');
|
|
26
30
|
}
|
|
27
31
|
else {
|
|
28
|
-
// Generate programmatically
|
|
29
|
-
await
|
|
32
|
+
// Generate src/ programmatically (fallback)
|
|
33
|
+
await generateSharedSrcFiles(sharedDir, data);
|
|
30
34
|
}
|
|
31
35
|
return { success: true };
|
|
32
36
|
}
|
|
33
37
|
/**
|
|
34
|
-
* Generate shared package files
|
|
38
|
+
* Generate shared package config files (package.json, tsconfig)
|
|
35
39
|
*/
|
|
36
|
-
async function
|
|
40
|
+
async function generateSharedConfigFiles(sharedDir, data) {
|
|
41
|
+
// Create package.json
|
|
42
|
+
await fs_extra_1.default.writeJson(path_1.default.join(sharedDir, 'package.json'), createSharedPackageJson(data), { spaces: 2 });
|
|
43
|
+
// Create tsconfig.json
|
|
44
|
+
await fs_extra_1.default.writeJson(path_1.default.join(sharedDir, 'tsconfig.json'), createSharedTsConfig(), { spaces: 2 });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Generate shared package src files programmatically (fallback when no template)
|
|
48
|
+
*/
|
|
49
|
+
async function generateSharedSrcFiles(sharedDir, data) {
|
|
37
50
|
// Create directory structure
|
|
38
51
|
await fs_extra_1.default.ensureDir(path_1.default.join(sharedDir, 'src', 'components'));
|
|
39
52
|
await fs_extra_1.default.ensureDir(path_1.default.join(sharedDir, 'src', 'screens'));
|
|
@@ -42,10 +55,6 @@ async function generateSharedFiles(sharedDir, data) {
|
|
|
42
55
|
if (data.hasTrpc) {
|
|
43
56
|
await fs_extra_1.default.ensureDir(path_1.default.join(sharedDir, 'src', 'utils'));
|
|
44
57
|
}
|
|
45
|
-
// Create package.json
|
|
46
|
-
await fs_extra_1.default.writeJson(path_1.default.join(sharedDir, 'package.json'), createSharedPackageJson(data), { spaces: 2 });
|
|
47
|
-
// Create tsconfig.json
|
|
48
|
-
await fs_extra_1.default.writeJson(path_1.default.join(sharedDir, 'tsconfig.json'), createSharedTsConfig(), { spaces: 2 });
|
|
49
58
|
// Create src/index.ts
|
|
50
59
|
await fs_extra_1.default.writeFile(path_1.default.join(sharedDir, 'src', 'index.ts'), createSharedIndex(data));
|
|
51
60
|
// Create src/theme.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/generators/core/shared.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAYH,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/generators/core/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,39 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Web package generator
|
|
4
4
|
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
5
38
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
39
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
40
|
};
|
|
@@ -19,24 +52,45 @@ async function generateWebPackage(projectPath, data) {
|
|
|
19
52
|
const webDir = path_1.default.join(projectPath, 'packages', 'web');
|
|
20
53
|
logger_1.logger.info('Creating web package...');
|
|
21
54
|
await fs_extra_1.default.ensureDir(webDir);
|
|
22
|
-
|
|
55
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(webDir, 'src'));
|
|
56
|
+
await fs_extra_1.default.ensureDir(path_1.default.join(webDir, 'public'));
|
|
57
|
+
// Always generate config files programmatically
|
|
58
|
+
await generateWebConfigFiles(webDir, data);
|
|
59
|
+
// Try to use template src/ and index.html first, or generate programmatically
|
|
23
60
|
const templatePath = (0, copier_1.getTemplatePath)('core', 'web');
|
|
24
|
-
|
|
25
|
-
|
|
61
|
+
const templateSrcPath = (0, copier_1.getTemplatePath)('core', 'web', 'src');
|
|
62
|
+
const templateIndexHtml = path_1.default.join(templatePath, 'index.html');
|
|
63
|
+
const templatePublicPath = path_1.default.join(templatePath, 'public');
|
|
64
|
+
if (await (0, copier_1.templateHasContent)(templateSrcPath)) {
|
|
65
|
+
// Copy src/ from templates (showcase-based)
|
|
66
|
+
await (0, copier_1.copyTemplateDirectory)(templateSrcPath, path_1.default.join(webDir, 'src'), data);
|
|
67
|
+
logger_1.logger.dim('Using showcase-based source files');
|
|
26
68
|
}
|
|
27
69
|
else {
|
|
28
|
-
// Generate programmatically
|
|
29
|
-
await
|
|
70
|
+
// Generate src/ programmatically (fallback)
|
|
71
|
+
await generateWebSrcFiles(webDir, data);
|
|
72
|
+
}
|
|
73
|
+
// Copy index.html from template if exists
|
|
74
|
+
if (await fs_extra_1.default.pathExists(templateIndexHtml)) {
|
|
75
|
+
await fs_extra_1.default.copy(templateIndexHtml, path_1.default.join(webDir, 'index.html'));
|
|
76
|
+
// Process template variables in index.html
|
|
77
|
+
const content = await fs_extra_1.default.readFile(path_1.default.join(webDir, 'index.html'), 'utf8');
|
|
78
|
+
const { processTemplateContent } = await Promise.resolve().then(() => __importStar(require('../../templates/processor')));
|
|
79
|
+
await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'index.html'), processTemplateContent(content, data));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'index.html'), createIndexHtml(data));
|
|
83
|
+
}
|
|
84
|
+
// Copy public/ from template if exists
|
|
85
|
+
if (await (0, copier_1.templateHasContent)(templatePublicPath)) {
|
|
86
|
+
await (0, copier_1.copyTemplateDirectory)(templatePublicPath, path_1.default.join(webDir, 'public'), data);
|
|
30
87
|
}
|
|
31
88
|
return { success: true };
|
|
32
89
|
}
|
|
33
90
|
/**
|
|
34
|
-
* Generate web package files
|
|
91
|
+
* Generate web package config files (package.json, vite.config, tsconfig)
|
|
35
92
|
*/
|
|
36
|
-
async function
|
|
37
|
-
// Create directory structure
|
|
38
|
-
await fs_extra_1.default.ensureDir(path_1.default.join(webDir, 'src'));
|
|
39
|
-
await fs_extra_1.default.ensureDir(path_1.default.join(webDir, 'public'));
|
|
93
|
+
async function generateWebConfigFiles(webDir, data) {
|
|
40
94
|
// Create package.json
|
|
41
95
|
await fs_extra_1.default.writeJson(path_1.default.join(webDir, 'package.json'), createWebPackageJson(data), { spaces: 2 });
|
|
42
96
|
// Create vite.config.ts
|
|
@@ -45,8 +99,11 @@ async function generateWebFiles(webDir, data) {
|
|
|
45
99
|
await fs_extra_1.default.writeJson(path_1.default.join(webDir, 'tsconfig.json'), createWebTsConfig(), { spaces: 2 });
|
|
46
100
|
// Create tsconfig.node.json (for Vite config)
|
|
47
101
|
await fs_extra_1.default.writeJson(path_1.default.join(webDir, 'tsconfig.node.json'), createWebTsConfigNode(), { spaces: 2 });
|
|
48
|
-
|
|
49
|
-
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Generate web package src files programmatically (fallback)
|
|
105
|
+
*/
|
|
106
|
+
async function generateWebSrcFiles(webDir, data) {
|
|
50
107
|
// Create src/main.tsx
|
|
51
108
|
await fs_extra_1.default.writeFile(path_1.default.join(webDir, 'src', 'main.tsx'), createMainTsx(data));
|
|
52
109
|
// Create src/App.tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/generators/core/web.ts"],"names":[],"mappings":";AAAA;;GAEG
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/generators/core/web.ts"],"names":[],"mappings":"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"}
|
package/dist/templates/copier.js
CHANGED
|
@@ -101,10 +101,12 @@ async function copyTemplateFile(sourceFile, destFile, data) {
|
|
|
101
101
|
* Get the path to a template directory
|
|
102
102
|
*/
|
|
103
103
|
function getTemplatePath(...segments) {
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
const
|
|
104
|
+
// The compiled copier.js lives in dist/templates/copier.js
|
|
105
|
+
// The templates are in dist/templates/core/... and dist/templates/extensions/...
|
|
106
|
+
// So from __dirname (dist/templates), we just need to add the segments directly
|
|
107
|
+
const distPath = path_1.default.resolve(__dirname, ...segments);
|
|
108
|
+
// In development (running from src/templates), templates are at ../../templates
|
|
109
|
+
const devPath = path_1.default.resolve(__dirname, '..', '..', 'templates', ...segments);
|
|
108
110
|
if (fs_extra_1.default.existsSync(distPath)) {
|
|
109
111
|
return distPath;
|
|
110
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"copier.js","sourceRoot":"","sources":["../../src/templates/copier.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;AAwCH,sDA+CC;AAKD,4CAcC;AAKD,
|
|
1
|
+
{"version":3,"file":"copier.js","sourceRoot":"","sources":["../../src/templates/copier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { NavigatorProvider } from '@idealyst/navigation';
|
|
3
|
+
import { AppRouter } from '../navigation/AppRouter';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Main App component for the {{appDisplayName}}
|
|
7
|
+
* Sets up navigation with the AppRouter
|
|
8
|
+
*/
|
|
9
|
+
export const App: React.FC = () => {
|
|
10
|
+
return <NavigatorProvider route={AppRouter} />;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default App;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { App, default } from './App';
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, Button, IconButton, Icon, Badge } from '@idealyst/components';
|
|
3
|
+
import { useNavigator, Outlet } from '@idealyst/navigation';
|
|
4
|
+
import type { TabLayoutProps, StackLayoutProps } from '@idealyst/navigation';
|
|
5
|
+
import { UnistylesRuntime, useUnistyles } from 'react-native-unistyles';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Custom Tab Layout for the {{appDisplayName}} app.
|
|
9
|
+
* Features:
|
|
10
|
+
* - Header with app title, theme toggle, and settings
|
|
11
|
+
* - Bottom tab bar navigation
|
|
12
|
+
* - Centered content area with max-width
|
|
13
|
+
*/
|
|
14
|
+
export const AppTabLayout: React.FC<TabLayoutProps> = ({
|
|
15
|
+
routes,
|
|
16
|
+
currentPath,
|
|
17
|
+
}) => {
|
|
18
|
+
const navigator = useNavigator();
|
|
19
|
+
const { theme } = useUnistyles();
|
|
20
|
+
const currentTheme = UnistylesRuntime.themeName || 'light';
|
|
21
|
+
|
|
22
|
+
const cycleTheme = () => {
|
|
23
|
+
const nextTheme = currentTheme === 'light' ? 'dark' : 'light';
|
|
24
|
+
UnistylesRuntime.setTheme(nextTheme as any);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// Check if a route is active
|
|
28
|
+
const isRouteActive = (routePath: string) => {
|
|
29
|
+
const fullPath = routePath || '/';
|
|
30
|
+
|
|
31
|
+
// Trim leading slash for comparison
|
|
32
|
+
const trimmedCurrentPath = currentPath.startsWith('/') ? currentPath.slice(1) : currentPath;
|
|
33
|
+
const trimmedRoutePath = fullPath.startsWith('/') ? fullPath.slice(1) : fullPath;
|
|
34
|
+
return trimmedCurrentPath === trimmedRoutePath;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<View
|
|
39
|
+
background="primary"
|
|
40
|
+
style={{ height: '100vh', flexDirection: 'column', alignItems: 'center', overflow: 'hidden' }}
|
|
41
|
+
>
|
|
42
|
+
{/* Header */}
|
|
43
|
+
<View
|
|
44
|
+
style={{
|
|
45
|
+
paddingHorizontal: 16,
|
|
46
|
+
paddingVertical: 12,
|
|
47
|
+
borderBottomWidth: 1,
|
|
48
|
+
borderBottomColor: theme.colors.border.primary,
|
|
49
|
+
flexDirection: 'row',
|
|
50
|
+
alignItems: 'center',
|
|
51
|
+
justifyContent: 'space-between',
|
|
52
|
+
maxWidth: 800,
|
|
53
|
+
width: '100%',
|
|
54
|
+
}}
|
|
55
|
+
>
|
|
56
|
+
<View padding={'md'} style={{ flexDirection: 'row', alignItems: 'center', gap: 8 }}>
|
|
57
|
+
<Icon name="cube-outline" size={24} intent="primary" />
|
|
58
|
+
<Text typography='h4'>
|
|
59
|
+
{{appDisplayName}}
|
|
60
|
+
</Text>
|
|
61
|
+
<Badge color={currentTheme === 'dark' ? 'purple' : 'blue'}>
|
|
62
|
+
{currentTheme === 'dark' ? 'Dark' : 'Light'}
|
|
63
|
+
</Badge>
|
|
64
|
+
</View>
|
|
65
|
+
|
|
66
|
+
<View style={{ flexDirection: 'row', gap: 8, alignItems: 'center' }}>
|
|
67
|
+
<IconButton
|
|
68
|
+
type="outlined"
|
|
69
|
+
size="sm"
|
|
70
|
+
icon={currentTheme === 'dark' ? 'weather-sunny' : 'weather-night'}
|
|
71
|
+
onPress={cycleTheme}
|
|
72
|
+
accessibilityLabel="Toggle theme"
|
|
73
|
+
/>
|
|
74
|
+
<IconButton
|
|
75
|
+
type="text"
|
|
76
|
+
icon="cog-outline"
|
|
77
|
+
size="md"
|
|
78
|
+
onPress={() => navigator.navigate({ path: '/settings' })}
|
|
79
|
+
accessibilityLabel="Settings"
|
|
80
|
+
/>
|
|
81
|
+
</View>
|
|
82
|
+
</View>
|
|
83
|
+
|
|
84
|
+
{/* Content Area */}
|
|
85
|
+
<View
|
|
86
|
+
style={{
|
|
87
|
+
flex: 1,
|
|
88
|
+
overflowY: 'auto',
|
|
89
|
+
width: '100%',
|
|
90
|
+
}}
|
|
91
|
+
>
|
|
92
|
+
<View
|
|
93
|
+
style={{
|
|
94
|
+
maxWidth: 800,
|
|
95
|
+
width: '100%',
|
|
96
|
+
marginLeft: 'auto',
|
|
97
|
+
marginRight: 'auto',
|
|
98
|
+
}}
|
|
99
|
+
>
|
|
100
|
+
<Outlet />
|
|
101
|
+
</View>
|
|
102
|
+
</View>
|
|
103
|
+
|
|
104
|
+
{/* Bottom Tab Bar */}
|
|
105
|
+
<View
|
|
106
|
+
style={{
|
|
107
|
+
alignSelf: 'stretch',
|
|
108
|
+
borderTopWidth: 1,
|
|
109
|
+
borderTopStyle: 'solid',
|
|
110
|
+
borderTopColor: theme.colors.border.primary,
|
|
111
|
+
backgroundColor: theme.colors.surface.primary,
|
|
112
|
+
paddingVertical: 8,
|
|
113
|
+
paddingHorizontal: 16,
|
|
114
|
+
}}
|
|
115
|
+
>
|
|
116
|
+
<View style={{ alignItems: 'center', width: '100%' }}>
|
|
117
|
+
<View
|
|
118
|
+
style={{
|
|
119
|
+
flexDirection: 'row',
|
|
120
|
+
justifyContent: 'space-around',
|
|
121
|
+
alignItems: 'center',
|
|
122
|
+
maxWidth: 400,
|
|
123
|
+
width: '100%',
|
|
124
|
+
}}
|
|
125
|
+
>
|
|
126
|
+
{routes.map((route) => {
|
|
127
|
+
const isActive = isRouteActive(route.fullPath);
|
|
128
|
+
const tabOptions = route.options as any;
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<Button
|
|
132
|
+
key={route.path || 'home'}
|
|
133
|
+
type="text"
|
|
134
|
+
intent={isActive ? 'primary' : 'neutral'}
|
|
135
|
+
size="sm"
|
|
136
|
+
style={{
|
|
137
|
+
flexDirection: 'column',
|
|
138
|
+
gap: 4,
|
|
139
|
+
paddingVertical: 8,
|
|
140
|
+
paddingHorizontal: 16,
|
|
141
|
+
minWidth: 64,
|
|
142
|
+
}}
|
|
143
|
+
onPress={() => {
|
|
144
|
+
navigator.navigate({ path: route.fullPath || '/' })
|
|
145
|
+
}}
|
|
146
|
+
>
|
|
147
|
+
<View style={{ alignItems: 'center', gap: 4 }}>
|
|
148
|
+
{tabOptions?.tabBarIcon?.({
|
|
149
|
+
focused: isActive,
|
|
150
|
+
color: isActive
|
|
151
|
+
? theme.intents.primary.primary
|
|
152
|
+
: theme.colors.text.secondary,
|
|
153
|
+
size: 24,
|
|
154
|
+
})}
|
|
155
|
+
<Text
|
|
156
|
+
typography="caption"
|
|
157
|
+
weight={isActive ? 'semibold' : 'normal'}
|
|
158
|
+
color={isActive ? 'primary' : 'secondary'}
|
|
159
|
+
>
|
|
160
|
+
{tabOptions?.tabBarLabel || route.options?.headerTitle || route.path || 'Home'}
|
|
161
|
+
</Text>
|
|
162
|
+
</View>
|
|
163
|
+
</Button>
|
|
164
|
+
);
|
|
165
|
+
})}
|
|
166
|
+
</View>
|
|
167
|
+
</View>
|
|
168
|
+
</View>
|
|
169
|
+
</View>
|
|
170
|
+
);
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Custom Stack Layout for the {{appDisplayName}} app.
|
|
175
|
+
* Features:
|
|
176
|
+
* - Centered content with max-width of 800px
|
|
177
|
+
* - Full height layout
|
|
178
|
+
* - Left/right borders on content area
|
|
179
|
+
*/
|
|
180
|
+
export const AppStackLayout: React.FC<StackLayoutProps> = ({
|
|
181
|
+
options,
|
|
182
|
+
routes,
|
|
183
|
+
}) => {
|
|
184
|
+
const { theme } = useUnistyles();
|
|
185
|
+
|
|
186
|
+
return (
|
|
187
|
+
<View
|
|
188
|
+
background="secondary"
|
|
189
|
+
style={{
|
|
190
|
+
height: '100vh',
|
|
191
|
+
flexDirection: 'column',
|
|
192
|
+
overflow: 'hidden',
|
|
193
|
+
alignItems: 'center',
|
|
194
|
+
}}
|
|
195
|
+
>
|
|
196
|
+
{/* Content Area */}
|
|
197
|
+
<View
|
|
198
|
+
background="primary"
|
|
199
|
+
style={{
|
|
200
|
+
flex: 1,
|
|
201
|
+
overflowY: 'auto',
|
|
202
|
+
maxWidth: 800,
|
|
203
|
+
width: '100%',
|
|
204
|
+
borderLeftWidth: 1,
|
|
205
|
+
borderRightWidth: 1,
|
|
206
|
+
borderLeftColor: theme.colors.border.primary,
|
|
207
|
+
borderRightColor: theme.colors.border.primary,
|
|
208
|
+
borderLeftStyle: 'solid',
|
|
209
|
+
borderRightStyle: 'solid',
|
|
210
|
+
}}
|
|
211
|
+
>
|
|
212
|
+
<Outlet />
|
|
213
|
+
</View>
|
|
214
|
+
</View>
|
|
215
|
+
);
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export default AppTabLayout;
|