diff --git a/id.saladeaula.digital/client/app/app.css b/id.saladeaula.digital/client/app/app.css index 6558c20..7fde78f 100644 --- a/id.saladeaula.digital/client/app/app.css +++ b/id.saladeaula.digital/client/app/app.css @@ -57,70 +57,71 @@ body { :root { --radius: 0.65rem; --background: oklch(1 0 0); - --foreground: oklch(0.141 0.005 285.823); + --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); - --card-foreground: oklch(0.141 0.005 285.823); + --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); - --popover-foreground: oklch(0.141 0.005 285.823); - --primary: oklch(0.723 0.219 149.579); - --primary-foreground: oklch(0.982 0.018 155.826); - --secondary: oklch(0.967 0.001 286.375); - --secondary-foreground: oklch(0.21 0.006 285.885); - --muted: oklch(0.967 0.001 286.375); - --muted-foreground: oklch(0.552 0.016 285.938); - --accent: oklch(0.967 0.001 286.375); - --accent-foreground: oklch(0.21 0.006 285.885); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); --destructive: oklch(0.577 0.245 27.325); - --border: oklch(0.92 0.004 286.32); - --input: oklch(0.92 0.004 286.32); - --ring: oklch(0.723 0.219 149.579); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); --chart-1: oklch(0.646 0.222 41.116); --chart-2: oklch(0.6 0.118 184.704); --chart-3: oklch(0.398 0.07 227.392); --chart-4: oklch(0.828 0.189 84.429); --chart-5: oklch(0.769 0.188 70.08); + --radius: 0.625rem; --sidebar: oklch(0.985 0 0); - --sidebar-foreground: oklch(0.141 0.005 285.823); - --sidebar-primary: oklch(0.723 0.219 149.579); - --sidebar-primary-foreground: oklch(0.982 0.018 155.826); - --sidebar-accent: oklch(0.967 0.001 286.375); - --sidebar-accent-foreground: oklch(0.21 0.006 285.885); - --sidebar-border: oklch(0.92 0.004 286.32); - --sidebar-ring: oklch(0.723 0.219 149.579); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); } .dark { - --background: oklch(0.141 0.005 285.823); + --background: oklch(0 0 0); --foreground: oklch(0.985 0 0); - --card: oklch(0.21 0.006 285.885); + --card: oklch(0.205 0 0); --card-foreground: oklch(0.985 0 0); - --popover: oklch(0.21 0.006 285.885); + --popover: oklch(0.205 0 0); --popover-foreground: oklch(0.985 0 0); - --primary: oklch(0.696 0.17 162.48); - --primary-foreground: oklch(0.393 0.095 152.535); - --secondary: oklch(0.274 0.006 286.033); + --primary: oklch(0.922 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); --secondary-foreground: oklch(0.985 0 0); - --muted: oklch(0.274 0.006 286.033); - --muted-foreground: oklch(0.705 0.015 286.067); - --accent: oklch(0.274 0.006 286.033); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); --accent-foreground: oklch(0.985 0 0); --destructive: oklch(0.704 0.191 22.216); --border: oklch(1 0 0 / 10%); --input: oklch(1 0 0 / 15%); - --ring: oklch(0.527 0.154 150.069); + --ring: oklch(0.556 0 0); --chart-1: oklch(0.488 0.243 264.376); --chart-2: oklch(0.696 0.17 162.48); --chart-3: oklch(0.769 0.188 70.08); --chart-4: oklch(0.627 0.265 303.9); --chart-5: oklch(0.645 0.246 16.439); - --sidebar: oklch(0.21 0.006 285.885); + --sidebar: oklch(0.205 0 0); --sidebar-foreground: oklch(0.985 0 0); - --sidebar-primary: oklch(0.696 0.17 162.48); - --sidebar-primary-foreground: oklch(0.393 0.095 152.535); - --sidebar-accent: oklch(0.274 0.006 286.033); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(1 0 0 / 10%); - --sidebar-ring: oklch(0.527 0.154 150.069); + --sidebar-ring: oklch(0.556 0 0); } @layer base { diff --git a/id.saladeaula.digital/client/app/components/ui/button.tsx b/id.saladeaula.digital/client/app/components/ui/button.tsx new file mode 100644 index 0000000..a2df8dc --- /dev/null +++ b/id.saladeaula.digital/client/app/components/ui/button.tsx @@ -0,0 +1,59 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", + destructive: + "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + outline: + "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", + secondary: + "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80", + ghost: + "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2 has-[>svg]:px-3", + sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", + lg: "h-10 rounded-md px-6 has-[>svg]:px-4", + icon: "size-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +function Button({ + className, + variant, + size, + asChild = false, + ...props +}: React.ComponentProps<"button"> & + VariantProps & { + asChild?: boolean + }) { + const Comp = asChild ? Slot : "button" + + return ( + + ) +} + +export { Button, buttonVariants } diff --git a/id.saladeaula.digital/client/app/components/ui/input.tsx b/id.saladeaula.digital/client/app/components/ui/input.tsx new file mode 100644 index 0000000..03295ca --- /dev/null +++ b/id.saladeaula.digital/client/app/components/ui/input.tsx @@ -0,0 +1,21 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +function Input({ className, type, ...props }: React.ComponentProps<"input">) { + return ( + + ) +} + +export { Input } diff --git a/id.saladeaula.digital/client/app/components/ui/label.tsx b/id.saladeaula.digital/client/app/components/ui/label.tsx new file mode 100644 index 0000000..ef7133a --- /dev/null +++ b/id.saladeaula.digital/client/app/components/ui/label.tsx @@ -0,0 +1,22 @@ +import * as React from "react" +import * as LabelPrimitive from "@radix-ui/react-label" + +import { cn } from "@/lib/utils" + +function Label({ + className, + ...props +}: React.ComponentProps) { + return ( + + ) +} + +export { Label } diff --git a/id.saladeaula.digital/client/app/root.tsx b/id.saladeaula.digital/client/app/root.tsx index 7c8cdb1..09aa930 100644 --- a/id.saladeaula.digital/client/app/root.tsx +++ b/id.saladeaula.digital/client/app/root.tsx @@ -16,6 +16,7 @@ export function Layout({ children }: { children: React.ReactNode }) { + @@ -34,14 +35,14 @@ export default function App() { export function ErrorBoundary({ error }: Route.ErrorBoundaryProps) { let message = 'Oops!' - let details = 'An unexpected error occurred.' + let details = 'Ocorreu um erro inesperado.' let stack: string | undefined if (isRouteErrorResponse(error)) { - message = error.status === 404 ? '404' : 'Error' + message = error.status === 404 ? '404' : 'Erro' details = error.status === 404 - ? 'The requested page could not be found.' + ? 'A página solicitada não foi encontrada.' : error.statusText || details } else if (import.meta.env.DEV && error && error instanceof Error) { details = error.message diff --git a/id.saladeaula.digital/client/app/routes/home.tsx b/id.saladeaula.digital/client/app/routes/home.tsx index 598548d..dc1fb8e 100644 --- a/id.saladeaula.digital/client/app/routes/home.tsx +++ b/id.saladeaula.digital/client/app/routes/home.tsx @@ -1,5 +1,26 @@ import type { Route } from './+types/home' +import { isValidCPF } from '@brazilian-utils/brazilian-utils' +import { zodResolver } from '@hookform/resolvers/zod' +import { useForm } from 'react-hook-form' +import { z } from 'zod' + +import { Button } from '@/components/ui/button' +import { Input } from '@/components/ui/input' +import { Label } from '@/components/ui/label' + +import logo from './logo.svg' + +const cpf = z.string().refine(isValidCPF, { message: 'CPF inválido' }) +const email = z.string().email({ message: 'Email inválido' }) + +const schema = z.object({ + username: z.union([cpf, email]), + password: z.string() +}) + +type Schema = z.infer + export function meta({}: Route.MetaArgs) { return [ { title: 'EDUSEG®' }, @@ -12,9 +33,69 @@ export function loader({ context }: Route.LoaderArgs) { } export default function Home({ loaderData }: Route.ComponentProps) { + const { register, handleSubmit } = useForm({ + resolver: zodResolver(schema) + }) + + const onSubmit = (data: Schema) => { + console.log(data) + } + return ( <> -
...
+
+
+
+ React Router +
+
+ +
+
+
+

+ Faça login +

+

+ Não tem uma conta?{' '} + + Cadastre-se + + . +

+
+ +
+ + +
+ +
+ + +
+ +
+
+ +

+ Ao fazer login, você concorda com nossa{' '} + + política de privacidade + + . +

+
) } diff --git a/id.saladeaula.digital/client/app/routes/layout.tsx b/id.saladeaula.digital/client/app/routes/layout.tsx index 386dae8..16c05f5 100644 --- a/id.saladeaula.digital/client/app/routes/layout.tsx +++ b/id.saladeaula.digital/client/app/routes/layout.tsx @@ -1,9 +1,20 @@ +import { ChevronLeftIcon } from 'lucide-react' import { Outlet } from 'react-router' export default function Layout() { return ( -
-
+ - -
- -
) } diff --git a/id.saladeaula.digital/client/app/routes/logo.svg b/id.saladeaula.digital/client/app/routes/logo.svg new file mode 100644 index 0000000..cc7eb71 --- /dev/null +++ b/id.saladeaula.digital/client/app/routes/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/id.saladeaula.digital/client/package-lock.json b/id.saladeaula.digital/client/package-lock.json index 19b661c..f259cfd 100644 --- a/id.saladeaula.digital/client/package-lock.json +++ b/id.saladeaula.digital/client/package-lock.json @@ -7,14 +7,20 @@ "name": "client", "hasInstallScript": true, "dependencies": { + "@brazilian-utils/brazilian-utils": "^1.0.0-rc.12", + "@hookform/resolvers": "^5.2.1", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-slot": "^1.2.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "isbot": "^5.1.27", "lucide-react": "^0.539.0", "react": "^19.1.0", "react-dom": "^19.1.0", + "react-hook-form": "^7.62.0", "react-router": "^7.7.1", - "tailwind-merge": "^3.3.1" + "tailwind-merge": "^3.3.1", + "zod": "^4.0.17" }, "devDependencies": { "@cloudflare/vite-plugin": "^1.0.12", @@ -540,6 +546,11 @@ "node": ">=6.9.0" } }, + "node_modules/@brazilian-utils/brazilian-utils": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/@brazilian-utils/brazilian-utils/-/brazilian-utils-1.0.0-rc.12.tgz", + "integrity": "sha512-gR5TbSKTgFgDe0/ZghgwqCEryLbHjwdEpvr3ao/Z0f8zRu6LD3lif0HJ3eQiC3pJSwtUPyA+97vm1IEqZkYSTA==" + }, "node_modules/@cloudflare/kv-asset-handler": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.0.tgz", @@ -1154,6 +1165,18 @@ "node": ">=18" } }, + "node_modules/@hookform/resolvers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-5.2.1.tgz", + "integrity": "sha512-u0+6X58gkjMcxur1wRWokA7XsiiBJ6aK17aPZxhkoYiK5J+HcTx0Vhu9ovXe6H+dVpO6cjrn2FkJTryXEMlryQ==", + "license": "MIT", + "dependencies": { + "@standard-schema/utils": "^0.3.0" + }, + "peerDependencies": { + "react-hook-form": "^7.55.0" + } + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", @@ -1713,6 +1736,85 @@ "dev": true, "license": "MIT" }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz", + "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@react-router/dev": { "version": "7.8.0", "resolved": "https://registry.npmjs.org/@react-router/dev/-/dev-7.8.0.tgz", @@ -2156,6 +2258,12 @@ "dev": true, "license": "CC0-1.0" }, + "node_modules/@standard-schema/utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz", + "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==", + "license": "MIT" + }, "node_modules/@tailwindcss/node": { "version": "4.1.11", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz", @@ -2499,7 +2607,7 @@ "version": "19.1.9", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.1.9.tgz", "integrity": "sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "csstype": "^3.0.2" @@ -2509,7 +2617,7 @@ "version": "19.1.7", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.7.tgz", "integrity": "sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==", - "dev": true, + "devOptional": true, "license": "MIT", "peerDependencies": { "@types/react": "^19.0.0" @@ -2884,7 +2992,7 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/debug": { @@ -3686,6 +3794,16 @@ "node": ">=18.0.0" } }, + "node_modules/miniflare/node_modules/zod": { + "version": "3.22.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", + "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -4036,6 +4154,22 @@ "react": "^19.1.1" } }, + "node_modules/react-hook-form": { + "version": "7.62.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.62.0.tgz", + "integrity": "sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, "node_modules/react-refresh": { "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", @@ -5504,10 +5638,9 @@ "license": "MIT" }, "node_modules/zod": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.3.tgz", - "integrity": "sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==", - "dev": true, + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.0.17.tgz", + "integrity": "sha512-1PHjlYRevNxxdy2JZ8JcNAw7rX8V9P1AKkP+x/xZfxB0K5FYfuV+Ug6P/6NVSR2jHQ+FzDDoDHS04nYUsOIyLQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" diff --git a/id.saladeaula.digital/client/package.json b/id.saladeaula.digital/client/package.json index 84d01b5..6981707 100644 --- a/id.saladeaula.digital/client/package.json +++ b/id.saladeaula.digital/client/package.json @@ -12,14 +12,20 @@ "typecheck": "npm run cf-typegen && react-router typegen && tsc -b" }, "dependencies": { + "@brazilian-utils/brazilian-utils": "^1.0.0-rc.12", + "@hookform/resolvers": "^5.2.1", + "@radix-ui/react-label": "^2.1.7", + "@radix-ui/react-slot": "^1.2.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "isbot": "^5.1.27", "lucide-react": "^0.539.0", "react": "^19.1.0", "react-dom": "^19.1.0", + "react-hook-form": "^7.62.0", "react-router": "^7.7.1", - "tailwind-merge": "^3.3.1" + "tailwind-merge": "^3.3.1", + "zod": "^4.0.17" }, "devDependencies": { "@cloudflare/vite-plugin": "^1.0.12", diff --git a/id.saladeaula.digital/client/public/favicon.ico b/id.saladeaula.digital/client/public/favicon.ico deleted file mode 100644 index 5dbdfcd..0000000 Binary files a/id.saladeaula.digital/client/public/favicon.ico and /dev/null differ diff --git a/id.saladeaula.digital/client/public/favicon.svg b/id.saladeaula.digital/client/public/favicon.svg new file mode 100644 index 0000000..079885f --- /dev/null +++ b/id.saladeaula.digital/client/public/favicon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/id.saladeaula.digital/client/tsconfig.cloudflare.json b/id.saladeaula.digital/client/tsconfig.cloudflare.json index 5ddedb4..75b5724 100644 --- a/id.saladeaula.digital/client/tsconfig.cloudflare.json +++ b/id.saladeaula.digital/client/tsconfig.cloudflare.json @@ -20,7 +20,7 @@ "baseUrl": ".", "rootDirs": [".", "./.react-router/types"], "paths": { - "~/*": ["./app/*"] + "@/*": ["./app/*"] }, "esModuleInterop": true, "resolveJsonModule": true