mirror of
https://github.com/Sosokker/B2D-Ventures.git
synced 2025-12-20 14:34:05 +01:00
Merge pull request #21 from Sosokker/front-end
Finished notification page and linked with bell icon.
This commit is contained in:
commit
aaa18dedec
66
package-lock.json
generated
66
package-lock.json
generated
@ -16,8 +16,10 @@
|
|||||||
"@radix-ui/react-select": "^2.1.1",
|
"@radix-ui/react-select": "^2.1.1",
|
||||||
"@radix-ui/react-separator": "^1.1.0",
|
"@radix-ui/react-separator": "^1.1.0",
|
||||||
"@radix-ui/react-slot": "^1.1.0",
|
"@radix-ui/react-slot": "^1.1.0",
|
||||||
|
"@radix-ui/react-tooltip": "^1.1.2",
|
||||||
"@supabase/ssr": "^0.4.1",
|
"@supabase/ssr": "^0.4.1",
|
||||||
"@supabase/supabase-js": "^2.45.2",
|
"@supabase/supabase-js": "^2.45.2",
|
||||||
|
"b2d-ventures": "file:",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"embla-carousel-react": "^8.2.0",
|
"embla-carousel-react": "^8.2.0",
|
||||||
@ -27,6 +29,7 @@
|
|||||||
"react": "^18",
|
"react": "^18",
|
||||||
"react-countup": "^6.5.3",
|
"react-countup": "^6.5.3",
|
||||||
"react-dom": "^18",
|
"react-dom": "^18",
|
||||||
|
"react-hot-toast": "^2.4.1",
|
||||||
"tailwind-merge": "^2.5.2",
|
"tailwind-merge": "^2.5.2",
|
||||||
"tailwindcss-animate": "^1.0.7"
|
"tailwindcss-animate": "^1.0.7"
|
||||||
},
|
},
|
||||||
@ -1021,6 +1024,39 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@radix-ui/react-tooltip": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==",
|
||||||
|
"dependencies": {
|
||||||
|
"@radix-ui/primitive": "1.1.0",
|
||||||
|
"@radix-ui/react-compose-refs": "1.1.0",
|
||||||
|
"@radix-ui/react-context": "1.1.0",
|
||||||
|
"@radix-ui/react-dismissable-layer": "1.1.0",
|
||||||
|
"@radix-ui/react-id": "1.1.0",
|
||||||
|
"@radix-ui/react-popper": "1.2.0",
|
||||||
|
"@radix-ui/react-portal": "1.1.1",
|
||||||
|
"@radix-ui/react-presence": "1.1.0",
|
||||||
|
"@radix-ui/react-primitive": "2.0.0",
|
||||||
|
"@radix-ui/react-slot": "1.1.0",
|
||||||
|
"@radix-ui/react-use-controllable-state": "1.1.0",
|
||||||
|
"@radix-ui/react-visually-hidden": "1.1.0"
|
||||||
|
},
|
||||||
|
"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-use-callback-ref": {
|
"node_modules/@radix-ui/react-use-callback-ref": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz",
|
||||||
@ -1761,6 +1797,10 @@
|
|||||||
"deep-equal": "^2.0.5"
|
"deep-equal": "^2.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/b2d-ventures": {
|
||||||
|
"resolved": "",
|
||||||
|
"link": true
|
||||||
|
},
|
||||||
"node_modules/balanced-match": {
|
"node_modules/balanced-match": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
||||||
@ -2016,8 +2056,7 @@
|
|||||||
"node_modules/csstype": {
|
"node_modules/csstype": {
|
||||||
"version": "3.1.3",
|
"version": "3.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
|
||||||
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
|
"integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
|
||||||
"devOptional": true
|
|
||||||
},
|
},
|
||||||
"node_modules/damerau-levenshtein": {
|
"node_modules/damerau-levenshtein": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
@ -3204,6 +3243,14 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/goober": {
|
||||||
|
"version": "2.1.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/goober/-/goober-2.1.14.tgz",
|
||||||
|
"integrity": "sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"csstype": "^3.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/gopd": {
|
"node_modules/gopd": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
|
||||||
@ -4677,6 +4724,21 @@
|
|||||||
"react": "^18.3.1"
|
"react": "^18.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react-hot-toast": {
|
||||||
|
"version": "2.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.4.1.tgz",
|
||||||
|
"integrity": "sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"goober": "^2.1.10"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16",
|
||||||
|
"react-dom": ">=16"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/react-is": {
|
"node_modules/react-is": {
|
||||||
"version": "16.13.1",
|
"version": "16.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
|
||||||
|
|||||||
@ -17,8 +17,10 @@
|
|||||||
"@radix-ui/react-select": "^2.1.1",
|
"@radix-ui/react-select": "^2.1.1",
|
||||||
"@radix-ui/react-separator": "^1.1.0",
|
"@radix-ui/react-separator": "^1.1.0",
|
||||||
"@radix-ui/react-slot": "^1.1.0",
|
"@radix-ui/react-slot": "^1.1.0",
|
||||||
|
"@radix-ui/react-tooltip": "^1.1.2",
|
||||||
"@supabase/ssr": "^0.4.1",
|
"@supabase/ssr": "^0.4.1",
|
||||||
"@supabase/supabase-js": "^2.45.2",
|
"@supabase/supabase-js": "^2.45.2",
|
||||||
|
"b2d-ventures": "file:",
|
||||||
"class-variance-authority": "^0.7.0",
|
"class-variance-authority": "^0.7.0",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"embla-carousel-react": "^8.2.0",
|
"embla-carousel-react": "^8.2.0",
|
||||||
@ -28,6 +30,7 @@
|
|||||||
"react": "^18",
|
"react": "^18",
|
||||||
"react-countup": "^6.5.3",
|
"react-countup": "^6.5.3",
|
||||||
"react-dom": "^18",
|
"react-dom": "^18",
|
||||||
|
"react-hot-toast": "^2.4.1",
|
||||||
"tailwind-merge": "^2.5.2",
|
"tailwind-merge": "^2.5.2",
|
||||||
"tailwindcss-animate": "^1.0.7"
|
"tailwindcss-animate": "^1.0.7"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1,9 +1,5 @@
|
|||||||
lockfileVersion: '6.0'
|
lockfileVersion: '6.0'
|
||||||
|
|
||||||
settings:
|
|
||||||
autoInstallPeers: true
|
|
||||||
excludeLinksFromLockfile: false
|
|
||||||
|
|
||||||
dependencies:
|
dependencies:
|
||||||
'@radix-ui/react-avatar':
|
'@radix-ui/react-avatar':
|
||||||
specifier: ^1.1.0
|
specifier: ^1.1.0
|
||||||
@ -11,6 +7,9 @@ dependencies:
|
|||||||
'@radix-ui/react-dropdown-menu':
|
'@radix-ui/react-dropdown-menu':
|
||||||
specifier: ^2.1.1
|
specifier: ^2.1.1
|
||||||
version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
version: 2.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-hover-card':
|
||||||
|
specifier: ^1.1.1
|
||||||
|
version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
'@radix-ui/react-navigation-menu':
|
'@radix-ui/react-navigation-menu':
|
||||||
specifier: ^1.2.0
|
specifier: ^1.2.0
|
||||||
version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
@ -26,6 +25,9 @@ dependencies:
|
|||||||
'@radix-ui/react-slot':
|
'@radix-ui/react-slot':
|
||||||
specifier: ^1.1.0
|
specifier: ^1.1.0
|
||||||
version: 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
version: 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-tooltip':
|
||||||
|
specifier: ^1.1.2
|
||||||
|
version: 1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
'@supabase/ssr':
|
'@supabase/ssr':
|
||||||
specifier: ^0.4.1
|
specifier: ^0.4.1
|
||||||
version: 0.4.1(@supabase/supabase-js@2.45.2)
|
version: 0.4.1(@supabase/supabase-js@2.45.2)
|
||||||
@ -59,6 +61,9 @@ dependencies:
|
|||||||
react-dom:
|
react-dom:
|
||||||
specifier: ^18
|
specifier: ^18
|
||||||
version: 18.3.1(react@18.3.1)
|
version: 18.3.1(react@18.3.1)
|
||||||
|
react-hot-toast:
|
||||||
|
specifier: ^2.4.1
|
||||||
|
version: 2.4.1(csstype@3.1.3)(react-dom@18.3.1)(react@18.3.1)
|
||||||
tailwind-merge:
|
tailwind-merge:
|
||||||
specifier: ^2.5.2
|
specifier: ^2.5.2
|
||||||
version: 2.5.2
|
version: 2.5.2
|
||||||
@ -539,6 +544,34 @@ packages:
|
|||||||
react-dom: 18.3.1(react@18.3.1)
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@radix-ui/react-hover-card@1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1):
|
||||||
|
resolution: {integrity: sha512-IwzAOP97hQpDADYVKrEEHUH/b2LA+9MgB0LgdmnbFO2u/3M5hmEofjjr2M6CyzUblaAqJdFm6B7oFtU72DPXrA==}
|
||||||
|
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
|
||||||
|
dependencies:
|
||||||
|
'@radix-ui/primitive': 1.1.0
|
||||||
|
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@types/react': 18.3.4
|
||||||
|
'@types/react-dom': 18.3.0
|
||||||
|
react: 18.3.1
|
||||||
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@radix-ui/react-id@1.1.0(@types/react@18.3.4)(react@18.3.1):
|
/@radix-ui/react-id@1.1.0(@types/react@18.3.4)(react@18.3.1):
|
||||||
resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
|
resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -837,6 +870,37 @@ packages:
|
|||||||
react: 18.3.1
|
react: 18.3.1
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@radix-ui/react-tooltip@1.1.2(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1):
|
||||||
|
resolution: {integrity: sha512-9XRsLwe6Yb9B/tlnYCPVUd/TFS4J7HuOZW345DCeC6vKIxQGMZdx21RK4VoZauPD5frgkXTYVS5y90L+3YBn4w==}
|
||||||
|
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
|
||||||
|
dependencies:
|
||||||
|
'@radix-ui/primitive': 1.1.0
|
||||||
|
'@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-context': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-dismissable-layer': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-id': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-popper': 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-portal': 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-presence': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@radix-ui/react-slot': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.4)(react@18.3.1)
|
||||||
|
'@radix-ui/react-visually-hidden': 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1)(react@18.3.1)
|
||||||
|
'@types/react': 18.3.4
|
||||||
|
'@types/react-dom': 18.3.0
|
||||||
|
react: 18.3.1
|
||||||
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.4)(react@18.3.1):
|
/@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.4)(react@18.3.1):
|
||||||
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
|
resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -2271,6 +2335,14 @@ packages:
|
|||||||
slash: 3.0.0
|
slash: 3.0.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/goober@2.1.14(csstype@3.1.3):
|
||||||
|
resolution: {integrity: sha512-4UpC0NdGyAFqLNPnhCT2iHpza2q+RAY3GV85a/mRPdzyPQMsj0KmMMuetdIkzWRbJ+Hgau1EZztq8ImmiMGhsg==}
|
||||||
|
peerDependencies:
|
||||||
|
csstype: ^3.0.10
|
||||||
|
dependencies:
|
||||||
|
csstype: 3.1.3
|
||||||
|
dev: false
|
||||||
|
|
||||||
/gopd@1.0.1:
|
/gopd@1.0.1:
|
||||||
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
|
resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -3088,6 +3160,20 @@ packages:
|
|||||||
scheduler: 0.23.2
|
scheduler: 0.23.2
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/react-hot-toast@2.4.1(csstype@3.1.3)(react-dom@18.3.1)(react@18.3.1):
|
||||||
|
resolution: {integrity: sha512-j8z+cQbWIM5LY37pR6uZR6D4LfseplqnuAO4co4u8917hBUvXlEqyP1ZzqVLcqoyUesZZv/ImreoCeHVDpE5pQ==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
peerDependencies:
|
||||||
|
react: '>=16'
|
||||||
|
react-dom: '>=16'
|
||||||
|
dependencies:
|
||||||
|
goober: 2.1.14(csstype@3.1.3)
|
||||||
|
react: 18.3.1
|
||||||
|
react-dom: 18.3.1(react@18.3.1)
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- csstype
|
||||||
|
dev: false
|
||||||
|
|
||||||
/react-is@16.13.1:
|
/react-is@16.13.1:
|
||||||
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
|
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
|
||||||
dev: true
|
dev: true
|
||||||
@ -3794,3 +3880,7 @@ packages:
|
|||||||
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
|
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
settings:
|
||||||
|
autoInstallPeers: true
|
||||||
|
excludeLinksFromLockfile: false
|
||||||
|
|||||||
@ -2,19 +2,63 @@
|
|||||||
|
|
||||||
import React, { useState, useEffect } from "react";
|
import React, { useState, useEffect } from "react";
|
||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious } from "@/components/ui/carousel";
|
import {
|
||||||
|
Carousel,
|
||||||
|
CarouselContent,
|
||||||
|
CarouselItem,
|
||||||
|
CarouselNext,
|
||||||
|
CarouselPrevious,
|
||||||
|
} from "@/components/ui/carousel";
|
||||||
import { Card, CardContent } from "@/components/ui/card";
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
import CountUp from "react-countup";
|
import CountUp from "react-countup";
|
||||||
import { Progress } from "@/components/ui/progress";
|
import { Progress } from "@/components/ui/progress";
|
||||||
import { Separator } from "@/components/ui/separator";
|
import { Separator } from "@/components/ui/separator";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
|
import { ShareIcon, StarIcon } from "lucide-react";
|
||||||
|
import { Toaster, toast } from "react-hot-toast";
|
||||||
|
import useSession from "@/lib/supabase/useSession";
|
||||||
|
import { redirect } from "next/navigation";
|
||||||
|
import {
|
||||||
|
Tooltip,
|
||||||
|
TooltipContent,
|
||||||
|
TooltipProvider,
|
||||||
|
TooltipTrigger,
|
||||||
|
} from "@/components/ui/tooltip";
|
||||||
|
|
||||||
export default function Invest() {
|
export default function Invest() {
|
||||||
const [progress, setProgress] = useState(0);
|
const [progress, setProgress] = useState(0);
|
||||||
const [tab, setTab] = useState("Pitch");
|
const [tab, setTab] = useState("Pitch");
|
||||||
|
const { session, loading } = useSession();
|
||||||
|
const user = session?.user;
|
||||||
|
const [sessionLoaded, setSessionLoaded] = useState(false);
|
||||||
|
const [isFollow, setIsFollow] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// set sessionLoaded to true once session is confirmed
|
||||||
|
if (!loading) {
|
||||||
|
setSessionLoaded(true);
|
||||||
|
}
|
||||||
|
}, [loading]);
|
||||||
const handleClick = (item: string) => {
|
const handleClick = (item: string) => {
|
||||||
setTab(item);
|
setTab(item);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleShare = () => {
|
||||||
|
const currentUrl = window.location.href;
|
||||||
|
if (document.hasFocus()) {
|
||||||
|
navigator.clipboard.writeText(currentUrl).then(() => {
|
||||||
|
toast.success("URL copied to clipboard!");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const handleFollow = () => {
|
||||||
|
if (user) {
|
||||||
|
setIsFollow((prevState) => !prevState);
|
||||||
|
// save follow to database
|
||||||
|
} else {
|
||||||
|
redirect("/login");
|
||||||
|
}
|
||||||
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// percent success
|
// percent success
|
||||||
const timer = setTimeout(() => setProgress(66), 500);
|
const timer = setTimeout(() => setProgress(66), 500);
|
||||||
@ -22,16 +66,43 @@ export default function Invest() {
|
|||||||
}, []);
|
}, []);
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="w-[90%] h-[500px]-500 m-auto mt-12 pl-24">
|
<div>
|
||||||
|
<Toaster position="top-right" reverseOrder={false} />
|
||||||
|
</div>
|
||||||
|
<div className="w-[90%] h-[45w0px]-500 m-auto mt-12 pl-24">
|
||||||
<div>
|
<div>
|
||||||
<div className="flex ">
|
<div className="flex ">
|
||||||
<Image src="./logo.svg" alt="logo" width={50} height={50} />
|
<Image src="./logo.svg" alt="logo" width={50} height={50} />
|
||||||
<h1 className="mt-3 font-bold text-3xl">NVIDIA</h1>
|
<h1 className="mt-3 font-bold text-3xl">NVIDIA</h1>
|
||||||
|
<div className="grid grid-cols-2 gap-5 ml-[850px] ">
|
||||||
|
<div className="mt-2 cursor-pointer" onClick={handleFollow}>
|
||||||
|
<TooltipProvider>
|
||||||
|
<Tooltip>
|
||||||
|
<TooltipTrigger asChild>
|
||||||
|
<StarIcon
|
||||||
|
id="follow"
|
||||||
|
fill={isFollow ? "#FFFF00" : "#fff"}
|
||||||
|
strokeWidth={2}
|
||||||
|
/>
|
||||||
|
</TooltipTrigger>
|
||||||
|
<TooltipContent>
|
||||||
|
<p>Follow NIVIDIA</p>
|
||||||
|
</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
</TooltipProvider>
|
||||||
</div>
|
</div>
|
||||||
<p className="mt-2"> Worlds first non-metal sustainable battery</p>
|
<div onClick={handleShare} className=" cursor-pointer mt-2">
|
||||||
|
<ShareIcon />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p className="mt-2"> World's first non-metal sustainable battery</p>
|
||||||
<div className="flex flex-wrap mt-3">
|
<div className="flex flex-wrap mt-3">
|
||||||
{["Technology", "Gaming"].map((tag) => (
|
{["Technology", "Gaming"].map((tag) => (
|
||||||
<span key={tag} className="text-xs rounded-md bg-slate-200 dark:bg-slate-700 p-1 mx-1 mb-1">
|
<span
|
||||||
|
key={tag}
|
||||||
|
className="text-xs rounded-md bg-slate-200 dark:bg-slate-700 p-1 mx-1 mb-1"
|
||||||
|
>
|
||||||
{tag}
|
{tag}
|
||||||
</span>
|
</span>
|
||||||
))}
|
))}
|
||||||
@ -39,18 +110,10 @@ export default function Invest() {
|
|||||||
<div className="flex">
|
<div className="flex">
|
||||||
{/* image carousel */}
|
{/* image carousel */}
|
||||||
<Carousel className="w-[55%] mt-4">
|
<Carousel className="w-[55%] mt-4">
|
||||||
<CarouselContent>
|
<CarouselContent className="h-[450px]">
|
||||||
{Array.from({ length: 5 }).map((_, index) => (
|
{Array.from({ length: 5 }).map((_, index) => (
|
||||||
<CarouselItem key={index}>
|
<CarouselItem key={index}>
|
||||||
<Image
|
<img src="./boiler1.jpg" alt="" className="rounded-lg" />
|
||||||
src="/boiler1.jpg"
|
|
||||||
alt=""
|
|
||||||
className="rounded-lg"
|
|
||||||
width={0}
|
|
||||||
height={0}
|
|
||||||
sizes="100vw"
|
|
||||||
style={{ width: "100%", height: "auto" }}
|
|
||||||
/>
|
|
||||||
</CarouselItem>
|
</CarouselItem>
|
||||||
))}
|
))}
|
||||||
</CarouselContent>{" "}
|
</CarouselContent>{" "}
|
||||||
@ -60,7 +123,13 @@ export default function Invest() {
|
|||||||
<div className=" w-1/3 mt-4 h-[400px] ml-[8%] ">
|
<div className=" w-1/3 mt-4 h-[400px] ml-[8%] ">
|
||||||
<div className="pl-5">
|
<div className="pl-5">
|
||||||
<h1 className="font-semibold text-4xl mt-8">
|
<h1 className="font-semibold text-4xl mt-8">
|
||||||
<CountUp start={0} end={100000} duration={2} prefix="$" className="" />
|
<CountUp
|
||||||
|
start={0}
|
||||||
|
end={100000}
|
||||||
|
duration={2}
|
||||||
|
prefix="$"
|
||||||
|
className=""
|
||||||
|
/>
|
||||||
</h1>
|
</h1>
|
||||||
<p className=""> 5% raised of $5M max goal</p>
|
<p className=""> 5% raised of $5M max goal</p>
|
||||||
<Progress value={progress} className="w-[60%] h-3 mt-3" />
|
<Progress value={progress} className="w-[60%] h-3 mt-3" />
|
||||||
@ -76,67 +145,27 @@ export default function Invest() {
|
|||||||
<CountUp start={0} end={5800} duration={2} className="" /> hours
|
<CountUp start={0} end={5800} duration={2} className="" /> hours
|
||||||
</h1>
|
</h1>
|
||||||
<p className="ml-5"> Left to invest</p>
|
<p className="ml-5"> Left to invest</p>
|
||||||
<Button className="mt-10 ml-[25%]">Invest</Button>
|
<Button className="mt-10 ml-[25%]">Invest in NVIDIA</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Carousel className="w-1/2">
|
<Carousel className="w-1/2 ml-10">
|
||||||
<CarouselContent>
|
<CarouselContent>
|
||||||
{/* boiler plate for an actual pictures */}
|
{/* boiler plate for an actual pictures */}
|
||||||
<CarouselItem className="md:basis-1/2 lg:basis-1/3">
|
<CarouselItem className="pl-1 md:basis-1/2 lg:basis-1/3">
|
||||||
<Image
|
<img src="./boiler1.jpg" alt="" className="rounded-lg" />
|
||||||
src="/boiler1.jpg"
|
|
||||||
alt=""
|
|
||||||
className="rounded-lg"
|
|
||||||
width={0}
|
|
||||||
height={0}
|
|
||||||
sizes="100vw"
|
|
||||||
style={{ width: "100%", height: "auto" }}
|
|
||||||
/>
|
|
||||||
</CarouselItem>
|
</CarouselItem>
|
||||||
<CarouselItem className="md:basis-1/2 lg:basis-1/3">
|
<CarouselItem className="pl-1 md:basis-1/2 lg:basis-1/3">
|
||||||
<Image
|
<img src="./boiler1.jpg" alt="" className="rounded-lg" />
|
||||||
src="/boiler1.jpg"
|
|
||||||
alt=""
|
|
||||||
className="rounded-lg"
|
|
||||||
width={0}
|
|
||||||
height={0}
|
|
||||||
sizes="100vw"
|
|
||||||
style={{ width: "100%", height: "auto" }}
|
|
||||||
/>
|
|
||||||
</CarouselItem>
|
</CarouselItem>
|
||||||
<CarouselItem className="md:basis-1/2 lg:basis-1/3">
|
<CarouselItem className="pl-1 md:basis-1/2 lg:basis-1/3">
|
||||||
<Image
|
<img src="./boiler1.jpg" alt="" className="rounded-lg" />
|
||||||
src="/boiler1.jpg"
|
|
||||||
alt=""
|
|
||||||
className="rounded-lg"
|
|
||||||
width={0}
|
|
||||||
height={0}
|
|
||||||
sizes="100vw"
|
|
||||||
style={{ width: "100%", height: "auto" }}
|
|
||||||
/>
|
|
||||||
</CarouselItem>
|
</CarouselItem>
|
||||||
<CarouselItem className="md:basis-1/2 lg:basis-1/3">
|
<CarouselItem className="pl-1 md:basis-1/2 lg:basis-1/3">
|
||||||
<Image
|
<img src="./boiler1.jpg" alt="" className="rounded-lg" />
|
||||||
src="/boiler1.jpg"
|
|
||||||
alt=""
|
|
||||||
className="rounded-lg"
|
|
||||||
width={0}
|
|
||||||
height={0}
|
|
||||||
sizes="100vw"
|
|
||||||
style={{ width: "100%", height: "auto" }}
|
|
||||||
/>
|
|
||||||
</CarouselItem>
|
</CarouselItem>
|
||||||
<CarouselItem className="md:basis-1/2 lg:basis-1/3">
|
<CarouselItem className="pl-1 md:basis-1/2 lg:basis-1/3">
|
||||||
<Image
|
<img src="./boiler1.jpg" alt="" className="rounded-lg" />
|
||||||
src="/boiler1.jpg"
|
|
||||||
alt=""
|
|
||||||
className="rounded-lg"
|
|
||||||
width={0}
|
|
||||||
height={0}
|
|
||||||
sizes="100vw"
|
|
||||||
style={{ width: "100%", height: "auto" }}
|
|
||||||
/>
|
|
||||||
</CarouselItem>
|
</CarouselItem>
|
||||||
</CarouselContent>
|
</CarouselContent>
|
||||||
</Carousel>
|
</Carousel>
|
||||||
@ -145,17 +174,26 @@ export default function Invest() {
|
|||||||
<div className="flex w-[90%] mt-24 m-auto ml-32">
|
<div className="flex w-[90%] mt-24 m-auto ml-32">
|
||||||
<ul className="list-none flex gap-10 text-xl ">
|
<ul className="list-none flex gap-10 text-xl ">
|
||||||
<li>
|
<li>
|
||||||
<a onClick={() => handleClick("Pitch")} className={tab === "Pitch" ? "text-blue-600" : ""}>
|
<a
|
||||||
|
onClick={() => handleClick("Pitch")}
|
||||||
|
className={tab === "Pitch" ? "text-blue-600" : ""}
|
||||||
|
>
|
||||||
Pitch
|
Pitch
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a onClick={() => handleClick("General Data")} className={tab === "General Data" ? "text-blue-600" : ""}>
|
<a
|
||||||
|
onClick={() => handleClick("General Data")}
|
||||||
|
className={tab === "General Data" ? "text-blue-600" : ""}
|
||||||
|
>
|
||||||
General Data
|
General Data
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a onClick={() => handleClick("Updates")} className={tab === "Updates" ? "text-blue-600" : ""}>
|
<a
|
||||||
|
onClick={() => handleClick("Updates")}
|
||||||
|
className={tab === "Updates" ? "text-blue-600" : ""}
|
||||||
|
>
|
||||||
Updates
|
Updates
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
48
src/app/notification/page.tsx
Normal file
48
src/app/notification/page.tsx
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
"use client";
|
||||||
|
|
||||||
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
|
import { BellIcon } from "lucide-react";
|
||||||
|
|
||||||
|
export default function Notification() {
|
||||||
|
const sampleNotifications = [
|
||||||
|
{ message: "New message from John Doe", time: "5 minutes ago" },
|
||||||
|
{ message: "Your order has been shipped", time: "2 hours ago" },
|
||||||
|
{ message: "Meeting reminder: Team sync at 3 PM", time: "1 day ago" },
|
||||||
|
];
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div className="ml-56 mt-16 ">
|
||||||
|
<h1 className="font-bold text-3xl h-0">Notifications</h1>
|
||||||
|
<div className=" w-full mt-20 ">
|
||||||
|
{/* Cards */}
|
||||||
|
<Card className=" border-slate-800 w-3/4 p-6">
|
||||||
|
<CardContent>
|
||||||
|
<Card>
|
||||||
|
<CardContent>
|
||||||
|
{sampleNotifications.map((notification, _) => (
|
||||||
|
<div className="flex items-center justify-between p-4 border-b border-gray-200">
|
||||||
|
<div className="flex items-center">
|
||||||
|
<BellIcon className="w-5 h-5 text-blue-500 mr-3" />
|
||||||
|
<div>
|
||||||
|
<p className="text-sm font-medium ">
|
||||||
|
{notification.message}
|
||||||
|
</p>
|
||||||
|
<p className="text-xs text-gray-500">
|
||||||
|
{notification.time}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button className="text-sm text-blue-500 hover:text-blue-600">
|
||||||
|
Mark as read
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
</CardContent>
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -57,7 +57,7 @@ export function ExtendableCard(props: ExtendableCardProps) {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Hover content (appears when hovered) */}
|
{/* Hover content (appears when hovered) */}
|
||||||
<div className="mt-4 max-h-0 overflow-hidden opacity-0 group-hover:max-h-[500px] group-hover:opacity-100 transition-all duration-500 ease-in-out">
|
<div className="mt-4 max-h-0 overflow-hidden opacity-0 group-hover:max-h-[500px] group-hover:opacity-100 transition-all duration-1000 ease-in-out">
|
||||||
<p className="text-sm text-muted-foreground">{props.description}</p>
|
<p className="text-sm text-muted-foreground">{props.description}</p>
|
||||||
<div className="mt-4 flex items-center justify-between">
|
<div className="mt-4 flex items-center justify-between">
|
||||||
<div className="flex items-center space-x-2">
|
<div className="flex items-center space-x-2">
|
||||||
|
|||||||
@ -45,8 +45,10 @@ const landings = [
|
|||||||
route: "/crm-landing",
|
route: "/crm-landing",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
const ListItem = React.forwardRef<React.ElementRef<"a">, React.ComponentPropsWithoutRef<"a">>(
|
const ListItem = React.forwardRef<
|
||||||
({ className, title, children, ...props }, ref) => {
|
React.ElementRef<"a">,
|
||||||
|
React.ComponentPropsWithoutRef<"a">
|
||||||
|
>(({ className, title, children, ...props }, ref) => {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
<NavigationMenuLink asChild>
|
<NavigationMenuLink asChild>
|
||||||
@ -56,16 +58,18 @@ const ListItem = React.forwardRef<React.ElementRef<"a">, React.ComponentPropsWit
|
|||||||
"block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",
|
"block select-none space-y-1 rounded-md p-3 leading-none no-underline outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground",
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...props}>
|
{...props}
|
||||||
|
>
|
||||||
<div className="text-sm font-medium leading-none">{title}</div>
|
<div className="text-sm font-medium leading-none">{title}</div>
|
||||||
<hr />
|
<hr />
|
||||||
<p className="line-clamp-2 text-sm leading-snug text-muted-foreground">{children}</p>
|
<p className="line-clamp-2 text-sm leading-snug text-muted-foreground">
|
||||||
|
{children}
|
||||||
|
</p>
|
||||||
</a>
|
</a>
|
||||||
</NavigationMenuLink>
|
</NavigationMenuLink>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
}
|
});
|
||||||
);
|
|
||||||
ListItem.displayName = "ListItem";
|
ListItem.displayName = "ListItem";
|
||||||
|
|
||||||
const unAuthenticatedComponents = () => {
|
const unAuthenticatedComponents = () => {
|
||||||
@ -82,14 +86,28 @@ const unAuthenticatedComponents = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const authenticatedComponents = () => {
|
const authenticatedComponents = () => {
|
||||||
|
let notifications = 100;
|
||||||
|
const displayValue = notifications >= 100 ? "..." : notifications;
|
||||||
return (
|
return (
|
||||||
<div className="flex gap-3 pl-2 items-center">
|
<div className="flex gap-3 pl-2 items-center">
|
||||||
<Bell />
|
<Link href={"/notification"}>
|
||||||
|
{" "}
|
||||||
|
<div className="relative inline-block">
|
||||||
|
<Bell className="h-6 w-6" />
|
||||||
|
<span className="absolute -top-1 -right-1 inline-flex items-center justify-center w-4 h-4 text-xs font-bold text-white bg-red-600 rounded-full">
|
||||||
|
{displayValue}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</Link>
|
||||||
<Heart />
|
<Heart />
|
||||||
<Wallet />
|
<Wallet />
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<Button variant="outline" size="icon" className="overflow-hidden rounded-full">
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
size="icon"
|
||||||
|
className="overflow-hidden rounded-full"
|
||||||
|
>
|
||||||
<Avatar>
|
<Avatar>
|
||||||
<AvatarImage src="https://api.dicebear.com/9.x/pixel-art/svg" />
|
<AvatarImage src="https://api.dicebear.com/9.x/pixel-art/svg" />
|
||||||
<AvatarFallback>1</AvatarFallback>
|
<AvatarFallback>1</AvatarFallback>
|
||||||
@ -153,7 +171,8 @@ export function NavigationBar() {
|
|||||||
<Link
|
<Link
|
||||||
className="flex-none text-xl font-semibold dark:text-white focus:outline-none focus:opacity-80"
|
className="flex-none text-xl font-semibold dark:text-white focus:outline-none focus:opacity-80"
|
||||||
href="/"
|
href="/"
|
||||||
aria-label="Brand">
|
aria-label="Brand"
|
||||||
|
>
|
||||||
<span className="inline-flex items-center gap-x-2 text-xl font-semibold dark:text-white">
|
<span className="inline-flex items-center gap-x-2 text-xl font-semibold dark:text-white">
|
||||||
<Image src="./logo.svg" alt="logo" width={50} height={50} />
|
<Image src="./logo.svg" alt="logo" width={50} height={50} />
|
||||||
B2DVentures
|
B2DVentures
|
||||||
@ -165,11 +184,17 @@ export function NavigationBar() {
|
|||||||
<NavigationMenu>
|
<NavigationMenu>
|
||||||
<NavigationMenuList>
|
<NavigationMenuList>
|
||||||
<NavigationMenuItem>
|
<NavigationMenuItem>
|
||||||
<NavigationMenuTrigger className="text-base">Businesses</NavigationMenuTrigger>
|
<NavigationMenuTrigger className="text-base">
|
||||||
|
Businesses
|
||||||
|
</NavigationMenuTrigger>
|
||||||
<NavigationMenuContent>
|
<NavigationMenuContent>
|
||||||
<ul className="grid w-[400px] ">
|
<ul className="grid w-[400px] ">
|
||||||
{businessComponents.map((component) => (
|
{businessComponents.map((component) => (
|
||||||
<ListItem key={component.title} title={component.title} href={component.href}>
|
<ListItem
|
||||||
|
key={component.title}
|
||||||
|
title={component.title}
|
||||||
|
href={component.href}
|
||||||
|
>
|
||||||
{component.description}
|
{component.description}
|
||||||
</ListItem>
|
</ListItem>
|
||||||
))}
|
))}
|
||||||
@ -178,11 +203,17 @@ export function NavigationBar() {
|
|||||||
</NavigationMenuItem>
|
</NavigationMenuItem>
|
||||||
|
|
||||||
<NavigationMenuItem>
|
<NavigationMenuItem>
|
||||||
<NavigationMenuTrigger className="text-base font-medium ">Projects</NavigationMenuTrigger>
|
<NavigationMenuTrigger className="text-base font-medium ">
|
||||||
|
Projects
|
||||||
|
</NavigationMenuTrigger>
|
||||||
<NavigationMenuContent>
|
<NavigationMenuContent>
|
||||||
<ul className="grid w-[400px] ">
|
<ul className="grid w-[400px] ">
|
||||||
{projectComponents.map((component) => (
|
{projectComponents.map((component) => (
|
||||||
<ListItem key={component.title} title={component.title} href={component.href}>
|
<ListItem
|
||||||
|
key={component.title}
|
||||||
|
title={component.title}
|
||||||
|
href={component.href}
|
||||||
|
>
|
||||||
{component.description}
|
{component.description}
|
||||||
</ListItem>
|
</ListItem>
|
||||||
))}
|
))}
|
||||||
@ -191,11 +222,17 @@ export function NavigationBar() {
|
|||||||
</NavigationMenuItem>
|
</NavigationMenuItem>
|
||||||
|
|
||||||
<NavigationMenuItem>
|
<NavigationMenuItem>
|
||||||
<NavigationMenuTrigger className="text-base">Blogs</NavigationMenuTrigger>
|
<NavigationMenuTrigger className="text-base">
|
||||||
|
Blogs
|
||||||
|
</NavigationMenuTrigger>
|
||||||
<NavigationMenuContent>
|
<NavigationMenuContent>
|
||||||
<ul className="grid w-[400px] ">
|
<ul className="grid w-[400px] ">
|
||||||
{blogComponents.map((component) => (
|
{blogComponents.map((component) => (
|
||||||
<ListItem key={component.title} title={component.title} href={component.href}>
|
<ListItem
|
||||||
|
key={component.title}
|
||||||
|
title={component.title}
|
||||||
|
href={component.href}
|
||||||
|
>
|
||||||
{component.description}
|
{component.description}
|
||||||
</ListItem>
|
</ListItem>
|
||||||
))}
|
))}
|
||||||
@ -204,7 +241,10 @@ export function NavigationBar() {
|
|||||||
</NavigationMenuItem>
|
</NavigationMenuItem>
|
||||||
|
|
||||||
<NavigationMenuItem>
|
<NavigationMenuItem>
|
||||||
<NavigationMenuLink className="text-base font-medium" href="docs">
|
<NavigationMenuLink
|
||||||
|
className="text-base font-medium"
|
||||||
|
href="docs"
|
||||||
|
>
|
||||||
Docs
|
Docs
|
||||||
</NavigationMenuLink>
|
</NavigationMenuLink>
|
||||||
</NavigationMenuItem>
|
</NavigationMenuItem>
|
||||||
|
|||||||
30
src/components/ui/tooltip.tsx
Normal file
30
src/components/ui/tooltip.tsx
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
|
import * as React from "react"
|
||||||
|
import * as TooltipPrimitive from "@radix-ui/react-tooltip"
|
||||||
|
|
||||||
|
import { cn } from "@/lib/utils"
|
||||||
|
|
||||||
|
const TooltipProvider = TooltipPrimitive.Provider
|
||||||
|
|
||||||
|
const Tooltip = TooltipPrimitive.Root
|
||||||
|
|
||||||
|
const TooltipTrigger = TooltipPrimitive.Trigger
|
||||||
|
|
||||||
|
const TooltipContent = React.forwardRef<
|
||||||
|
React.ElementRef<typeof TooltipPrimitive.Content>,
|
||||||
|
React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
|
||||||
|
>(({ className, sideOffset = 4, ...props }, ref) => (
|
||||||
|
<TooltipPrimitive.Content
|
||||||
|
ref={ref}
|
||||||
|
sideOffset={sideOffset}
|
||||||
|
className={cn(
|
||||||
|
"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
|
||||||
|
className
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
))
|
||||||
|
TooltipContent.displayName = TooltipPrimitive.Content.displayName
|
||||||
|
|
||||||
|
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
|
||||||
Loading…
Reference in New Issue
Block a user