{annotationTypeLabel(hovered)} ·{" "} {hovered.userName}
{note && ({note}
)}{r.userName} {new Date(r.createdAt).toLocaleString("th-TH", { hour: "2-digit", minute: "2-digit", day: "2-digit", month: "short", })}
{r.message}
{a.userName}
{/* F13/A6: ปุ่มแก้ไขข้อความ — เจ้าของเท่านั้น */} {a.userId === ownUserId && editingCommentId !== a.id && ( )}{a.data.message}
)}{new Date(a.createdAt).toLocaleString("th-TH")}
{/* F10/A5: toggle จัดการแล้ว — ใครก็ได้ (D6) */} {/* F9: เธรดคำตอบ */}เมื่อวาดเส้นเกือบตรงแล้วปล่อยเมาส์ ระบบจะ Snap ให้เป็นเส้นตรงอัตโนมัติ — และถ้ากด Shift ค้างจะบังคับให้เส้นตรง
ปิดพรางบนจอเท่านั้น — ข้อความใต้กรอบยังเลือกได้ ต้องกด "Export PDF" เพื่อ ปิดพรางจริงในไฟล์ที่แจกจ่าย
)} {/* F2: Undo/Redo — ติดกลุ่มปุ่ม tool ในแถวเดียวกัน, disabled ตาม stack */}บันทึก bookmark — หน้า {bookmarkComposer.pageIndex + 1}
setBookmarkComposer({ ...bookmarkComposer, title: e.target.value }) } onKeyDown={(e) => { e.stopPropagation(); // ไม่ให้ปุ่มใน input ชนคีย์ลัดของ viewer if (e.key === "Enter") void handleSaveBookmark(); if (e.key === "Escape") setBookmarkComposer(null); }} placeholder={`ชื่อหัวข้อ (เว้นว่าง = "หน้า ${bookmarkComposer.pageIndex + 1}")`} className="mt-2 w-full rounded-md border border-slate-300 px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-slate-400" />{annotationTypeLabel(hovered)} ·{" "} {hovered.userName}
{note && ({note}
)}