-
-
Notifications
You must be signed in to change notification settings - Fork 146
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Chore/remove styles from globals.css #1172
Changes from all commits
64d3e7c
c10b323
faf56c7
a29c6e4
8e76cce
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
import React, { cloneElement, ReactElement } from "react"; | ||
|
||
interface FocusableProps { | ||
children: ReactElement; | ||
rounded?: boolean; | ||
} | ||
|
||
const Focusable: React.FC<FocusableProps> = ({ children, rounded = false }) => { | ||
return cloneElement(children, { | ||
className: `${children.props.className} | ||
${rounded ? "rounded-full" : "rounded-md"} focus:outline-none focus:ring-white focus-visible:ring-2 focus-visible:ring-pink-600 focus-visible:ring-offset-pink-600`, | ||
}); | ||
}; | ||
|
||
export default Focusable; |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -13,27 +13,32 @@ import { | |||||||||||||||||||||||||||||||||||||||||||||||
twitterUrl, | ||||||||||||||||||||||||||||||||||||||||||||||||
youtubeUrl, | ||||||||||||||||||||||||||||||||||||||||||||||||
} from "../../config/site_settings"; | ||||||||||||||||||||||||||||||||||||||||||||||||
import Focusable from "../Focusable/Focusable"; | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
const navigation = { | ||||||||||||||||||||||||||||||||||||||||||||||||
main: footerNav, | ||||||||||||||||||||||||||||||||||||||||||||||||
social: [ | ||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||
name: "Twitter", | ||||||||||||||||||||||||||||||||||||||||||||||||
customStyle: "hover:bg-twitter focus:bg-twitter", | ||||||||||||||||||||||||||||||||||||||||||||||||
href: twitterUrl, | ||||||||||||||||||||||||||||||||||||||||||||||||
icon: Twitter, | ||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||
name: "GitHub", | ||||||||||||||||||||||||||||||||||||||||||||||||
customStyle: "hover:bg-github focus:bg-github", | ||||||||||||||||||||||||||||||||||||||||||||||||
href: githubUrl, | ||||||||||||||||||||||||||||||||||||||||||||||||
icon: Github, | ||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||
name: "Discord", | ||||||||||||||||||||||||||||||||||||||||||||||||
customStyle: "hover:bg-discord focus:bg-discord", | ||||||||||||||||||||||||||||||||||||||||||||||||
href: discordInviteUrl, | ||||||||||||||||||||||||||||||||||||||||||||||||
icon: Discord, | ||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||||||||||||||
name: "Youtube", | ||||||||||||||||||||||||||||||||||||||||||||||||
name: "YouTube", | ||||||||||||||||||||||||||||||||||||||||||||||||
customStyle: "hover:bg-youtube focus:bg-youtube", | ||||||||||||||||||||||||||||||||||||||||||||||||
href: youtubeUrl, | ||||||||||||||||||||||||||||||||||||||||||||||||
icon: Youtube, | ||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -51,37 +56,43 @@ const Footer = () => { | |||||||||||||||||||||||||||||||||||||||||||||||
{navigation.main.map((item) => ( | ||||||||||||||||||||||||||||||||||||||||||||||||
<div key={item.name} className="px-5 py-2"> | ||||||||||||||||||||||||||||||||||||||||||||||||
{item.href.includes("http") ? ( | ||||||||||||||||||||||||||||||||||||||||||||||||
<a | ||||||||||||||||||||||||||||||||||||||||||||||||
href={item.href} | ||||||||||||||||||||||||||||||||||||||||||||||||
target="_blank" | ||||||||||||||||||||||||||||||||||||||||||||||||
rel="noopener noreferrer" | ||||||||||||||||||||||||||||||||||||||||||||||||
className="focus-style p-1 text-base text-neutral-600 hover:text-neutral-500 dark:text-neutral-500 dark:hover:text-neutral-400" | ||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||
{item.name} | ||||||||||||||||||||||||||||||||||||||||||||||||
</a> | ||||||||||||||||||||||||||||||||||||||||||||||||
<Focusable> | ||||||||||||||||||||||||||||||||||||||||||||||||
<a | ||||||||||||||||||||||||||||||||||||||||||||||||
href={item.href} | ||||||||||||||||||||||||||||||||||||||||||||||||
target="_blank" | ||||||||||||||||||||||||||||||||||||||||||||||||
rel="noopener noreferrer" | ||||||||||||||||||||||||||||||||||||||||||||||||
className="p-1 text-base text-neutral-600 hover:text-neutral-500 dark:text-neutral-500 dark:hover:text-neutral-400" | ||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||
{item.name} | ||||||||||||||||||||||||||||||||||||||||||||||||
</a> | ||||||||||||||||||||||||||||||||||||||||||||||||
</Focusable> | ||||||||||||||||||||||||||||||||||||||||||||||||
) : ( | ||||||||||||||||||||||||||||||||||||||||||||||||
<Link | ||||||||||||||||||||||||||||||||||||||||||||||||
className="focus-style p-1 text-base text-neutral-600 hover:text-neutral-500 dark:text-neutral-500 dark:hover:text-neutral-400" | ||||||||||||||||||||||||||||||||||||||||||||||||
href={item.href} | ||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||
{item.name} | ||||||||||||||||||||||||||||||||||||||||||||||||
</Link> | ||||||||||||||||||||||||||||||||||||||||||||||||
<Focusable> | ||||||||||||||||||||||||||||||||||||||||||||||||
<Link | ||||||||||||||||||||||||||||||||||||||||||||||||
className="p-1 text-base text-neutral-600 hover:text-neutral-500 dark:text-neutral-500 dark:hover:text-neutral-400" | ||||||||||||||||||||||||||||||||||||||||||||||||
href={item.href} | ||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||
{item.name} | ||||||||||||||||||||||||||||||||||||||||||||||||
</Link> | ||||||||||||||||||||||||||||||||||||||||||||||||
</Focusable> | ||||||||||||||||||||||||||||||||||||||||||||||||
)} | ||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||
))} | ||||||||||||||||||||||||||||||||||||||||||||||||
</nav> | ||||||||||||||||||||||||||||||||||||||||||||||||
<div className="mt-8 flex justify-center space-x-8"> | ||||||||||||||||||||||||||||||||||||||||||||||||
{navigation.social.map((item) => ( | ||||||||||||||||||||||||||||||||||||||||||||||||
<a | ||||||||||||||||||||||||||||||||||||||||||||||||
key={item.name} | ||||||||||||||||||||||||||||||||||||||||||||||||
href={item.href} | ||||||||||||||||||||||||||||||||||||||||||||||||
target="_blank" | ||||||||||||||||||||||||||||||||||||||||||||||||
rel="noopener noreferrer" | ||||||||||||||||||||||||||||||||||||||||||||||||
className={`focus-style rounded-md p-1 transition-all duration-300 hover:scale-105 hover:text-white hover:brightness-110 focus:scale-105 focus:text-white focus:brightness-110 ${item.name.toLowerCase()}`} | ||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||
<span className="sr-only">{item.name}</span> | ||||||||||||||||||||||||||||||||||||||||||||||||
<item.icon className="h-6 w-6" aria-hidden="true" /> | ||||||||||||||||||||||||||||||||||||||||||||||||
</a> | ||||||||||||||||||||||||||||||||||||||||||||||||
<Focusable> | ||||||||||||||||||||||||||||||||||||||||||||||||
<a | ||||||||||||||||||||||||||||||||||||||||||||||||
key={item.name} | ||||||||||||||||||||||||||||||||||||||||||||||||
href={item.href} | ||||||||||||||||||||||||||||||||||||||||||||||||
target="_blank" | ||||||||||||||||||||||||||||||||||||||||||||||||
rel="noopener noreferrer" | ||||||||||||||||||||||||||||||||||||||||||||||||
className={`rounded-md p-1 transition-all duration-300 hover:scale-105 hover:text-white hover:brightness-110 focus:scale-105 focus:text-white focus:brightness-110 ${item.customStyle.toLowerCase()}`} | ||||||||||||||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||||||||||||||
<span className="sr-only">{item.name}</span> | ||||||||||||||||||||||||||||||||||||||||||||||||
<item.icon className="h-6 w-6" aria-hidden="true" /> | ||||||||||||||||||||||||||||||||||||||||||||||||
</a> | ||||||||||||||||||||||||||||||||||||||||||||||||
</Focusable> | ||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+84
to
+95
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix missing key prop in social media links iteration. The key prop should be moved to the outermost element in the iteration to help React efficiently update the DOM. - <Focusable>
- <a
- key={item.name}
+ <Focusable key={item.name}>
+ <a
href={item.href}
target="_blank"
rel="noopener noreferrer"
className={`rounded-md p-1 transition-all duration-300 hover:scale-105 hover:text-white hover:brightness-110 focus:scale-105 focus:text-white focus:brightness-110 ${item.customStyle.toLowerCase()}`}
> 📝 Committable suggestion
Suggested change
🧰 Tools🪛 Biome
|
||||||||||||||||||||||||||||||||||||||||||||||||
))} | ||||||||||||||||||||||||||||||||||||||||||||||||
</div> | ||||||||||||||||||||||||||||||||||||||||||||||||
<p className="mt-8 text-center text-xs text-neutral-600 dark:text-neutral-500"> | ||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add prop type safety and improve className handling
The current implementation has several potential issues:
Consider this safer implementation:
📝 Committable suggestion