From e0bc0511368a75eec43cd90bd222c6b2b8bbefd7 Mon Sep 17 00:00:00 2001 From: bahmez Date: Sun, 8 Feb 2026 11:50:27 +0100 Subject: [PATCH 1/2] feat: integrate @tailwindcss/typography and enhance styling - Added @tailwindcss/typography as a dependency to improve text styling across the application. - Updated tailwind.config.ts to include typography plugin. - Enhanced global styles in globals.css for better layout and responsiveness. - Refined component styles in various files to ensure consistent design and improved user experience. - Implemented mobile menu functionality in the HomePage component for better navigation on smaller screens. --- apps/web/package.json | 1 + .../boards/[boardId]/board-client.tsx | 22 +-- .../app/(app)/dashboard/dashboard-client.tsx | 25 +-- .../dashboard/members/members-client.tsx | 21 +-- apps/web/src/app/globals.css | 65 ++++++++ apps/web/src/app/page.tsx | 99 +++++++++--- apps/web/src/components/layout/navbar.tsx | 33 ++-- .../src/components/layout/trello-layout.tsx | 41 ++++- .../components/ticket/ticket-dialog-v2.tsx | 143 ++++++++++++------ apps/web/tailwind.config.ts | 2 + pnpm-lock.yaml | 22 +++ 11 files changed, 356 insertions(+), 118 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index 1921126..e7dbfec 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -39,6 +39,7 @@ "superjson": "^2.2.2" }, "devDependencies": { + "@tailwindcss/typography": "^0.5.19", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.1", "@testing-library/user-event": "^14.6.1", diff --git a/apps/web/src/app/(app)/dashboard/boards/[boardId]/board-client.tsx b/apps/web/src/app/(app)/dashboard/boards/[boardId]/board-client.tsx index 3bbbc04..71dc4c5 100644 --- a/apps/web/src/app/(app)/dashboard/boards/[boardId]/board-client.tsx +++ b/apps/web/src/app/(app)/dashboard/boards/[boardId]/board-client.tsx @@ -934,9 +934,9 @@ export default function BoardClient({ boardId }: { boardId: string }) { return (
-
-
-
+
+
+
{isEditingBoardTitle ? ( { setBoardTitleDraft(board.title); setIsEditingBoardTitle(true); @@ -975,15 +975,15 @@ export default function BoardClient({ boardId }: { boardId: string }) { )}
- {board.description ?
{board.description}
: null} + {board.description ?
{board.description}
: null}
-
+
- @@ -1073,9 +1073,9 @@ export default function BoardClient({ boardId }: { boardId: string }) { - @@ -1130,7 +1130,7 @@ export default function BoardClient({ boardId }: { boardId: string }) { - + diff --git a/apps/web/src/app/(app)/dashboard/dashboard-client.tsx b/apps/web/src/app/(app)/dashboard/dashboard-client.tsx index 92f06be..28a303a 100644 --- a/apps/web/src/app/(app)/dashboard/dashboard-client.tsx +++ b/apps/web/src/app/(app)/dashboard/dashboard-client.tsx @@ -190,20 +190,20 @@ export default function DashboardClient() { const pageWorkspaces = workspaces.slice(wsStart, wsStart + WORKSPACES_PER_PAGE); return ( -
-
-
-

Dashboard

-

+

+
+
+

Dashboard

+

{archivedView ? t('dashboard.archived_workspaces') : t('dashboard.all_workspaces')}

-
+
{!archivedView && ( - + @@ -236,22 +236,23 @@ export default function DashboardClient() { {pageWorkspaces.map((ws) => { const page = boardsPagesByWorkspace[ws.id] ?? 1; return ( -
-
-
-
{ws.title}
+
+
+
+
{ws.title}
{ws.description ?
{ws.description}
: null}
{archivedView ? ( ) : ( - )} diff --git a/apps/web/src/app/(app)/dashboard/members/members-client.tsx b/apps/web/src/app/(app)/dashboard/members/members-client.tsx index c96a809..14a2d6c 100644 --- a/apps/web/src/app/(app)/dashboard/members/members-client.tsx +++ b/apps/web/src/app/(app)/dashboard/members/members-client.tsx @@ -60,15 +60,15 @@ function MemberRow({ const cannotRemove = isLastMember || isLastAdmin; return ( -
+
{label}
{secondary ?
{secondary}
: null}
-
+
; + } + return ; + }, } as const; }, [usersById]); @@ -329,37 +394,13 @@ export default function TicketDialogV2({ open, onOpenChange, ticketId, boardId } const [descMentionIndex, setDescMentionIndex] = React.useState(0); const renderCommentContent = React.useCallback((content: string) => { - // Parse @username mentions and render them as blue chips (not clickable) - const tokens = parseMentionTokens(content); - if (tokens.length === 0) { - // No mentions, just render as text (or with basic markdown if needed) - return
{content}
; - } - - const parts: React.ReactNode[] = []; - let cursor = 0; - for (let i = 0; i < tokens.length; i++) { - const t = tokens[i]!; - if (t.start > cursor) { - parts.push({content.slice(cursor, t.start)}); - } - const mentionText = content.slice(t.start, t.end); // "@username" - parts.push( - - {mentionText} - , - ); - cursor = t.end; - } - if (cursor < content.length) { - parts.push({content.slice(cursor)}); - } - return
{parts}
; - }, []); + // Render comments as markdown with mention support + return ( + + {linkifyMentionsMarkdown(content)} + + ); + }, [markdownComponents]); const descMentionCandidates = React.useMemo(() => { if (!descMention) return []; @@ -692,9 +733,9 @@ export default function TicketDialogV2({ open, onOpenChange, ticketId, boardId } return ( <> - + {/* Header */} -
+
@@ -736,9 +777,9 @@ export default function TicketDialogV2({ open, onOpenChange, ticketId, boardId }
{/* Body: 2 colonnes */} -
+
{/* Colonne principale */} -
+
{/* Labels (si présents) */} {ticketLabelIds.length > 0 && (
@@ -1053,16 +1094,17 @@ export default function TicketDialogV2({ open, onOpenChange, ticketId, boardId } {/* Comments / Activity */}
-
- +
+

{ticketFeedView === 'history' ? t('ticket.activity_tab') : t('ticket.comments_tab')}

-
+
@@ -1070,6 +1112,7 @@ export default function TicketDialogV2({ open, onOpenChange, ticketId, boardId } size="sm" variant={ticketFeedView === 'history' ? 'trello' : 'ghost'} onClick={() => setTicketFeedView('history')} + className="text-xs sm:text-sm px-2 sm:px-3" > {t('ticket.history_tab')} @@ -1077,8 +1120,8 @@ export default function TicketDialogV2({ open, onOpenChange, ticketId, boardId }
{ticketFeedView === 'comments' && canComment && ( -
- +
+