404lab 2.0.5 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/utils/fs.js +1 -1
- package/package.json +1 -1
- package/templates/AmongUs.tsx +1 -6
- package/templates/BlueGlitch.tsx +1 -7
- package/templates/BugGame.tsx +0 -1
- package/templates/GeeksforGeeks.tsx +3 -9
- package/templates/Google.tsx +1 -7
- package/templates/MacOs.tsx +1 -3
- package/templates/ModernPage.tsx +1 -5
- package/templates/Particles.tsx +1 -6
- package/templates/Poet.tsx +1 -5
- package/templates/RetroTv.tsx +2 -10
- package/templates/SimplePage.tsx +1 -5
- package/templates/Snow.tsx +1 -6
- package/templates/StoneAge.tsx +2 -6
- package/templates/StrangerThings.tsx +1 -6
- package/templates/Terminal.tsx +1 -6
- package/templates/Vercel.tsx +2 -9
- package/templates/Void.tsx +2 -3
package/cli/utils/fs.js
CHANGED
|
@@ -51,7 +51,7 @@ export async function safeWrite(filePath, content, options = {}) {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
log.warn(`File exists: ${relPath}`);
|
|
54
|
-
const shouldOverwrite = await confirm("Overwrite?",
|
|
54
|
+
const shouldOverwrite = await confirm("Overwrite?", false);
|
|
55
55
|
|
|
56
56
|
if (!shouldOverwrite) {
|
|
57
57
|
log.info(`Skipped: ${relPath}`);
|
package/package.json
CHANGED
package/templates/AmongUs.tsx
CHANGED
|
@@ -4,7 +4,6 @@ import { useEffect, useRef, useState } from "react";
|
|
|
4
4
|
import Image from "next/image";
|
|
5
5
|
import Link from "next/link";
|
|
6
6
|
import { VT323 } from "next/font/google";
|
|
7
|
-
import { cn } from "@/components/ui/cn";
|
|
8
7
|
|
|
9
8
|
const vt323 = VT323({
|
|
10
9
|
weight: "400",
|
|
@@ -37,11 +36,7 @@ const AmongUs = ({ className }: { className?: string }) => {
|
|
|
37
36
|
return (
|
|
38
37
|
<div
|
|
39
38
|
ref={containerRef}
|
|
40
|
-
className={
|
|
41
|
-
"relative flex min-h-screen w-full flex-col items-center justify-center overflow-hidden bg-[#000000] text-white",
|
|
42
|
-
vt323.className,
|
|
43
|
-
className
|
|
44
|
-
)}
|
|
39
|
+
className={`relative flex min-h-screen w-full flex-col items-center justify-center overflow-hidden bg-[#000000] text-white ${vt323.className} ${className || ""}`}
|
|
45
40
|
>
|
|
46
41
|
<style jsx global>{`
|
|
47
42
|
|
package/templates/BlueGlitch.tsx
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useState } from "react";
|
|
4
4
|
import Link from "next/link";
|
|
5
|
-
import { cn } from "@/components/ui/cn";
|
|
6
|
-
|
|
7
5
|
const BlueGlitch = ({
|
|
8
6
|
fullScreen = true,
|
|
9
7
|
className,
|
|
@@ -22,11 +20,7 @@ const BlueGlitch = ({
|
|
|
22
20
|
|
|
23
21
|
return (
|
|
24
22
|
<main
|
|
25
|
-
className={
|
|
26
|
-
"relative flex items-center justify-center bg-[#000084] overflow-hidden select-none font-mono",
|
|
27
|
-
fullScreen ? "min-h-screen" : "h-full",
|
|
28
|
-
className
|
|
29
|
-
)}
|
|
23
|
+
className={`relative flex items-center justify-center bg-[#000084] overflow-hidden select-none font-mono ${fullScreen ? "min-h-screen" : "h-full"} ${className || ""}`}
|
|
30
24
|
>
|
|
31
25
|
<style jsx global>{`
|
|
32
26
|
@font-face {
|
package/templates/BugGame.tsx
CHANGED
|
@@ -3,15 +3,11 @@
|
|
|
3
3
|
import Image from "next/image";
|
|
4
4
|
import Link from "next/link";
|
|
5
5
|
import { Search, GraduationCap, Code2, Terminal, BookOpen } from "lucide-react";
|
|
6
|
-
import { cn } from "@/components/ui/cn";
|
|
7
6
|
|
|
8
7
|
const GeeksforGeeks = ({ className }: { className?: string }) => {
|
|
9
8
|
return (
|
|
10
9
|
<div
|
|
11
|
-
className={
|
|
12
|
-
"min-h-screen flex flex-col items-center justify-center bg-[#f8f9fa] relative overflow-hidden px-4 py-12",
|
|
13
|
-
className
|
|
14
|
-
)}
|
|
10
|
+
className={`min-h-screen flex flex-col items-center justify-center bg-[#f8f9fa] relative overflow-hidden px-4 py-12 ${className || ""}`}
|
|
15
11
|
>
|
|
16
12
|
<style jsx global>{`
|
|
17
13
|
@keyframes fadeIn {
|
|
@@ -118,11 +114,9 @@ const GeeksforGeeks = ({ className }: { className?: string }) => {
|
|
|
118
114
|
const Card = ({ title, icon, color, description }: { title: string; icon: React.ReactNode; color: string; description: string }) => {
|
|
119
115
|
return (
|
|
120
116
|
<div
|
|
121
|
-
className=
|
|
122
|
-
"p-6 rounded-2xl border bg-white flex flex-col items-center text-center shadow-sm hover:shadow-xl transition-all duration-300 cursor-pointer group hover:-translate-y-2 hover:scale-[1.02]"
|
|
123
|
-
)}
|
|
117
|
+
className="p-6 rounded-2xl border bg-white flex flex-col items-center text-center shadow-sm hover:shadow-xl transition-all duration-300 cursor-pointer group hover:-translate-y-2 hover:scale-[1.02]"
|
|
124
118
|
>
|
|
125
|
-
<div className={
|
|
119
|
+
<div className={`p-4 rounded-xl mb-4 transition-colors group-hover:scale-110 ${color}`}>
|
|
126
120
|
{icon}
|
|
127
121
|
</div>
|
|
128
122
|
<h3 className="font-bold text-gray-900 mb-1">{title}</h3>
|
package/templates/Google.tsx
CHANGED
|
@@ -1,17 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
3
|
import Link from "next/link";
|
|
4
|
-
import { cn } from "@/components/ui/cn";
|
|
5
4
|
import Image from "next/image";
|
|
6
|
-
|
|
7
|
-
|
|
8
5
|
const Google = ({ className }: { className?: string }) => {
|
|
9
6
|
return (
|
|
10
7
|
<div
|
|
11
|
-
className={
|
|
12
|
-
"min-h-screen bg-white flex flex-col items-center justify-center font-sans relative overflow-hidden",
|
|
13
|
-
className
|
|
14
|
-
)}
|
|
8
|
+
className={`min-h-screen bg-white flex flex-col items-center justify-center font-sans relative overflow-hidden ${className || ""}`}
|
|
15
9
|
>
|
|
16
10
|
<div className="absolute top-6 sm:top-10 left-6 sm:left-10 md:left-20">
|
|
17
11
|
<Image
|
package/templates/MacOs.tsx
CHANGED
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useRef, useState, KeyboardEvent } from "react";
|
|
4
4
|
import { useRouter } from "next/navigation";
|
|
5
|
-
import { cn } from "@/components/ui/cn";
|
|
6
5
|
|
|
7
6
|
type OutputLine = {
|
|
8
7
|
type: "command" | "output" | "error" | "system" | "warning";
|
|
9
8
|
text: string;
|
|
10
9
|
};
|
|
11
|
-
|
|
12
10
|
const MacOs = ({ className }: { className?: string }) => {
|
|
13
11
|
const router = useRouter();
|
|
14
12
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
@@ -68,7 +66,7 @@ const MacOs = ({ className }: { className?: string }) => {
|
|
|
68
66
|
};
|
|
69
67
|
|
|
70
68
|
return (
|
|
71
|
-
<main className={
|
|
69
|
+
<main className={`min-h-screen flex items-center justify-center bg-[#0d1117] relative overflow-hidden font-mono ${className || ""}`}>
|
|
72
70
|
<div className="absolute inset-0 z-0">
|
|
73
71
|
<div className="absolute top-[-10%] right-[-10%] w-[500px] h-[500px] bg-purple-600/10 rounded-full blur-[120px]" />
|
|
74
72
|
<div className="absolute bottom-[-10%] left-[-10%] w-[500px] h-[500px] bg-blue-600/10 rounded-full blur-[120px]" />
|
package/templates/ModernPage.tsx
CHANGED
|
@@ -2,15 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
import Link from "next/link";
|
|
5
|
-
import { cn } from "@/components/ui/cn";
|
|
6
5
|
|
|
7
6
|
const ModernPage = ({ className }: { className?: string }) => {
|
|
8
7
|
return (
|
|
9
8
|
<div
|
|
10
|
-
className={
|
|
11
|
-
"min-h-screen bg-[#050505] flex items-center justify-center p-6 overflow-hidden relative font-sans",
|
|
12
|
-
className
|
|
13
|
-
)}
|
|
9
|
+
className={`min-h-screen bg-[#050505] flex items-center justify-center p-6 overflow-hidden relative font-sans ${className || ""}`}
|
|
14
10
|
>
|
|
15
11
|
{/* Mesh Gradient Background */}
|
|
16
12
|
<div className="absolute inset-0 overflow-hidden pointer-events-none">
|
package/templates/Particles.tsx
CHANGED
|
@@ -4,7 +4,6 @@ import { useEffect, useState } from "react";
|
|
|
4
4
|
import Particles, { initParticlesEngine } from "@tsparticles/react";
|
|
5
5
|
import { loadSlim } from "@tsparticles/slim";
|
|
6
6
|
import { type Container, type ISourceOptions } from "@tsparticles/engine";
|
|
7
|
-
import { cn } from "@/components/ui/cn";
|
|
8
7
|
import Link from "next/link";
|
|
9
8
|
|
|
10
9
|
const Custom404Clean = ({
|
|
@@ -132,11 +131,7 @@ const Custom404Clean = ({
|
|
|
132
131
|
|
|
133
132
|
return (
|
|
134
133
|
<div
|
|
135
|
-
className={
|
|
136
|
-
"relative flex items-center justify-center bg-black text-white overflow-hidden select-none",
|
|
137
|
-
fullScreen ? "h-screen w-full" : "h-full w-full",
|
|
138
|
-
className
|
|
139
|
-
)}
|
|
134
|
+
className={`relative flex items-center justify-center bg-black text-white overflow-hidden select-none ${fullScreen ? "h-screen w-full" : "h-full w-full"} ${className || ""}`}
|
|
140
135
|
>
|
|
141
136
|
{init && (
|
|
142
137
|
<Particles
|
package/templates/Poet.tsx
CHANGED
|
@@ -2,17 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
import Link from "next/link";
|
|
5
|
-
import { cn } from "@/components/ui/cn";
|
|
6
5
|
|
|
7
6
|
const Poet = ({ className }: { className?: string }) => {
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
return (
|
|
11
10
|
<div
|
|
12
|
-
className={
|
|
13
|
-
"min-h-screen bg-[#1a1a1a] flex items-center justify-center p-6 relative overflow-hidden font-serif",
|
|
14
|
-
className
|
|
15
|
-
)}
|
|
11
|
+
className={`min-h-screen bg-[#1a1a1a] flex items-center justify-center p-6 relative overflow-hidden font-serif ${className || ""}`}
|
|
16
12
|
>
|
|
17
13
|
<style jsx global>{`
|
|
18
14
|
@import url('https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;0,900;1,400&display=swap');
|
package/templates/RetroTv.tsx
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import Link from "next/link";
|
|
5
5
|
|
|
6
|
-
import { cn } from "@/components/ui/cn";
|
|
7
|
-
|
|
8
6
|
const RetroTv = ({ className }: { className?: string }) => {
|
|
9
7
|
const canvasRef = useRef<HTMLCanvasElement>(null);
|
|
10
8
|
const [isOn, setIsOn] = useState(false);
|
|
@@ -60,10 +58,7 @@ const RetroTv = ({ className }: { className?: string }) => {
|
|
|
60
58
|
|
|
61
59
|
return (
|
|
62
60
|
<div
|
|
63
|
-
className={
|
|
64
|
-
"min-h-screen bg-[#1a1a1a] flex items-center justify-center p-4 sm:p-8 font-mono overflow-hidden select-none",
|
|
65
|
-
className
|
|
66
|
-
)}
|
|
61
|
+
className={`min-h-screen bg-[#1a1a1a] flex items-center justify-center p-4 sm:p-8 font-mono overflow-hidden select-none ${className || ""}`}
|
|
67
62
|
>
|
|
68
63
|
<style jsx global>{`
|
|
69
64
|
.crt-curve {
|
|
@@ -189,10 +184,7 @@ const RetroTv = ({ className }: { className?: string }) => {
|
|
|
189
184
|
|
|
190
185
|
<button
|
|
191
186
|
onClick={() => setIsOn(!isOn)}
|
|
192
|
-
className={
|
|
193
|
-
"px-4 py-2 text-xs rounded-md transition-all border-b-2 border-black font-bold",
|
|
194
|
-
isOn ? "bg-red-900 text-red-100" : "bg-green-900 text-green-100"
|
|
195
|
-
)}
|
|
187
|
+
className={`px-4 py-2 text-xs rounded-md transition-all border-b-2 border-black font-bold ${isOn ? "bg-red-900 text-red-100" : "bg-green-900 text-green-100"}`}
|
|
196
188
|
>
|
|
197
189
|
{isOn ? "POWER OFF" : "POWER ON"}
|
|
198
190
|
</button>
|
package/templates/SimplePage.tsx
CHANGED
|
@@ -2,15 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
import Link from "next/link";
|
|
5
|
-
import { cn } from "@/components/ui/cn";
|
|
6
5
|
|
|
7
6
|
const SimplePage = ({ className }: { className?: string }) => {
|
|
8
7
|
return (
|
|
9
8
|
<div
|
|
10
|
-
className={
|
|
11
|
-
"min-h-screen bg-white dark:bg-[#050505] flex items-center justify-center p-6 font-sans relative",
|
|
12
|
-
className
|
|
13
|
-
)}
|
|
9
|
+
className={`min-h-screen bg-white dark:bg-[#050505] flex items-center justify-center p-6 font-sans relative ${className || ""}`}
|
|
14
10
|
>
|
|
15
11
|
<style jsx global>{`
|
|
16
12
|
@keyframes fadeInUp {
|
package/templates/Snow.tsx
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import Link from "next/link";
|
|
5
5
|
|
|
6
|
-
import { cn } from "@/components/ui/cn";
|
|
7
|
-
|
|
8
6
|
const Snow = ({ className }: { className?: string }) => {
|
|
9
7
|
const canvasRef = useRef<HTMLCanvasElement>(null);
|
|
10
8
|
const [isHovered, setIsHovered] = useState(false);
|
|
@@ -80,10 +78,7 @@ const Snow = ({ className }: { className?: string }) => {
|
|
|
80
78
|
|
|
81
79
|
return (
|
|
82
80
|
<div
|
|
83
|
-
className={
|
|
84
|
-
"min-h-screen w-full flex flex-col items-center justify-center overflow-hidden bg-gradient-to-b from-[#b7d1e5] via-[#e8f2f6] to-white relative",
|
|
85
|
-
className
|
|
86
|
-
)}
|
|
81
|
+
className={`min-h-screen w-full flex flex-col items-center justify-center overflow-hidden bg-gradient-to-b from-[#b7d1e5] via-[#e8f2f6] to-white relative ${className || ""}`}
|
|
87
82
|
>
|
|
88
83
|
<canvas ref={canvasRef} className="absolute inset-0 z-10 pointer-events-none opacity-60" />
|
|
89
84
|
|
package/templates/StoneAge.tsx
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { useEffect, useState } from "react";
|
|
4
4
|
import Link from "next/link";
|
|
5
5
|
import { Arvo } from "next/font/google";
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
|
|
8
8
|
const arvo = Arvo({
|
|
9
9
|
weight: ["400", "700"],
|
|
@@ -22,11 +22,7 @@ const StoneAge = ({ className }: { className?: string }) => {
|
|
|
22
22
|
|
|
23
23
|
return (
|
|
24
24
|
<div
|
|
25
|
-
className={
|
|
26
|
-
"min-h-screen w-full bg-[#fcf8f0] flex flex-col items-center justify-center p-8 overflow-hidden relative",
|
|
27
|
-
arvo.className,
|
|
28
|
-
className
|
|
29
|
-
)}
|
|
25
|
+
className={`min-h-screen w-full bg-[#fcf8f0] flex flex-col items-center justify-center p-8 overflow-hidden relative ${arvo.className} ${className || ""}`}
|
|
30
26
|
>
|
|
31
27
|
<style jsx global>{`
|
|
32
28
|
.paper-texture {
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { cn } from "@/components/ui/cn";
|
|
4
|
-
|
|
5
3
|
import Link from "next/link";
|
|
6
4
|
|
|
7
5
|
const StrangerThings = ({ className }: { className?: string }) => {
|
|
8
6
|
return (
|
|
9
7
|
<div
|
|
10
|
-
className={
|
|
11
|
-
"min-h-[500px] flex flex-col items-center justify-center p-6 overflow-hidden transition-colors duration-500 bg-background",
|
|
12
|
-
className
|
|
13
|
-
)}
|
|
8
|
+
className={`min-h-[500px] flex flex-col items-center justify-center p-6 overflow-hidden transition-colors duration-500 bg-background ${className || ""}`}
|
|
14
9
|
style={{ perspective: "1200px" }}
|
|
15
10
|
>
|
|
16
11
|
<style jsx>{`
|
package/templates/Terminal.tsx
CHANGED
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import Link from "next/link";
|
|
5
5
|
|
|
6
|
-
import { cn } from "@/components/ui/cn";
|
|
7
|
-
|
|
8
6
|
const Terminal = ({ className }: { className?: string }) => {
|
|
9
7
|
const canvasRef = useRef<HTMLCanvasElement>(null);
|
|
10
8
|
const [displayText, setDisplayText] = useState("");
|
|
@@ -83,10 +81,7 @@ const Terminal = ({ className }: { className?: string }) => {
|
|
|
83
81
|
|
|
84
82
|
return (
|
|
85
83
|
<div
|
|
86
|
-
className={
|
|
87
|
-
"min-h-screen bg-black flex flex-col items-center justify-center p-8 overflow-hidden font-mono relative",
|
|
88
|
-
className
|
|
89
|
-
)}
|
|
84
|
+
className={`min-h-screen bg-black flex flex-col items-center justify-center p-8 overflow-hidden font-mono relative ${className || ""}`}
|
|
90
85
|
>
|
|
91
86
|
<style jsx global>{`
|
|
92
87
|
@keyframes fadeInScale {
|
package/templates/Vercel.tsx
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
import Link from "next/link";
|
|
5
|
-
import { cn } from "@/components/ui/cn";
|
|
6
5
|
import { useEffect, useState } from "react";
|
|
7
6
|
|
|
8
7
|
const allLogs = [
|
|
@@ -38,10 +37,7 @@ const Vercel = ({ className }: { className?: string }) => {
|
|
|
38
37
|
|
|
39
38
|
return (
|
|
40
39
|
<div
|
|
41
|
-
className={
|
|
42
|
-
"min-h-screen w-full bg-black text-white flex flex-col items-center justify-center p-8 overflow-hidden font-sans relative",
|
|
43
|
-
className
|
|
44
|
-
)}
|
|
40
|
+
className={`min-h-screen w-full bg-black text-white flex flex-col items-center justify-center p-8 overflow-hidden font-sans relative ${className || ""}`}
|
|
45
41
|
>
|
|
46
42
|
<style jsx global>{`
|
|
47
43
|
@keyframes fadeIn {
|
|
@@ -130,10 +126,7 @@ const Vercel = ({ className }: { className?: string }) => {
|
|
|
130
126
|
{logs.map((log, i) => (
|
|
131
127
|
<div
|
|
132
128
|
key={i}
|
|
133
|
-
className={
|
|
134
|
-
"flex gap-4 animate-fade-in-right",
|
|
135
|
-
log.text.includes("Error") || log.text.includes("failed") ? "text-red-400" : "text-gray-400"
|
|
136
|
-
)}
|
|
129
|
+
className={`flex gap-4 animate-fade-in-right ${log.text.includes("Error") || log.text.includes("failed") ? "text-red-400" : "text-gray-400"}`}
|
|
137
130
|
>
|
|
138
131
|
<span className="text-gray-600">[{log.time}]</span>
|
|
139
132
|
<span>{log.text}</span>
|
package/templates/Void.tsx
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import Link from "next/link";
|
|
5
|
-
import { cn } from "@/components/ui/cn";
|
|
6
5
|
|
|
7
6
|
export default function Void({ className }: { className?: string }) {
|
|
8
7
|
const canvasRef = useRef<HTMLCanvasElement | null>(null);
|
|
@@ -211,7 +210,7 @@ export default function Void({ className }: { className?: string }) {
|
|
|
211
210
|
}, []);
|
|
212
211
|
|
|
213
212
|
return (
|
|
214
|
-
<div className={
|
|
213
|
+
<div className={`relative min-h-screen flex flex-col items-center justify-center bg-[#05050a] text-[#f0f0f3] overflow-hidden font-sans ${className || ""}`}>
|
|
215
214
|
<style jsx global>{`
|
|
216
215
|
@keyframes fadeIn {
|
|
217
216
|
from { opacity: 0; transform: translateY(10px); }
|
|
@@ -257,7 +256,7 @@ export default function Void({ className }: { className?: string }) {
|
|
|
257
256
|
))}
|
|
258
257
|
</div>
|
|
259
258
|
|
|
260
|
-
<div className={
|
|
259
|
+
<div className={`transition-all duration-500 transform ${isChanging ? "opacity-0 translate-y-2" : "opacity-100 translate-y-0"}`}>
|
|
261
260
|
<h1 className="text-2xl md:text-5xl font-bold tracking-tight mb-4 flex flex-col items-center">
|
|
262
261
|
<span className="text-white/80">{messages[titleIdx].title[0]}</span>
|
|
263
262
|
<span className="text-[#00e5c7] drop-shadow-[0_0_15px_rgba(0,229,199,0.3)]">
|