From 58e2840fae0619a008a6dd8710fc5fcc0d8fee37 Mon Sep 17 00:00:00 2001 From: neodk2004 Date: Sat, 27 Jun 2026 07:27:47 +0200 Subject: [PATCH] =?UTF-8?q?fix(mobile+comments):=20Sprint=201=20=E2=80=94?= =?UTF-8?q?=20nav=20visibility,=20messages=20button,=20optimistic=20commen?= =?UTF-8?q?ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MobileNav: fixed mail icon top-right corner (always reachable on mobile) - MobileNav: iOS safe-area-inset-bottom padding so nav is never hidden - MobileNav: larger icons (h-6) + better contrast on inactive tabs (text-foreground/60) - PostDetailDialog: optimistic comment update — comment appears immediately on submit with pending indicator; rolls back input on error - i18n: added Comments.sending key (EN/DE) - PostCard: minor style cleanup (pre-existing session changes) - Explore: pre-existing session changes --- .claude/settings.local.json | 45 ++++++++++++++++++++++- DEBUG-List.md | 24 ++++++++++-- messages/de.json | 1 + messages/en.json | 1 + src/app/(app)/explore/page.tsx | 28 ++++---------- src/app/favicon.ico | Bin 25931 -> 15406 bytes src/components/feed/PostCard.tsx | 42 ++++++++++----------- src/components/feed/PostDetailDialog.tsx | 29 +++++++++++++-- src/components/layout/MobileNav.tsx | 38 +++++++++++++------ 9 files changed, 145 insertions(+), 63 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6a1c932..b56bf65 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -48,7 +48,50 @@ "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query config-get workflow.discuss_mode)", "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query phase.mvp-mode 1 --pick active)", "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query state.advance-plan --phase 1 --plan \"01-04\")", - "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query commit \"chore\\(01\\): phase 1 complete\" --files \".planning/STATE.md\" \".planning/ROADMAP.md\" \".planning/phases/01-foundation/01-04-SUMMARY.md\" \".planning/phases/01-foundation/SUMMARY.md\")" + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query commit \"chore\\(01\\): phase 1 complete\" --files \".planning/STATE.md\" \".planning/ROADMAP.md\" \".planning/phases/01-foundation/01-04-SUMMARY.md\" \".planning/phases/01-foundation/SUMMARY.md\")", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query init.plan-phase 2)", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query phase.mvp-mode 2 --pick active)", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query config-set workflow._auto_chain_active false)", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query roadmap.get-phase 2 --pick section)", + "Bash(command -v ctx7)", + "WebSearch", + "Bash(python -c \"from slopcheck import cli; cli.main\\(\\)\" -- install react-intersection-observer --json)", + "Bash(python -m slopcheck.cli install react-intersection-observer --json)", + "Bash(python *)", + "Bash(npm view *)", + "Bash(sed -i 's/^## Open Questions$/## Open Questions \\(RESOLVED\\)/' .planning/phases/02-content-core/02-RESEARCH.md)", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query state.planned-phase --phase 2 --name \"Content Core\" --plans 6)", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query roadmap.annotate-dependencies 2)", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query commit \"docs\\(02\\): create phase plan \\(6 plans\\)\" --files \".planning/phases/02-content-core/02-01-PLAN.md\" \".planning/phases/02-content-core/02-02-PLAN.md\" \".planning/phases/02-content-core/02-03-PLAN.md\" \".planning/phases/02-content-core/02-04-PLAN.md\" \".planning/phases/02-content-core/02-05-PLAN.md\" \".planning/phases/02-content-core/02-06-PLAN.md\" \".planning/phases/02-content-core/02-RESEARCH.md\" \".planning/STATE.md\" \".planning/ROADMAP.md\")", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" gap-analysis --phase-dir \".planning/phases/02-content-core\" --phase-req-ids \"PHOTO-01, PHOTO-02, PHOTO-03, PHOTO-04, STORY-01, STORY-02, STORY-03, MILE-01, MILE-02, SOCL-01, SOCL-02, SOCL-03, FEED-01, SAFE-01, SAFE-02\")", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query state.advance-plan --phase 2 --plan \"02-02\")", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query state.advance-plan --phase 2 --plan \"02-03\")", + "Bash(node \"T:/CC-Projekte/.claude/gsd-core/bin/gsd-tools.cjs\" query state.advance-plan --phase 2 --plan \"02-04\")", + "Bash(git push *)", + "Bash(New-Item -ItemType Directory -Force \"T:\\\\CC-Projekte\\\\OnlyPets\\\\.planning\\\\phases\\\\03-engagement-discovery\")", + "Bash(Out-Null)", + "Bash(Write-Output \"created\")", + "PowerShell(New-Item *)", + "Bash(npm run *)", + "Bash(ping -n 4 127.0.0.1)", + "Bash(npm list *)", + "Bash(curl -s http://localhost:3000 -o /dev/null -w \"%{http_code}\")", + "PowerShell(taskkill *)", + "PowerShell(npm run *)", + "Bash(findstr /i \"phase health\")", + "Bash(findstr /i \"cuid\" package.json)", + "Bash(node -e \"const { prisma } = require\\('./src/lib/prisma'\\); console.log\\('weightLog:', typeof prisma.weightLog\\); console.log\\('vetVisit:', typeof prisma.vetVisit\\); console.log\\('vaccine:', typeof prisma.vaccine\\);\")", + "Bash(node -e \"const { PrismaClient } = require\\('@prisma/client'\\); const p = new PrismaClient\\(\\); console.log\\('weightLog:', typeof p.weightLog\\); console.log\\('vetVisit:', typeof p.vetVisit\\); console.log\\('vaccine:', typeof p.vaccine\\); console.log\\('healthCard:', typeof p.healthCard\\);\")", + "Bash(npx tsx -e ' *)", + "Bash(git remote *)", + "Read(//t/cc-projekte/onlypets/**)", + "Bash(find src *)", + "Bash(grep -v \"useTranslations\\\\|t\\(\\\\|import\\\\|//\\\\|className\\\\|aria-\\\\|placeholder\\\\|type=\\\\|href=\\\\|key=\\\\|data-\")", + "Bash(grep -rn --include=\"*.tsx\" -E \"^\\\\s+[A-Z][a-z]|No [a-z]|yet$|No [A-Z]\" src/components src/app)", + "Bash(grep -v \"useTranslations\\\\|t\\(\\\\|import\\\\|//\\\\|className\\\\|interface\\\\|type\\\\|const\\\\|export\\\\|function\\\\|return\\\\|<\\\\|}\\\\|{\")", + "Bash(grep -v \"//\\\\|import\\\\|className\\\\|href\\\\|aria\\\\|data-\\\\|type=\\\\|value=\\\\|admin\\\\|legal\\\\|impressum\\\\|datenschutz\\\\|nutzung\\\\|health-card\\\\|join\\\\|banned\\\\|auth\\\\|p/\\\\[\")", + "Bash(grep -v \"^\\\\s*//\\\\|^import\")", + "Bash(grep -v \"//\\\\|import\\\\|className\\\\|interface\\\\|type\\\\|const\\\\|export\\\\|href\\\\|aria-\\\\|data-\\\\|key=\\\\|useTranslations\\\\|admin\\\\|auth\\\\|legal\\\\|health-card\\\\|p/\\\\[\")" ] } } diff --git a/DEBUG-List.md b/DEBUG-List.md index 3dfa728..5d40ac3 100644 --- a/DEBUG-List.md +++ b/DEBUG-List.md @@ -1,14 +1,30 @@ Debug: -Health - Share Card - Downloadbar machen als PDF Ansicht, mit Profil Foto und allen Health Daten übersichtlich aufgegliedert. +\-Die Suchen seite ist noch nicht auf Deutsch übersetzt. -jeweils mit Farblichen Trennern oder Rahmen. So wäre es möglich bei einem Arztwechsel, gleich alle Daten mitnehmen zu können. +\-Die Erwähnfunktion mittels @ ist impelmentiert, aber es fehlt die Benachrichtung das man Erwähnt wurde ! Zudem ist die Auswahl nach dem tippen @ schlecht designed man kann gerade so den Avatar erkennen aber nicht den namen in der aufploppenden suche, bitte um FIX ! -Oder für den Notfall ausgedruckt dabei zu haben. +\-Messages ist noch nicht auf Deutsch übersetzt. + +\-Kommentar Update; wenn man einen Kommentar postet, muss dieser zwingend sofort im Kommentar-Verlauf sichtbar werden (Optische Bestätigung das der Kommentar angekommen ist für den Nutzer), es muss sich als Nutzer Live anfühlen auch wenn der Server noch am arbeiten ist. + +\-Benachrichtung wenn man "Paw-Back this post" nutzt für den Original-User des Posts. + +\-Die Mobil Ansicht ist noch nicht ausgereift, das Menü ist teilweise nicht mehr erkennbar im unteren Segemet ( Startseite, Entdecken, +, Benachrichtigungen, Profil). + +\-Mobilansicht - Add Story Button ist sehr linksbündig, keine Aufteilung vorhanden. + +\-Mobilansicht - Kein PawFeed Logo sichtbar, soll nur auf der Startseite erscheinen beim scrollen verschwinden. + +\-Mobilansicht - wenn man bis man hin und her scrollt soll man bei langem hochscrollen einen refresh auslösen. + +\-Mobilansicht - Impressum/Datenschutz in das Profil rein legen, damit man es erreichen kann. + +\-Mobilansicht - Nachrichten nicht aufrufbar weil kein Button vorhanden. kann gerne als Mail-Icon mitscrollend oben rechts in die ecke damit es immer erreichbar ist. -Health - Share Card - Der Link wird nicht generiert, hier müsste ein Unique link erstellt werden, mit einem Verfallsdatum in der regel sollten 14 Tage ausreichen, aber man soll sich das selbst einstellen können, 7,13,30,60,90 Tage zur Auswahl. +\-User Delete Funktion, für den Unwahrscheinlichen fall ein User möchte sein Konto löschen wird ein Workflow benötigt, der nach einer Bestätigung mittels Tiernamen Eingabe (Auswahl eins von möglichen) den Kompletten Account löscht, sowie alle Hochgeladen Bilder/Videos und erzeugten Posts, Rückstandslos. diff --git a/messages/de.json b/messages/de.json index 8236d57..9e7ab80 100644 --- a/messages/de.json +++ b/messages/de.json @@ -133,6 +133,7 @@ "empty": "Noch keine Kommentare — sei der Erste!", "placeholder": "Kommentar hinzufügen…", "post": "Senden", + "sending": "Wird gesendet…", "postError": "Kommentar konnte nicht gepostet werden. Bitte versuche es erneut.", "deleteError": "Kommentar konnte nicht gelöscht werden. Bitte versuche es erneut.", "countSingular": "1 Kommentar", diff --git a/messages/en.json b/messages/en.json index c00dab8..03a3a30 100644 --- a/messages/en.json +++ b/messages/en.json @@ -133,6 +133,7 @@ "empty": "No comments yet — be the first!", "placeholder": "Add a comment…", "post": "Post", + "sending": "Sending…", "postError": "Couldn't post comment. Please try again.", "deleteError": "Couldn't delete comment. Please try again.", "countSingular": "1 comment", diff --git a/src/app/(app)/explore/page.tsx b/src/app/(app)/explore/page.tsx index e87cf9c..0872bf3 100644 --- a/src/app/(app)/explore/page.tsx +++ b/src/app/(app)/explore/page.tsx @@ -10,8 +10,7 @@ import { useActivePet } from "@/context/ActivePetContext"; import { ExploreCard } from "@/components/explore/ExploreCard"; import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Badge } from "@/components/ui/badge"; -import { Dialog, DialogContent } from "@/components/ui/dialog"; -import { PostCard } from "@/components/feed/PostCard"; +import { PostDetailDialog } from "@/components/feed/PostDetailDialog"; import { getMediaUrl } from "@/lib/media-url"; import type { PostCardPost } from "@/components/feed/PostCard"; import { @@ -184,26 +183,13 @@ export default function ExplorePage() { ))} - {/* Post detail dialog */} - { - if (!open) setSelectedPost(null); - }} - > - - {selectedPost && ( - setSelectedPost(null)} - /> - )} - - + onClose={() => setSelectedPost(null)} + onDeleted={() => setSelectedPost(null)} + /> ); } diff --git a/src/app/favicon.ico b/src/app/favicon.ico index 718d6fea4835ec2d246af9800eddb7ffb276240c..7fe8ef81b2c33d272cc1aec23a65d74cc8b4ce61 100644 GIT binary patch literal 15406 zcmeHO2XI}-b%lzPOp2_`IK_72$X1*v$#~*e66IKqM^Pksl1L*eBZeeMiK3}OiRxV> z2!b8#6(j+6QiTnyBETYcu%Z(kMDOL}<9~eo_qM$EPtHCBG6;hZKx-(EjfdHJ`}b|R zd-v|Wch6l!Mcov2OVsVRNAZ0})Wln(qJ~99Mcr{n*YCUjG%9KX%YOL7|Ns7XQBmjq zEGp_Q)?pL2=ql&yD|rCiHjsha0)Yw5K3`>Hb8|&~V`F7?U0r2!YimVQb91=4rM0|0 z7%Zr*t1qc*Xs8SZgRl4Ov#G;*EZ8Y8)wgz_wLOg5)=v0ClKBw)0SoobK{Wbo6qWl> z+Z04Yt2h}Bhrij~$AK)lYyLrn+4~jV+b%KZfWn&}ORPPnux7W!rcWgfT@Z*_EwFyS z#I_?6dF5(-cl*<&>chDQBo1UNXWc1Tcir zU0SE|mhV;AljmU9IU5T&r~Rj8LGOCk`hDnv$`~=lMM|E99mN)wlP@V}W%jk|_bjjR zsb><7I`-0?3LkQ=s}Ct8?KM2pc72PQ(6eq|`J|Jo;773$Nq5!ys<`f2F-?c{(E z;?7Vg^ygpZ?1U08Ye%1Cd z6Dn(};q&`JK3T1;t)JVr-gHPQ|DmQ$TlIeJl22$3I;i$J-du|69dt?;=gTxKzKa?h zGzDD<=F94|sm^*pUYSB>u|!L|gTg9>EavN4G|KBWa!M82f=&nRSf9F{<3}f*lvr_8 zz$OWw6(~HNq_Lj1^1l~pq?HN`i*vC%Q{nL?3NgF1H^%h!(i^+cr!X;I;o~C$*`*S{ zm?`j4sz64e#EbJJ*6$N|ZIO+dX06GK@AfhO=)~g^k1bXhzD&?gOFS5_vGOw;W30PpD&P4`!ivdz|=J%ju~cN(XI$oG)Rn#6IjT4B{igLoGu&)dG(#XOCzcRjM{UobOWAZMA zxd${F{MssQcJvhf?ywy!r*G2M>A)9qpxp>|(3iQy^Vir0DPvk+7);*-sY{u9edh^*|BZ3*9GK>P2n9{U-VU$6Cpb2WY(=OCZ@K5m1=tj*L%T!W1V z&6+FB*=+QX#?w<3o|`F+&UY-W@9(egfqbJ4-}Kx@1>^gh^x-*)X4;qMsOv{gbuoIX zgGmb{ns^>Mz;nfzDUNq0n6b{&vmXv*jQ;9y{DY4#)A-TU2=0z`k;^$&w`t^737p81 zI7XdTzmB z#n_kVsS?pK0_psAAWh)S#R8vQk`P+FJ&-Z_t3zFOv()kf%5*BvpLJtsL+;@^42z3k z^>KwyXm3YzzR{Bx|J~+m@D=KNi|a zDQQxXkWj^xjen-^{ZC<`3o05^L~7@7TU*^ zzeW81Cg0#BF-h*WYjBqq48(IYy|0n4iJS49?a@ z%#1i7!o=2^TUuc7Hp{lXvMUu8-a8OtT*=qw;cZnlHK?qv@$$qYS?)tkT|ELF9SC)H zy2L3WrccuAVRiohbsBR4M}mol?FdVRziFJ@+< ziF3}($w75(9ftuQ@mbd`77m`Z z(80dW7ueW!!p5Ex7LIY8=5~!##v%8fvWXM2eb^Di)J~Bn-|J0t&)>u(zQc1?Y4mCf z(L8e+yqJ(AYW*%AU97P6tOBu1Y$tB|z#JExCu4TX!;cpbgFTY3@$Yk8Ji%CAbBBYY zJYT;sPa~hWnt2Saov=&dx!DTut{}#`GK9)Tjd9a$yc93-){-z5Yz~udf$`Hd-sD;T z#kmsiEbl}!@pG=l{QUg<-|I-{r{qa<2* zn7H+0Jj+)STNuBV*w+eyQN(@cr|`VL%Eo`hJ2+D!J^ClikscqjON6%`OFt2aTN_4E zwL~p(!?qCVCnmjxcuhg2gs($0b}jJ?@w%E;>0Pa6NSC(S+c9{oy} zj$UcuA&wij$HvbWD7?clKVqN%Hk+7eksyAruiil?X28kqu!@5Hdf$ywttlvz|Lb9=~o`! zNS^cD9l_hnEW{>t8Vt6aH2zIbntSHE=^sVe8N1qspR)P#7J(7V9b{B1{MSMUaeD>d zg0T)_dYJ-`GUia-=3@9#+lvd7x43wAorS54L+?qmJ?uY?a@ItdZs$HQ^iNAN{1>Pv zf7^-OJvB{W^Ff<&3)%;HMe1r{C&HbI&~G|F0?k z1uty0DBp|?Y*Tocc-Wl%Hp0r~T?N54aPZ1j2|sC>nrvZ`$%kF+&E)+BVw52fLBcT` zW7jaAaNfq##PFuC7g)p?$DWg6#@7X2VvJ)6*EC_5jXEQPGc3GE8C=X5$EHthq@EXe zc9upwvA_2d7+>H$h_X6qbkSn+_?oti-)^JM-%-@47~2p?=Kf2&q7ewYih8uAw%u{J zo@0E4SfkN%>BKiL5$kri$4%@(aIKBPst-6gPRy&l)5Yl=iB!s-k?CS$VpZI)1{+E} zPd&vLM96lLbA|UWINl-BZQ>w4?)}rbg7p+GvY%G=N4nAj^rd?8yRSU&X52*|Wd}EV zp?2Lu&iS;m)wAvG?RQWQZ=hZ*X4w(0<0R_o4F2vgy0SZw{Hvb6%1s$9hVdQhjE!VU zW4^#7<}=v;PUf@tF60KW?2T-wp?IS#gD(5I(< zpLM~9dd6QCo>w?iF7fh0jnRyk?LB4elTQ7r=;zvRKSQ}0H;c5#bj8n149&!n>S>26 z7%$#Z7{sCsKk{j3XQxrG76`mZc^bz!Ln`M(`uBWQ^wS@lSXiYa6KLy3Fuv0j19Y+W zfQ=(nAxt~hhL|)TE;QKKoXglV6WvP@83w8%~;fV zU!&~Y%kxQ!B^}$QPG9tih0)U-jEapQiFYb4H*0L?US4v6_wp|Bo(FCE<`f&_rcpm_ zvthA~P>xN1HzZG<4f?2!jE5Tg zH8zGi=mQ7O#A(lGrmu3D^#9dhXt|!c1N6esqJ(l`*40Y%j&f~>+i88L2Wyz7(L(^c|kp5Yz z)R{k>-NpN^_-_QUyl-KAAfCB#oacfWjD=5}FY$al&s+4LPv>;eZv3Go+$&=ylYYi0 zM^7=nK5ZQRRPL#TgQ4Ym>T0Q{nfpQ>{oJc2c76}{?WGFk-Q_yMJ)1&WjVv{^IgDRB zJY#8`%CUJTndb=laJglI{1+bmW)9=yNPn(pi{r0{ropr!{_!*74&m|ZBz`)}#X~%w zC-J=9&a+w!&*t}WFWgIcnaO<}=6T)bo#?fDZH$VMj7Re>%61DOo_CUoH%#Oib%HtH zB=LOa*Ea9jJv8bAl6n5RkM}4{4E;XF&>!Z!D#-h~ zR)@Zu#r>;1`o~VC&fytZvQ0rn*BOTEBiUyXFmRmhdT8%%!#R9C+;t}_p7tk!XS2Xd z+`o5|c9VvY|K=V-9`6U5yB{Mz=!%1nA^**tfcQ-wh81MnMDC|~O#cJ4-`?H-jeJ{H z$NkhPO(Ry?-d-3s4U`{v=jSr|cC}2;&Y-@eoEuq>rXGEFS(s-Ux0Ukp(2bQ z4d3VCxcdE_cGvv}%FeyitFQ5np+D@n#Lk@f&E)?Fq~9d!%%$5x=8jq|>Hk4recs42 z%F?Zr-F09owrP`XuJ@VSZu*d(G;={bts0&FdJ>34_P*oc~SIde|Rw?6cILRn64$+AR^Hga3K+oAU$$fjdbj z??j44N{LCtu|LPj%sg23BEK(mUHvxq?ce_9Q2t9wC`&gPdHQ9^)j9Lc)VaEJ=+_Vj ShBz?9fguhIao~541OEq!Z_=Cq literal 25931 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 LrJugUA?W`A8`#=m diff --git a/src/components/feed/PostCard.tsx b/src/components/feed/PostCard.tsx index ebb22f4..af55f49 100644 --- a/src/components/feed/PostCard.tsx +++ b/src/components/feed/PostCard.tsx @@ -43,7 +43,7 @@ import { MilestoneCard } from "@/components/feed/MilestoneCard"; import { VideoCard } from "@/components/video/VideoCard"; import { PawButton } from "@/components/feed/PawButton"; import { PawBackButton } from "@/components/feed/PawBackButton"; -import { CommentSheet } from "@/components/feed/CommentSheet"; +import { PostDetailDialog } from "@/components/feed/PostDetailDialog"; import { RepostCard } from "@/components/feed/RepostCard"; import { BlockDialog } from "@/components/safety/BlockDialog"; import { ReportSheet } from "@/components/safety/ReportSheet"; @@ -160,8 +160,8 @@ export function PostCard({ post, onDeleted, variant = "feed" }: PostCardProps) { // Block dialog state const [showBlockDialog, setShowBlockDialog] = useState(false); - // Comment sheet state - const [showCommentSheet, setShowCommentSheet] = useState(false); + // Detail dialog (replaces comment sheet) + const [showDetailDialog, setShowDetailDialog] = useState(false); // Ownership: active pet's own post vs another pet's post const isOwnPost = activePetId === pet.id; @@ -335,7 +335,8 @@ export function PostCard({ post, onDeleted, variant = "feed" }: PostCardProps) { {currentCaption setShowDetailDialog(true)} /> ))} @@ -367,14 +368,13 @@ export function PostCard({ post, onDeleted, variant = "feed" }: PostCardProps) { ) : ( /* Single image */ -
- {/* eslint-disable-next-line @next/next/no-img-element */} - {currentCaption -
+ // eslint-disable-next-line @next/next/no-img-element + {currentCaption setShowDetailDialog(true)} + /> )} )} @@ -475,7 +475,7 @@ export function PostCard({ post, onDeleted, variant = "feed" }: PostCardProps) { @@ -186,11 +200,11 @@ export function MobileNav({ pets }: MobileNavProps) { {/* Profile (My Pets) */} -