feat: Adiciona a estrutura inicial do portfólio com componentes para experiência, hero, sobre, habilidades, projetos, modalidades de trabalho e contato.

This commit is contained in:
Evandro Fonseca Junior committed 2026-02-14 02:20:54 -03:00
1 parent 65dd049963
commit 77956223b3
12 files changed
+576 -470

No files matched your search

+10 -25
View File
@@ -60,9 +60,10 @@ const Squares: React.FC<SquaresProps> = ({
if (
hoveredSquareRef.current &&
Math.floor((x - startX) / squareSize) ===
hoveredSquareRef.current.x &&
Math.floor((y - startY) / squareSize) === hoveredSquareRef.current.y
hoveredSquareRef.current.x >= squareX &&
hoveredSquareRef.current.x < squareX + squareSize &&
hoveredSquareRef.current.y >= squareY &&
hoveredSquareRef.current.y < squareY + squareSize
) {
ctx.fillStyle = hoverFillColor;
ctx.fillRect(squareX, squareY, squareSize, squareSize);
@@ -122,42 +123,26 @@ const Squares: React.FC<SquaresProps> = ({
};
const handleMouseMove = (event: MouseEvent) => {
if (!canvas) return;
const rect = canvas.getBoundingClientRect();
const mouseX = event.clientX - rect.left;
const mouseY = event.clientY - rect.top;
const startX = Math.floor(gridOffset.current.x / squareSize) * squareSize;
const startY = Math.floor(gridOffset.current.y / squareSize) * squareSize;
const hoveredSquareX = Math.floor(
(mouseX + gridOffset.current.x - startX) / squareSize
);
const hoveredSquareY = Math.floor(
(mouseY + gridOffset.current.y - startY) / squareSize
);
if (
!hoveredSquareRef.current ||
hoveredSquareRef.current.x !== hoveredSquareX ||
hoveredSquareRef.current.y !== hoveredSquareY
) {
hoveredSquareRef.current = { x: hoveredSquareX, y: hoveredSquareY };
}
hoveredSquareRef.current = { x: mouseX, y: mouseY };
};
const handleMouseLeave = () => {
hoveredSquareRef.current = null;
};
canvas.addEventListener("mousemove", handleMouseMove);
canvas.addEventListener("mouseleave", handleMouseLeave);
window.addEventListener("mousemove", handleMouseMove);
document.addEventListener("mouseleave", handleMouseLeave); // Use document for leaving window
requestRef.current = requestAnimationFrame(updateAnimation);
return () => {
window.removeEventListener("resize", resizeCanvas);
if (requestRef.current) cancelAnimationFrame(requestRef.current);
canvas.removeEventListener("mousemove", handleMouseMove);
canvas.removeEventListener("mouseleave", handleMouseLeave);
window.removeEventListener("mousemove", handleMouseMove);
document.removeEventListener("mouseleave", handleMouseLeave);
};
}, [direction, speed, borderColor, hoverFillColor, squareSize]);
+5 -5
View File
@@ -134,14 +134,14 @@ const Particles: React.FC<ParticlesProps> = ({
resize();
const handleMouseMove = (e: MouseEvent) => {
const rect = container.getBoundingClientRect();
const x = ((e.clientX - rect.left) / rect.width) * 2 - 1;
const y = -(((e.clientY - rect.top) / rect.height) * 2 - 1);
// Use window dimensions since the canvas is fixed full screen
const x = (e.clientX / window.innerWidth) * 2 - 1;
const y = -((e.clientY / window.innerHeight) * 2 - 1);
mouseRef.current = { x, y };
};
if (moveParticlesOnHover) {
container.addEventListener("mousemove", handleMouseMove);
window.addEventListener("mousemove", handleMouseMove);
}
const count = particleCount;
@@ -227,7 +227,7 @@ const Particles: React.FC<ParticlesProps> = ({
return () => {
window.removeEventListener("resize", resize);
if (moveParticlesOnHover) {
container.removeEventListener("mousemove", handleMouseMove);
window.removeEventListener("mousemove", handleMouseMove);
}
cancelAnimationFrame(animationFrameId);
if (container.contains(gl.canvas)) {