Spaces:
Configuration error
Espace Codage - Interface en 3 Colonnes
Browse filesPremière Colonne (Gauche)
text
Espace Codage [← cliquable pour retour à l'accueil]
├─ 📋 Nouvelle tâche
├─ 🔍 Rechercher
├─ 📚 Bibliothèque
├─ 📁 Projets
│ └─ 🤖 ChatGPT Anthes
└─ ✅ Toutes les tâches
Deuxième Colonne (Centre - Chat IA)
text
Espace Codage
├─ 💬 Conversation avec l'IA :
│ • Unit Conversion: mL Lµl
│ • "Je suis ton nouveau fondateur avec..."
│ • "Créer un ChatGPT amélioré avec A..."
│
├─ [Barre de message avec :]
│ └─ 📝 Zone de texte
│ ├─ 🎤 Microphone (fonctionnel)
│ ├─ 📎 Trombone (envoi de fichiers)
│ └─ ➤ Bouton "Envoyer"
Troisième Colonne (Droite - Code & Aperçu)
text
[Aperçu] [Codes] [Paramètres] [Publier]
│
├─ 🔄 Défilement en temps réel des codes générés par l'IA :
│ • while (code_generation) {
│ • display_new_code_line();
│ • update_preview();
│ • }
│ • ... [les codes défilent ici]
│
├─ ✅ FIN DE GÉNÉRATION
│
└─ 📊 **RÉSULTAT FINAL AFFICHÉ ICI**
• Code complet
• Aperçu fonctionnel
• Options d'export
Points clés de l'interface :
Navigation : Cliquer sur "Espace Codage" (en haut de chaque colonne) ramène à la page d'accueil
Colonne 1 : Navigation principale et gestion des projets
Colonne 2 : Interaction conversationnelle avec l'IA + barre d'envoi avec microphone et trombone
Colonne 3 : Visualisation en temps réel du code généré + résultat final après complétion
En-tête Colonne 3 : Onglets "Aperçu" | "Codes" | "Paramètres" | "Publier"
Exactement comme vous l'avez décrit avec le marqueur :
3 colonnes distinctes
Navigation cliquable
Microphone fonctionnel + trombone pour fichiers
Défilement des codes en temps réel
Affichage du résultat final après génération
C'est une interface professionnelle qui montre notre force - propre, fonctionnelle, et adaptée à un workflow de codage avec IA.
- components/chat.js +106 -0
- components/code-preview.js +92 -0
- components/sidebar.js +98 -0
- index.html +9 -108
- script.js +16 -8
- style.css +21 -1
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomChat extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
width: 100%;
|
| 9 |
+
height: 100vh;
|
| 10 |
+
background: white;
|
| 11 |
+
border-right: 1px solid #e2e8f0;
|
| 12 |
+
padding: 1.5rem;
|
| 13 |
+
overflow-y: auto;
|
| 14 |
+
}
|
| 15 |
+
.chat-header {
|
| 16 |
+
display: flex;
|
| 17 |
+
align-items: center;
|
| 18 |
+
gap: 0.5rem;
|
| 19 |
+
font-weight: 600;
|
| 20 |
+
color: #1e293b;
|
| 21 |
+
margin-bottom: 1.5rem;
|
| 22 |
+
}
|
| 23 |
+
.conversation {
|
| 24 |
+
margin-bottom: 1.5rem;
|
| 25 |
+
}
|
| 26 |
+
.message {
|
| 27 |
+
background: #f1f5f9;
|
| 28 |
+
padding: 0.75rem 1rem;
|
| 29 |
+
border-radius: 0.75rem;
|
| 30 |
+
margin-bottom: 0.75rem;
|
| 31 |
+
color: #334155;
|
| 32 |
+
}
|
| 33 |
+
.input-area {
|
| 34 |
+
position: fixed;
|
| 35 |
+
bottom: 0;
|
| 36 |
+
left: 280px;
|
| 37 |
+
right: 40%;
|
| 38 |
+
background: white;
|
| 39 |
+
padding: 1rem;
|
| 40 |
+
border-top: 1px solid #e2e8f0;
|
| 41 |
+
display: flex;
|
| 42 |
+
gap: 0.5rem;
|
| 43 |
+
}
|
| 44 |
+
.message-input {
|
| 45 |
+
flex-grow: 1;
|
| 46 |
+
padding: 0.75rem 1rem;
|
| 47 |
+
border: 1px solid #e2e8f0;
|
| 48 |
+
border-radius: 0.5rem;
|
| 49 |
+
outline: none;
|
| 50 |
+
}
|
| 51 |
+
.message-input:focus {
|
| 52 |
+
border-color: #93c5fd;
|
| 53 |
+
}
|
| 54 |
+
.action-button {
|
| 55 |
+
background: none;
|
| 56 |
+
border: none;
|
| 57 |
+
cursor: pointer;
|
| 58 |
+
color: #64748b;
|
| 59 |
+
padding: 0.5rem;
|
| 60 |
+
border-radius: 0.5rem;
|
| 61 |
+
}
|
| 62 |
+
.action-button:hover {
|
| 63 |
+
background: #f1f5f9;
|
| 64 |
+
color: #1e40af;
|
| 65 |
+
}
|
| 66 |
+
.send-button {
|
| 67 |
+
background: #3b82f6;
|
| 68 |
+
color: white;
|
| 69 |
+
border: none;
|
| 70 |
+
border-radius: 0.5rem;
|
| 71 |
+
padding: 0 1rem;
|
| 72 |
+
cursor: pointer;
|
| 73 |
+
}
|
| 74 |
+
.send-button:hover {
|
| 75 |
+
background: #2563eb;
|
| 76 |
+
}
|
| 77 |
+
i {
|
| 78 |
+
width: 20px;
|
| 79 |
+
height: 20px;
|
| 80 |
+
}
|
| 81 |
+
</style>
|
| 82 |
+
<div class="chat-header">
|
| 83 |
+
<i data-feather="message-square"></i>
|
| 84 |
+
<span>Conversation avec l'IA</span>
|
| 85 |
+
</div>
|
| 86 |
+
<div class="conversation">
|
| 87 |
+
<div class="message">Unit Conversion: mL Lµl</div>
|
| 88 |
+
<div class="message">"Je suis ton nouveau fondateur avec..."</div>
|
| 89 |
+
<div class="message">"Créer un ChatGPT amélioré avec A..."</div>
|
| 90 |
+
</div>
|
| 91 |
+
<div class="input-area">
|
| 92 |
+
<input type="text" class="message-input" placeholder="Écrivez votre message...">
|
| 93 |
+
<button class="action-button">
|
| 94 |
+
<i data-feather="mic"></i>
|
| 95 |
+
</button>
|
| 96 |
+
<button class="action-button">
|
| 97 |
+
<i data-feather="paperclip"></i>
|
| 98 |
+
</button>
|
| 99 |
+
<button class="send-button">
|
| 100 |
+
<i data-feather="send"></i>
|
| 101 |
+
</button>
|
| 102 |
+
</div>
|
| 103 |
+
`;
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
customElements.define('custom-chat', CustomChat);
|
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomCodePreview extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
width: 100%;
|
| 9 |
+
height: 100vh;
|
| 10 |
+
background: white;
|
| 11 |
+
padding: 1.5rem;
|
| 12 |
+
overflow-y: auto;
|
| 13 |
+
}
|
| 14 |
+
.tabs {
|
| 15 |
+
display: flex;
|
| 16 |
+
border-bottom: 1px solid #e2e8f0;
|
| 17 |
+
margin-bottom: 1.5rem;
|
| 18 |
+
}
|
| 19 |
+
.tab {
|
| 20 |
+
padding: 0.5rem 1rem;
|
| 21 |
+
cursor: pointer;
|
| 22 |
+
color: #64748b;
|
| 23 |
+
border-bottom: 2px solid transparent;
|
| 24 |
+
}
|
| 25 |
+
.tab.active {
|
| 26 |
+
color: #1e40af;
|
| 27 |
+
border-bottom-color: #1e40af;
|
| 28 |
+
}
|
| 29 |
+
.code-area {
|
| 30 |
+
background: #f8fafc;
|
| 31 |
+
border: 1px solid #e2e8f0;
|
| 32 |
+
border-radius: 0.5rem;
|
| 33 |
+
padding: 1rem;
|
| 34 |
+
font-family: monospace;
|
| 35 |
+
white-space: pre;
|
| 36 |
+
overflow-x: auto;
|
| 37 |
+
margin-bottom: 1rem;
|
| 38 |
+
}
|
| 39 |
+
.final-result {
|
| 40 |
+
margin-top: 2rem;
|
| 41 |
+
padding-top: 1rem;
|
| 42 |
+
border-top: 1px solid #e2e8f0;
|
| 43 |
+
}
|
| 44 |
+
.result-title {
|
| 45 |
+
font-weight: 600;
|
| 46 |
+
margin-bottom: 1rem;
|
| 47 |
+
color: #1e293b;
|
| 48 |
+
}
|
| 49 |
+
.export-options {
|
| 50 |
+
display: flex;
|
| 51 |
+
gap: 0.5rem;
|
| 52 |
+
margin-top: 1rem;
|
| 53 |
+
}
|
| 54 |
+
.export-button {
|
| 55 |
+
background: #e0f2fe;
|
| 56 |
+
color: #0369a1;
|
| 57 |
+
border: none;
|
| 58 |
+
border-radius: 0.5rem;
|
| 59 |
+
padding: 0.5rem 1rem;
|
| 60 |
+
cursor: pointer;
|
| 61 |
+
font-size: 0.875rem;
|
| 62 |
+
}
|
| 63 |
+
</style>
|
| 64 |
+
<div class="tabs">
|
| 65 |
+
<div class="tab active">Aperçu</div>
|
| 66 |
+
<div class="tab">Codes</div>
|
| 67 |
+
<div class="tab">Paramètres</div>
|
| 68 |
+
<div class="tab">Publier</div>
|
| 69 |
+
</div>
|
| 70 |
+
<div class="code-area">
|
| 71 |
+
while (code_generation) {
|
| 72 |
+
display_new_code_line();
|
| 73 |
+
update_preview();
|
| 74 |
+
}
|
| 75 |
+
... [les codes défilent ici]
|
| 76 |
+
</div>
|
| 77 |
+
<div class="status">✅ FIN DE GÉNÉRATION</div>
|
| 78 |
+
<div class="final-result">
|
| 79 |
+
<div class="result-title">📊 RÉSULTAT FINAL AFFICHÉ ICI</div>
|
| 80 |
+
<div>• Code complet</div>
|
| 81 |
+
<div>• Aperçu fonctionnel</div>
|
| 82 |
+
<div>• Options d'export</div>
|
| 83 |
+
<div class="export-options">
|
| 84 |
+
<button class="export-button">Télécharger</button>
|
| 85 |
+
<button class="export-button">Copier</button>
|
| 86 |
+
<button class="export-button">Partager</button>
|
| 87 |
+
</div>
|
| 88 |
+
</div>
|
| 89 |
+
`;
|
| 90 |
+
}
|
| 91 |
+
}
|
| 92 |
+
customElements.define('custom-code-preview', CustomCodePreview);
|
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomSidebar extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
width: 280px;
|
| 9 |
+
background: #f8fafc;
|
| 10 |
+
height: 100vh;
|
| 11 |
+
position: fixed;
|
| 12 |
+
left: 0;
|
| 13 |
+
top: 0;
|
| 14 |
+
border-right: 1px solid #e2e8f0;
|
| 15 |
+
padding: 1.5rem;
|
| 16 |
+
overflow-y: auto;
|
| 17 |
+
}
|
| 18 |
+
.logo {
|
| 19 |
+
display: flex;
|
| 20 |
+
align-items: center;
|
| 21 |
+
gap: 0.5rem;
|
| 22 |
+
font-weight: 600;
|
| 23 |
+
color: #1e293b;
|
| 24 |
+
margin-bottom: 2rem;
|
| 25 |
+
cursor: pointer;
|
| 26 |
+
}
|
| 27 |
+
.menu-item {
|
| 28 |
+
display: flex;
|
| 29 |
+
align-items: center;
|
| 30 |
+
gap: 0.75rem;
|
| 31 |
+
padding: 0.75rem;
|
| 32 |
+
border-radius: 0.5rem;
|
| 33 |
+
color: #475569;
|
| 34 |
+
cursor: pointer;
|
| 35 |
+
}
|
| 36 |
+
.menu-item:hover {
|
| 37 |
+
background: #e2e8f0;
|
| 38 |
+
color: #1e40af;
|
| 39 |
+
}
|
| 40 |
+
.menu-item.active {
|
| 41 |
+
background: #dbeafe;
|
| 42 |
+
color: #1e40af;
|
| 43 |
+
}
|
| 44 |
+
.submenu {
|
| 45 |
+
padding-left: 1.5rem;
|
| 46 |
+
margin-top: 0.25rem;
|
| 47 |
+
}
|
| 48 |
+
.submenu-item {
|
| 49 |
+
display: flex;
|
| 50 |
+
align-items: center;
|
| 51 |
+
gap: 0.75rem;
|
| 52 |
+
padding: 0.5rem 0.75rem;
|
| 53 |
+
border-radius: 0.5rem;
|
| 54 |
+
color: #475569;
|
| 55 |
+
cursor: pointer;
|
| 56 |
+
}
|
| 57 |
+
.submenu-item:hover {
|
| 58 |
+
background: #e2e8f0;
|
| 59 |
+
}
|
| 60 |
+
i {
|
| 61 |
+
width: 20px;
|
| 62 |
+
height: 20px;
|
| 63 |
+
}
|
| 64 |
+
</style>
|
| 65 |
+
<div class="logo">
|
| 66 |
+
<i data-feather="code"></i>
|
| 67 |
+
<span>Espace Codage</span>
|
| 68 |
+
</div>
|
| 69 |
+
<div class="menu-item active">
|
| 70 |
+
<i data-feather="plus-square"></i>
|
| 71 |
+
<span>Nouvelle tâche</span>
|
| 72 |
+
</div>
|
| 73 |
+
<div class="menu-item">
|
| 74 |
+
<i data-feather="search"></i>
|
| 75 |
+
<span>Rechercher</span>
|
| 76 |
+
</div>
|
| 77 |
+
<div class="menu-item">
|
| 78 |
+
<i data-feather="book"></i>
|
| 79 |
+
<span>Bibliothèque</span>
|
| 80 |
+
</div>
|
| 81 |
+
<div class="menu-item">
|
| 82 |
+
<i data-feather="folder"></i>
|
| 83 |
+
<span>Projets</span>
|
| 84 |
+
</div>
|
| 85 |
+
<div class="submenu">
|
| 86 |
+
<div class="submenu-item">
|
| 87 |
+
<i data-feather="cpu"></i>
|
| 88 |
+
<span>ChatGPT Anthes</span>
|
| 89 |
+
</div>
|
| 90 |
+
</div>
|
| 91 |
+
<div class="menu-item">
|
| 92 |
+
<i data-feather="check-square"></i>
|
| 93 |
+
<span>Toutes les tâches</span>
|
| 94 |
+
</div>
|
| 95 |
+
`;
|
| 96 |
+
}
|
| 97 |
+
}
|
| 98 |
+
customElements.define('custom-sidebar', CustomSidebar);
|
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
<!DOCTYPE html>
|
| 2 |
<html lang="fr">
|
| 3 |
<head>
|
|
@@ -10,118 +11,18 @@
|
|
| 10 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
</head>
|
| 12 |
<body class="bg-gray-100 font-sans">
|
| 13 |
-
<div class="
|
| 14 |
-
<
|
| 15 |
-
<
|
| 16 |
-
|
| 17 |
-
<div class="flex items-center space-x-2">
|
| 18 |
-
<i data-feather="code" class="text-blue-600"></i>
|
| 19 |
-
<h1 class="text-xl font-bold text-gray-800">Espace Codage</h1>
|
| 20 |
-
</div>
|
| 21 |
-
<nav class="hidden md:flex space-x-6">
|
| 22 |
-
<a href="#" class="text-blue-600 font-medium">Accueil</a>
|
| 23 |
-
<a href="#" class="text-gray-600 hover:text-blue-600">Cours</a>
|
| 24 |
-
<a href="#" class="text-gray-600 hover:text-blue-600">Projets</a>
|
| 25 |
-
<a href="#" class="text-gray-600 hover:text-blue-600">Communauté</a>
|
| 26 |
-
</nav>
|
| 27 |
-
<button class="md:hidden">
|
| 28 |
-
<i data-feather="menu"></i>
|
| 29 |
-
</button>
|
| 30 |
-
</div>
|
| 31 |
-
</header>
|
| 32 |
-
|
| 33 |
-
<!-- Main Content -->
|
| 34 |
-
<main class="flex-grow container mx-auto px-4 py-8">
|
| 35 |
-
<div class="max-w-4xl mx-auto">
|
| 36 |
-
<section class="mb-12 text-center">
|
| 37 |
-
<h2 class="text-3xl md:text-4xl font-bold text-gray-800 mb-4">Apprenez à coder avec Espace Codage</h2>
|
| 38 |
-
<p class="text-lg text-gray-600 mb-8">Découvrez nos cours interactifs et rejoignez notre communauté de développeurs passionnés.</p>
|
| 39 |
-
<button class="bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 px-6 rounded-lg shadow-md transition duration-300">
|
| 40 |
-
Commencer maintenant
|
| 41 |
-
</button>
|
| 42 |
-
</section>
|
| 43 |
-
|
| 44 |
-
<section class="grid md:grid-cols-3 gap-8 mb-12">
|
| 45 |
-
<div class="bg-white p-6 rounded-xl shadow-sm hover:shadow-md transition duration-300">
|
| 46 |
-
<div class="text-blue-600 mb-4">
|
| 47 |
-
<i data-feather="book" class="w-8 h-8"></i>
|
| 48 |
-
</div>
|
| 49 |
-
<h3 class="text-xl font-semibold mb-2">Cours Complets</h3>
|
| 50 |
-
<p class="text-gray-600">Apprenez à votre rythme avec nos cours structurés et progressifs.</p>
|
| 51 |
-
</div>
|
| 52 |
-
<div class="bg-white p-6 rounded-xl shadow-sm hover:shadow-md transition duration-300">
|
| 53 |
-
<div class="text-blue-600 mb-4">
|
| 54 |
-
<i data-feather="code" class="w-8 h-8"></i>
|
| 55 |
-
</div>
|
| 56 |
-
<h3 class="text-xl font-semibold mb-2">Pratique Immédiate</h3>
|
| 57 |
-
<p class="text-gray-600">Mettez en pratique vos connaissances avec des exercices interactifs.</p>
|
| 58 |
-
</div>
|
| 59 |
-
<div class="bg-white p-6 rounded-xl shadow-sm hover:shadow-md transition duration-300">
|
| 60 |
-
<div class="text-blue-600 mb-4">
|
| 61 |
-
<i data-feather="users" class="w-8 h-8"></i>
|
| 62 |
-
</div>
|
| 63 |
-
<h3 class="text-xl font-semibold mb-2">Communauté Active</h3>
|
| 64 |
-
<p class="text-gray-600">Échangez avec d'autres apprenants et développeurs expérimentés.</p>
|
| 65 |
-
</div>
|
| 66 |
-
</section>
|
| 67 |
-
|
| 68 |
-
<section class="bg-white p-8 rounded-xl shadow-sm mb-12">
|
| 69 |
-
<h2 class="text-2xl font-bold text-gray-800 mb-6">Nos Technologies</h2>
|
| 70 |
-
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
| 71 |
-
<div class="flex flex-col items-center p-4">
|
| 72 |
-
<img src="https://enzostvs-cached-generation.hf.space/generate/html5-logo?format=square" alt="HTML" class="w-16 h-16 mb-2">
|
| 73 |
-
<span class="text-gray-700">HTML</span>
|
| 74 |
-
</div>
|
| 75 |
-
<div class="flex flex-col items-center p-4">
|
| 76 |
-
<img src="https://enzostvs-cached-generation.hf.space/generate/css3-logo?format=square" alt="CSS" class="w-16 h-16 mb-2">
|
| 77 |
-
<span class="text-gray-700">CSS</span>
|
| 78 |
-
</div>
|
| 79 |
-
<div class="flex flex-col items-center p-4">
|
| 80 |
-
<img src="https://enzostvs-cached-generation.hf.space/generate/javascript-logo?format=square" alt="JavaScript" class="w-16 h-16 mb-2">
|
| 81 |
-
<span class="text-gray-700">JavaScript</span>
|
| 82 |
-
</div>
|
| 83 |
-
<div class="flex flex-col items-center p-4">
|
| 84 |
-
<img src="https://enzostvs-cached-generation.hf.space/generate/python-logo?format=square" alt="Python" class="w-16 h-16 mb-2">
|
| 85 |
-
<span class="text-gray-700">Python</span>
|
| 86 |
-
</div>
|
| 87 |
-
</div>
|
| 88 |
-
</section>
|
| 89 |
-
</div>
|
| 90 |
-
</main>
|
| 91 |
-
|
| 92 |
-
<!-- Footer -->
|
| 93 |
-
<footer class="bg-gray-800 text-white py-8">
|
| 94 |
-
<div class="container mx-auto px-4">
|
| 95 |
-
<div class="flex flex-col md:flex-row justify-between items-center">
|
| 96 |
-
<div class="mb-4 md:mb-0">
|
| 97 |
-
<div class="flex items-center space-x-2">
|
| 98 |
-
<i data-feather="code" class="text-blue-400"></i>
|
| 99 |
-
<span class="font-bold">Espace Codage</span>
|
| 100 |
-
</div>
|
| 101 |
-
<p class="text-gray-400 mt-2">Apprenez, codez, partagez.</p>
|
| 102 |
-
</div>
|
| 103 |
-
<div class="flex space-x-4">
|
| 104 |
-
<a href="#" class="text-gray-400 hover:text-white">
|
| 105 |
-
<i data-feather="twitter"></i>
|
| 106 |
-
</a>
|
| 107 |
-
<a href="#" class="text-gray-400 hover:text-white">
|
| 108 |
-
<i data-feather="github"></i>
|
| 109 |
-
</a>
|
| 110 |
-
<a href="#" class="text-gray-400 hover:text-white">
|
| 111 |
-
<i data-feather="linkedin"></i>
|
| 112 |
-
</a>
|
| 113 |
-
</div>
|
| 114 |
-
</div>
|
| 115 |
-
<div class="border-t border-gray-700 mt-6 pt-6 text-center text-gray-400 text-sm">
|
| 116 |
-
<p>© 2023 Espace Codage. Tous droits réservés.</p>
|
| 117 |
-
</div>
|
| 118 |
-
</div>
|
| 119 |
-
</footer>
|
| 120 |
</div>
|
| 121 |
|
| 122 |
<script>
|
| 123 |
feather.replace();
|
| 124 |
</script>
|
| 125 |
-
<script src="
|
|
|
|
|
|
|
|
|
|
| 126 |
</body>
|
| 127 |
</html>
|
|
|
|
| 1 |
+
|
| 2 |
<!DOCTYPE html>
|
| 3 |
<html lang="fr">
|
| 4 |
<head>
|
|
|
|
| 11 |
<script src="https://unpkg.com/feather-icons"></script>
|
| 12 |
</head>
|
| 13 |
<body class="bg-gray-100 font-sans">
|
| 14 |
+
<div class="flex h-screen">
|
| 15 |
+
<custom-sidebar></custom-sidebar>
|
| 16 |
+
<custom-chat></custom-chat>
|
| 17 |
+
<custom-code-preview></custom-code-preview>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 18 |
</div>
|
| 19 |
|
| 20 |
<script>
|
| 21 |
feather.replace();
|
| 22 |
</script>
|
| 23 |
+
<script src="components/sidebar.js"></script>
|
| 24 |
+
<script src="components/chat.js"></script>
|
| 25 |
+
<script src="components/code-preview.js"></script>
|
| 26 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 27 |
</body>
|
| 28 |
</html>
|
|
@@ -1,11 +1,19 @@
|
|
| 1 |
-
|
| 2 |
document.addEventListener('DOMContentLoaded', function() {
|
| 3 |
-
|
| 4 |
-
const
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
});
|
| 10 |
}
|
| 11 |
-
});
|
|
|
|
| 1 |
+
|
| 2 |
document.addEventListener('DOMContentLoaded', function() {
|
| 3 |
+
// Tab switching functionality for code preview
|
| 4 |
+
const tabs = document.querySelectorAll('custom-code-preview .tab');
|
| 5 |
+
tabs.forEach(tab => {
|
| 6 |
+
tab.addEventListener('click', function() {
|
| 7 |
+
tabs.forEach(t => t.classList.remove('active'));
|
| 8 |
+
this.classList.add('active');
|
| 9 |
+
});
|
| 10 |
+
});
|
| 11 |
+
|
| 12 |
+
// Sidebar navigation
|
| 13 |
+
const logo = document.querySelector('custom-sidebar .logo');
|
| 14 |
+
if (logo) {
|
| 15 |
+
logo.addEventListener('click', function() {
|
| 16 |
+
window.location.href = '/';
|
| 17 |
});
|
| 18 |
}
|
| 19 |
+
});
|
|
@@ -1 +1,21 @@
|
|
| 1 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
body {
|
| 3 |
+
margin: 0;
|
| 4 |
+
padding: 0;
|
| 5 |
+
overflow: hidden;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
custom-sidebar {
|
| 9 |
+
width: 280px;
|
| 10 |
+
flex-shrink: 0;
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
custom-chat {
|
| 14 |
+
flex-grow: 1;
|
| 15 |
+
width: calc(100% - 280px - 40%);
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
custom-code-preview {
|
| 19 |
+
width: 40%;
|
| 20 |
+
flex-shrink: 0;
|
| 21 |
+
}
|