Add goal tree toolbox module
All checks were successful
Deploy Sokko G / deploy (push) Successful in 15s

This commit is contained in:
Shinuwa 2026-08-22 18:15:39 +02:00
parent e4cbe3e087
commit 59fdcb0927
63 changed files with 4062 additions and 252 deletions

View file

@ -36,6 +36,10 @@
"id": "m8",
"type": "table"
},
{
"id": "mf",
"type": "goalTree"
},
{
"id": "m9",
"type": "timer"
@ -213,8 +217,8 @@
}
],
"moduleOrder": {
"one": ["m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "m9", "md", "me", "ma", "mb", "mc"],
"two": [["m1", "m2", "m3", "m4", "m5", "m6", "ma"], ["m7", "m8", "m9", "md", "me", "mb", "mc"]]
"one": ["m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8", "mf", "m9", "md", "me", "ma", "mb", "mc"],
"two": [["m1", "m2", "m3", "m4", "m5", "m6", "ma"], ["m7", "m8", "mf", "m9", "md", "me", "mb", "mc"]]
},
"updatedAt": "2026-08-09T07:34:31.425Z",
"moduleColumns": 1
@ -1436,6 +1440,103 @@
"3": "Valeur"
}
},
"mf": {
"lastResetAt": 1787263200000,
"orientation": "vertical",
"nodes": [
{
"id": "goal1",
"title": "Potion d'invincibilité",
"icon": "flask",
"color": "green",
"qtyTarget": 10
},
{
"id": "goal2",
"title": "Potion de vie",
"parentId": "goal1",
"icon": "flask",
"color": "red",
"formula": "base"
},
{
"id": "goal3",
"title": "Ingredients",
"parentId": "goal2",
"kind": "checklist",
"items": [
{
"id": "xn2okr5",
"label": "Herbe magique",
"formula": "base",
"qtyTarget": 10,
"qtyCurrent": 7
},
{
"id": "xm5h5uu",
"label": "Eau rajeunissante",
"formula": "base",
"qtyTarget": 10,
"qtyCurrent": 5
}
]
},
{
"id": "goal4",
"title": "Potion de résistance",
"parentId": "goal1",
"icon": "flask",
"color": "blue",
"formula": "base"
},
{
"id": "goal5",
"title": "Ingredients supp.",
"parentId": "goal1",
"kind": "checklist",
"items": [
{
"id": "x3mlygm",
"label": "Poudre magique",
"formula": "base",
"qtyTarget": 10
},
{
"id": "x1dqx6w",
"label": "Herbe magique",
"formula": "base*2",
"qtyTarget": 20
}
]
},
{
"id": "goal6",
"title": "Parler a l'alchimiste",
"collapsed": true
},
{
"id": "goal7",
"title": "Acheter une station d'alchimie",
"parentId": "goal6",
"formula": "base",
"collapsed": true
},
{
"id": "goal8",
"title": "Apprendre la recette de potion d'invicibilité",
"parentId": "goal7",
"formula": "base",
"collapsed": true
},
{
"id": "goal9",
"title": "S'inscrire à l'academie d'alchimie",
"parentId": "goal6",
"formula": "base",
"collapsed": true
}
]
},
"m9": {
"activeTab": "countdown",
"stopwatch": {

View file

@ -673,6 +673,81 @@
"example": "Lingot de champignite: 100\n Lingot de chlorophyte: 100\n Champignon luisant: 1500\nLingot de chlorophyte: 100\n Minerai de chlorophyte: 500"
}
},
"goalTree": {
"controls": [
{
"group": "Arbre",
"icon": "rotate",
"title": "Changer le mode d'affichage",
"preview": {
"kind": "switch",
"icon": "rotate",
"active": true
}
},
{
"group": "Arbre",
"icon": "chevron-down",
"title": "Déployer l'objectif",
"preview": {
"kind": "iconButton",
"icon": "chevron-down"
}
},
{
"group": "Objectifs",
"icon": "edit",
"title": "Éditer l'objectif",
"preview": {
"kind": "iconButton",
"icon": "edit"
}
},
{
"group": "Objectifs",
"icon": "trash",
"title": "Supprimer l'objectif et ces étapes",
"preview": {
"kind": "iconButton",
"icon": "trash",
"danger": true
}
}
],
"features": [
{
"title": "Décomposition visuelle",
"text": "Un objectif peut être ouvert en étapes, sous-étapes et ressources finales.",
"details": [
"Chaque bloc peut être sélectionné pour éditer ses quantités et son type.",
"Les branches se replient pour garder une vue lisible quand l'arbre grandit.",
"Le même outil peut représenter un craft, une route de farm ou un objectif long."
]
},
{
"title": "Quantités liées",
"text": "Les sous-étapes peuvent utiliser une formule basée sur la quantité du parent.",
"details": [
"La variable base référence la cible calculée du parent.",
"Les feuilles suivent leur quantité actuelle, tandis que les parents affichent une progression agrégée.",
"Les formules restent limitées aux opérations numériques simples."
]
},
{
"title": "Resets optionnels",
"text": "Un nœud peut être ponctuel, quotidien ou hebdomadaire sans imposer un reset à tout l'arbre.",
"details": [
"Les resets remettent seulement la quantité actuelle à zéro.",
"Le jour hebdomadaire et l'heure de reset se règlent au niveau de l'outil.",
"La structure de l'arbre reste inchangée après une réinitialisation."
]
}
],
"importFormat": {
"text": "Une ligne par nœud avec indentation de deux espaces. Utilisez xN pour une quantité simple ou = base * N pour une formule.",
"example": "- Breuvage de rage x10\n - Élixir de destruction = base * 3\n - Poudre de flamme x5\n - Sève de cèdre x7\n - Catalyseur magique x10"
}
},
"table": {
"controls": [
{
@ -1792,6 +1867,101 @@
"renameTitle": "Renommer",
"deleteTitle": "Supprimer"
},
"goalTree": {
"importPlaceholder": "- Breuvage de rage x10\n - Élixir de destruction = base * 3\n - Poudre de flamme x5\n - Sève de cèdre x7\n - Catalyseur magique x10",
"importOpenButton": "Importer du texte",
"exportOpenButton": "Exporter en format texte",
"importModalTitle": "Importer un arbre d'objectifs",
"exportModalTitle": "Exporter un arbre d'objectifs",
"importButton": "Importer le texte",
"exportButton": "Copier le texte",
"importSuccess": "Import d'arbre terminé.",
"exportSuccess": "Export d'arbre copié.",
"importError": "Format d'arbre d'objectifs invalide.",
"editorTitle": "Édition de l'arbre d'objectifs",
"treeTitle": "Arbre d'objectifs",
"addRootButton": "Objectif",
"addRootSchemaButton": "Ajouter un objectif a la racine",
"addChildButton": "Sous-étape",
"addChildTitle": "Ajouter une sous-étape",
"addContentItemTitle": "Ajouter une entrée",
"addContentItemTooltip": "Ajouter une entrée interne à cette carte.",
"verticalViewTitle": "Afficher verticalement",
"horizontalViewTitle": "Afficher horizontalement",
"cardActionsLabel": "Actions de l'objectif",
"editTitle": "Modifier",
"baseTab": "Base",
"contentTab": "Contenu",
"advancedTab": "Avancé",
"defaultRootTitle": "Nouvel objectif",
"defaultChildTitle": "Nouvelle étape",
"resetTimeLabel": "Heure de reset",
"weeklyResetDayLabel": "Jour de reset",
"titleLabel": "Titre de l'objectif",
"listTitleLabel": "Titre de la liste",
"kindLabel": "Type de l'objectif",
"stepKind": "Étape",
"textKind": "Texte",
"checklistKind": "Checklist",
"iconLabel": "Icône",
"iconColorLabel": "Couleur de l'icône",
"iconcube": "Cube",
"iconfire": "Feu",
"iconflask": "Fiole",
"icongrass": "Herbe",
"iconleaf": "Feuille",
"iconmeat": "Viande",
"iconpowder": "Poudre",
"icontear": "Goutte",
"iconball": "Boule",
"colorgold": "Or",
"colorcyan": "Cyan",
"colorviolet": "Violet",
"colorpink": "Rose",
"colorgreen": "Vert",
"colorgray": "Gris",
"colorred": "Rouge",
"colororange": "Orange",
"coloryellow": "Jaune",
"colorblue": "Bleu",
"colorindigo": "Indigo",
"targetQuantityLabel": "Cible",
"quantitySectionTitle": "Quantité",
"progressSectionTitle": "Progression",
"autoProgressLabel": "Automatique",
"manualProgressLabel": "Manuelle",
"autoProgressTitle": "Progression automatique",
"manualProgressTitle": "Mise à jour manuelle",
"autoProgressHint": "Calcule la progression depuis les enfants.",
"manualProgressHint": "Affiche une checkbox ou une quantité à mettre à jour directement.",
"contentSectionTitle": "Contenu",
"itemLabelLabel": "Libellé",
"itemLabelPlaceholder": "Élément",
"itemCheckedLabel": "État",
"itemTotalLabel": "Total",
"itemTotalPlaceholder": "base",
"itemTotalHelp": "Saisissez un nombre ou une formule avec base pour référencer la cible du parent.",
"prerequisitesSectionTitle": "Prérequis supplémentaires",
"contentTabHint": "Le contenu se modifie dans l'onglet Contenu.",
"stepContentUnavailable": "Les étapes n'ont pas de contenu interne.",
"decrementItemTitle": "Retirer",
"incrementItemTitle": "Ajouter",
"addContentItemButton": "Ajouter une ligne",
"formulaPlaceholder": "base * 3",
"formulaHelp": "Utilisez base pour référencer la cible du parent.",
"resetTypeLabel": "Type de reset",
"noneReset": "Aucun",
"dailyReset": "Quotidien",
"weeklyReset": "Hebdomadaire",
"closeButton": "Fermer",
"deleteButton": "Supprimer la branche",
"deleteTitle": "Supprimer",
"reorderTitle": "Déplacer",
"showChildrenTitle": "Afficher la branche",
"hideChildrenTitle": "Réduire la branche",
"emptySelection": "Sélectionnez ou créez un objectif.",
"emptyTree": "Aucun objectif."
},
"table": {
"importPlaceholder": "Collez un TSV pur ou un TSV exporté par Sokko G.",
"importOpenButton": "Importer TSV",

View file

@ -3,22 +3,22 @@
{
"id": "default",
"label": "Toolbox",
"src": "/static/img/toolbox-icons/default.svg"
"src": "/static/icons/toolbox.svg"
},
{
"id": "controller",
"label": "Controller",
"src": "/static/img/toolbox-icons/controller.svg"
"src": "/static/icons/controller.svg"
},
{
"id": "quest",
"label": "Quest",
"src": "/static/img/toolbox-icons/quest.svg"
"src": "/static/icons/tasklist.svg"
},
{
"id": "target",
"label": "Target",
"src": "/static/img/toolbox-icons/target.svg"
"src": "/static/icons/diagram.svg"
}
]
}