Skip to content

Canvas

Le Canvas est l’écran central d’un projet HNetwork : tu y modélises visuellement une infrastructure réseau en plaçant des services (nodes) et leurs connexions. Le canvas est collaboratif en temps réel et supporte les zones, les environnements multiples, et un système de champs personnalisés par service.

📷 [IMAGE — vue d’ensemble canvas] (à venir)

┌───────────────────────────────────────────────────────┐
│ Toolbar (haut) │
├──────────┬──────────────────────────────┬────────────┤
│ Palette │ │ Panneau │
│ (nodes) │ Zone de canvas │ Sélection │
│ │ (drag & drop, zoom) │ (node / │
│ │ │ edge) │
│ ├──────────────────────────────┤ │
│ │ Mini-map · Controls (zoom) │ │
└──────────┴──────────────────────────────┴────────────┘
  • 🏠 Retour Dashboard.
  • Nom du projet — clique dessus (ou sur le ✏️) pour éditer en place.
    • Entrée valide, Échap annule.
  • 👥 Indicateur de collaboration — montre l’état de synchronisation et les avatars colorés des membres connectés en temps réel.
  • 🎨 Sélecteur d’environnement — voir section 7.
  • 🐞 Issues — badge avec compteur (signale les problèmes détectés dans la modélisation).
  • 🔗 Connexion (toggle) — active le mode création de connexion (voir section 5).
  • 🗺️ Zones — ouvre le ZoneManagerModal (voir section 6).
  • 📄 Docs — bascule vers la partie Docs du projet (Docs).
  • 🤝 Partager — ouvre la modale de partage (membres + invitations par email avec rôle).

📷 [IMAGE — toolbar canvas] (à venir)

La palette regroupe toutes les catégories de services disponibles.

  • Catégories pliables (ex. Networking, Serveurs, Cloud…).
  • Chaque catégorie affiche un compteur de types disponibles.
  • Par défaut, les catégories sont repliées — clique sur la flèche pour les déplier.
  1. Trouve le type de service dans la palette.
  2. Glisse-le vers la zone du canvas.
  3. Relâche : un node est créé à l’emplacement de la souris.

💡 Si tu glisses par-dessus un host node, le nouveau service est automatiquement créé à l’intérieur du host (s’il est compatible).

📷 [IMAGE — palette + drag node] (à venir)

TypeDescription
GenericBoîte simple avec poignées de connexion gauche/droite.
HostConteneur pouvant accueillir d’autres nodes à l’intérieur. En-tête avec flèche de pliage et compteur d’enfants.
  • Clic sur un node → ouverture du panneau Node à droite (voir section 8).
  • Glisse un node sélectionné pour le déplacer :
    • Position relative à son host parent si imbriqué.
    • Position absolue sinon.
  • Glisse un node générique par-dessus un host existant.
  • Pendant le drag, un overlay coloré t’indique :
    • Vert = dépose autorisée (compatible).
    • Rouge = dépose refusée (incompatibilité, imbrication cyclique…).
  • Relâche pour confirmer.
  • Sélectionne un node imbriqué.
  • Dans le panneau Node, clique sur « Détacher ».
  • La position relative est convertie en position absolue.
  • Sélectionne-le.
  • Dans le panneau Node, clique sur le bouton rouge 🗑️.
  • Confirme.

📷 [IMAGE — host + nodes imbriqués] (à venir)

  1. Active le toggle « Connexion » dans la toolbar — les poignées de connexion apparaissent sur les nodes (points gauche/droite).
  2. Clique sur la poignée gauche (cible) d’un node, glisse vers la poignée droite (source) d’un autre node.
  3. Relâche : la modale « Nouvelle connexion » s’ouvre.
  4. Renseigne :
    • Protocole (HTTP, HTTPS, SSH, DNS, TCP, UDP, custom…).
    • Port source et port destination (auto-rempli si pertinent).
    • Chiffrement (TLS, mTLS, IPSec, Aucun…).
    • Bidirectionnel (Oui/Non).
    • Label et description (optionnels).
  5. Valide.

📷 [IMAGE — créer une connexion] (à venir)

  • Clique sur l’edge → le panneau Connexion s’ouvre à droite.
  • Affiche source/cible, protocole, ports, chiffrement, bidirection.
  • Boutons Éditer (rouvre la modale) et Supprimer (avec confirmation).

Les zones permettent de regrouper logiquement des services (DMZ, LAN, Cloud, etc.).

Clique sur 🗺️ Zones dans la toolbar — le ZoneManagerModal s’ouvre.

  • Renseigne Nom + Type (Custom, DMZ, LAN, Cloud, …).
  • Le type applique automatiquement une couleur associée (le « custom » laisse le choix).
  • Valide.
  • Modifie le nom inline.
  • Change le type via le menu déroulant.
  • 🗑️ supprime la zone — si des nodes y sont assignés, la confirmation te les rappelle ; après suppression ils repassent non zonés.
  • Sélectionne le node.
  • Dans le panneau Node, ouvre le menu déroulant « Zone ».
  • Choisis une zone existante ou clique sur « + » pour la créer à la volée.

📷 [IMAGE — modale gestion des zones] (à venir)

Un environnement est une variante de ton projet (prod, staging, dev, preprod…) qui peut surcharger les valeurs des champs des services sans dupliquer les nodes.

  • « Tous » (par défaut) — affiche les valeurs de base.
  • Boutons par environnement (pastille colorée + nom).
  • ⚙️ SettingsEnvironmentManagerModal.

Dans le modal :

  • Créer un environnement (couleur attribuée automatiquement, modifiable).
  • Renommer.
  • Changer la couleur.
  • Supprimer (au moins 1 environnement requis).

📷 [IMAGE — gestion des environnements] (à venir)

  1. Sélectionne un environnement (sortie du mode « Tous »).
  2. Sélectionne un node.
  3. Le panneau Node affiche une bannière jaune rappelant que tu édites pour l’environnement actif.
  4. Modifie un champ → la nouvelle valeur est enregistrée comme override pour cet environnement.
  5. Un bouton ↺ apparaît à côté du champ overridé pour revenir à la valeur de base d’un clic.

Assigner un node à plusieurs environnements

Section titled “Assigner un node à plusieurs environnements”

Dans le panneau Node, la section « Environnements » propose des cases à cocher : le node n’apparaît que dans les environnements cochés.

Quand tu cliques sur un node, le panneau Node s’ouvre à droite.

  • Icône du type + libellé en majuscules.
  • 🔀 Changer de typeChangeTypeModal.
  • Fermer.
SectionDescription
Banner lecture seuleVisible si tu es viewer. Toute édition désactivée.
Banner environnementPrésent si un env est actif : « tu modifies une surcharge ».
Nom du nodeChamp texte, auto-save au blur.
Zone réseauDropdown avec bouton « + » pour créer une nouvelle zone.
Champs de baseDéfinis par le schéma du type (ex. IP, Hostname, Port). Affichent la valeur effective (base ou override).
Champs customCouples clé-valeur libres. Bouton « + » pour ajouter, 🗑️ pour supprimer. Conservés en cas de changement de type.
EnvironnementsCases à cocher de visibilité par env.
Pages liéesListe des pages docs liées au node + bouton « Créer une page pour ce service ».
DétacherSi imbriqué dans un host : convertit la position relative en absolue.
Sauvegarder / SupprimerBouton sauvegarde (quand modifié) + bouton ❌ rouge avec confirmation.

📷 [IMAGE — panneau node] (à venir)

Quand tu cliques sur un edge, le panneau Connexion s’ouvre à droite.

  • En-tête : pastille colorée + « Connexion · {Protocole} ».
  • Informations en lecture seule : source → cible, protocole, ports, chiffrement, bidirectionnel, label, description.
  • Boutons Éditer (modale) et Supprimer.

📷 [IMAGE — panneau connexion] (à venir)

En bas à droite, une barre flottante donne accès aux contrôles généraux :

BoutonEffetRaccourci
UndoAnnule la dernière action canvas.Ctrl + Z
RedoRejoue l’action annulée.Ctrl + Y ou Ctrl + Shift + Z
Zoom arrière.Molette ↓
%Affiche le zoom actuel ; clic = reset à 100 %.
+Zoom avant.Molette ↑
Fit viewRe-cadre pour afficher tous les nodes.
Plein écranBascule plein écran du canvas.
🗺️ MinimapAffiche/cache la mini-carte.

Min zoom : 0.2x — Max zoom : 5.0x.

📷 [IMAGE — contrôles canvas] (à venir)

  • Les modifications sont synchronisées en direct via une couche collaborative (Yjs).
  • L’indicateur de la toolbar affiche les avatars colorés des membres connectés au même projet.
  • Le mode viewer est en lecture seule : aucune action d’édition n’est disponible (UI grisée + banner explicite).
  • L’undo / redo est local à ta session (chaque collaborateur a son propre historique).

Le bouton « Partager » dans la toolbar ouvre la modale de partage :

  • Inviter par email + rôle (admin, editor, viewer).
  • Lister les membres actuels du projet, modifier leur rôle, les retirer.
  • Pour un projet org-scopé : la modale rappelle les règles d’accès cloisonné (les admins de l’org peuvent reprendre la main via l’onglet Contenu de l’admin org — voir Administration).

📷 [IMAGE — modale de partage] (à venir)

Le bouton 🐞 Issues affiche les anomalies détectées dans la modélisation : connexions incomplètes, ports en conflit, services orphelins, zones vides, etc. Clique sur une issue pour être amené sur l’élément concerné dans le canvas.

💡 Pratique pour valider qu’une maquette est cohérente avant de la partager.

RaccourciAction
Ctrl + Z / Cmd + ZAnnuler
Ctrl + Y / Ctrl + Shift + ZRefaire
Entrée (édition inline)Valider
Échap (édition inline)Annuler
Drag depuis Palette → CanvasCréer un node
Drag entre poignées (mode Connexion)Créer une connexion