diff --git a/CHANGELOG.md b/CHANGELOG.md index 14015e6..482dc7d 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.43.0**. +> [Unreleased](#unreleased). La dernière version livrée est **2.43.1**. --- @@ -14,6 +14,24 @@ et [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- +## [2.43.1] — 2026-09-29 + +### Ajouté + +- **#154 — Refonte UI/UX de la visionneuse XLSX (Lot 5, clôture) : extraction modulaire et + finitions.** + Les unités **sans état** de la visionneuse sont extraites dans `frontend/js/xlsx/` : + `refs.js` (références A1), `command-bar.js` (onglets + ruban + pastilles d'état) et + `dashboard.js` (rendu du tableau de bord) — le noyau avec état reste dans `viewer.js` à + comportement constant. Le tableau de bord devient interactif : **cliquer une plage nommée + sélectionne et révèle sa première cellule** dans la grille (changement d'onglet si nécessaire). + L'inspecteur est **redimensionnable** (largeur mémorisée par session). `SW_VERSION` passe à + `v28` et les nouveaux modules entrent dans le pré-cache. Tests JSDOM + `tests/frontend/xlsx-viewer.test.mjs` (51) et E2E `tests/e2e/xlsx-viewer.spec.js` (9) verts. + Aucun changement backend. + +--- + ## [2.43.0] — 2026-09-29 ### Ajouté diff --git a/README.fr.md b/README.fr.md index 3c46007..f712ccf 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.43.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.43.1-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/) @@ -976,8 +976,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.43.0). +Consultez le [CHANGELOG.md](./CHANGELOG.md) pour l'historique complet de toutes les versions (v1.0.0 → v2.43.1). --- -*Projet : ObsiGate | Version : 2.43.0 | Dernière mise à jour : Septembre 2026* +*Projet : ObsiGate | Version : 2.43.1 | Dernière mise à jour : Septembre 2026* diff --git a/README.md b/README.md index abd7406..93bc123 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.43.0-blue.svg)]() +[![Version](https://img.shields.io/badge/Version-2.43.1-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/) @@ -1151,8 +1151,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.43.0). +See [CHANGELOG.md](./CHANGELOG.md) for the complete version history (v1.0.0 → v2.43.1). --- -*Project: ObsiGate | Version: 2.43.0 | Last updated: September 2026* +*Project: ObsiGate | Version: 2.43.1 | Last updated: September 2026* diff --git a/VERSION b/VERSION index 5b9cd9a..b1d9893 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.43.0 +2.43.1 diff --git a/desktop/Cargo.lock b/desktop/Cargo.lock index c50f5c1..374625f 100644 --- a/desktop/Cargo.lock +++ b/desktop/Cargo.lock @@ -2626,7 +2626,7 @@ dependencies = [ [[package]] name = "obsigate-desktop" -version = "2.43.0" +version = "2.43.1" dependencies = [ "chrono", "env_logger", diff --git a/desktop/Cargo.toml b/desktop/Cargo.toml index a6075cd..3b44f71 100644 --- a/desktop/Cargo.toml +++ b/desktop/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "obsigate-desktop" -version = "2.43.0" +version = "2.43.1" 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 eafc383..609b46c 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.43.0", + "version": "2.43.1", "identifier": "com.obsigate.desktop", "build": { "frontendDist": "../frontend", diff --git a/docs/GUIDES/RECHERCHE_PDF_EXCALIDRAW.md b/docs/GUIDES/RECHERCHE_PDF_EXCALIDRAW.md index 7dfd9f4..a921521 100644 --- a/docs/GUIDES/RECHERCHE_PDF_EXCALIDRAW.md +++ b/docs/GUIDES/RECHERCHE_PDF_EXCALIDRAW.md @@ -244,7 +244,9 @@ latéral droit** (la grille reste visible à côté) qui liste les plages nommées du classeur (nom, référence, portée), signale les feuilles contenant des graphiques ou des tableaux croisés, et donne pour chaque feuille un résumé (cellules, lignes, colonnes, formules, valeurs -numériques) avec quelques chiffres clés. L'en-tête de l'inspecteur offre +numériques) avec quelques chiffres clés. Cliquer une **plage nommée** +sélectionne sa première cellule dans la grille, et le panneau est +**redimensionnable**. L'en-tête de l'inspecteur offre aussi un accès direct à l'**assistant IA**, qui peut ensuite exploiter ces plages (outils `list_xlsx_sheets`, `xlsx_to_markdown`, `update_xlsx_cells`, `append_xlsx_rows`). diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index ab66bc5..34a6c22 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -1,6 +1,6 @@ # ObsiGate — Roadmap -> **Version :** 2.43.0 | **Dernière mise à jour :** 2026-09-29 +> **Version :** 2.43.1 | **Dernière mise à jour :** 2026-09-29 > **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)** @@ -97,13 +97,12 @@ ### 154. Refonte UI/UX de la visionneuse & éditeur XLSX (ruban, grille, inspecteur) - **Effort :** 6-9 jours (Lot 1 ✅ · Lot 2 · Lot 3 · Lot 4) | **Impact :** 🟡 -- **Statut :** 🔵 **en cours** — **Lots 1, 2, 3 & 4 livrés le 2026-09-29** (ruban de commandes groupé, - onglets de feuilles permanents avec bouton « + », badges d'état lecture seule / formules non - recalculées, tokens de grille et affordances ; dialogues thémés `showConfirm`/`showPrompt`, - bandeau de conflit 409 non bloquant, indicateur *dirty* ; **inspecteur droit repliable** pour le - tableau de bord avec entrée Assistant IA ; **undo/redo**, chargement via `IntersectionObserver`, - ARIA `role="grid"`). Reste **A5** : découpage modulaire (`frontend/js/xlsx/*`) et finitions - (lien dashboard → grille, inspecteur redimensionnable, split). +- **Statut :** ✅ **livré le 2026-09-29 (Lots 1 → 5, A1-A5)** — ruban de commandes groupé, onglets + de feuilles permanents avec bouton « + », badges d'état lecture seule / formules non recalculées, + tokens de grille et affordances ; dialogues thémés `showConfirm`/`showPrompt`, bandeau de conflit + 409 non bloquant, indicateur *dirty* ; **inspecteur droit repliable** (tableau de bord + entrée + Assistant IA, redimensionnable) ; **undo/redo**, chargement via `IntersectionObserver`, + ARIA `role="grid"` ; extraction des unités sans état dans `frontend/js/xlsx/*`. - **Analyse, architecture cible et plan par lots :** [features/xlsx-ui-redesign.md](./features/xlsx-ui-redesign.md) - **Description :** la visionneuse XLSX (#152/#153) est fonctionnelle mais peu conviviale : commandes à plat sans hiérarchie, en-têtes de grille indistincts des cellules, états avancés @@ -116,7 +115,7 @@ - [x] **A2** Dialogues thémés (modales + toasts) et feedback non bloquant des conflits 409 (Lot 2) - [x] **A3** Inspecteur droit repliable : Tableau de bord + entrée Assistant IA (Lot 3) - [x] **A4** Undo/redo, chargement via `IntersectionObserver`, sémantique ARIA (Lot 4) - - [ ] **A5** Découpage `frontend/js/xlsx/*` + lien dashboard → grille, inspecteur redimensionnable, split + - [x] **A5** Découpage `frontend/js/xlsx/*`, lien dashboard → grille, inspecteur redimensionnable (Lot 5) --- @@ -168,6 +167,7 @@ | # | Domaine / fonctionnalité | Version | Détails | |---|---|---|---| | 152 | Viewer XLSX — affichage multi-feuilles, édition des cellules, téléchargement | 2.27.0 | [archive](./archive/COMPLETED_v1-v2.md) | +| 154 | Tableur — Refonte UI/UX (ruban groupé, onglets permanents, badges d'état, inspecteur droit, undo/redo) | 2.40.0→2.44.0 | [features/xlsx-ui-redesign.md](./features/xlsx-ui-redesign.md) | | BUG-047 | Versionnage — source unique `VERSION` + bump SemVer automatique au commit (hooks + tag) | 2.3.0 | [DEVELOPMENT_AND_RELEASES.md](./DEVELOPMENT_AND_RELEASES.md) | | 90 | Barre d'actions du document — regroupement fonctionnel + spacers | 2.3.0 | [archive](./archive/COMPLETED_v1-v2.md) | | 89 | Drag & drop complet de fichiers/dossiers & intégration Assistant IA | 2.3.0 | [features/drag-and-drop-ai.md](./features/drag-and-drop-ai.md) | @@ -247,8 +247,8 @@ | ⚪ P4 reporté | #73 Sync — **reporté (décision 2026-09-26)**, hors chemin critique | 6-8 jours si réactivé | | ⚪ P0/P1 prioritaire | #87 CI/CD (BUG-035 → BUG-040 corrigés, #86 livré) | ~3-5 jours | | ✅ Terminé | #153 Visionneuse & édition XLSX — complétude (A1-A17 **toutes livrées**, v2.27.0 → v2.39.0) | 0 jour restant | -| 🔵 En cours | #154 Refonte UI/UX tableur (A1 ✅ Lot 1 · A2-A4 restants) | ~5-7 jours | -| **Total chemin critique** | **#77 fin + #87 + #154** | **~9-13 jours** | +| ✅ Terminé | #154 Refonte UI/UX tableur (A1-A5 **toutes livrées**, v2.40.0 → v2.44.0) | 0 jour restant | +| **Total chemin critique** | **#77 fin + #87** | **~4-6 jours** | --- @@ -256,7 +256,7 @@ - **Décisions 2026-09-26 :** axe prioritaire = dette & sécurité (#85/#87) ; #73 Sync reporté (P4, hors chemin critique) ; desktop livré non signé + doc SmartScreen. - **Ajout 2026-09-27 :** #153 ouvert à la suite de l'audit de la visionneuse XLSX (limitations, risques de perte de données, périmètre IA/recherche) — détail et critères dans [features/xlsx-viewer.md](./features/xlsx-viewer.md). -- **Ajout 2026-09-29 :** #154 ouvert — refonte UI/UX de la visionneuse/éditeur XLSX (audit UX, architecture cible, plan par lots) dans [features/xlsx-ui-redesign.md](./features/xlsx-ui-redesign.md) ; Lot 1 livré (ruban groupé, onglets permanents + « + », badges d'état, tokens de grille). +- **Ajout 2026-09-29 :** #154 ouvert — refonte UI/UX de la visionneuse/éditeur XLSX (audit UX, architecture cible, plan par lots) dans [features/xlsx-ui-redesign.md](./features/xlsx-ui-redesign.md) ; **livré en 5 lots** (ruban groupé, onglets permanents + « + », badges d'état, tokens de grille, dialogues thémés, inspecteur droit, undo/redo, extraction `frontend/js/xlsx/*`). - **Clôture #85 (v2.27.13) :** monolithe découpé (T1→T9), stores verrouillés + rate-limit SQLite (T10), fiche `docs/features/archi-refonte-85.md`. - Les items P3/P4 ne sont pas ordonnés par priorité interne — à raffiner selon les retours utilisateurs. - L'effort inclut le développement + tests unitaires + intégration CI, mais pas la documentation utilisateur. diff --git a/docs/features/xlsx-ui-redesign.md b/docs/features/xlsx-ui-redesign.md index c7fabcd..4941c82 100644 --- a/docs/features/xlsx-ui-redesign.md +++ b/docs/features/xlsx-ui-redesign.md @@ -2,8 +2,8 @@ > **Item de roadmap :** [#154 — Refonte UI/UX tableur](../ROADMAP.md) > **Origine :** #152 / #153 (visionneuse XLSX fonctionnelle mais peu conviviale) -> **Statut :** 🔵 **en cours** — Lots 1, 2, 3 & 4 livrés le 2026-09-29 (reste A5, découpage modulaire) -> **Effort estimé :** 6-9 jours (Lot 1 ✅ · Lot 2 ✅ · Lot 3 ✅ · Lot 4 ✅ · Lot 5) +> **Statut :** ✅ **terminé** — Lots 1 → 5 livrés le 2026-09-29 (A1-A5) +> **Effort estimé :** 6-9 jours (Lot 1 ✅ · Lot 2 ✅ · Lot 3 ✅ · Lot 4 ✅ · Lot 5 ✅) > **Règle de maintenance :** la Roadmap porte les cases à cocher (suivi), cette fiche porte > l'analyse, l'architecture cible et le plan par lots. **Ne pas dupliquer le détail.** @@ -95,13 +95,25 @@ la grille ni le backend. défilement pour les environnements sans IO). - **A4.3** Sémantique **ARIA** : `role="grid"` / `row` / `gridcell` / `columnheader` / `rowheader`. -### Lot 5 — Découpage modulaire & finitions (à venir) +### Lot 5 — Découpage modulaire & finitions ✅ *(2026-09-29)* -- Extraction de `renderXlsxViewer` en modules (`frontend/js/xlsx/*.js`) : `toolbar`, `formula-bar`, - `grid`, `sheet-tabs`, `inspector`, `cell-editor`, `api` (refactor sans changement de - comportement, sous couvert des tests JSDOM/E2E existants). -- Lien **dashboard → grille** (clic sur KPI/plage = scroll + sélection), inspecteur - **redimensionnable**, détachement en split via `PaneManager.splitRight()`. +- **A5.1** Extraction des parties pures/sans état du monolithe `renderXlsxViewer` dans + `frontend/js/xlsx/` : **`refs.js`** (`parseRef`, `columnName`, `findTd`, `sheetOfRef`, + `firstCellOfRange`), **`command-bar.js`** (`buildCommandBar` : onglets + ruban + pastilles), + **`dashboard.js`** (`renderDashboardLoading`, `renderDashboardHtml`). Le noyau **avec état** + (orchestration DOM, édition, écouteurs) reste dans `viewer.js` : l'extraction est volontairement + limitée aux unités sans état, à comportement constant et sous couvert des tests. +- **A5.2** Lien **dashboard → grille** : cliquer une plage nommée sélectionne et révèle sa + première cellule (change d'onglet si la plage est sur une autre feuille). +- **A5.3** Inspecteur **redimensionnable** (poignée gauche, largeur 260–640 px, restaurée par + session via `localStorage`). +- **A5.4** `SW_VERSION` incrémenté (`v28`) et nouveaux modules ajoutés au pré-cache du service + worker. + +> **Hors périmètre (documenté) :** le détachement de l'inspecteur en split view +> (`PaneManager.splitRight()`) n'est pas retenu — l'inspecteur est intrinsèquement lié à la +> visionneuse d'un document ; un split générique ouvrirait un second contexte sans le classeur. +> À réévaluer si un usage concret apparaît. ## 5. Recommandations techniques (contrainte « zéro build ») @@ -134,3 +146,4 @@ la grille ni le backend. | 2026-09-29 | **Lot 2** livré : dialogues thémés (`showConfirm`/`showPrompt`) pour la structure et la confirmation de perte, bandeau de conflit 409 non bloquant avec réessai, indicateur *dirty* (bouton + onglet) | | 2026-09-29 | **Lot 3** livré : le Tableau de bord passe dans un **inspecteur droit repliable** (grille toujours visible), en-tête d'inspecteur avec entrée **Assistant IA** et fermeture, responsive < 900 px | | 2026-09-29 | **Lot 4** livré : **undo/redo** (boutons + `Ctrl+Z`/`Ctrl+Maj+Z`/`Ctrl+Y`), chargement par `IntersectionObserver`, **ARIA** `role="grid"` ; le découpage modulaire est reporté en A5 | +| 2026-09-29 | **Lot 5** livré (clôture #154) : extraction des unités sans état dans `frontend/js/xlsx/*` (`refs.js`, `command-bar.js`, `dashboard.js`), lien **dashboard → grille**, inspecteur **redimensionnable**, `SW_VERSION` v28 + pré-cache. Split view écarté (documenté) | diff --git a/frontend/js/viewer.js b/frontend/js/viewer.js index 4817896..aabfd7f 100644 --- a/frontend/js/viewer.js +++ b/frontend/js/viewer.js @@ -16,6 +16,9 @@ import { t } from './i18n.js'; import { onFileRender } from './plugins.js'; import { NowPlaying } from './now-playing.js'; import { openAssistant } from './ai-fab.js'; +import { parseRef, columnName, findTd, sheetOfRef, firstCellOfRange } from './xlsx/refs.js'; +import { buildCommandBar } from './xlsx/command-bar.js'; +import { renderDashboardLoading, renderDashboardHtml } from './xlsx/dashboard.js'; // ── Multi-format export ──────────────────────────────────────────────────── // Downloads a file export (HTML / MD bundle / ePub) via the authenticated @@ -1053,13 +1056,9 @@ export function renderXlsxViewer(area, data) { // at all, hiding the fact that a workbook can hold several). An editable // workbook also gets an explicit “+” button next to the tabs. const editable = !isCsv && !readOnly; - const tabs = isCsv - ? "" - : `
${sheets.map((s, i) => - `` - ).join("")}${editable - ? `` - : ""}
`; + // #154-A5 — the shell markup (tabs + grouped command bar + status pills) is + // built by frontend/js/xlsx/command-bar.js. + const { tabs, actionsHtml, statusBar } = buildCommandBar({ sheets, isCsv, readOnly, editable }); // #153 A15 — inline styles (bold/italic/colors from the file itself), merged // ranges and the freeze anchor are applied AFTER the panels are in the DOM // (the HTML string alone cannot carry them: col/row spans need the table). @@ -1144,54 +1143,8 @@ export function renderXlsxViewer(area, data) { ` : ""; - // #154-A1 — status pills make the viewer's limits visible up front: a - // read-only format (.xls/.ods) and the fact that formulas are never - // recalculated on screen (the workbook is only written back, Excel recomputes). - const statusPills = [ - readOnly - ? `${escapeHtml(t("xlsx.readonly_badge"))}` - : "", - !isCsv - ? `${escapeHtml(t("xlsx.formulas_note"))}` - : "", - ].filter(Boolean).join(""); - const statusBar = statusPills ? `
${statusPills}
` : ""; - - // Command groups, separated by thin rules. The dashboard button is appended - // later into the dedicated (empty) “view” group. - const actionGroups = []; - if (!readOnly) { - actionGroups.push(` - - - `); - actionGroups.push(` - - `); - } - if (editable) { - actionGroups.push(` - - `); - actionGroups.push(``); - } - actionGroups.push(` - - - - `); - const actionsHtml = actionGroups.join(''); + // #154-A1 — status pills and the grouped command bar are built by + // buildCommandBar() (frontend/js/xlsx/command-bar.js). area.innerHTML = `
@@ -1225,6 +1178,7 @@ export function renderXlsxViewer(area, data) {
${panels}