From c44ddd6e13fa10bc5a1a497037aeaabb567993a2 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 18:04:00 +0330 Subject: [PATCH 01/13] [Add] prettier --- .prettierrc.json | 1 + package-lock.json | 16 ++++++++++++ package.json | 12 +++++---- src/app/about/page.tsx | 6 ++--- src/app/layout.tsx | 12 ++++----- src/app/page.tsx | 58 +++++++++++++++++++++--------------------- 6 files changed, 60 insertions(+), 45 deletions(-) create mode 100644 .prettierrc.json diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1 @@ +{} diff --git a/package-lock.json b/package-lock.json index 2110291..c8b7ae4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.20", + "prettier": "^3.4.2", "typescript": "^5" } }, @@ -3341,6 +3342,21 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", diff --git a/package.json b/package.json index 2fb8b93..275e11b 100644 --- a/package.json +++ b/package.json @@ -6,19 +6,21 @@ "dev": "next dev", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "prettier": "prettier . --write" }, "dependencies": { + "next": "14.2.20", "react": "^18", - "react-dom": "^18", - "next": "14.2.20" + "react-dom": "^18" }, "devDependencies": { - "typescript": "^5", "@types/node": "^20", "@types/react": "^18", "@types/react-dom": "^18", "eslint": "^8", - "eslint-config-next": "14.2.20" + "eslint-config-next": "14.2.20", + "prettier": "^3.4.2", + "typescript": "^5" } } diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index a0204d7..c06985d 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -1,7 +1,5 @@ const Page = () => { - return ( -
About Page
- ) -} + return
About Page
; +}; export default Page; diff --git a/src/app/layout.tsx b/src/app/layout.tsx index b0cafe0..dfb6391 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,11 +1,11 @@ import type { Metadata } from "next"; -import { Vazirmatn } from 'next/font/google' +import { Vazirmatn } from "next/font/google"; import "./globals.css"; const vazirmatn = Vazirmatn({ - subsets: ['latin','arabic'], - display: 'swap', -}) + subsets: ["latin", "arabic"], + display: "swap", +}); export const metadata: Metadata = { title: "دکتر من", @@ -19,9 +19,7 @@ export default function RootLayout({ }>) { return ( - - {children} - + {children} ); } diff --git a/src/app/page.tsx b/src/app/page.tsx index 5896916..2c6ef27 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,35 +1,35 @@ type Post = { - id: number; - title: string; -} + id: number; + title: string; +}; export default async function Home() { - const res = await fetch("https://jsonplaceholder.org/posts", { - cache: "no-store" - }); + const res = await fetch("https://jsonplaceholder.org/posts", { + cache: "no-store", + }); - const posts: Post[] = await res.json(); + const posts: Post[] = await res.json(); - return ( -
-

به سامانه نوبت‌دهی دکترمن خوش آمدید.

-

- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده از طراحان گرافیک است. چاپگرها و - متون بلکه روزنامه - و مجله در ستون و سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای متنوع با هدف - بهبود ابزارهای کاربردی می باشد. - کتابهای زیادی در شصت و سه درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد - تا با نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان خلاقی و فرهنگ پیشرو در زبان - فارسی ایجاد کرد. - در این صورت می توان امید داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان رسد - وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات پیوسته اهل دنیای موجود طراحی اساسا مورد - استفاده قرار گیرد. -

- -
- ); + return ( +
+

به سامانه نوبت‌دهی دکترمن خوش آمدید.

+

+ لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده + از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و + سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای + متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه + درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با + نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان + خلاقی و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید + داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان + رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات + پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد. +

+ +
+ ); } From adff1111a437d2c2d682d905f1f1f5a9e88d0f13 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 18:37:06 +0330 Subject: [PATCH 02/13] [CI/CD][ADD] lint.yml --- .github/workflows/lint.yml | 25 +++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/lint.yml diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..c530a17 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,25 @@ +name: Lint +on: + push: + branches: ["main"] + pull_request: + workflow_dispatch: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4.2.1 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Install Dependencies + run: npm i + + - name: Prettier + run: npm run prettier:check + + - name: Lint + run: npm run lint diff --git a/package.json b/package.json index 275e11b..ccebbc7 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "build": "next build", "start": "next start", "lint": "next lint", - "prettier": "prettier . --write" + "prettier:check": "prettier . --check", + "prettier:fix": "prettier . --write" }, "dependencies": { "next": "14.2.20", From 6420ea941f937ce94ff527428f4f2d1a59071ac6 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 18:49:14 +0330 Subject: [PATCH 03/13] [ADD] postcss nesting --- package-lock.json | 144 ++++++++++++++++++++++++++++++++++++++++++-- package.json | 2 + postcss.config.json | 3 + 3 files changed, 143 insertions(+), 6 deletions(-) create mode 100644 postcss.config.json diff --git a/package-lock.json b/package-lock.json index c8b7ae4..957890e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,10 +18,56 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.20", + "postcss": "^8.4.49", + "postcss-nesting": "^13.0.1", "prettier": "^3.4.2", "typescript": "^5" } }, + "node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz", + "integrity": "sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", @@ -1081,6 +1127,18 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -3052,6 +3110,33 @@ } } }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -3307,9 +3392,10 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -3325,14 +3411,54 @@ } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-nesting": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz", + "integrity": "sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "dependencies": { + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz", + "integrity": "sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4246,6 +4372,12 @@ "punycode": "^2.1.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index ccebbc7..02c0b15 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,8 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.20", + "postcss": "^8.4.49", + "postcss-nesting": "^13.0.1", "prettier": "^3.4.2", "typescript": "^5" } diff --git a/postcss.config.json b/postcss.config.json new file mode 100644 index 0000000..55620f8 --- /dev/null +++ b/postcss.config.json @@ -0,0 +1,3 @@ +{ + "plugins": ["postcss-nesting"] +} From cabc40a1d7acc191f7116e48ec89f97e6401cce8 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 19:01:06 +0330 Subject: [PATCH 04/13] [ADD] css reset --- src/app/globals.css | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/app/globals.css b/src/app/globals.css index e69de29..57c7862 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -0,0 +1,31 @@ +*, +*::before, +*::after { + box-sizing: border-box; + + margin: 0; + padding: 0; +} + +input, +label, +select, +textarea, +button, +fieldset, +legend, +datalist, +output, +option, +optgroup { + font: inherit; +} + +ul { + list-style: none; +} + +a { + color: inherit; + text-decoration: none; +} From 73c1c6a58a1587cc2e0d5539223eb5eda132f334 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 19:05:55 +0330 Subject: [PATCH 05/13] [ADD] css variables --- src/app/globals.css | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/app/globals.css b/src/app/globals.css index 57c7862..7b12fda 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -1,3 +1,34 @@ +:root { + --color-gray-98: hsl(0deg 0% 98%); + --color-gray-90: hsl(0deg 0% 90%); + --color-gray-80: hsl(0deg 0% 80%); + --color-gray-70: hsl(0deg 0% 70%); + --color-gray-40: hsl(0deg 0% 40%); + --color-gray-30: hsl(0deg 0% 30%); + --color-gray-20: hsl(0deg 0% 20%); + --color-gray-16: hsl(0deg 0% 16%); + --color-gray-12: hsl(0deg 0% 12%); + --color-gray-10: hsl(0deg 0% 10%); + + --color-default-background: var(--color-gray-10); + --color-default-foreground: var(--color-gray-98); + + --color-primary: hsl(120deg 50% 48%); + --color-primary-fade: hsl(120deg 50% 96%); + --color-primary-lighter: hsl(120deg 50% 52%); + --color-primary-darker: hsl(120deg 50% 44%); + --color-primary-opposite: var(--color-gray-10); + + --border-radius: 0.875rem; + + --full-width: 75rem; + --full-width-padding-inline: calc(max(100% - var(--full-width), 2rem) / 2); + + --animation-duration-fast: 0.1s; + --animation-duration-normal: 0.5s; + --animation-duration-slow: 1s; +} + *, *::before, *::after { From ceadab53b4f1f1c40638a83589b5567da9982afc Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 19:10:41 +0330 Subject: [PATCH 06/13] [ADD] dark mode --- src/app/globals.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/app/globals.css b/src/app/globals.css index 7b12fda..59711db 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -38,6 +38,10 @@ padding: 0; } +html { + color-scheme: dark; +} + input, label, select, @@ -60,3 +64,8 @@ a { color: inherit; text-decoration: none; } + +body { + background-color: var(--color-default-background); + color: var(--color-default-foreground); +} From 71702821b27be18e200176b573429238b7337dce Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 19:38:59 +0330 Subject: [PATCH 07/13] [REMOVE] unnecessary code and files --- src/app/about/page.tsx | 5 ----- src/app/page.tsx | 35 ++--------------------------------- 2 files changed, 2 insertions(+), 38 deletions(-) delete mode 100644 src/app/about/page.tsx diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx deleted file mode 100644 index c06985d..0000000 --- a/src/app/about/page.tsx +++ /dev/null @@ -1,5 +0,0 @@ -const Page = () => { - return
About Page
; -}; - -export default Page; diff --git a/src/app/page.tsx b/src/app/page.tsx index 2c6ef27..6c74c44 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,35 +1,4 @@ -type Post = { - id: number; - title: string; -}; +export default function Home() { + return

به سامانه نوبت‌دهی دکترمن خوش آمدید.

-export default async function Home() { - const res = await fetch("https://jsonplaceholder.org/posts", { - cache: "no-store", - }); - - const posts: Post[] = await res.json(); - - return ( -
-

به سامانه نوبت‌دهی دکترمن خوش آمدید.

-

- لورم ایپسوم متن ساختگی با تولید سادگی نامفهوم از صنعت چاپ و با استفاده - از طراحان گرافیک است. چاپگرها و متون بلکه روزنامه و مجله در ستون و - سطرآنچنان که لازم است و برای شرایط فعلی تکنولوژی مورد نیاز و کاربردهای - متنوع با هدف بهبود ابزارهای کاربردی می باشد. کتابهای زیادی در شصت و سه - درصد گذشته، حال و آینده شناخت فراوان جامعه و متخصصان را می طلبد تا با - نرم افزارها شناخت بیشتری را برای طراحان رایانه ای علی الخصوص طراحان - خلاقی و فرهنگ پیشرو در زبان فارسی ایجاد کرد. در این صورت می توان امید - داشت که تمام و دشواری موجود در ارائه راهکارها و شرایط سخت تایپ به پایان - رسد وزمان مورد نیاز شامل حروفچینی دستاوردهای اصلی و جوابگوی سوالات - پیوسته اهل دنیای موجود طراحی اساسا مورد استفاده قرار گیرد. -

-
    - {posts.map((post: Post) => ( -
  • {post.title}
  • - ))} -
-
- ); } From c432cfcd9324af6c0a2e860f9bf1c5b2964d5f58 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 20:43:46 +0330 Subject: [PATCH 08/13] [UPDATE] favicon --- src/app/favicon.ico | Bin 25931 -> 15406 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/app/favicon.ico b/src/app/favicon.ico index 718d6fea4835ec2d246af9800eddb7ffb276240c..3b4d69d4000de8651751d87df15de9d85b937439 100644 GIT binary patch literal 15406 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 LrJugUA?W`A8`#=m From 2f4ee0b3d7507d7b69a6e7824ad30b473ec5c69e Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Sun, 22 Dec 2024 21:59:08 +0330 Subject: [PATCH 09/13] [ADD] footer --- package-lock.json | 9 +++ package.json | 1 + src/app/globals.css | 20 ++++++ src/app/layout.tsx | 13 +++- src/assets/logo/certificate.svg | 11 ++++ src/assets/logo/enamad.svg | 17 +++++ src/assets/logo/idk.svg | 22 +++++++ src/components/footer/footer.component.tsx | 74 ++++++++++++++++++++++ src/components/footer/footer.module.css | 51 +++++++++++++++ src/components/header/header.component.tsx | 39 ++++++++++++ src/components/header/header.module.css | 42 ++++++++++++ src/constant/header/menu.ts | 7 ++ src/icons/MingcuteLinkedinFill.tsx | 8 +++ src/icons/MingcuteTelegramFill.tsx | 8 +++ src/icons/MingcuteYoutubeFill.tsx | 8 +++ 15 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 src/assets/logo/certificate.svg create mode 100644 src/assets/logo/enamad.svg create mode 100644 src/assets/logo/idk.svg create mode 100644 src/components/footer/footer.component.tsx create mode 100644 src/components/footer/footer.module.css create mode 100644 src/components/header/header.component.tsx create mode 100644 src/components/header/header.module.css create mode 100644 src/constant/header/menu.ts create mode 100644 src/icons/MingcuteLinkedinFill.tsx create mode 100644 src/icons/MingcuteTelegramFill.tsx create mode 100644 src/icons/MingcuteYoutubeFill.tsx diff --git a/package-lock.json b/package-lock.json index 957890e..79e0bd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "doctor-man", "version": "0.1.0", "dependencies": { + "clsx": "^2.1.1", "next": "14.2.20", "react": "^18", "react-dom": "^18" @@ -1089,6 +1090,14 @@ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", diff --git a/package.json b/package.json index 02c0b15..5573408 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "prettier:fix": "prettier . --write" }, "dependencies": { + "clsx": "^2.1.1", "next": "14.2.20", "react": "^18", "react-dom": "^18" diff --git a/src/app/globals.css b/src/app/globals.css index 59711db..fdca90f 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -60,6 +60,10 @@ ul { list-style: none; } +p { + color: var(--color-gray-80); +} + a { color: inherit; text-decoration: none; @@ -68,4 +72,20 @@ a { body { background-color: var(--color-default-background); color: var(--color-default-foreground); + + display: grid; + grid-template-rows: auto 1fr auto; + + min-block-size: 100vh; + min-block-size: 100dvh; + + > * { + padding-inline: var(--full-width-padding-inline); + } + + .tagline { + background-color: var(--color-gray-16); + padding-block: 1rem; + text-align: center; + } } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index dfb6391..0b2a0d7 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,5 +1,9 @@ import type { Metadata } from "next"; import { Vazirmatn } from "next/font/google"; + +import HeaderComponent from "@/components/header/header.component"; +import FooterComponent from "@/components/footer/footer.component"; + import "./globals.css"; const vazirmatn = Vazirmatn({ @@ -19,7 +23,14 @@ export default function RootLayout({ }>) { return ( - {children} + + +
{children}
+

+ نوبت دهی پزشکی، سامانه نوبت دهی اینترنتی بیمارستان و پزشکان +

+ + ); } diff --git a/src/assets/logo/certificate.svg b/src/assets/logo/certificate.svg new file mode 100644 index 0000000..0876d71 --- /dev/null +++ b/src/assets/logo/certificate.svg @@ -0,0 +1,11 @@ + +icon + + + + + + diff --git a/src/assets/logo/enamad.svg b/src/assets/logo/enamad.svg new file mode 100644 index 0000000..732c7d3 --- /dev/null +++ b/src/assets/logo/enamad.svg @@ -0,0 +1,17 @@ + + icon + + + + + + + + + diff --git a/src/assets/logo/idk.svg b/src/assets/logo/idk.svg new file mode 100644 index 0000000..f74858d --- /dev/null +++ b/src/assets/logo/idk.svg @@ -0,0 +1,22 @@ + +icon + + + + + + + + + + + diff --git a/src/components/footer/footer.component.tsx b/src/components/footer/footer.component.tsx new file mode 100644 index 0000000..e6c99f3 --- /dev/null +++ b/src/components/footer/footer.component.tsx @@ -0,0 +1,74 @@ +import { ReactElement } from "react"; + +import Image from "next/image"; +import Link from "next/link"; + +import certificateLogo from "@/assets/logo/certificate.svg"; +import enamadLogo from "@/assets/logo/enamad.svg"; +import idkLogo from "@/assets/logo/idk.svg"; + +import MingcuteLinkedinFill from "@/icons/MingcuteLinkedinFill"; +import MingcuteTelegramFill from "@/icons/MingcuteTelegramFill"; +import MingcuteYoutubeFill from "@/icons/MingcuteYoutubeFill"; + +import styles from "./footer.module.css"; + +export default function FooterComponent(): ReactElement { + return ( +
+
+
دکتر من
+

+ تجربه مشاوره آنلاین و دریافت نوبت از بهترین پزشکان و بیمارستان‌های + ایران +

+
+
+
    +
  • + + IDK Logo + +
  • +
  • + + Certificate Logo + +
  • +
  • + + Enamad Logo + +
  • +
+
    +
  • + + + +
  • +
  • + + + +
  • +
  • + + + +
  • +
+
+

+ تمامی حقوق مادی و معنوی این وب‌سایت، خدمات و محتوای مربوط به آن متعلق به + من می‌باشد! +

+
+ ); +} \ No newline at end of file diff --git a/src/components/footer/footer.module.css b/src/components/footer/footer.module.css new file mode 100644 index 0000000..dd67f40 --- /dev/null +++ b/src/components/footer/footer.module.css @@ -0,0 +1,51 @@ +.footer { + background-color: var(--color-gray-12); + + display: grid; + grid-template-areas: "writings visuals" "copy copy"; + column-gap: 1rem; + row-gap: 2rem; + + padding-block: 1rem; + + .writings { + grid-area: writings; + + .logo { + margin-block-end: 0.25rem; + + font-size: 2rem; + font-weight: 700; + } + } + + .visuals { + grid-area: visuals; + + display: grid; + justify-items: center; + gap: 1rem; + + .certificates { + display: flex; + gap: 2rem; + } + + .socials { + display: flex; + gap: 1rem; + + > li { + a { + font-size: 1.5rem; + } + } + } + } + + .copy { + grid-area: copy; + + text-align: center; + } +} diff --git a/src/components/header/header.component.tsx b/src/components/header/header.component.tsx new file mode 100644 index 0000000..7dcf95b --- /dev/null +++ b/src/components/header/header.component.tsx @@ -0,0 +1,39 @@ +"use client"; + +import { ReactElement } from "react"; + +import Link from "next/link"; +import { usePathname } from "next/navigation"; + +import clsx from "clsx"; + +import { menu, menuType } from "@/constant/header/menu"; +import styles from "./header.module.css"; + +export default function HeaderComponent(): ReactElement { + const pathname = usePathname(); + + return ( +
+ + +
+ ); +} \ No newline at end of file diff --git a/src/components/header/header.module.css b/src/components/header/header.module.css new file mode 100644 index 0000000..b0bf77d --- /dev/null +++ b/src/components/header/header.module.css @@ -0,0 +1,42 @@ +.header { + display: flex; + align-items: center; + gap: 2rem; + + padding-block: 1rem; + + nav { + > ul { + display: flex; + gap: 2rem; + + > li { + a { + &.active { + color: var(--color-primary); + } + } + } + } + } + + .cta { + background-color: transparent; + color: var(--color-primary); + + margin-inline-start: auto; + padding: 0.5rem 1rem; + + border: 1px solid currentcolor; + border-radius: var(--border-radius); + + font-weight: 700; + + cursor: pointer; + + &:hover { + background-color: var(--color-primary); + color: var(--color-primary-opposite); + } + } +} diff --git a/src/constant/header/menu.ts b/src/constant/header/menu.ts new file mode 100644 index 0000000..0549479 --- /dev/null +++ b/src/constant/header/menu.ts @@ -0,0 +1,7 @@ +export const menu = [ + { title: "خانه", href: "" }, + { title: "جستجو", href: "search" }, + { title: "پزشکان", href: "doctors" }, +]; + +export type menuType = Record \ No newline at end of file diff --git a/src/icons/MingcuteLinkedinFill.tsx b/src/icons/MingcuteLinkedinFill.tsx new file mode 100644 index 0000000..46d9c74 --- /dev/null +++ b/src/icons/MingcuteLinkedinFill.tsx @@ -0,0 +1,8 @@ +import React, { SVGProps } from 'react' + +export function MingcuteLinkedinFill(props: SVGProps) { + return ( + + ) +} +export default MingcuteLinkedinFill \ No newline at end of file diff --git a/src/icons/MingcuteTelegramFill.tsx b/src/icons/MingcuteTelegramFill.tsx new file mode 100644 index 0000000..007acd8 --- /dev/null +++ b/src/icons/MingcuteTelegramFill.tsx @@ -0,0 +1,8 @@ +import React, { SVGProps } from 'react' + +export function MingcuteTelegramFill(props: SVGProps) { + return ( + + ) +} +export default MingcuteTelegramFill \ No newline at end of file diff --git a/src/icons/MingcuteYoutubeFill.tsx b/src/icons/MingcuteYoutubeFill.tsx new file mode 100644 index 0000000..7495f01 --- /dev/null +++ b/src/icons/MingcuteYoutubeFill.tsx @@ -0,0 +1,8 @@ +import React, { SVGProps } from 'react' + +export function MingcuteYoutubeFill(props: SVGProps) { + return ( + + ) +} +export default MingcuteYoutubeFill \ No newline at end of file From 410927405c03290ac0bd821e145d15c2102f92b5 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Mon, 23 Dec 2024 13:42:20 +0330 Subject: [PATCH 10/13] [UPDATE] home page --- src/app/layout.tsx | 6 +- src/app/page.module.css | 43 +++++++++++ src/app/page.tsx | 28 ++++++- src/assets/logo/logo.svg | 5 ++ src/components/footer/footer.component.tsx | 3 +- .../global-search-box.component.tsx | 27 +++++++ .../global-search-box.module.css | 73 +++++++++++++++++++ src/icons/MingcuteLocationLine.tsx | 22 ++++++ src/icons/MingcuteSearchLine.tsx | 22 ++++++ src/logo/my-doctor.logo.tsx | 19 +++++ 10 files changed, 242 insertions(+), 6 deletions(-) create mode 100644 src/assets/logo/logo.svg create mode 100644 src/components/global-search-box/global-search-box.component.tsx create mode 100644 src/components/global-search-box/global-search-box.module.css create mode 100644 src/icons/MingcuteLocationLine.tsx create mode 100644 src/icons/MingcuteSearchLine.tsx create mode 100644 src/logo/my-doctor.logo.tsx diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 0b2a0d7..c9c45b6 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,8 +1,10 @@ +import { ReactElement } from "react"; + import type { Metadata } from "next"; import { Vazirmatn } from "next/font/google"; -import HeaderComponent from "@/components/header/header.component"; import FooterComponent from "@/components/footer/footer.component"; +import HeaderComponent from "@/components/header/header.component"; import "./globals.css"; @@ -20,7 +22,7 @@ export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; -}>) { +}>): ReactElement { return ( diff --git a/src/app/page.module.css b/src/app/page.module.css index e69de29..33120d4 100644 --- a/src/app/page.module.css +++ b/src/app/page.module.css @@ -0,0 +1,43 @@ +.home { + display: grid; + justify-items: center; + align-content: center; + gap: 2rem; + + min-block-size: 100%; + + h1 { + display: inline-flex; + align-items: center; + gap: 1rem; + + font-size: 2.5rem; + + svg { + font-size: 1.5em; + } + } + + .history { + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 1rem; + + .title { + } + + > ul { + display: flex; + gap: 1rem; + + > li { + background-color: var(--color-gray-20); + + padding: 0.25rem 0.75rem; + + border-radius: 999rem; + } + } + } +} diff --git a/src/app/page.tsx b/src/app/page.tsx index 6c74c44..607563f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,4 +1,26 @@ -export default function Home() { - return

به سامانه نوبت‌دهی دکترمن خوش آمدید.

+import { ReactElement } from "react"; -} +import GlobalSearchBoxComponent from "@/components/global-search-box/global-search-box.component"; + +import MyDoctorLogo from "@/logo/my-doctor.logo"; + +import styles from "./page.module.css"; + +export default function Home(): ReactElement { + return ( +
+

+ + دکتر من +

+ +
+
آخرین جستجوهای شما
+
    +
  • ارتوپد
  • +
  • قلب و عروق
  • +
+
+
+ ); +} \ No newline at end of file diff --git a/src/assets/logo/logo.svg b/src/assets/logo/logo.svg new file mode 100644 index 0000000..02568c6 --- /dev/null +++ b/src/assets/logo/logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/components/footer/footer.component.tsx b/src/components/footer/footer.component.tsx index e6c99f3..bdbafe3 100644 --- a/src/components/footer/footer.component.tsx +++ b/src/components/footer/footer.component.tsx @@ -67,7 +67,8 @@ export default function FooterComponent(): ReactElement {

تمامی حقوق مادی و معنوی این وب‌سایت، خدمات و محتوای مربوط به آن متعلق به - من می‌باشد! +  سامانه دکتر من  + می‌باشد!

); diff --git a/src/components/global-search-box/global-search-box.component.tsx b/src/components/global-search-box/global-search-box.component.tsx new file mode 100644 index 0000000..e94086d --- /dev/null +++ b/src/components/global-search-box/global-search-box.component.tsx @@ -0,0 +1,27 @@ +import { ReactElement } from "react"; + +import MingcuteSearchLine from "@/icons/MingcuteSearchLine"; +import MingcuteLocationLine from "@/icons/MingcuteLocationLine"; + +import styles from "./global-search-box.module.css"; + +export default function GlobalSearchBoxComponent(): ReactElement { + return ( +
+
+ +
+ +
+
+ +
+
+ ); +} \ No newline at end of file diff --git a/src/components/global-search-box/global-search-box.module.css b/src/components/global-search-box/global-search-box.module.css new file mode 100644 index 0000000..dc8b2eb --- /dev/null +++ b/src/components/global-search-box/global-search-box.module.css @@ -0,0 +1,73 @@ +.global-search-box { + display: flex; + align-items: center; + gap: 0.5rem; + + inline-size: min(50rem, 100%); + + padding-inline: 1rem; + + border: 1px solid var(--color-gray-20); + border-radius: 999rem; + + .prefix { + display: grid; + align-items: center; + + font-size: 1.5rem; + } + + input { + flex: 1 1 0; + + background-color: transparent; + + padding: 1rem; + + border: none; + + &:focus { + outline: none; + } + } + + .divider { + background-color: var(--color-gray-20); + + block-size: 2em; + inline-size: 1px; + } + + .suffix { + button { + background-color: transparent; + + display: flex; + align-items: center; + gap: 0.25rem; + + padding: 0.5rem 0.5rem; + + border: none; + border-radius: var(--border-radius); + + cursor: pointer; + + svg { + font-size: 1.5em; + } + + &:hover { + background-color: var(--color-gray-16); + } + } + } + + &:focus-within { + border-color: var(--color-primary); + + .prefix { + color: var(--color-primary); + } + } +} diff --git a/src/icons/MingcuteLocationLine.tsx b/src/icons/MingcuteLocationLine.tsx new file mode 100644 index 0000000..9306631 --- /dev/null +++ b/src/icons/MingcuteLocationLine.tsx @@ -0,0 +1,22 @@ +import { SVGProps } from "react"; + +export function MingcuteLocationLine(props: SVGProps) { + return ( + + + + + + + ); +} +export default MingcuteLocationLine; \ No newline at end of file diff --git a/src/icons/MingcuteSearchLine.tsx b/src/icons/MingcuteSearchLine.tsx new file mode 100644 index 0000000..285d875 --- /dev/null +++ b/src/icons/MingcuteSearchLine.tsx @@ -0,0 +1,22 @@ +import { SVGProps } from "react"; + +export function MingcuteSearchLine(props: SVGProps) { + return ( + + + + + + + ); +} +export default MingcuteSearchLine; \ No newline at end of file diff --git a/src/logo/my-doctor.logo.tsx b/src/logo/my-doctor.logo.tsx new file mode 100644 index 0000000..7dda0c3 --- /dev/null +++ b/src/logo/my-doctor.logo.tsx @@ -0,0 +1,19 @@ +import { SVGProps } from "react"; + +export function MyDoctorLogo(props: SVGProps) { + return ( + + + + + + ); +} +export default MyDoctorLogo; \ No newline at end of file From 2d25a49d74032c6d8702d34b3f8801ce083a1409 Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Mon, 23 Dec 2024 16:13:36 +0330 Subject: [PATCH 11/13] [REFACTOR] Refactor Footer component and extract menu data to constants - Extracted social media links and certificates into separate constant files for better maintainability. - Replaced hardcoded menu items in Footer with dynamic mapping from the constants. - Improved code organization and readability. - Used TypeScript types for better type safety in menu items. --- src/components/footer/footer.component.tsx | 66 ++++++---------------- src/constant/footer/menu.ts | 34 +++++++++++ 2 files changed, 52 insertions(+), 48 deletions(-) create mode 100644 src/constant/footer/menu.ts diff --git a/src/components/footer/footer.component.tsx b/src/components/footer/footer.component.tsx index bdbafe3..e15957c 100644 --- a/src/components/footer/footer.component.tsx +++ b/src/components/footer/footer.component.tsx @@ -3,13 +3,7 @@ import { ReactElement } from "react"; import Image from "next/image"; import Link from "next/link"; -import certificateLogo from "@/assets/logo/certificate.svg"; -import enamadLogo from "@/assets/logo/enamad.svg"; -import idkLogo from "@/assets/logo/idk.svg"; - -import MingcuteLinkedinFill from "@/icons/MingcuteLinkedinFill"; -import MingcuteTelegramFill from "@/icons/MingcuteTelegramFill"; -import MingcuteYoutubeFill from "@/icons/MingcuteYoutubeFill"; +import { certificatesMenu, certificatesMenuType, socialsMenu, socialsMenuType } from "@/constant/footer/menu"; import styles from "./footer.module.css"; @@ -19,57 +13,33 @@ export default function FooterComponent(): ReactElement {
دکتر من

- تجربه مشاوره آنلاین و دریافت نوبت از بهترین پزشکان و بیمارستان‌های - ایران + تجربه مشاوره آنلاین و دریافت نوبت از بهترین پزشکان و بیمارستان‌های ایران

    -
  • - - IDK Logo - -
  • -
  • - - Certificate Logo - -
  • -
  • - - Enamad Logo - -
  • + {certificatesMenu.map((item: certificatesMenuType, index: number) => ( +
  • + + {item.alt} + +
  • + ))}
    -
  • - - - -
  • -
  • - - - -
  • -
  • - - - -
  • + {socialsMenu.map((item: socialsMenuType, index: number) => ( +
  • + + + +
  • + ))}

تمامی حقوق مادی و معنوی این وب‌سایت، خدمات و محتوای مربوط به آن متعلق به -  سامانه دکتر من  - می‌باشد! +  سامانه دکتر من  می‌باشد!

); -} \ No newline at end of file +}; \ No newline at end of file diff --git a/src/constant/footer/menu.ts b/src/constant/footer/menu.ts new file mode 100644 index 0000000..2b4e172 --- /dev/null +++ b/src/constant/footer/menu.ts @@ -0,0 +1,34 @@ +import { StaticImport } from "next/dist/shared/lib/get-img-props"; + +import MingcuteTelegramFill from "@/icons/MingcuteTelegramFill"; +import MingcuteLinkedinFill from "@/icons/MingcuteLinkedinFill"; +import MingcuteYoutubeFill from "@/icons/MingcuteYoutubeFill"; + +import certificateLogo from "@/assets/logo/certificate.svg"; +import enamadLogo from "@/assets/logo/enamad.svg"; +import idkLogo from "@/assets/logo/idk.svg"; + + +export const socialsMenu = [ + { imgComponent: MingcuteTelegramFill, alt: "تلگرام", href: "https://t.me/Codective" }, + { imgComponent: MingcuteLinkedinFill, alt: "لینکدین", href: "https://www.linkedin.com/in/bijanprogrammer/" }, + { imgComponent: MingcuteYoutubeFill, alt: "یوتیوب", href: "https://www.youtube.com/@BijanProgrammer" }, +]; + +export type socialsMenuType = { + imgComponent: React.ComponentType; + alt: string; + href: string; +}; + +export const certificatesMenu = [ + { svgSrc: idkLogo, alt: "IDK Logo", href: "#" }, + { svgSrc: certificateLogo, alt: "Certificate Logo", href: "#" }, + { svgSrc: enamadLogo, alt: "Enamad Logo", href: "#" }, +]; + +export type certificatesMenuType = { + svgSrc: string | StaticImport; + alt: string; + href: string; +}; From 4027837a890933b697c40f3988bce2304f10197c Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Mon, 23 Dec 2024 22:47:57 +0330 Subject: [PATCH 12/13] [UPDATE] fixed input for responsive home page --- src/app/page.module.css | 2 ++ src/components/global-search-box/global-search-box.module.css | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/app/page.module.css b/src/app/page.module.css index 33120d4..79fdd96 100644 --- a/src/app/page.module.css +++ b/src/app/page.module.css @@ -5,6 +5,8 @@ gap: 2rem; min-block-size: 100%; + + grid-template-columns: minmax(0, 1fr); h1 { display: inline-flex; diff --git a/src/components/global-search-box/global-search-box.module.css b/src/components/global-search-box/global-search-box.module.css index dc8b2eb..ca1269f 100644 --- a/src/components/global-search-box/global-search-box.module.css +++ b/src/components/global-search-box/global-search-box.module.css @@ -26,6 +26,8 @@ border: none; + min-inline-size: 0; + &:focus { outline: none; } From 0c162eef246ad159a8a744992c4b79fccd54db6a Mon Sep 17 00:00:00 2001 From: Alireza Dorrani Date: Mon, 23 Dec 2024 22:54:35 +0330 Subject: [PATCH 13/13] [PRETTIER] fixing format --- src/app/page.module.css | 2 +- src/app/page.tsx | 2 +- src/components/footer/footer.component.tsx | 78 ++++++++++--------- .../global-search-box.component.tsx | 38 ++++----- src/components/header/header.component.tsx | 50 ++++++------ src/constant/footer/menu.ts | 37 +++++---- src/constant/header/menu.ts | 8 +- src/icons/MingcuteLinkedinFill.tsx | 22 +++++- src/icons/MingcuteLocationLine.tsx | 36 ++++----- src/icons/MingcuteSearchLine.tsx | 36 ++++----- src/icons/MingcuteTelegramFill.tsx | 22 +++++- src/icons/MingcuteYoutubeFill.tsx | 22 +++++- src/logo/my-doctor.logo.tsx | 41 ++++++---- 13 files changed, 232 insertions(+), 162 deletions(-) diff --git a/src/app/page.module.css b/src/app/page.module.css index 79fdd96..e837406 100644 --- a/src/app/page.module.css +++ b/src/app/page.module.css @@ -5,7 +5,7 @@ gap: 2rem; min-block-size: 100%; - + grid-template-columns: minmax(0, 1fr); h1 { diff --git a/src/app/page.tsx b/src/app/page.tsx index 607563f..d22a43f 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -23,4 +23,4 @@ export default function Home(): ReactElement { ); -} \ No newline at end of file +} diff --git a/src/components/footer/footer.component.tsx b/src/components/footer/footer.component.tsx index e15957c..3f907ca 100644 --- a/src/components/footer/footer.component.tsx +++ b/src/components/footer/footer.component.tsx @@ -3,43 +3,49 @@ import { ReactElement } from "react"; import Image from "next/image"; import Link from "next/link"; -import { certificatesMenu, certificatesMenuType, socialsMenu, socialsMenuType } from "@/constant/footer/menu"; +import { + certificatesMenu, + certificatesMenuType, + socialsMenu, + socialsMenuType, +} from "@/constant/footer/menu"; import styles from "./footer.module.css"; export default function FooterComponent(): ReactElement { - return ( -
-
-
دکتر من
-

- تجربه مشاوره آنلاین و دریافت نوبت از بهترین پزشکان و بیمارستان‌های ایران -

-
-
-
    - {certificatesMenu.map((item: certificatesMenuType, index: number) => ( -
  • - - {item.alt} - -
  • - ))} -
-
    - {socialsMenu.map((item: socialsMenuType, index: number) => ( -
  • - - - -
  • - ))} -
-
-

- تمامی حقوق مادی و معنوی این وب‌سایت، خدمات و محتوای مربوط به آن متعلق به -  سامانه دکتر من  می‌باشد! -

-
- ); -}; \ No newline at end of file + return ( +
+
+
دکتر من
+

+ تجربه مشاوره آنلاین و دریافت نوبت از بهترین پزشکان و بیمارستان‌های + ایران +

+
+
+
    + {certificatesMenu.map((item: certificatesMenuType, index: number) => ( +
  • + + {item.alt} + +
  • + ))} +
+
    + {socialsMenu.map((item: socialsMenuType, index: number) => ( +
  • + + + +
  • + ))} +
+
+

+ تمامی حقوق مادی و معنوی این وب‌سایت، خدمات و محتوای مربوط به آن متعلق به +  سامانه دکتر من  می‌باشد! +

+
+ ); +} diff --git a/src/components/global-search-box/global-search-box.component.tsx b/src/components/global-search-box/global-search-box.component.tsx index e94086d..775ccb6 100644 --- a/src/components/global-search-box/global-search-box.component.tsx +++ b/src/components/global-search-box/global-search-box.component.tsx @@ -6,22 +6,22 @@ import MingcuteLocationLine from "@/icons/MingcuteLocationLine"; import styles from "./global-search-box.module.css"; export default function GlobalSearchBoxComponent(): ReactElement { - return ( -
-
- -
- -
-
- -
-
- ); -} \ No newline at end of file + return ( +
+
+ +
+ +
+
+ +
+
+ ); +} diff --git a/src/components/header/header.component.tsx b/src/components/header/header.component.tsx index 7dcf95b..34802a9 100644 --- a/src/components/header/header.component.tsx +++ b/src/components/header/header.component.tsx @@ -11,29 +11,29 @@ import { menu, menuType } from "@/constant/header/menu"; import styles from "./header.module.css"; export default function HeaderComponent(): ReactElement { - const pathname = usePathname(); + const pathname = usePathname(); - return ( -
- - -
- ); -} \ No newline at end of file + return ( +
+ + +
+ ); +} diff --git a/src/constant/footer/menu.ts b/src/constant/footer/menu.ts index 2b4e172..69668e6 100644 --- a/src/constant/footer/menu.ts +++ b/src/constant/footer/menu.ts @@ -8,27 +8,38 @@ import certificateLogo from "@/assets/logo/certificate.svg"; import enamadLogo from "@/assets/logo/enamad.svg"; import idkLogo from "@/assets/logo/idk.svg"; - export const socialsMenu = [ - { imgComponent: MingcuteTelegramFill, alt: "تلگرام", href: "https://t.me/Codective" }, - { imgComponent: MingcuteLinkedinFill, alt: "لینکدین", href: "https://www.linkedin.com/in/bijanprogrammer/" }, - { imgComponent: MingcuteYoutubeFill, alt: "یوتیوب", href: "https://www.youtube.com/@BijanProgrammer" }, + { + imgComponent: MingcuteTelegramFill, + alt: "تلگرام", + href: "https://t.me/Codective", + }, + { + imgComponent: MingcuteLinkedinFill, + alt: "لینکدین", + href: "https://www.linkedin.com/in/bijanprogrammer/", + }, + { + imgComponent: MingcuteYoutubeFill, + alt: "یوتیوب", + href: "https://www.youtube.com/@BijanProgrammer", + }, ]; export type socialsMenuType = { - imgComponent: React.ComponentType; - alt: string; - href: string; + imgComponent: React.ComponentType; + alt: string; + href: string; }; export const certificatesMenu = [ - { svgSrc: idkLogo, alt: "IDK Logo", href: "#" }, - { svgSrc: certificateLogo, alt: "Certificate Logo", href: "#" }, - { svgSrc: enamadLogo, alt: "Enamad Logo", href: "#" }, + { svgSrc: idkLogo, alt: "IDK Logo", href: "#" }, + { svgSrc: certificateLogo, alt: "Certificate Logo", href: "#" }, + { svgSrc: enamadLogo, alt: "Enamad Logo", href: "#" }, ]; export type certificatesMenuType = { - svgSrc: string | StaticImport; - alt: string; - href: string; + svgSrc: string | StaticImport; + alt: string; + href: string; }; diff --git a/src/constant/header/menu.ts b/src/constant/header/menu.ts index 0549479..15c49ef 100644 --- a/src/constant/header/menu.ts +++ b/src/constant/header/menu.ts @@ -1,7 +1,7 @@ export const menu = [ - { title: "خانه", href: "" }, - { title: "جستجو", href: "search" }, - { title: "پزشکان", href: "doctors" }, + { title: "خانه", href: "" }, + { title: "جستجو", href: "search" }, + { title: "پزشکان", href: "doctors" }, ]; -export type menuType = Record \ No newline at end of file +export type menuType = Record; diff --git a/src/icons/MingcuteLinkedinFill.tsx b/src/icons/MingcuteLinkedinFill.tsx index 46d9c74..8d883a1 100644 --- a/src/icons/MingcuteLinkedinFill.tsx +++ b/src/icons/MingcuteLinkedinFill.tsx @@ -1,8 +1,22 @@ -import React, { SVGProps } from 'react' +import React, { SVGProps } from "react"; export function MingcuteLinkedinFill(props: SVGProps) { return ( - - ) + + + + + + + ); } -export default MingcuteLinkedinFill \ No newline at end of file +export default MingcuteLinkedinFill; diff --git a/src/icons/MingcuteLocationLine.tsx b/src/icons/MingcuteLocationLine.tsx index 9306631..8f570dc 100644 --- a/src/icons/MingcuteLocationLine.tsx +++ b/src/icons/MingcuteLocationLine.tsx @@ -1,22 +1,22 @@ import { SVGProps } from "react"; export function MingcuteLocationLine(props: SVGProps) { - return ( - - - - - - - ); + return ( + + + + + + + ); } -export default MingcuteLocationLine; \ No newline at end of file +export default MingcuteLocationLine; diff --git a/src/icons/MingcuteSearchLine.tsx b/src/icons/MingcuteSearchLine.tsx index 285d875..9d92090 100644 --- a/src/icons/MingcuteSearchLine.tsx +++ b/src/icons/MingcuteSearchLine.tsx @@ -1,22 +1,22 @@ import { SVGProps } from "react"; export function MingcuteSearchLine(props: SVGProps) { - return ( - - - - - - - ); + return ( + + + + + + + ); } -export default MingcuteSearchLine; \ No newline at end of file +export default MingcuteSearchLine; diff --git a/src/icons/MingcuteTelegramFill.tsx b/src/icons/MingcuteTelegramFill.tsx index 007acd8..8c3ab69 100644 --- a/src/icons/MingcuteTelegramFill.tsx +++ b/src/icons/MingcuteTelegramFill.tsx @@ -1,8 +1,22 @@ -import React, { SVGProps } from 'react' +import React, { SVGProps } from "react"; export function MingcuteTelegramFill(props: SVGProps) { return ( - - ) + + + + + + + ); } -export default MingcuteTelegramFill \ No newline at end of file +export default MingcuteTelegramFill; diff --git a/src/icons/MingcuteYoutubeFill.tsx b/src/icons/MingcuteYoutubeFill.tsx index 7495f01..b3c45e0 100644 --- a/src/icons/MingcuteYoutubeFill.tsx +++ b/src/icons/MingcuteYoutubeFill.tsx @@ -1,8 +1,22 @@ -import React, { SVGProps } from 'react' +import React, { SVGProps } from "react"; export function MingcuteYoutubeFill(props: SVGProps) { return ( - - ) + + + + + + + ); } -export default MingcuteYoutubeFill \ No newline at end of file +export default MingcuteYoutubeFill; diff --git a/src/logo/my-doctor.logo.tsx b/src/logo/my-doctor.logo.tsx index 7dda0c3..2ee1568 100644 --- a/src/logo/my-doctor.logo.tsx +++ b/src/logo/my-doctor.logo.tsx @@ -1,19 +1,30 @@ import { SVGProps } from "react"; export function MyDoctorLogo(props: SVGProps) { - return ( - - - - - - ); + return ( + + + + + + ); } -export default MyDoctorLogo; \ No newline at end of file +export default MyDoctorLogo;