From 4b664f91867fab622f8b69e64498f90171959f10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o?= <43091603+glazk0@users.noreply.github.com> Date: Sun, 26 Feb 2023 20:07:56 +0100 Subject: [PATCH] Fix Console --- app/page.tsx | 67 +++++++++++++++------------------------------- styles/globals.css | 13 +++++---- ui/Console.tsx | 38 ++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 53 deletions(-) create mode 100644 ui/Console.tsx diff --git a/app/page.tsx b/app/page.tsx index 8cdca94..0e7ced2 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,61 +1,36 @@ -'use client'; - import AppLink from '@/ui/AppLink'; - -import { useEffect } from 'react'; - +import Console from '@/ui/Console'; export default function Home() { - let start: boolean = true; - useEffect(() => { - if (start) { - start = false; - let visible: boolean = true; - let animation: boolean = true; //TODO ajouter un bouton pour arreter l'animation - let con: HTMLElement | null = document.getElementById('console'); - window.setInterval(function () { - if (con !== null && visible === true && animation === true) { - con.className = 'console invisible'; - visible = false; - } else if (con !== null && animation === true) { - con.className = 'console'; - visible = true; - } - }, 400); - let word: HTMLElement | null = document.getElementById('text') - let text: string = "Peer-at-Code"; - for (let i: number = 0; i < text.length; i++) { - setTimeout(function () { - if (word !== null) - word.innerHTML += text.charAt(i); - }, 410 * i) - } - } - }, []); return (
-
-

- Bienvenu sur -

-

- -
_
-

-

+
+

Bienvenu sur

+ + + Dashboard
-
- -

- Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion dans des applications de mise en page de texte, comme Aldus PageMaker. -

+
+ +

+ Le Lorem Ipsum est simplement du faux texte employé dans la composition et la mise en + page avant impression. Le Lorem Ipsum est le faux texte standard de l'imprimerie depuis + les années 1500, quand un imprimeur anonyme assembla ensemble des morceaux de texte pour + réaliser un livre spécimen de polices de texte. Il n'a pas fait que survivre cinq + siècles, mais s'est aussi adapté à la bureautique informatique, sans que son contenu + n'en soit modifié. Il a été popularisé dans les années 1960 grâce à la vente de feuilles + Letraset contenant des passages du Lorem Ipsum, et, plus récemment, par son inclusion + dans des applications de mise en page de texte, comme Aldus PageMaker. +

); } - diff --git a/styles/globals.css b/styles/globals.css index c786c2e..9ed3a33 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -2,10 +2,9 @@ @tailwind components; @tailwind utilities; -.console{ - display:inline-block; - position:relative; - top:-0.14em; - left:5px; - height: 1rem; -} \ No newline at end of file +@layer components { + .console { + @apply relative top-0.5 inline-block; + /* make it hidden then visible every seconde */ + } +} diff --git a/ui/Console.tsx b/ui/Console.tsx new file mode 100644 index 0000000..9dc2823 --- /dev/null +++ b/ui/Console.tsx @@ -0,0 +1,38 @@ +'use client'; + +import { cn } from '@/lib/utils'; +import { useEffect, useState } from 'react'; + +export default function Console({ text, className }: { text: string; className?: string }) { + const [message, setMessage] = useState(''); + const [typingIndex, setTypingIndex] = useState(0); + + const typingDelay = 400; // The delay between each character being typed, in milliseconds + + useEffect(() => { + const intervalId = setInterval(() => { + setTypingIndex((prevIndex) => prevIndex + 1); + }, typingDelay); + + return () => clearInterval(intervalId); + }, [text]); + + useEffect(() => { + if (typingIndex <= text.length) { + setMessage(text.slice(0, typingIndex)); + } + }, [typingIndex, text]); + + return ( +
+ {message} +
+ _ +
+
+ ); +}