diff --git a/hotel-management/package.json b/hotel-management/package.json
index 9da29e1..7413ab6 100644
--- a/hotel-management/package.json
+++ b/hotel-management/package.json
@@ -25,6 +25,7 @@
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
+ "react-icons": "^4.11.0",
"react-router-dom": "^6.17.0",
"styled-components": "^6.1.0"
},
diff --git a/hotel-management/pnpm-lock.yaml b/hotel-management/pnpm-lock.yaml
index 59e9bad..5901b2c 100644
--- a/hotel-management/pnpm-lock.yaml
+++ b/hotel-management/pnpm-lock.yaml
@@ -11,6 +11,9 @@ dependencies:
react-dom:
specifier: ^18.2.0
version: 18.2.0(react@18.2.0)
+ react-icons:
+ specifier: ^4.11.0
+ version: 4.11.0(react@18.2.0)
react-router-dom:
specifier: ^6.17.0
version: 6.17.0(react-dom@18.2.0)(react@18.2.0)
@@ -1798,6 +1801,14 @@ packages:
scheduler: 0.23.0
dev: false
+ /react-icons@4.11.0(react@18.2.0):
+ resolution: {integrity: sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==}
+ peerDependencies:
+ react: '*'
+ dependencies:
+ react: 18.2.0
+ dev: false
+
/react-refresh@0.14.0:
resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
engines: {node: '>=0.10.0'}
diff --git a/hotel-management/src/App.css b/hotel-management/src/App.css
deleted file mode 100644
index b9d355d..0000000
--- a/hotel-management/src/App.css
+++ /dev/null
@@ -1,42 +0,0 @@
-#root {
- max-width: 1280px;
- margin: 0 auto;
- padding: 2rem;
- text-align: center;
-}
-
-.logo {
- height: 6em;
- padding: 1.5em;
- will-change: filter;
- transition: filter 300ms;
-}
-.logo:hover {
- filter: drop-shadow(0 0 2em #646cffaa);
-}
-.logo.react:hover {
- filter: drop-shadow(0 0 2em #61dafbaa);
-}
-
-@keyframes logo-spin {
- from {
- transform: rotate(0deg);
- }
- to {
- transform: rotate(360deg);
- }
-}
-
-@media (prefers-reduced-motion: no-preference) {
- a:nth-of-type(2) .logo {
- animation: logo-spin infinite 20s linear;
- }
-}
-
-.card {
- padding: 2em;
-}
-
-.read-the-docs {
- color: #888;
-}
diff --git a/hotel-management/src/App.tsx b/hotel-management/src/App.tsx
index 7025ee4..5bfd75d 100644
--- a/hotel-management/src/App.tsx
+++ b/hotel-management/src/App.tsx
@@ -1,33 +1,9 @@
-import { useState } from 'react';
-import reactLogo from './assets/react.svg';
-import viteLogo from '/vite.svg';
-import './App.css';
+import Header from './ui/Header';
function App() {
- const [count, setCount] = useState(0);
-
return (
<>
-
- Vite + React
-
-
-
- Edit src/App.tsx and save to test HMR
-
-
-
- Click on the Vite and React logos to learn more
-
+
>
);
}
diff --git a/hotel-management/src/index.css b/hotel-management/src/index.css
deleted file mode 100644
index 2c3fac6..0000000
--- a/hotel-management/src/index.css
+++ /dev/null
@@ -1,69 +0,0 @@
-:root {
- font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
- line-height: 1.5;
- font-weight: 400;
-
- color-scheme: light dark;
- color: rgba(255, 255, 255, 0.87);
- background-color: #242424;
-
- font-synthesis: none;
- text-rendering: optimizeLegibility;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- -webkit-text-size-adjust: 100%;
-}
-
-a {
- font-weight: 500;
- color: #646cff;
- text-decoration: inherit;
-}
-a:hover {
- color: #535bf2;
-}
-
-body {
- margin: 0;
- display: flex;
- place-items: center;
- min-width: 320px;
- min-height: 100vh;
-}
-
-h1 {
- font-size: 3.2em;
- line-height: 1.1;
-}
-
-button {
- border-radius: 8px;
- border: 1px solid transparent;
- padding: 0.6em 1.2em;
- font-size: 1em;
- font-weight: 500;
- font-family: inherit;
- background-color: #1a1a1a;
- cursor: pointer;
- transition: border-color 0.25s;
-}
-button:hover {
- border-color: #646cff;
-}
-button:focus,
-button:focus-visible {
- outline: 4px auto -webkit-focus-ring-color;
-}
-
-@media (prefers-color-scheme: light) {
- :root {
- color: #213547;
- background-color: #ffffff;
- }
- a:hover {
- color: #747bff;
- }
- button {
- background-color: #f9f9f9;
- }
-}
diff --git a/hotel-management/src/main.tsx b/hotel-management/src/main.tsx
index 9bb419d..99da247 100644
--- a/hotel-management/src/main.tsx
+++ b/hotel-management/src/main.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App.tsx';
-import './index.css';
+import './styles/index.css';
ReactDOM.createRoot(document.getElementById('root')!).render(
diff --git a/hotel-management/src/styles/abstracts/variables.css b/hotel-management/src/styles/abstracts/variables.css
new file mode 100644
index 0000000..9dea583
--- /dev/null
+++ b/hotel-management/src/styles/abstracts/variables.css
@@ -0,0 +1,4 @@
+:root {
+ --border-color: #8c8c8c;
+ --radius-sm: 10px;
+}
diff --git a/hotel-management/src/styles/bases/common.css b/hotel-management/src/styles/bases/common.css
new file mode 100644
index 0000000..1e8e0fd
--- /dev/null
+++ b/hotel-management/src/styles/bases/common.css
@@ -0,0 +1,5 @@
+button:has(svg) {
+ line-height: 0;
+
+ cursor: pointer;
+}
diff --git a/hotel-management/src/styles/bases/reset.css b/hotel-management/src/styles/bases/reset.css
new file mode 100644
index 0000000..a296281
--- /dev/null
+++ b/hotel-management/src/styles/bases/reset.css
@@ -0,0 +1,128 @@
+/* http://meyerweb.com/eric/tools/css/reset/
+ v2.0 | 20110126
+ License: none (public domain)
+*/
+
+html,
+body,
+div,
+span,
+applet,
+object,
+iframe,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p,
+blockquote,
+pre,
+a,
+abbr,
+acronym,
+address,
+big,
+cite,
+code,
+del,
+dfn,
+em,
+img,
+ins,
+kbd,
+q,
+s,
+samp,
+small,
+strike,
+strong,
+sub,
+sup,
+tt,
+var,
+b,
+u,
+i,
+center,
+dl,
+dt,
+dd,
+ol,
+ul,
+li,
+fieldset,
+form,
+label,
+legend,
+table,
+caption,
+tbody,
+tfoot,
+thead,
+tr,
+th,
+td,
+article,
+aside,
+canvas,
+details,
+embed,
+figure,
+figcaption,
+footer,
+header,
+hgroup,
+menu,
+nav,
+output,
+ruby,
+section,
+summary,
+time,
+mark,
+audio,
+video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ vertical-align: baseline;
+}
+/* HTML5 display-role reset for older browsers */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+ display: block;
+}
+body {
+ line-height: 1;
+}
+ol,
+ul {
+ list-style: none;
+}
+blockquote,
+q {
+ quotes: none;
+}
+blockquote:before,
+blockquote:after,
+q:before,
+q:after {
+ content: '';
+ content: none;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
diff --git a/hotel-management/src/styles/bases/typography.css b/hotel-management/src/styles/bases/typography.css
new file mode 100644
index 0000000..75bd0b6
--- /dev/null
+++ b/hotel-management/src/styles/bases/typography.css
@@ -0,0 +1,39 @@
+@font-face {
+ font-family: 'Poppins';
+ src: url('../../assets/fonts/Poppins-Regular.woff2') format('woff2'),
+ url('../../assets/fonts/Poppins-Regular.ttf') format('truetype');
+ font-weight: 400;
+
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Poppins';
+ src: url('../../assets/fonts/Poppins-Medium.woff2') format('woff2'),
+ url('../../assets/fonts/Poppins-Medium.ttf') format('truetype');
+ font-weight: 500;
+
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Poppins';
+ src: url('../../assets/fonts/Poppins-SemiBold.woff2') format('woff2'),
+ url('../../assets/fonts/Poppins-SemiBold.ttf') format('truetype');
+ font-weight: 600;
+
+ font-display: swap;
+}
+
+@font-face {
+ font-family: 'Poppins';
+ src: url('../../assets/fonts/Poppins-Bold.woff2') format('woff2'),
+ url('../../assets/fonts/Poppins-Bold.ttf') format('truetype');
+ font-weight: 700;
+
+ font-display: swap;
+}
+
+* {
+ font-family: 'Poppins', Times, serif;
+}
diff --git a/hotel-management/src/styles/index.css b/hotel-management/src/styles/index.css
new file mode 100644
index 0000000..4fadfc2
--- /dev/null
+++ b/hotel-management/src/styles/index.css
@@ -0,0 +1,5 @@
+/* Base */
+@import url(./abstracts/variables.css);
+@import url(./bases/common.css);
+@import url(./bases/typography.css);
+@import url(./bases/reset.css);
diff --git a/hotel-management/src/ui/ButtonIcon.tsx b/hotel-management/src/ui/ButtonIcon.tsx
new file mode 100644
index 0000000..33912ce
--- /dev/null
+++ b/hotel-management/src/ui/ButtonIcon.tsx
@@ -0,0 +1,20 @@
+import styled from 'styled-components';
+
+const ButtonIcon = styled.button`
+ background: none;
+ border: none;
+ padding: 8px;
+ transition: all 0.2s;
+ border-radius: var(--radius-sm);
+
+ &:hover {
+ background-color: #f3f4f6;
+ }
+
+ & svg {
+ width: 25px;
+ height: 25px;
+ }
+`;
+
+export default ButtonIcon;
diff --git a/hotel-management/src/ui/Header.tsx b/hotel-management/src/ui/Header.tsx
new file mode 100644
index 0000000..271827c
--- /dev/null
+++ b/hotel-management/src/ui/Header.tsx
@@ -0,0 +1,23 @@
+import styled from 'styled-components';
+import HeaderMenu from './HeaderMenu';
+
+const StyledHeader = styled.header`
+ border-bottom: 1px solid var(--border-color);
+ padding: 20px 40px;
+
+ display: flex;
+ justify-content: flex-end;
+ align-items: center;
+ gap: 30px;
+`;
+
+const Header = () => {
+ return (
+
+ Hi, Admin!
+
+
+ );
+};
+
+export default Header;
diff --git a/hotel-management/src/ui/HeaderMenu.tsx b/hotel-management/src/ui/HeaderMenu.tsx
new file mode 100644
index 0000000..d9615ba
--- /dev/null
+++ b/hotel-management/src/ui/HeaderMenu.tsx
@@ -0,0 +1,24 @@
+import styled from 'styled-components';
+import ButtonIcon from './ButtonIcon';
+import { IoPersonCircleOutline } from 'react-icons/io5';
+import { HiOutlineLogout } from 'react-icons/hi';
+
+const StyledHeaderMenu = styled.ul`
+ display: flex;
+ gap: 10px;
+`;
+
+const HeaderMenu = () => {
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+
+export default HeaderMenu;