diff --git a/src/content/Components/Dock/Dock.jsx b/src/content/Components/Dock/Dock.jsx
index 926aeaa9e..fb7f46e74 100644
--- a/src/content/Components/Dock/Dock.jsx
+++ b/src/content/Components/Dock/Dock.jsx
@@ -5,7 +5,7 @@ import { Children, cloneElement, useEffect, useMemo, useRef, useState } from 're
import './Dock.css';
-function DockItem({ children, className = '', onClick, mouseX, spring, distance, magnification, baseItemSize }) {
+function DockItem({ children, className = '', onClick, mouseX, spring, distance, magnification, baseItemSize, label }) {
const ref = useRef(null);
const isHovered = useMotionValue(0);
@@ -20,6 +20,13 @@ function DockItem({ children, className = '', onClick, mouseX, spring, distance,
const targetSize = useTransform(mouseDistance, [-distance, 0, distance], [baseItemSize, magnification, baseItemSize]);
const size = useSpring(targetSize, spring);
+ const handleKeyDown = e => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ onClick?.();
+ }
+ };
+
return (
{Children.map(children, child => cloneElement(child, { isHovered }))}
@@ -122,6 +131,7 @@ export default function Dock({
distance={distance}
magnification={magnification}
baseItemSize={baseItemSize}
+ label={item.label}
>
{item.icon}
{item.label}
diff --git a/src/tailwind/Components/Dock/Dock.jsx b/src/tailwind/Components/Dock/Dock.jsx
index 09bcfe2cf..95397a281 100644
--- a/src/tailwind/Components/Dock/Dock.jsx
+++ b/src/tailwind/Components/Dock/Dock.jsx
@@ -3,7 +3,7 @@
import { motion, useMotionValue, useSpring, useTransform, AnimatePresence } from 'motion/react';
import { Children, cloneElement, useEffect, useMemo, useRef, useState } from 'react';
-function DockItem({ children, className = '', onClick, mouseX, spring, distance, magnification, baseItemSize }) {
+function DockItem({ children, className = '', onClick, mouseX, spring, distance, magnification, baseItemSize, label }) {
const ref = useRef(null);
const isHovered = useMotionValue(0);
@@ -18,6 +18,13 @@ function DockItem({ children, className = '', onClick, mouseX, spring, distance,
const targetSize = useTransform(mouseDistance, [-distance, 0, distance], [baseItemSize, magnification, baseItemSize]);
const size = useSpring(targetSize, spring);
+ const handleKeyDown = e => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ onClick?.();
+ }
+ };
+
return (
isHovered.set(1)}
onBlur={() => isHovered.set(0)}
onClick={onClick}
+ onKeyDown={handleKeyDown}
className={`relative inline-flex items-center justify-center rounded-full bg-[#120F17] border-neutral-700 border-2 shadow-md ${className}`}
tabIndex={0}
role="button"
aria-haspopup="true"
+ aria-label={label}
>
{Children.map(children, child => cloneElement(child, { isHovered }))}
@@ -120,6 +129,7 @@ export default function Dock({
distance={distance}
magnification={magnification}
baseItemSize={baseItemSize}
+ label={item.label}
>
{item.icon}
{item.label}
diff --git a/src/ts-default/Components/Dock/Dock.tsx b/src/ts-default/Components/Dock/Dock.tsx
index 7f04f5bd8..6d460aec6 100644
--- a/src/ts-default/Components/Dock/Dock.tsx
+++ b/src/ts-default/Components/Dock/Dock.tsx
@@ -40,6 +40,7 @@ type DockItemProps = {
distance: number;
baseItemSize: number;
magnification: number;
+ label?: React.ReactNode;
};
function DockItem({
@@ -50,7 +51,8 @@ function DockItem({
spring,
distance,
magnification,
- baseItemSize
+ baseItemSize,
+ label
}: DockItemProps) {
const ref = useRef(null);
const isHovered = useMotionValue(0);
@@ -66,6 +68,13 @@ function DockItem({
const targetSize = useTransform(mouseDistance, [-distance, 0, distance], [baseItemSize, magnification, baseItemSize]);
const size = useSpring(targetSize, spring);
+ const handleKeyDown = (e: React.KeyboardEvent) => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ onClick?.();
+ }
+ };
+
return (
isHovered.set(1)}
onBlur={() => isHovered.set(0)}
onClick={onClick}
+ onKeyDown={handleKeyDown}
className={`dock-item ${className}`}
tabIndex={0}
role="button"
aria-haspopup="true"
+ aria-label={typeof label === 'string' ? label : undefined}
>
{Children.map(children, child =>
React.isValidElement(child)
@@ -184,6 +195,7 @@ export default function Dock({
distance={distance}
magnification={magnification}
baseItemSize={baseItemSize}
+ label={item.label}
>
{item.icon}
{item.label}
diff --git a/src/ts-tailwind/Components/Dock/Dock.tsx b/src/ts-tailwind/Components/Dock/Dock.tsx
index b2b7e4ab3..4f477d0ac 100644
--- a/src/ts-tailwind/Components/Dock/Dock.tsx
+++ b/src/ts-tailwind/Components/Dock/Dock.tsx
@@ -38,6 +38,7 @@ type DockItemProps = {
distance: number;
baseItemSize: number;
magnification: number;
+ label?: React.ReactNode;
};
function DockItem({
@@ -48,7 +49,8 @@ function DockItem({
spring,
distance,
magnification,
- baseItemSize
+ baseItemSize,
+ label
}: DockItemProps) {
const ref = useRef(null);
const isHovered = useMotionValue(0);
@@ -64,6 +66,13 @@ function DockItem({
const targetSize = useTransform(mouseDistance, [-distance, 0, distance], [baseItemSize, magnification, baseItemSize]);
const size = useSpring(targetSize, spring);
+ const handleKeyDown = (e: React.KeyboardEvent) => {
+ if (e.key === 'Enter' || e.key === ' ') {
+ e.preventDefault();
+ onClick?.();
+ }
+ };
+
return (
isHovered.set(1)}
onBlur={() => isHovered.set(0)}
onClick={onClick}
+ onKeyDown={handleKeyDown}
className={`relative inline-flex items-center justify-center rounded-full bg-[#120F17] border-neutral-700 border-2 shadow-md ${className}`}
tabIndex={0}
role="button"
aria-haspopup="true"
+ aria-label={typeof label === 'string' ? label : undefined}
>
{Children.map(children, child =>
React.isValidElement(child)
@@ -179,6 +190,7 @@ export default function Dock({
distance={distance}
magnification={magnification}
baseItemSize={baseItemSize}
+ label={item.label}
>
{item.icon}
{item.label}