diff --git a/.env b/.env new file mode 100644 index 0000000..13267a3 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +VITE_PUBLIC_API_URL=https://graff.estate/api \ No newline at end of file diff --git a/package.json b/package.json index 8e234e9..343fe01 100644 --- a/package.json +++ b/package.json @@ -11,15 +11,19 @@ }, "dependencies": { "framer-motion": "^11.3.31", + "ky": "^1.7.1", "react": "^18.3.1", "react-dom": "^18.3.1", + "react-input-mask": "^2.0.4", "react-router-dom": "^6.26.1", + "react-swipeable": "^7.0.1", "usehooks-ts": "^3.1.0" }, "devDependencies": { "@eslint/js": "^9.9.0", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", + "@types/react-input-mask": "^3.0.5", "@vitejs/plugin-react": "^4.3.1", "autoprefixer": "^10.4.20", "eslint": "^9.9.0", diff --git a/src/Layout/Footer.tsx b/src/Layout/Footer.tsx index 5364b3b..4629e34 100644 --- a/src/Layout/Footer.tsx +++ b/src/Layout/Footer.tsx @@ -1,3 +1,66 @@ +import { Logo } from '../components/icons/Logo'; +import { Link } from 'react-router-dom'; + export function Footer() { - return ; + return ( + + ); +} + +function Contact({ + text, + className = '', + type, +}: { + className?: string; + text: string; + type: 'email' | 'phone'; +}) { + return ( +
+ + {text} + +
+ ); } diff --git a/src/Layout/Header.tsx b/src/Layout/Header.tsx index 4ed9de8..4267ea0 100644 --- a/src/Layout/Header.tsx +++ b/src/Layout/Header.tsx @@ -19,7 +19,7 @@ export function Header() { ))} - @@ -29,7 +29,7 @@ export function Header() { function HashLink({ path, text }: { path: string; text: string }) { return ( {text} diff --git a/src/Layout/index.tsx b/src/Layout/index.tsx index 3d5b066..1d7da1f 100644 --- a/src/Layout/index.tsx +++ b/src/Layout/index.tsx @@ -1,6 +1,7 @@ import { Outlet } from 'react-router-dom'; import { Footer } from './Footer'; import { Header } from './Header'; +import { Feedback } from '../components/Feedback'; export function Layout() { return ( @@ -9,6 +10,7 @@ export function Layout() {
+