diff --git a/CLAUDE.md b/CLAUDE.md index 54bb893..d00220a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,32 +13,25 @@ Application de gestion de projet. Monorepo Symfony 8 (API Platform 4) + Nuxt 4. ## Structure +> Le détail (entités, providers, services, composants…) se découvre dans le code. Carte d'orientation : + ``` -src/Entity/ # Entités Doctrine (User, Client, Project, Task, TaskStatus, TaskEffort, TaskPriority, TaskTag, TaskGroup, TimeEntry, GiteaConfiguration, Notification, TaskDocument, BookStackConfiguration, TaskBookStackLink, TaskRecurrence, ZimbraConfiguration) -src/ApiResource/ # Ressources API Platform (si découplées des entités) (ZimbraSettings, ZimbraTestConnection) -src/Enum/ # PHP enums (RecurrenceType) -src/State/ # Providers et Processors API Platform (MeProvider, AppVersionProvider, ActiveTimeEntryProvider, UserPasswordHasherProcessor, TaskNumberProcessor, NotificationProvider, Gitea*Provider, Gitea*Processor, ZimbraSettingsProvider/Processor, ZimbraTestConnectionProvider, TaskCalendarProcessor, RecurrenceHandler) +src/Entity/ # Entités Doctrine (User, Client, Project, Task + métadonnées Task*, TimeEntry, Notification, *Configuration…) +src/ApiResource/ # Ressources API Platform découplées des entités +src/State/ # Providers & Processors API Platform (Me, ActiveTimeEntry, TaskNumber, Notification, Gitea*, Zimbra*, RecurrenceHandler…) src/Service/ # Services métier (NotificationService, CalDavService, RecurrenceCalculator) -src/Controller/ # Controllers custom Symfony (NotificationUnreadCountController, MarkAllReadController, UserAvatarController, TaskDocumentDownloadController) -src/Mcp/Tool/ # MCP tools organisés par domaine (Project/, Task/, TaskMeta/, TimeEntry/, Reference/) -src/Security/ # Authenticators custom (ApiTokenAuthenticator pour MCP HTTP) -src/Command/ # Commandes console (GenerateApiTokenCommand) -src/Repository/ # Repositories Doctrine -src/DataFixtures/ # Fixtures -config/ # Config Symfony (security, api_platform, lexik_jwt, nelmio_cors, doctrine) -config/jwt/ # Clés JWT (private.pem, public.pem) -migrations/ # Migrations Doctrine -docs/plans/ # Plans d'implémentation -docs/superpowers/ # Plans et specs superpowers -frontend/ # App Nuxt 4 -frontend/pages/ # Pages (index, login, my-tasks, profile, projects, projects/[id], projects/[id]/groups, projects/[id]/archives, time-tracking, admin) -frontend/layouts/ # Layouts (default) -frontend/components/ # Composants Vue organisés en sous-dossiers (ui/, client/, project/, task/, user/, admin/, time-tracking/, notification/) — inclut admin/AdminZimbraTab -frontend/composables/# Composables (useApi, useAppVersion, useNotifications, useAvatarService) -frontend/stores/ # Stores Pinia (auth, ui, timer) -frontend/services/ # Services API (auth, clients, gitea, projects, tasks, task-statuses, task-efforts, task-groups, task-priorities, task-tags, users, time-entries, notifications, task-documents, zimbra, task-recurrences) -frontend/services/dto/ # Types TypeScript -frontend/i18n/locales/ # Fichiers de traduction (langDir résolu depuis i18n/) +src/Controller/ # Controllers custom (notifications, avatar, download document) +src/Mcp/Tool/ # MCP tools par domaine (Project/, Task/, TaskMeta/, TimeEntry/, Reference/) +src/Security/ # ApiTokenAuthenticator (MCP HTTP) +src/Command/ src/Repository/ src/DataFixtures/ +config/ # security, api_platform, lexik_jwt, nelmio_cors, doctrine — config/jwt/ = clés +migrations/ docs/plans/ docs/superpowers/ +frontend/pages/ # index, login, my-tasks, profile, projects/[id]/*, time-tracking, admin +frontend/components/ # Sous-dossiers ui/ client/ project/ task/ user/ admin/ time-tracking/ notification/ +frontend/composables/# useApi, useAppVersion, useNotifications, useAvatarService +frontend/stores/ # Pinia : auth, ui, timer +frontend/services/ # 1 service par ressource API (+ services/dto/ pour les types) +frontend/i18n/locales/ # Traductions (langDir résolu depuis i18n/) ``` ## Commandes diff --git a/config/version.yaml b/config/version.yaml index adf933f..73fe046 100644 --- a/config/version.yaml +++ b/config/version.yaml @@ -1,2 +1,2 @@ parameters: - app.version: '0.4.23' + app.version: '0.4.26' diff --git a/frontend/assets/css/app.css b/frontend/assets/css/app.css index b94a09c..9e6b566 100644 --- a/frontend/assets/css/app.css +++ b/frontend/assets/css/app.css @@ -19,3 +19,20 @@ padding-top: 1rem; padding-bottom: 1rem; } + +/* + * Champs Malio (@malio/layer-ui >= 1.7.5) : depuis cette version, la ligne de + * message sous chaque champ est toujours rendue (`reserveMessageSpace` à `true` + * par défaut) et réserve ~1rem (16px) même sans erreur/hint, ce qui décale les + * formulaires denses. On retire cette réserve et on masque la ligne quand elle + * est vide, sans désactiver l'option champ par champ ni perdre l'affichage des + * vraies erreurs/hints. + * + * Hook stable : la ligne de message a un id se terminant par "-describedby". + */ +[id$="-describedby"] { + min-height: 0; +} +[id$="-describedby"]:empty { + display: none; +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1533403..3f7232a 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7,7 +7,7 @@ "name": "nuxt-app", "hasInstallScript": true, "dependencies": { - "@malio/layer-ui": "^1.6.0", + "@malio/layer-ui": "^1.7.5", "@nuxt/icon": "^2.2.1", "@nuxtjs/i18n": "^10.2.3", "@nuxtjs/tailwindcss": "^6.14.0", @@ -2220,9 +2220,9 @@ "license": "MIT" }, "node_modules/@malio/layer-ui": { - "version": "1.6.0", - "resolved": "https://gitea.malio.fr/api/packages/MALIO-DEV/npm/%40malio%2Flayer-ui/-/1.6.0/layer-ui-1.6.0.tgz", - "integrity": "sha512-2sN4mL1Jf984oeE4N4yEv6XFgSz0Gc+uSG+HLGfRrdzjAsMcU9hbb7HSAo3Q6MBvQHZn3ZBr1cK+VUM0kXY4NA==", + "version": "1.7.5", + "resolved": "https://gitea.malio.fr/api/packages/MALIO-DEV/npm/%40malio%2Flayer-ui/-/1.7.5/layer-ui-1.7.5.tgz", + "integrity": "sha512-xryrAYgVgX3eurEWXT/d0p4r/MBYNBB3mBnvV6xVcFhzxW+HfOra8hsVHLvrCtd+m5E1t7PDRzjw1FObkV6fdQ==", "dependencies": { "@nuxt/icon": "^2.2.1", "@nuxtjs/tailwindcss": "^6.14.0", diff --git a/frontend/package.json b/frontend/package.json index 88799af..6edf4f5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,7 +11,7 @@ "build:dist": "nuxt generate && rm -rf dist && cp -R .output/public dist" }, "dependencies": { - "@malio/layer-ui": "^1.6.0", + "@malio/layer-ui": "^1.7.5", "@nuxt/icon": "^2.2.1", "@nuxtjs/i18n": "^10.2.3", "@nuxtjs/tailwindcss": "^6.14.0",