Reajuste de pastas

This commit is contained in:
Rayan Konecny 2026-04-27 17:26:53 -03:00
commit 93a8e47617
32 changed files with 12489 additions and 0 deletions

4
.gitignore vendored Normal file
View file

@ -0,0 +1,4 @@
node_modules/
dist/
podman_compose.yml

9
README.md Normal file
View file

@ -0,0 +1,9 @@
## Compilar projeto no AVD Android na VM
- Ligue o dispositivo android
Abra o cmd e rode o comando
1. ssh -R 5555:localhost:5555 dev@175.15.15.93
2. adb connect localhost:5555

1
backend/.env Normal file
View file

@ -0,0 +1 @@
PORT=4000

13
backend/Dockerfile Normal file
View file

@ -0,0 +1,13 @@
FROM node:lts-alpine3.22
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

2229
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

26
backend/package.json Normal file
View file

@ -0,0 +1,26 @@
{
"name": "backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "tsx watch src/server.ts",
"build": "tsc",
"start": "node dist/server.js",
"typecheck": "tsc --noEmit"
},
"keywords": [],
"author": "Rayan",
"license": "ISC",
"type": "module",
"devDependencies": {
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"ts-node-dev": "^2.0.0",
"tsx": "^4.21.0"
},
"dependencies": {
"cors": "^2.8.6",
"express": "^5.2.1"
}
}

View file

@ -0,0 +1,14 @@
version: "3.9"
services:
backend:
container_name: top-tran-backend
image: top-tran-backend
build:
context: .
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- PORT=3000
restart: always

15
backend/src/server.ts Normal file
View file

@ -0,0 +1,15 @@
import express from 'express';
import cors from 'cors';
const app = express();
const port = process.env.PORT? Number(process.env.PORT) : 4000;
app.use(cors());
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, '0.0.0.0', () => {
console.log(`Server is running on port ${port}`);
});

16
backend/tsconfig.json Normal file
View file

@ -0,0 +1,16 @@
{
"compilerOptions": {
"module": "nodenext",
"moduleResolution": "NodeNext",
"target": "es2024",
"rootDir": "./src",
"outDir": "./dist",
"sourceMap": true,
"declaration": true,
"declarationMap": true,
"strict": true,
"verbatimModuleSyntax": true,
"isolatedModules": true,
"skipLibCheck": true,
}
}

13
mobile/.expo/README.md Normal file
View file

@ -0,0 +1,13 @@
> Why do I have a folder named ".expo" in my project?
The ".expo" folder is created when an Expo project is started using "expo start" command.
> What do the files contain?
- "devices.json": contains information about devices that have recently opened this project. This is used to populate the "Development sessions" list in your development builds.
- "settings.json": contains the server configuration that is used to serve the application manifest.
> Should I commit the ".expo" folder?
No, you should not share the ".expo" folder. It does not contain any information that is relevant for other developers working on the project, it is specific to your machine.
Upon project creation, the ".expo" folder is already added to your ".gitignore" file.

View file

@ -0,0 +1,8 @@
{
"devices": [
{
"installationId": "346bc961-9b4d-465f-b43f-1d6169c255de",
"lastUsed": 1777218773769
}
]
}

14
mobile/.expo/types/router.d.ts vendored Normal file
View file

@ -0,0 +1,14 @@
/* eslint-disable */
import * as Router from 'expo-router';
export * from 'expo-router';
declare module 'expo-router' {
export namespace ExpoRouter {
export interface __routes<T extends string | object = string> {
hrefInputParams: { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/`; params?: Router.UnknownInputParams; } | { pathname: `/signup`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; };
hrefOutputParams: { pathname: Router.RelativePathString, params?: Router.UnknownOutputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownOutputParams } | { pathname: `/`; params?: Router.UnknownOutputParams; } | { pathname: `/signup`; params?: Router.UnknownOutputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownOutputParams; };
href: Router.RelativePathString | Router.ExternalPathString | `/${`?${string}` | `#${string}` | ''}` | `/signup${`?${string}` | `#${string}` | ''}` | `/_sitemap${`?${string}` | `#${string}` | ''}` | { pathname: Router.RelativePathString, params?: Router.UnknownInputParams } | { pathname: Router.ExternalPathString, params?: Router.UnknownInputParams } | { pathname: `/`; params?: Router.UnknownInputParams; } | { pathname: `/signup`; params?: Router.UnknownInputParams; } | { pathname: `/_sitemap`; params?: Router.UnknownInputParams; };
}
}
}

1
mobile/.vscode/extensions.json vendored Normal file
View file

@ -0,0 +1 @@
{ "recommendations": ["expo.vscode-expo-tools"] }

7
mobile/.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,7 @@
{
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit",
"source.sortMembers": "explicit"
}
}

37
mobile/app.json Normal file
View file

@ -0,0 +1,37 @@
{
"expo": {
"name": "top-tran-app",
"slug": "toptran",
"version": "1.0.0",
"orientation": "portrait",
"scheme": "toptranapp",
"userInterfaceStyle": "automatic",
"newArchEnabled": true,
"ios": {
"supportsTablet": true
},
"icon": "./assets/toptranico.png",
"android": {
"adaptiveIcon": {
"backgroundColor": "#ffffff"
},
"predictiveBackGestureEnabled": false,
"package": "com.rayankonecny.toptran"
},
"web": {
"bundler": "metro",
"output": "static"
},
"plugins": ["expo-router"],
"experiments": {
"typedRoutes": true
},
"extra": {
"router": {},
"eas": {
"projectId": "52f8b4e5-6130-4c0f-8220-cd7953960965"
}
},
"owner": "rayankonecny"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

24
mobile/eas.json Normal file
View file

@ -0,0 +1,24 @@
{
"cli": {
"version": ">= 18.8.1",
"appVersionSource": "remote"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal"
},
"preview": {
"distribution": "internal",
"android": {
"buildType": "apk"
}
},
"production": {
"autoIncrement": true
}
},
"submit": {
"production": {}
}
}

3
mobile/expo-env.d.ts vendored Normal file
View file

@ -0,0 +1,3 @@
/// <reference types="expo/types" />
// NOTE: This file should not be edited and should be in your git ignore

9488
mobile/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

39
mobile/package.json Normal file
View file

@ -0,0 +1,39 @@
{
"name": "toptran",
"main": "expo-router/entry",
"version": "1.0.0",
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios",
"web": "expo start --web"
},
"dependencies": {
"@expo/vector-icons": "^15.0.3",
"@react-navigation/native": "^7.1.8",
"axios": "^1.15.2",
"expo": "~54.0.33",
"expo-constants": "~18.0.13",
"expo-dev-client": "~6.0.20",
"expo-font": "~14.0.11",
"expo-linking": "~8.0.11",
"expo-router": "~6.0.23",
"expo-splash-screen": "~31.0.13",
"expo-status-bar": "~3.0.9",
"expo-web-browser": "~15.0.10",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-native": "0.81.5",
"react-native-reanimated": "~4.1.1",
"react-native-safe-area-context": "~5.6.0",
"react-native-screens": "~4.16.0",
"react-native-web": "~0.21.0",
"react-native-worklets": "0.5.1"
},
"devDependencies": {
"@types/react": "~19.1.0",
"react-test-renderer": "19.1.0",
"typescript": "~5.9.2"
},
"private": true
}

View file

@ -0,0 +1,12 @@
import { Stack } from "expo-router";
// Layout para as páginas de login e cadastro de usuário, sem header
export default function Layout() {
return (
<Stack
screenOptions={{
headerShown: false,
}}
/>
);
}

116
mobile/src/app/index.tsx Normal file
View file

@ -0,0 +1,116 @@
import { useState } from "react";
import {
Alert,
Image,
KeyboardAvoidingView,
Platform,
ScrollView,
StyleSheet,
Text,
View,
} from "react-native";
import { Button } from "@/components/Button";
import { Input } from "@/components/Input";
import { Link } from "expo-router";
// Página de login
export default function IndexPage() {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
function handleSignIn() {
if (!email.trim() || !password.trim()) {
Alert.alert("Entrar", "Por favor, preencha todos os campos.");
return;
}
Alert.alert("Bem-vindo", `Acessando com o e-mail ${email}`);
}
return (
<KeyboardAvoidingView
style={{ flex: 1 }}
behavior={Platform.select({ ios: "padding", android: "height" })}
>
<ScrollView
contentContainerStyle={{ flexGrow: 1 }}
keyboardShouldPersistTaps="handled"
showsVerticalScrollIndicator={false}
>
<View style={styles.container}>
<Image
source={require("@/assets/toptran.png")}
style={styles.illustration}
/>
<Text style={styles.title}>Entrar</Text>
<Text style={styles.subtitle}>
Acesse sua conta com e-mail e senha.
</Text>
<View style={styles.form}>
<Input
placeholder="E-mail"
keyboardType="email-address"
onChangeText={setEmail}
/>
<Input
placeholder="Senha"
secureTextEntry
onChangeText={setPassword}
/>
<Button label="Entrar" onPress={handleSignIn} />
</View>
<Text style={styles.footerText}>
Não tem uma conta?{" "}
<Link href={"/signup"} style={styles.footerLink}>
Cadastre-se aqui.
</Link>
</Text>
</View>
</ScrollView>
</KeyboardAvoidingView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#0e0d0d",
padding: 32,
},
illustration: {
width: "100%",
height: 330,
resizeMode: "contain",
marginTop: 62,
},
title: {
marginTop: 62,
fontSize: 32,
fontWeight: 900,
color: "#e7e7e7",
},
subtitle: {
fontSize: 16,
color: "#a1a1a1",
},
form: {
marginTop: 24,
gap: 16,
},
footerText: {
textAlign: "center",
marginTop: 24,
color: "#a1a1a1",
},
footerLink: {
color: "#007AFF",
fontWeight: 700,
},
});

91
mobile/src/app/signup.tsx Normal file
View file

@ -0,0 +1,91 @@
import {
Image,
KeyboardAvoidingView,
Platform,
ScrollView,
StyleSheet,
Text,
View,
} from "react-native";
import { Button } from "@/components/Button";
import { Input } from "@/components/Input";
import { Link } from "expo-router";
// Página de cadastro
export default function Signup() {
return (
<KeyboardAvoidingView
style={{ flex: 1 }}
behavior={Platform.select({ ios: "padding", android: "height" })}
>
<ScrollView
contentContainerStyle={{ flexGrow: 1 }}
keyboardShouldPersistTaps="handled"
showsVerticalScrollIndicator={false}
>
<View style={styles.container}>
<Image
source={require("@/assets/toptran.png")}
style={styles.illustration}
/>
<Text style={styles.title}>Cadastrar</Text>
<Text style={styles.subtitle}>Crie sua conta para acessar.</Text>
<View style={styles.form}>
<Input placeholder="Nome" />
<Input placeholder="E-mail" keyboardType="email-address" />
<Input placeholder="Senha" secureTextEntry />
<Input placeholder="Confirmar Senha" secureTextEntry />
<Button label="Cadastrar" />
</View>
<Text style={styles.footerText}>
tem uma conta?{" "}
<Link href={"/"} style={styles.footerLink}>
Entre aqui.
</Link>
</Text>
</View>
</ScrollView>
</KeyboardAvoidingView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#0e0d0d",
padding: 32,
},
illustration: {
width: "100%",
height: 330,
resizeMode: "contain",
marginTop: 62,
},
title: {
marginTop: 62,
fontSize: 32,
fontWeight: "900",
color: "#e7e7e7",
},
subtitle: {
fontSize: 16,
color: "#a1a1a1",
},
form: {
marginTop: 24,
gap: 16,
},
footerText: {
textAlign: "center",
marginTop: 24,
color: "#a1a1a1",
},
footerLink: {
color: "#007AFF",
fontWeight: "700",
},
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 KiB

View file

@ -0,0 +1,242 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="1080.000000pt" height="1344.000000pt" viewBox="0 0 1080.000000 1344.000000"
preserveAspectRatio="xMidYMid meet">
<g transform="translate(0.000000,1344.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 6720 l0 -6720 5400 0 5400 0 0 6720 0 6720 -5400 0 -5400 0 0
-6720z m6340 4532 c103 -53 208 -110 250 -137 44 -27 226 -135 260 -153 14 -7
32 -20 41 -28 8 -8 20 -14 26 -14 6 0 67 -34 134 -75 68 -41 153 -89 189 -106
36 -17 79 -41 97 -55 17 -13 36 -24 41 -24 5 0 35 -17 68 -38 32 -21 84 -51
116 -66 31 -15 63 -35 70 -44 37 -43 38 -81 38 -1001 0 -866 -1 -903 -19 -939
-16 -31 -41 -50 -142 -107 -68 -39 -128 -72 -134 -74 -13 -5 -282 -163 -369
-218 -38 -24 -74 -43 -78 -43 -5 0 -43 -20 -84 -45 -40 -25 -77 -45 -81 -45
-4 0 -37 -20 -74 -45 -37 -25 -70 -45 -73 -45 -7 0 -170 -93 -234 -134 -23
-14 -45 -26 -49 -26 -5 0 -39 -20 -78 -45 -38 -25 -73 -45 -77 -45 -5 0 -37
-18 -72 -40 -70 -44 -85 -48 -87 -22 -7 84 -5 675 2 704 7 29 16 39 43 48 18
6 60 28 94 50 34 22 65 40 70 40 4 0 24 12 43 26 19 14 63 41 99 60 80 43 117
64 295 169 77 45 159 92 181 103 23 12 55 33 73 47 l31 27 0 612 0 612 -32 31
c-18 17 -61 46 -96 64 -151 81 -255 139 -343 194 -9 6 -47 26 -85 46 -38 20
-78 46 -88 58 -29 32 -78 27 -149 -16 -34 -20 -84 -49 -112 -66 -27 -16 -75
-43 -105 -59 -30 -17 -62 -36 -71 -44 -8 -8 -18 -14 -22 -14 -5 0 -162 -88
-362 -205 -55 -32 -125 -71 -155 -87 -30 -16 -60 -34 -66 -39 -7 -5 -47 -29
-91 -53 -43 -23 -141 -80 -218 -126 -77 -46 -162 -95 -190 -110 -85 -45 -217
-122 -272 -157 -28 -18 -55 -33 -58 -33 -4 0 -67 -36 -141 -80 -73 -44 -136
-80 -140 -80 -4 0 -39 -19 -78 -43 -39 -24 -114 -67 -166 -97 -52 -29 -127
-72 -166 -96 -38 -23 -122 -71 -185 -106 -62 -36 -162 -93 -220 -126 -59 -34
-116 -62 -127 -62 -19 0 -20 9 -27 237 -8 254 -2 452 15 483 6 11 37 33 70 50
32 16 62 35 65 41 4 6 39 26 78 45 38 18 79 42 91 53 12 11 39 28 61 38 22 10
60 31 84 47 25 16 61 36 81 45 19 9 49 26 65 37 17 12 59 36 95 54 36 18 72
38 80 45 8 7 40 26 70 43 30 16 93 52 140 81 47 28 111 64 143 80 31 16 63 34
70 40 14 11 115 69 228 130 74 41 201 115 239 141 14 9 50 29 80 43 30 15 69
37 85 48 40 28 216 130 235 137 8 3 29 15 45 27 17 12 50 32 75 45 25 12 70
38 100 56 54 33 77 46 202 113 35 18 82 47 105 62 23 16 52 33 65 38 14 5 53
28 88 50 35 23 68 41 74 41 5 0 36 18 67 40 60 42 118 67 159 69 14 0 59 -16
100 -37z m54 -966 c61 -35 137 -78 169 -97 32 -19 79 -46 105 -60 53 -30 61
-50 64 -147 1 -70 -17 -99 -75 -123 -18 -7 -54 -27 -82 -44 -27 -18 -84 -51
-125 -75 -41 -24 -107 -63 -146 -87 -39 -24 -73 -43 -76 -43 -3 0 -61 -32
-129 -72 -68 -39 -157 -90 -197 -112 -95 -52 -119 -77 -127 -131 -4 -23 -4
-362 -1 -751 8 -849 7 -614 1 -1628 -3 -565 -8 -853 -15 -861 -6 -7 -52 -37
-103 -66 -51 -28 -117 -67 -147 -84 -30 -18 -86 -50 -125 -72 -38 -22 -110
-64 -158 -92 -60 -36 -97 -51 -115 -49 -26 3 -27 5 -35 93 -10 97 -21 3826
-12 3862 9 37 56 83 117 114 33 16 80 45 106 63 26 18 63 39 82 46 19 8 49 24
65 36 17 12 50 32 75 44 24 12 66 38 93 56 27 19 61 37 76 40 14 4 37 17 51
29 14 13 48 33 75 45 28 12 71 38 98 56 26 19 51 34 55 34 5 0 38 19 73 41 35
23 77 46 94 52 16 5 41 18 55 27 58 40 71 37 214 -44z m-1570 -762 c15 -6 16
-170 16 -1763 l0 -1757 -75 -45 c-42 -24 -102 -60 -135 -79 -33 -19 -103 -62
-156 -94 -100 -61 -183 -106 -197 -106 -4 0 -30 -16 -58 -35 -62 -42 -79 -44
-80 -7 -3 75 -9 1774 -7 1882 2 69 3 286 3 482 0 436 7 416 -118 349 -45 -24
-101 -57 -125 -73 -23 -16 -68 -41 -99 -54 -32 -14 -74 -39 -94 -55 -20 -16
-40 -29 -45 -29 -4 0 -37 -20 -73 -44 -37 -24 -104 -62 -151 -86 -133 -66
-143 -72 -174 -97 -52 -43 -61 -31 -62 87 -1 58 -4 213 -7 345 -5 197 -3 244
9 262 13 20 73 59 199 128 28 15 57 33 65 41 8 7 38 23 65 36 28 13 76 41 107
61 32 21 69 42 82 47 14 5 49 24 78 43 78 50 356 207 366 207 5 0 27 13 48 28
21 15 64 42 94 59 30 16 110 62 177 101 68 40 127 72 132 72 5 0 32 16 61 36
81 55 121 71 154 58z m-2929 -4285 c13 -13 14 -26 4 -95 -16 -116 -18 -123
-39 -144 -18 -18 -34 -20 -177 -20 -87 0 -163 -4 -169 -8 -19 -12 -32 -45 -39
-97 -6 -49 -20 -136 -50 -305 -8 -47 -28 -184 -45 -305 -35 -257 -49 -335 -63
-352 -15 -20 -310 -18 -327 2 -10 12 -9 34 4 107 15 87 68 439 87 573 4 33 12
80 18 105 5 25 14 80 20 123 6 43 14 89 17 101 3 15 -1 29 -11 40 -14 13 -40
16 -164 16 -194 0 -189 -3 -172 121 16 115 24 137 53 149 13 5 238 8 530 7
444 -2 509 -4 523 -18z m1282 -7 c53 -28 94 -88 100 -147 3 -25 -2 -82 -10
-127 -31 -159 -80 -462 -122 -760 -26 -180 -80 -255 -207 -286 -61 -16 -906
-17 -960 -2 -58 16 -96 55 -113 113 -16 58 -21 13 55 517 23 151 46 302 51
335 37 253 92 336 249 375 19 5 233 8 475 7 437 -2 440 -2 482 -25z m1250 1
c99 -54 119 -125 84 -313 -11 -63 -28 -158 -37 -210 -34 -203 -70 -271 -171
-321 -46 -23 -58 -24 -325 -27 -200 -3 -280 -7 -287 -16 -10 -11 -19 -57 -41
-201 -18 -113 -42 -219 -52 -232 -16 -20 -301 -18 -318 2 -13 16 -9 58 25 265
8 47 21 137 30 200 33 238 88 580 110 681 8 37 15 77 15 90 0 50 20 98 43 102
12 3 216 4 452 4 425 -2 431 -2 472 -24z m3554 -12 c14 -13 72 -206 80 -264
18 -129 85 -414 120 -512 6 -16 17 -55 24 -85 8 -30 26 -104 40 -165 15 -60
31 -130 35 -155 4 -25 11 -60 15 -77 l8 -33 -136 0 c-95 0 -137 4 -145 13 -5
6 -26 75 -45 152 -20 77 -42 165 -51 195 -28 100 -43 164 -61 250 -9 47 -23
108 -30 135 -8 28 -17 65 -20 83 -8 37 -45 67 -72 58 -22 -7 -95 -126 -205
-334 -27 -52 -64 -115 -83 -141 -18 -26 -51 -83 -73 -127 -66 -132 -139 -254
-160 -271 -11 -9 -56 -13 -140 -13 l-124 0 6 31 c3 17 35 79 70 138 89 147
252 433 293 511 18 36 48 88 65 115 32 53 74 127 117 210 15 28 39 69 54 93
15 23 46 77 70 120 l43 77 54 6 c62 7 242 0 251 -10z m-2261 -48 c0 -74 -16
-130 -40 -143 -10 -5 -82 -10 -160 -10 -136 0 -197 -11 -213 -37 -3 -5 -10
-43 -16 -84 -5 -41 -23 -166 -40 -279 -16 -113 -32 -232 -36 -265 -4 -33 -11
-74 -16 -91 -5 -17 -14 -65 -19 -105 -9 -67 -22 -147 -35 -207 -5 -22 -7 -23
-143 -20 l-137 3 -3 37 c-2 20 6 75 17 123 12 48 21 96 21 108 0 12 6 54 14
92 36 173 99 581 99 643 0 72 -10 76 -191 82 l-157 5 1 60 c0 33 6 79 13 103
l12 42 514 0 515 0 0 -57z m1110 37 c77 -39 109 -113 90 -205 -10 -48 -17 -90
-59 -335 -10 -63 -23 -124 -27 -135 -14 -36 -48 -76 -84 -97 -81 -49 -80 -78
10 -287 38 -90 71 -175 72 -189 l3 -27 -130 -5 c-176 -7 -182 -6 -206 42 -22
43 -68 164 -103 273 -31 96 -51 131 -78 139 -13 3 -64 6 -115 6 -87 0 -93 -1
-112 -26 -12 -15 -21 -40 -21 -56 0 -16 -6 -57 -14 -91 -13 -54 -23 -108 -43
-234 -3 -18 -10 -36 -17 -42 -10 -8 -130 -15 -222 -12 -51 1 -58 15 -43 79 6
26 17 92 25 147 19 141 33 224 45 270 6 22 13 56 16 75 4 31 40 267 64 425 5
33 14 98 19 145 11 90 19 140 27 153 2 4 198 7 434 7 409 0 432 -1 469 -20z
m2895 -3 c22 -13 52 -42 68 -69 l30 -47 -13 -83 c-6 -46 -18 -108 -25 -138 -7
-30 -16 -82 -20 -115 -3 -33 -12 -89 -20 -125 -7 -36 -19 -92 -25 -125 -7 -33
-17 -91 -22 -130 -5 -38 -13 -99 -17 -135 -5 -36 -14 -110 -21 -165 -18 -149
-13 -145 -175 -145 -152 0 -147 -3 -126 79 5 20 19 99 31 176 12 77 28 176 36
220 8 44 14 105 14 135 0 30 7 80 15 110 8 30 20 111 26 179 12 130 6 162 -30
177 -9 3 -95 8 -191 10 -183 3 -288 -10 -317 -39 -9 -9 -19 -47 -23 -95 -5
-44 -16 -101 -24 -126 -9 -26 -16 -63 -16 -82 0 -20 -7 -59 -15 -87 -16 -56
-21 -88 -54 -327 -12 -85 -26 -177 -31 -203 -6 -27 -10 -63 -10 -82 0 -21 -6
-35 -16 -39 -9 -3 -71 -6 -139 -6 -140 0 -137 -2 -123 85 49 305 79 511 98
680 5 44 16 107 24 140 9 33 16 83 16 112 0 29 6 72 14 95 8 24 17 65 21 92 4
27 11 60 16 73 l9 23 497 0 c498 0 498 0 538 -23z m-6490 -1807 c49 -24 74
-56 82 -106 l6 -34 -61 0 c-58 0 -62 2 -76 29 -26 49 -116 48 -132 -1 -9 -28
20 -54 85 -78 132 -49 181 -98 181 -180 0 -55 -27 -103 -72 -126 -42 -22 -151
-30 -206 -15 -54 15 -115 69 -129 114 -15 49 -5 59 58 55 45 -3 55 -7 66 -28
18 -37 42 -50 89 -50 48 0 67 17 62 57 -3 30 -16 38 -134 89 -34 14 -77 41
-95 60 -30 31 -34 42 -34 87 0 57 20 93 66 121 67 40 169 42 244 6z m921 15
c102 -30 164 -127 164 -257 0 -182 -96 -287 -250 -276 -133 10 -214 108 -214
263 0 148 49 231 162 271 49 17 78 17 138 -1z m3364 -1 c66 -19 113 -64 131
-123 16 -52 5 -62 -60 -59 -39 3 -47 7 -64 38 -24 43 -33 50 -75 50 -75 0
-102 -45 -102 -170 0 -133 37 -184 117 -164 26 6 42 18 53 39 21 42 28 46 85
43 44 -3 50 -6 53 -26 2 -12 -8 -42 -22 -66 -35 -60 -107 -96 -190 -96 -144 1
-226 93 -229 258 -2 98 16 160 60 212 65 76 138 95 243 64z m2196 1 c53 -16
108 -65 140 -125 29 -54 27 -230 -3 -286 -47 -89 -124 -130 -229 -121 -81 6
-136 42 -178 117 -28 50 -31 63 -31 145 0 103 14 152 58 201 63 73 149 97 243
69z m-8376 -14 c5 -11 8 -30 6 -43 -3 -13 -5 -26 -5 -30 -1 -4 -36 -8 -78 -10
l-78 -3 -3 -213 -2 -213 -63 3 -62 3 -5 210 -5 210 -72 3 -73 3 0 43 c0 23 3
46 7 49 3 4 100 7 214 7 196 0 209 -1 219 -19z m375 -6 c55 -28 85 -76 85
-137 0 -56 -10 -80 -53 -126 l-31 -32 47 -95 c26 -53 47 -100 47 -105 0 -6
-29 -10 -65 -10 l-65 0 -45 91 c-45 88 -47 90 -78 87 l-32 -3 -5 -85 -5 -85
-62 -3 -63 -3 0 259 c0 142 3 262 7 266 4 4 69 6 143 4 111 -2 142 -7 175 -23z
m433 13 c5 -7 44 -107 86 -223 43 -115 84 -227 92 -248 8 -20 14 -40 14 -42 0
-3 -31 -5 -70 -5 l-69 0 -11 40 c-13 48 -20 52 -90 57 -79 6 -106 -7 -117 -54
l-9 -38 -67 -3 c-51 -2 -67 0 -67 11 0 12 140 399 174 481 15 35 16 36 69 36
32 0 59 -5 65 -12z m368 4 c6 -4 46 -69 88 -144 43 -76 82 -138 87 -138 5 0 9
63 9 140 0 138 0 140 23 146 13 3 41 4 63 2 34 -3 39 -7 44 -33 5 -22 5 -435
1 -487 -1 -5 -30 -8 -65 -8 l-64 0 -47 83 c-26 45 -66 114 -89 152 l-41 70 -5
-150 -5 -150 -62 -3 c-46 -2 -63 0 -63 10 -3 102 2 503 6 509 6 11 105 12 120
1z m1159 -3 c82 -23 145 -122 129 -205 -8 -45 -55 -100 -102 -119 -19 -8 -61
-15 -92 -15 -89 0 -90 -1 -90 -84 0 -39 -4 -77 -9 -84 -5 -9 -26 -12 -67 -10
l-59 3 -3 248 c-2 179 0 253 9 263 14 17 223 20 284 3z m1038 -13 c44 -22 66
-50 77 -101 14 -64 1 -114 -42 -157 l-38 -38 50 -100 c27 -55 50 -102 50 -105
0 -3 -30 -5 -67 -3 l-68 3 -45 85 c-41 78 -48 85 -77 88 -28 3 -33 0 -34 -20
0 -13 -2 -34 -3 -48 -1 -14 -3 -44 -4 -67 l-2 -43 -59 0 c-42 0 -60 4 -64 14
-11 29 -8 476 4 497 10 20 18 21 147 17 109 -3 145 -7 175 -22z m552 -26 l0
-45 -75 -5 -75 -5 -3 -212 -2 -213 -65 0 -65 0 -2 213 -3 212 -75 5 c-69 5
-75 7 -78 29 -2 12 -1 34 2 47 l6 24 218 -2 217 -3 0 -45z m414 36 c7 -8 11
-30 9 -48 l-3 -33 -115 -5 -115 -5 0 -50 0 -50 95 -5 95 -5 0 -45 0 -45 -95
-5 -95 -5 -3 -57 -3 -58 48 -1 c26 0 71 0 100 1 63 2 93 -13 93 -45 0 -56 2
-55 -191 -55 l-179 0 0 258 c0 142 3 262 7 265 3 4 82 7 173 7 133 0 170 -3
179 -14z m599 5 c8 -5 12 -23 10 -47 l-3 -39 -115 -5 -115 -5 0 -50 0 -50 95
-5 95 -5 0 -45 0 -45 -95 -5 -95 -5 -3 -57 -3 -58 93 -1 c51 -1 98 -2 103 -4
6 -1 15 -3 22 -3 7 -1 15 -18 19 -37 3 -19 9 -35 13 -35 4 0 38 54 76 121 l68
121 -21 41 c-25 49 -77 142 -99 175 -26 41 -11 53 59 50 l63 -3 38 -72 c21
-40 44 -73 50 -73 7 0 29 34 50 75 l37 75 60 0 c74 0 81 -11 47 -72 -13 -24
-43 -78 -66 -120 l-42 -77 70 -123 c39 -67 67 -126 62 -131 -4 -4 -37 -7 -71
-5 l-64 3 -36 70 c-20 39 -42 70 -49 70 -7 0 -29 -31 -49 -70 l-37 -70 -259
-3 c-201 -2 -261 0 -268 10 -13 22 -10 492 4 506 14 14 335 17 356 3z m904
-16 c8 -19 8 -31 0 -50 -11 -23 -15 -24 -119 -27 l-108 -3 -5 -35 c-11 -68 -8
-70 96 -70 92 0 94 -1 100 -25 3 -14 3 -36 0 -50 -6 -24 -9 -25 -94 -25 -99 0
-112 -7 -112 -60 0 -56 6 -59 125 -62 l110 -3 3 -47 3 -48 -179 0 c-155 0
-181 2 -186 16 -3 9 -6 122 -6 253 0 171 3 240 12 249 8 8 63 12 180 12 l168
0 12 -25z m678 -178 c5 -194 6 -199 29 -218 30 -24 72 -24 102 0 23 19 24 24
29 218 l5 198 60 0 60 0 3 -193 c2 -173 0 -198 -17 -237 -29 -65 -83 -97 -175
-103 -90 -6 -149 17 -192 74 l-29 37 -3 205 c-3 161 0 207 10 214 7 4 36 7 63
6 l50 -3 5 -198z m785 153 l0 -45 -75 -5 -75 -5 -5 -210 -5 -210 -62 -3 -63
-3 -2 213 -3 213 -75 5 -75 5 -3 39 c-2 24 2 42 10 47 7 5 108 8 223 6 l210
-2 0 -45z m181 38 c10 -16 18 -417 10 -473 l-7 -45 -59 0 c-45 0 -59 4 -64 17
-8 20 -7 462 1 492 5 18 13 21 59 21 30 0 56 -5 60 -12z m201 0 c4 -7 28 -84
53 -171 25 -87 50 -158 55 -158 11 0 20 26 66 201 17 63 35 121 41 128 12 14
124 17 133 3 3 -5 -34 -125 -81 -265 l-86 -256 -73 0 -72 0 -86 256 c-48 141
-84 260 -81 265 8 14 122 11 131 -3z m-5643 -991 c60 -33 108 -112 92 -153 -4
-11 -18 -14 -58 -12 -49 3 -54 6 -69 36 -19 42 -34 52 -82 52 -74 0 -104 -64
-95 -203 6 -86 24 -120 72 -132 46 -11 81 5 106 50 15 28 21 30 71 30 l54 0
-1 -36 c-2 -79 -77 -139 -184 -147 -109 -7 -178 27 -223 112 -19 35 -22 56
-22 156 0 93 4 122 19 150 33 63 76 98 146 121 39 13 130 1 174 -24z m454 18
c67 -20 105 -53 139 -122 23 -49 27 -69 27 -144 0 -77 -3 -94 -30 -145 -40
-79 -93 -115 -180 -122 -85 -6 -141 15 -192 74 -22 24 -45 64 -52 89 -17 60
-9 210 13 252 27 51 86 102 136 118 60 18 77 18 139 0z m1521 -15 c84 -43 125
-125 126 -251 0 -76 -3 -92 -30 -144 -42 -82 -91 -115 -179 -122 -166 -14
-265 102 -254 296 7 121 61 202 154 234 58 20 129 15 183 -13z m2662 -1 c87
-44 136 -150 126 -276 -13 -166 -105 -252 -259 -241 -76 6 -132 44 -173 118
-27 49 -30 64 -30 145 0 103 14 152 58 201 70 81 183 102 278 53z m-5204 4 c7
-16 8 -26 4 -70 -1 -10 -30 -13 -111 -13 -101 0 -110 -2 -121 -21 -6 -12 -8
-36 -4 -55 l6 -34 94 0 c93 0 95 -1 101 -25 3 -14 3 -36 0 -50 -6 -24 -9 -25
-95 -25 -60 0 -92 -4 -99 -13 -14 -16 -13 -95 1 -104 5 -3 50 -5 100 -4 122 2
127 0 127 -55 l0 -44 -182 2 -183 3 -3 254 c-2 197 1 256 10 263 7 4 88 8 180
8 150 0 168 -2 175 -17z m1578 -8 c99 -50 116 -187 31 -264 -14 -14 -26 -29
-26 -35 0 -5 20 -49 45 -97 25 -48 45 -92 45 -99 0 -7 -22 -10 -67 -8 l-68 3
-45 85 c-41 78 -48 85 -75 85 l-30 0 -5 -85 -5 -85 -62 -3 -63 -3 0 259 c0
142 3 262 8 266 4 4 68 6 142 4 110 -2 142 -7 175 -23z m436 14 c70 -15 125
-69 134 -133 20 -132 -40 -192 -210 -213 l-70 -8 -5 -83 c-3 -45 -8 -82 -12
-82 -5 0 -33 0 -63 0 l-55 0 0 258 c0 142 3 262 7 265 11 11 218 8 274 -4z
m1044 -14 c55 -28 85 -76 85 -137 0 -55 -16 -91 -54 -127 -14 -14 -26 -29 -26
-34 0 -6 20 -50 45 -98 25 -48 45 -93 45 -99 0 -7 -23 -10 -67 -8 l-67 3 -45
88 c-43 84 -46 88 -75 85 l-31 -3 -5 -85 -5 -85 -62 -3 -63 -3 0 260 c0 198 3
261 13 265 6 3 71 4 142 3 107 -2 137 -6 170 -22z m433 12 c10 -11 192 -497
192 -511 0 -3 -31 -6 -69 -6 l-68 0 -13 45 c-10 35 -17 45 -34 46 -11 0 -47 2
-78 3 -32 1 -62 0 -68 -4 -5 -3 -16 -24 -23 -45 -14 -40 -14 -40 -72 -43 -32
-2 -63 -1 -70 2 -10 3 3 47 45 158 32 84 75 198 95 253 20 55 42 103 48 107
20 13 104 9 115 -5z m607 -37 l0 -45 -75 -5 -75 -5 -5 -210 -5 -210 -62 -3
-63 -3 0 204 c0 155 -3 207 -13 215 -7 6 -42 12 -77 14 l-65 3 -3 39 c-2 24 2
42 10 47 7 5 108 8 223 6 l210 -2 0 -45z m183 -218 l2 -263 -62 3 -63 3 -3
254 c-2 197 1 256 10 263 7 4 36 7 63 6 l50 -3 3 -263z m200 256 c5 -7 28 -83
51 -168 24 -85 46 -159 51 -164 12 -12 21 14 66 181 20 76 41 144 46 151 12
14 124 17 133 2 3 -5 -33 -123 -80 -261 -47 -139 -85 -254 -85 -256 0 -1 -34
-3 -75 -3 -41 0 -75 1 -75 3 0 2 -38 117 -85 256 -47 139 -83 257 -80 262 9
14 121 11 133 -3z m965 -409 c29 -16 37 -28 37 -60 0 -30 -14 -45 -53 -54 -68
-17 -111 76 -49 109 33 19 38 19 65 5z"/>
<path d="M2622 5038 c-5 -7 -37 -67 -70 -134 -92 -182 -70 -168 -263 -174
-141 -4 -164 -7 -167 -21 -2 -11 34 -47 102 -103 58 -48 108 -97 111 -109 4
-14 -17 -72 -60 -166 -66 -146 -74 -171 -53 -171 6 0 74 41 151 91 100 64 146
89 161 85 12 -3 68 -44 125 -91 100 -82 123 -95 135 -76 4 5 -1 60 -10 123
-27 189 -27 187 -11 211 8 12 67 56 131 97 134 85 158 106 136 120 -8 6 -81
10 -162 10 -173 0 -168 -3 -188 120 -7 41 -16 98 -21 127 -11 57 -30 81 -47
61z"/>
<path d="M3784 4955 c-22 -34 -58 -269 -44 -295 6 -11 26 -22 45 -26 43 -8
283 0 307 10 9 4 21 22 27 39 15 50 43 241 39 268 l-3 24 -177 3 -177 2 -17
-25z"/>
<path d="M6202 5004 c-32 -22 -41 -50 -57 -183 -21 -162 -20 -187 7 -205 33
-23 363 -23 395 -1 28 20 38 58 57 214 15 118 14 127 -2 155 l-18 31 -180 3
c-152 2 -182 0 -202 -14z"/>
<path d="M4025 3294 c-30 -33 -38 -73 -33 -168 5 -113 55 -166 128 -136 54 22
79 104 65 216 -5 44 -14 64 -35 86 -38 38 -91 39 -125 2z"/>
<path d="M9594 3305 c-36 -24 -46 -66 -42 -170 3 -95 4 -97 36 -126 36 -32 60
-36 101 -14 40 20 56 67 55 160 -1 116 -31 165 -101 165 -16 0 -38 -7 -49 -15z"/>
<path d="M1524 3306 c-3 -7 -4 -38 -2 -67 l3 -54 57 -3 c49 -3 58 0 72 20 41
58 0 118 -81 118 -28 0 -46 -5 -49 -14z"/>
<path d="M2072 3213 c-43 -114 -42 -123 11 -123 24 0 46 2 49 5 7 7 -29 126
-41 138 -4 4 -13 -5 -19 -20z"/>
<path d="M3527 3313 c-4 -3 -7 -37 -7 -75 l0 -68 58 0 c70 0 92 18 92 73 0 47
-36 77 -95 77 -23 0 -45 -3 -48 -7z"/>
<path d="M4527 3313 c-6 -10 -9 -49 -8 -94 1 -36 3 -37 42 -41 22 -2 53 2 70
9 26 11 29 17 29 57 0 35 -5 48 -22 60 -23 16 -103 22 -111 9z"/>
<path d="M3711 2312 c-48 -47 -54 -200 -11 -270 36 -59 118 -50 153 18 15 28
17 53 15 127 -4 86 -6 95 -33 123 -38 40 -86 41 -124 2z"/>
<path d="M5197 2320 c-50 -40 -60 -207 -17 -278 34 -56 113 -51 150 10 16 26
20 51 20 115 0 45 -4 93 -9 106 -24 64 -94 86 -144 47z"/>
<path d="M7855 2316 c-30 -30 -38 -74 -33 -177 3 -77 5 -82 36 -110 36 -33 60
-36 102 -14 37 19 54 70 53 165 0 81 -18 131 -52 150 -34 18 -80 12 -106 -14z"/>
<path d="M4207 2333 c-4 -3 -7 -35 -7 -70 l0 -63 59 0 c51 0 62 3 75 22 40 57
0 118 -79 118 -23 0 -45 -3 -48 -7z"/>
<path d="M4692 2331 c-9 -5 -12 -27 -10 -72 l3 -64 44 -3 c63 -5 90 5 102 35
15 40 2 81 -31 98 -32 16 -87 20 -108 6z"/>
<path d="M5687 2333 c-4 -3 -7 -32 -7 -64 0 -69 13 -81 78 -72 108 14 89 143
-21 143 -24 0 -47 -3 -50 -7z"/>
<path d="M6243 2249 c-12 -15 -47 -128 -41 -133 1 -2 20 -6 40 -9 53 -8 59 6
34 87 -17 55 -23 66 -33 55z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,35 @@
import {
StyleSheet,
Text,
TouchableOpacity,
TouchableOpacityProps,
} from "react-native";
type ButtonProps = TouchableOpacityProps & {
label: string;
};
// Componente de botão personalizado
export function Button({ label, ...rest }: ButtonProps) {
return (
<TouchableOpacity style={styles.container} activeOpacity={0.7} {...rest}>
<Text style={styles.label}>{label}</Text>
</TouchableOpacity>
);
}
const styles = StyleSheet.create({
container: {
width: "100%",
height: 48,
backgroundColor: "#a19f9f",
borderRadius: 8,
alignItems: "center",
justifyContent: "center",
},
label: {
color: "#050505",
fontSize: 16,
fontWeight: "600",
},
});

View file

@ -0,0 +1,22 @@
import { StyleSheet, TextInput, TextInputProps } from "react-native";
export function Input({ ...rest }: TextInputProps) {
return (
<TextInput style={styles.input} placeholderTextColor="#7c7c7c" {...rest} />
);
}
// Estilos para o componente Input
const styles = StyleSheet.create({
input: {
width: "100%",
height: 48,
borderWidth: 1,
borderColor: "#2a2a2a",
backgroundColor: "#1a1a1a",
borderRadius: 8,
color: "#e7e7e7",
fontSize: 16,
paddingLeft: 12,
},
});

0
mobile/src/server/api.ts Normal file
View file

10
mobile/tsconfig.json Normal file
View file

@ -0,0 +1,10 @@
{
"extends": "expo/tsconfig.base",
"compilerOptions": {
"strict": true,
"paths": {
"@/*": ["./src/*"]
}
},
"include": ["**/*.ts", "**/*.tsx", ".expo/types/**/*.ts", "expo-env.d.ts"]
}