From 6ebb3b3eae9191ea0cb0e430fb670ac7a7fd101f Mon Sep 17 00:00:00 2001 From: Spark Date: Thu, 5 Nov 2026 05:02:10 +0000 Subject: [PATCH 1/2] =?UTF-8?q?ObsiGate=202.83.4=20:=20barre=20v0.4.0=20?= =?UTF-8?q?=E2=80=94=20ic=C3=B4nes=20monoline=20du=20menu=20compte,=20vend?= =?UTF-8?q?ange=20verbatim=20(HUB-11)=20+=20garde?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/draco-barre.css | 13 ++++++++ frontend/draco-barre.js | 69 +++++++++++++++++++++++++++++++++++++++ tests/test_draco_barre.py | 20 ++++++++++++ 3 files changed, 102 insertions(+) diff --git a/frontend/draco-barre.css b/frontend/draco-barre.css index c01145f..ba8aa62 100644 --- a/frontend/draco-barre.css +++ b/frontend/draco-barre.css @@ -24,6 +24,10 @@ compte (Télécharger, À Propos, Aides, Profil) réutilisent .draco-menu-item (déjà ancre-compatible : text-decoration none) et le séparateur .draco-menu-sep du menu des applications. + v0.4.0 (HUB-11) : .draco-menu-icone — les icônes monoline des + items du menu compte (SVG inline construit par le JS) : 18 px, + replacées à gauche du libellé par order: -1 (l'item est en + flex), couleur atténuée --ink-2, pleine --ink au survol/focus. Jetons repris du prototype validé Console v7.2. Thème : clair par défaut, sombre via [data-theme="dark"] sur ou prefers-color-scheme si l'app intégratrice ne force rien @@ -94,6 +98,15 @@ text-decoration: none; cursor: pointer; } .draco-menu-item:hover, .draco-menu-item:focus-visible { background: var(--surface-2); } +/* Icônes monoline du menu compte (v0.4.0) : appendues après le + libellé dans le DOM, replacées à gauche par order: -1. */ +.draco-menu-icone { + order: -1; flex: none; display: inline-flex; align-items: center; + width: 18px; height: 18px; color: var(--ink-2); +} +.draco-menu-icone svg { display: block; width: 18px; height: 18px; } +.draco-menu-item:hover .draco-menu-icone, +.draco-menu-item:focus-visible .draco-menu-icone { color: var(--ink); } .draco-menu-sep { height: 1px; margin: 6px 10px; background: var(--line); } .draco-compte-nom { padding: 8px 10px 10px; font-weight: 700; font-size: 14px; diff --git a/frontend/draco-barre.js b/frontend/draco-barre.js index 3de0f03..582e088 100644 --- a/frontend/draco-barre.js +++ b/frontend/draco-barre.js @@ -29,6 +29,13 @@ * l'ouverture des menus. Le Hub n'a pas d'onglet dans la barre : * comme spark, sa clé est résolue et exposée via DRACO_BAR.urls, * sans étape « href rendu » (voir « URL » ci-dessous). + * v0.4.0 (carte HUB-11, fusion #125) : icônes monoline dans le + * menu compte — chaque item (les 4 liens du Hub et « Déconnexion ») + * reçoit un glyphe SVG inline dans le style des icônes du rail de + * la console (contour, trait fin régulier, currentColor, aucun + * remplissage), aligné à gauche du libellé via .draco-menu-icone. + * L'en-tête d'identité ne reçoit pas d'icône. Aucun changement de + * comportement : liens résolus et Déconnexion relayée inchangés. * * Aucun gestionnaire inline : un seul écouteur délégué sur le document * (patron validé par le prototype — les onclick du HTML généré sont @@ -483,6 +490,66 @@ if (!appsMenu.hidden) lastOpener = brand; } + /* Icônes monoline du menu compte (v0.4.0) — glyphes contour + * dans le style des icônes du rail de la console : viewBox 24, + * stroke currentColor, remplissage nul, extrémités rondes. + * Chaque glyphe est une liste de primitives [balise, attributs] + * construites en DOM (jamais d'innerHTML), comme le reste du + * fichier. Le libellé reste le nœud texte de l'item ; l'icône, + * appendue après, est replacée à gauche par le CSS (order: -1 + * sur .draco-menu-icone, l'item étant déjà en flex). */ + var MENU_ICONES = { + /* Flèche vers le bas dans un plateau. */ + "telecharger": [ + ["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }], + ["polyline", { points: "7 10 12 15 17 10" }], + ["line", { x1: "12", y1: "15", x2: "12", y2: "3" }] + ], + /* Cercle d'information. */ + "a-propos": [ + ["circle", { cx: "12", cy: "12", r: "9" }], + ["line", { x1: "12", y1: "11", x2: "12", y2: "16" }], + ["line", { x1: "12", y1: "8", x2: "12.01", y2: "8" }] + ], + /* Cercle d'interrogation. */ + "aide": [ + ["circle", { cx: "12", cy: "12", r: "9" }], + ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" }], + ["line", { x1: "12", y1: "17", x2: "12.01", y2: "17" }] + ], + /* Personne : tête + épaules. */ + "profil": [ + ["path", { d: "M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2" }], + ["circle", { cx: "12", cy: "7", r: "4" }] + ], + /* Flèche sortant d'un cadre (porte). */ + "deconnexion": [ + ["path", { d: "M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" }], + ["polyline", { points: "16 17 21 12 16 7" }], + ["line", { x1: "21", y1: "12", x2: "9", y2: "12" }] + ] + }; + function menuIcone(nom) { + var span = document.createElement("span"); + span.className = "draco-menu-icone"; + span.setAttribute("aria-hidden", "true"); + var svg = document.createElement("svg"); + svg.setAttribute("viewBox", "0 0 24 24"); + svg.setAttribute("fill", "none"); + svg.setAttribute("stroke", "currentColor"); + svg.setAttribute("stroke-width", "1.8"); + svg.setAttribute("stroke-linecap", "round"); + svg.setAttribute("stroke-linejoin", "round"); + svg.setAttribute("focusable", "false"); + (MENU_ICONES[nom] || []).forEach(function (spec) { + var el = document.createElement(spec[0]); + for (var k in spec[1]) el.setAttribute(k, spec[1][k]); + svg.appendChild(el); + }); + span.appendChild(svg); + return span; + } + /* Menu compte (v0.1.6 ; v0.3.0 pour les liens) — en-tête * d'identité, puis les liens du Hub (Télécharger, À Propos, * Aides, Profil — vrais , même patron que le menu des @@ -508,6 +575,7 @@ a.setAttribute("data-hub-link", pair[0]); a.setAttribute("role", "menuitem"); a.textContent = pair[1]; + a.appendChild(menuIcone(pair[0])); compteMenu.appendChild(a); }); var sep = document.createElement("div"); @@ -520,6 +588,7 @@ b.setAttribute("data-compte-act", "deconnexion"); b.setAttribute("role", "menuitem"); b.textContent = "Déconnexion"; + b.appendChild(menuIcone("deconnexion")); compteMenu.appendChild(b); bar.appendChild(compteMenu); } diff --git a/tests/test_draco_barre.py b/tests/test_draco_barre.py index 9f13e0c..0b58aea 100644 --- a/tests/test_draco_barre.py +++ b/tests/test_draco_barre.py @@ -206,3 +206,23 @@ def test_panneau_version_service_affichee_225(): # La ligne naît masquée et n'est démasquée qu'avec une version lue. assert 'class="draco-panneau-version"' in panneau assert "versionEl.hidden = false" in panneau + + +def test_barre_v040_icones_monoline_menu_compte(): + # v0.4.0 (HUB-11, fusion #125) : les items du menu compte + # portent des icônes SVG monoline construites en DOM, dans le + # style des icônes du rail de la console — aucun emoji, aucune + # icône pleine. La vendange reste verbatim commons. + js = (FRONTEND / "draco-barre.js").read_text(encoding="utf-8") + assert "MENU_ICONES" in js + for nom in ("telecharger", "a-propos", "aide", "profil", "deconnexion"): + assert nom in js + assert "draco-menu-icone" in js + assert "stroke: currentColor" not in js # attributs posés en DOM + assert 'setAttribute("stroke", "currentColor")' in js + assert 'setAttribute("fill", "none")' in js + css = _css() + assert ".draco-menu-icone" in css + bloc = css.split(".draco-menu-icone {", 1)[1].split("}", 1)[0] + assert "width: 18px" in bloc + assert "var(--ink-2)" in bloc From 35b828a4c5571ad4136ab9bc2eb7a1a4a3d6479a Mon Sep 17 00:00:00 2001 From: Spark Date: Thu, 5 Nov 2026 05:03:01 +0000 Subject: [PATCH 2/2] =?UTF-8?q?ObsiGate=202.83.4=20:=20version=20et=20chan?= =?UTF-8?q?gelog=20(barre=20v0.4.0,=20HUB-11)=20=E2=80=94=20VERSION=20+=20?= =?UTF-8?q?fichiers=20d=C3=A9riv=C3=A9s=20synchronis=C3=A9s=20par=20script?= =?UTF-8?q?s/bump=5Fversion.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 8 +++++++- README.fr.md | 6 +++--- README.md | 6 +++--- VERSION | 2 +- desktop/Cargo.lock | 2 +- desktop/Cargo.toml | 2 +- desktop/tauri.conf.json | 2 +- docs/ROADMAP.md | 2 +- package.json | 2 +- 9 files changed, 19 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93c083e..2ca9df2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Format basé sur [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/), et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). > **En cours de développement** : les changements à venir sont listés dans la section -> [Unreleased](#unreleased). La dernière version livrée est **2.83.3**. +> [Unreleased](#unreleased). La dernière version livrée est **2.83.4**. --- @@ -14,6 +14,12 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- +## [2.83.4] — 2026-11-05 + +- **Barre commune v0.4.0 — icônes monoline du menu compte (HUB-11, fusion #125)** : `frontend/draco-barre.js` et `frontend/draco-barre.css` re-vendangés **verbatim** depuis dracodev-commons v0.4.0 (branche `menu-compte-icones-v0-4-0`, PR commons #10). Les items du menu compte — **Télécharger**, **À Propos**, **Aides**, **Profil**, **Déconnexion** — reçoivent des **icônes SVG monoline** (contour, trait fin, `currentColor`, ~18 px) dans le style des icônes du rail de la console Spark ; aucun emoji. L'en-tête d'identité reste sans icône ; les liens Hub et le relais « Déconnexion » sont inchangés. Garde ajoutée à `tests/test_draco_barre.py`. + +--- + ## [2.83.3] — 2026-11-04 - **Barre commune v0.3.0 — liens Hub du menu compte (HUB-1, fusion #115)** : `frontend/draco-barre.js` et `frontend/draco-barre.css` re-vendangés **verbatim** depuis dracodev-commons v0.3.0 (branche `hub-menu-compte-v0-3-0`, PR commons #9). Le menu compte gagne les liens **Télécharger**, **À Propos**, **Aides** et **Profil** (devenu un lien, plus un relais) vers le Hub. Branchement hôte : `backend/draco_config.py` gagne la clé `hub` (défaut officiel `https://hub.dracodev.net`, variable `DRACO_HUB_URL`, dérivation `-dev` → `hub-dev` depuis l'hôte de l'agent), servie dans `window.DRACO_URLS` ; `frontend/index.html` la passe en `urls.hub` de `DRACO_BAR_CONFIG`. « Déconnexion » reste relayée, inchangée. Aucun nouvel onglet : le Hub n'apparaît que dans le menu compte. diff --git a/README.fr.md b/README.fr.md index fd20dd2..f228592 100644 --- a/README.fr.md +++ b/README.fr.md @@ -4,7 +4,7 @@ **Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive. -[![Version](https://img.shields.io/badge/Version-2.83.3-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.83.4-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -977,8 +977,8 @@ Ce projet est sous licence **MIT** — voir le fichier [LICENSE](LICENSE) pour l ## 📝 Changelog -Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.83.3). +Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.83.4). --- -*Projet : ObsiGate | Version : 2.83.3 | Dernière mise à jour : Septembre 2026* +*Projet : ObsiGate | Version : 2.83.4 | Dernière mise à jour : Septembre 2026* diff --git a/README.md b/README.md index 02bf944..83d2c5d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Ultra-light web gateway for your Obsidian vaults** — Access, browse, and search all your Obsidian notes from any device via a modern, responsive web interface. -[![Version](https://img.shields.io/badge/Version-2.83.3-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.83.4-blue.svg)]() [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Docker](https://img.shields.io/badge/Docker-Ready-blue.svg)](https://www.docker.com/) [![Python](https://img.shields.io/badge/Python-3.11+-green.svg)](https://www.python.org/) @@ -1152,8 +1152,8 @@ This project is licensed under the **MIT License** - see the [LICENSE](LICENSE) ## 📝 Changelog -See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.83.3). +See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.83.4). --- -*Project: ObsiGate | Version: 2.83.3 | Last updated: September 2026* +*Project: ObsiGate | Version: 2.83.4 | Last updated: September 2026* diff --git a/VERSION b/VERSION index 7814c66..d6c294c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.83.3 +2.83.4 diff --git a/desktop/Cargo.lock b/desktop/Cargo.lock index 98f8c90..3ddf3ac 100644 --- a/desktop/Cargo.lock +++ b/desktop/Cargo.lock @@ -2626,7 +2626,7 @@ dependencies = [ [[package]] name = "obsigate-desktop" -version = "2.83.3" +version = "2.83.4" dependencies = [ "chrono", "env_logger", diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index e4a51ef..6b490fc 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "obsigate-desktop" -version = "2.83.3" +version = "2.83.4" description = "ObsiGate Desktop — Porte d'entrée native pour vos vaults Obsidian" authors = ["Bruno Charest"] edition = "2021" diff --git a/desktop/tauri.conf.json b/desktop/tauri.conf.json index 593bf54..4957151 100644 --- a/desktop/tauri.conf.json +++ b/desktop/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/nicedoc/obsigate/main/desktop/tauri.conf.schema.json", "productName": "ObsiGate", - "version": "2.83.3", + "version": "2.83.4", "identifier": "com.obsigate.desktop", "build": { "frontendDist": "../frontend", diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 35f96f8..9b5ed44 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,6 +1,6 @@ # ObsiGate — Roadmap -> **Version :** 2.83.3 | **Dernière mise à jour :** 2026-11-04 +> **Version :** 2.83.4 | **Dernière mise à jour :** 2026-11-05 > **Ce fichier ne contient que le travail à venir** (🔵 En cours + ⚪ Backlog) et un index compact > vers les fonctionnalités livrées. > - **Méthode de livraison à appliquer pour toute tâche : [DELIVERY_WORKFLOW.md](./DELIVERY_WORKFLOW.md)** diff --git a/package.json b/package.json index 145838f..d919f71 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "obsigate", - "version": "2.83.3", + "version": "2.83.4", "description": "**Porte d'entrée web ultra-léger pour vos vaults Obsidian** — Accédez, naviguez et recherchez dans toutes vos notes Obsidian depuis n'importe quel appareil via une interface web moderne et responsive.", "main": "patch.js", "directories": {