Add toolbox spaces and recover from stale asset bundles
All checks were successful
Deploy Sokko G / deploy (push) Successful in 18s

This commit is contained in:
Shinuwa 2026-09-29 21:31:49 +02:00
parent 0959c6740b
commit 0acf5ecf21
30 changed files with 1252 additions and 179 deletions

View file

@ -111,8 +111,8 @@ rechargement de l'application ; il n'y a pas d'éviction à la fermeture.
Les exports attendent les écritures précédentes dans la même file et lisent les
médias manquants depuis l'état confirmé, sans les ajouter au cache de l'interface.
Si cette lecture échoue, aucun fichier partiel n'est téléchargé. Les formats
IndexedDB et import/export sont inchangés.
Si cette lecture échoue, aucun fichier partiel n'est téléchargé. Les snapshots
IndexedDB et les exports utilisent le même registre d'espaces décrit ci-dessous.
Cette coordination est locale à l'instance React ; elle ne synchronise pas
l'édition entre plusieurs onglets.
@ -141,10 +141,18 @@ Les toolboxes sont stockées dans `kv/toolboxes`.
}
],
"moduleColumns": 2,
"moduleOrder": {
"one": ["mod1"],
"two": [["mod1"], []]
},
"spaces": [
{
"id": "space1",
"name": "Défaut",
"moduleOrder": {
"one": ["mod1"],
"two": [["mod1"], []]
}
}
],
"defaultSpaceId": "space1",
"activeSpaceId": "space1",
"tutorial": true,
"updatedAt": "2026-07-25T12:00:00.000Z"
}
@ -156,10 +164,12 @@ Notes :
- `icon` est utilisé uniquement pour les toolboxes libres.
- `customCover` est une image rectangulaire optionnelle utilisée comme cover de card pour les toolboxes libres. Elle est stockée en data URL image après recadrage, sans conserver le fichier original.
- `moduleColumns` vaut `1` ou `2` et contrôle l'affichage de la page toolbox complète ; le panneau latéral utilise toujours l'ordre une colonne.
- `moduleOrder.one` stocke l'ordre du mode une colonne.
- `moduleOrder.two` stocke l'ordre explicite des colonnes gauche et droite en mode deux colonnes.
- Chaque identifiant d'outil présent dans `modules` doit apparaître exactement une fois dans `moduleOrder.one` et exactement une fois dans l'une des deux colonnes de `moduleOrder.two`.
- Si une ancienne toolbox n'a pas encore `moduleOrder.two`, les outils sont répartis automatiquement depuis l'ordre une colonne avec une moitié en colonne gauche et une moitié en colonne droite.
- `spaces` contient de un à cinq espaces dans l'ordre de leurs onglets. L'espace identifié par `defaultSpaceId` reste toujours premier et ne peut pas être supprimé, même après renommage.
- `activeSpaceId` conserve l'espace affiché dans la page complète et le panneau latéral.
- Chaque `spaces[].moduleOrder.one` stocke l'ordre du mode une colonne de cet espace ; `two` stocke ses colonnes gauche et droite.
- Chaque identifiant d'outil présent dans `modules` apparaît exactement une fois dans l'ordre `one` d'un espace et exactement une fois dans l'une de ses colonnes `two`.
- Les anciennes toolboxes sans `spaces` sont normalisées vers un espace « Défaut » qui reprend leur `moduleOrder`. Le format canonique compact ne conserve ensuite plus le champ racine `moduleOrder`.
- Les exports individuels et globaux utilisent la version 2. Un import v2 de plus de cinq espaces est rejeté avant toute écriture.
- Les données lourdes des outils ne sont pas stockées dans la toolbox, mais dans `modules`.
- `modules[].collapsed` vaut `true` lorsque seul l'en-tête de l'outil est affiché ; il est omis lorsque l'outil est déplié.
- `tutorial` est un indicateur temporaire réservé aux toolboxes créées depuis la prise en main. Il déclenche les premiers repères à l'ouverture, puis il est retiré automatiquement du stockage.
@ -1152,6 +1162,7 @@ Exemple :
```json
{
"version": 2,
"toolbox": {
"id": "t1",
"name": "MHW",
@ -1162,6 +1173,18 @@ Exemple :
"title": "Armures"
}
],
"spaces": [
{
"id": "sp1",
"name": "Défaut",
"moduleOrder": {
"one": ["m1"],
"two": [["m1"], []]
}
}
],
"defaultSpaceId": "sp1",
"activeSpaceId": "sp1",
"updatedAt": "2026-07-25T12:00:00.000Z"
},
"modules": {