From 36729f8f61fb0baafc4b28013d40469b12b78cf0 Mon Sep 17 00:00:00 2001 From: Matthieu Date: Thu, 9 Apr 2026 16:35:22 +0200 Subject: [PATCH] feat(task) : add markdown preview for task description Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/components/task/TaskModal.vue | 22 +++++- .../components/ui/MarkdownPreviewModal.vue | 75 +++++++++++++++++++ frontend/package-lock.json | 47 +++++++++++- frontend/package.json | 4 +- frontend/tailwind.config.ts | 2 + 5 files changed, 143 insertions(+), 7 deletions(-) create mode 100644 frontend/components/ui/MarkdownPreviewModal.vue diff --git a/frontend/components/task/TaskModal.vue b/frontend/components/task/TaskModal.vue index e52ec5f..a56bee5 100644 --- a/frontend/components/task/TaskModal.vue +++ b/frontend/components/task/TaskModal.vue @@ -196,9 +196,20 @@
+
+ + +
+ + !!props.task) const isSubmitting = ref(false) const confirmDeleteOpen = ref(false) const activeTab = ref<'details' | 'planning'>('details') +const showMarkdownPreview = ref(false) const giteaUrl = ref('') const { getSettings: getGiteaSettings } = useGiteaService() diff --git a/frontend/components/ui/MarkdownPreviewModal.vue b/frontend/components/ui/MarkdownPreviewModal.vue new file mode 100644 index 0000000..c787a59 --- /dev/null +++ b/frontend/components/ui/MarkdownPreviewModal.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4cf844c..7ec3e94 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -7,13 +7,15 @@ "name": "nuxt-app", "hasInstallScript": true, "dependencies": { - "@malio/layer-ui": "^1.2.0", + "@malio/layer-ui": "^1.2.3", "@nuxt/icon": "^2.2.1", "@nuxtjs/i18n": "^10.2.3", "@nuxtjs/tailwindcss": "^6.14.0", "@pinia/nuxt": "^0.11.3", + "@tailwindcss/typography": "^0.5.19", "@vuepic/vue-datepicker": "^12.1.0", "chart.js": "^4.5.1", + "marked": "^18.0.0", "nuxt": "^4.3.1", "nuxt-toast": "^1.4.0", "pinia": "^3.0.4", @@ -2212,9 +2214,9 @@ "license": "MIT" }, "node_modules/@malio/layer-ui": { - "version": "1.2.0", - "resolved": "https://gitea.malio.fr/api/packages/MALIO-DEV/npm/%40malio%2Flayer-ui/-/1.2.0/layer-ui-1.2.0.tgz", - "integrity": "sha512-/D/p7Tz5t8xsZ+qL4kwBs2XXA/yNJpwF5C8pbSrz06Z8Je/Yut2J4KT1YpPHcfyFFE3TB8TpV0Okg/29aN6Ggg==", + "version": "1.2.3", + "resolved": "https://gitea.malio.fr/api/packages/MALIO-DEV/npm/%40malio%2Flayer-ui/-/1.2.3/layer-ui-1.2.3.tgz", + "integrity": "sha512-5nRnBzRkXfs3PfKwKl6sH2ikrmSK7lTifcd0TX1QZP3rFRVRTgcT6mrsrpsbR9PwI27OeCNm0X6d0Ii92Rq7Yg==", "dependencies": { "@nuxt/icon": "^2.2.1", "@nuxtjs/tailwindcss": "^6.14.0", @@ -5301,6 +5303,31 @@ "integrity": "sha512-G4ewlBNhUtlLvrJTb88d2mdy2KRijzs4UhnlrOSRT4bmjh/IqNElZa3zkrZ+TC47TwtlDWzVLFADljF1Ijp5hA==", "license": "CC0-1.0" }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/typography/node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -9705,6 +9732,18 @@ "source-map-js": "^1.2.1" } }, + "node_modules/marked": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-18.0.0.tgz", + "integrity": "sha512-2e7Qiv/HJSXj8rDEpgTvGKsP8yYtI9xXHKDnrftrmnrJPaFNM7VRb2YCzWaX4BP1iCJ/XPduzDJZMFoqTCcIMA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/maska": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/maska/-/maska-3.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index db2e0a1..c44d967 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -11,13 +11,15 @@ "build:dist": "nuxt generate && rm -rf dist && cp -R .output/public dist" }, "dependencies": { - "@malio/layer-ui": "^1.2.0", + "@malio/layer-ui": "^1.2.3", "@nuxt/icon": "^2.2.1", "@nuxtjs/i18n": "^10.2.3", "@nuxtjs/tailwindcss": "^6.14.0", "@pinia/nuxt": "^0.11.3", + "@tailwindcss/typography": "^0.5.19", "@vuepic/vue-datepicker": "^12.1.0", "chart.js": "^4.5.1", + "marked": "^18.0.0", "nuxt": "^4.3.1", "nuxt-toast": "^1.4.0", "pinia": "^3.0.4", diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts index bbd44cc..2c420de 100644 --- a/frontend/tailwind.config.ts +++ b/frontend/tailwind.config.ts @@ -1,7 +1,9 @@ import type {Config} from 'tailwindcss' +import typography from '@tailwindcss/typography' export default >{ darkMode: 'class', + plugins: [typography], theme: { extend: { fontFamily: {