{"ast":null,"code":"var _jsxFileName = \"/home/gnx/Desktop/gnx-mail/frontend/src/pages/EmailDetail.js\",\n _s = $RefreshSig$();\nimport React from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { ArrowLeft, Reply, Forward, Trash2, Archive, Star, MoreVertical, Paperclip, Clock, User } from 'lucide-react';\nimport { api, endpoints } from '../services/api';\nimport LoadingSpinner from '../components/LoadingSpinner';\nimport toast from 'react-hot-toast';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst EmailDetail = () => {\n _s();\n const {\n id\n } = useParams();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n const {\n data: email,\n isLoading\n } = useQuery(['email', id], () => api.get(endpoints.emailDetail(id)).then(res => res.data), {\n onSuccess: data => {\n // Mark as read when opened\n if (!data.is_read) {\n markAsReadMutation.mutate(id);\n }\n }\n });\n const markAsReadMutation = useMutation(emailId => api.patch(endpoints.emailDetail(emailId), {\n is_read: true\n }), {\n onSuccess: () => {\n queryClient.invalidateQueries(['emails']);\n queryClient.invalidateQueries(['email', id]);\n }\n });\n const starMutation = useMutation(({\n emailId,\n isStarred\n }) => api.patch(endpoints.emailDetail(emailId), {\n is_starred: !isStarred\n }), {\n onSuccess: () => {\n queryClient.invalidateQueries(['emails']);\n queryClient.invalidateQueries(['email', id]);\n toast.success('Email updated');\n }\n });\n const deleteMutation = useMutation(emailId => api.delete(endpoints.emailDetail(emailId)), {\n onSuccess: () => {\n toast.success('Email deleted');\n navigate('/inbox');\n }\n });\n const formatDate = dateString => {\n const date = new Date(dateString);\n return date.toLocaleString();\n };\n const handleStar = () => {\n starMutation.mutate({\n emailId: id,\n isStarred: email.is_starred\n });\n };\n const handleDelete = () => {\n if (window.confirm('Are you sure you want to delete this email?')) {\n deleteMutation.mutate(id);\n }\n };\n const handleReply = () => {\n navigate(`/compose?reply=${id}`);\n };\n const handleForward = () => {\n navigate(`/compose?forward=${id}`);\n };\n if (isLoading) {\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-center h-64\",\n children: /*#__PURE__*/_jsxDEV(LoadingSpinner, {\n size: \"lg\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 96,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 95,\n columnNumber: 7\n }, this);\n }\n if (!email) {\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-center py-12\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-lg font-medium text-gray-900\",\n children: \"Email not found\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 104,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: \"The email you're looking for doesn't exist or has been deleted.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 105,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => navigate('/inbox'),\n className: \"mt-4 btn-primary\",\n children: \"Back to Inbox\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 108,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 103,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"max-w-4xl mx-auto space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-4\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => navigate('/inbox'),\n className: \"text-gray-400 hover:text-gray-600\",\n children: /*#__PURE__*/_jsxDEV(ArrowLeft, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 127,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 123,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-2xl font-bold text-gray-900\",\n children: \"Email\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 129,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 122,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleStar,\n className: `p-2 rounded-md hover:bg-gray-100 ${email.is_starred ? 'text-yellow-500' : 'text-gray-400'}`,\n children: /*#__PURE__*/_jsxDEV(Star, {\n className: `h-5 w-5 ${email.is_starred ? 'fill-current' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 138,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 132,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleReply,\n className: \"p-2 rounded-md hover:bg-gray-100 text-gray-400\",\n children: /*#__PURE__*/_jsxDEV(Reply, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 144,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 140,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleForward,\n className: \"p-2 rounded-md hover:bg-gray-100 text-gray-400\",\n children: /*#__PURE__*/_jsxDEV(Forward, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 150,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 146,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleDelete,\n className: \"p-2 rounded-md hover:bg-gray-100 text-gray-400 hover:text-red-500\",\n children: /*#__PURE__*/_jsxDEV(Trash2, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 156,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 152,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"p-2 rounded-md hover:bg-gray-100 text-gray-400\",\n children: /*#__PURE__*/_jsxDEV(MoreVertical, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 159,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 158,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 131,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 121,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card-header\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-4\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-lg font-medium text-gray-900\",\n children: email.subject\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 169,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-start space-x-3\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-shrink-0\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"h-10 w-10 rounded-full bg-gray-300 flex items-center justify-center\",\n children: /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-sm font-medium text-gray-700\",\n children: email.from_email.charAt(0).toUpperCase()\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 175,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 174,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 173,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1 min-w-0\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm font-medium text-gray-900\",\n children: email.from_email\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center text-sm text-gray-500\",\n children: [/*#__PURE__*/_jsxDEV(Clock, {\n className: \"h-4 w-4 mr-1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 187,\n columnNumber: 23\n }, this), formatDate(email.sent_at || email.created_at)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 186,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-2\",\n children: [email.priority === 'high' && /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"badge-danger\",\n children: \"High Priority\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 193,\n columnNumber: 23\n }, this), email.priority === 'low' && /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"badge-gray\",\n children: \"Low Priority\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 196,\n columnNumber: 23\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 191,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 181,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 180,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 172,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: [email.to_emails && email.to_emails.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center text-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-500 w-12\",\n children: \"To:\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 207,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-900\",\n children: email.to_emails.join(', ')\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 208,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 206,\n columnNumber: 17\n }, this), email.cc_emails && email.cc_emails.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center text-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-500 w-12\",\n children: \"Cc:\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 213,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-900\",\n children: email.cc_emails.join(', ')\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 214,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 212,\n columnNumber: 17\n }, this), email.bcc_emails && email.bcc_emails.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center text-sm\",\n children: [/*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-500 w-12\",\n children: \"Bcc:\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 219,\n columnNumber: 19\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"text-gray-900\",\n children: email.bcc_emails.join(', ')\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 220,\n columnNumber: 19\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 218,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 204,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 167,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 166,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card-body\",\n children: [email.attachments && email.attachments.length > 0 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mb-6\",\n children: [/*#__PURE__*/_jsxDEV(\"h4\", {\n className: \"text-sm font-medium text-gray-900 mb-3\",\n children: \"Attachments\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 231,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-2\",\n children: email.attachments.map(attachment => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center space-x-3 p-3 bg-gray-50 rounded-md\",\n children: [/*#__PURE__*/_jsxDEV(Paperclip, {\n className: \"h-4 w-4 text-gray-400\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 235,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1\",\n children: [/*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-sm font-medium text-gray-900\",\n children: attachment.filename\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 237,\n columnNumber: 23\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"text-xs text-gray-500\",\n children: [(attachment.size / 1024).toFixed(1), \" KB\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 238,\n columnNumber: 23\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 236,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"text-sm text-primary-600 hover:text-primary-500\",\n children: \"Download\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 242,\n columnNumber: 21\n }, this)]\n }, attachment.id, true, {\n fileName: _jsxFileName,\n lineNumber: 234,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 232,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 230,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"prose max-w-none\",\n children: email.body_html ? /*#__PURE__*/_jsxDEV(\"div\", {\n dangerouslySetInnerHTML: {\n __html: email.body_html\n },\n className: \"text-gray-900\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 254,\n columnNumber: 15\n }, this) : /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"whitespace-pre-wrap text-gray-900\",\n children: email.body_text\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 259,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 252,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 227,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 165,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex items-center justify-center space-x-4\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleReply,\n className: \"btn-primary\",\n children: [/*#__PURE__*/_jsxDEV(Reply, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 273,\n columnNumber: 11\n }, this), \"Reply\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 269,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleForward,\n className: \"btn-secondary\",\n children: [/*#__PURE__*/_jsxDEV(Forward, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 280,\n columnNumber: 11\n }, this), \"Forward\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 276,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleDelete,\n className: \"btn-danger\",\n children: [/*#__PURE__*/_jsxDEV(Trash2, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 287,\n columnNumber: 11\n }, this), \"Delete\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 283,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 268,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 119,\n columnNumber: 5\n }, this);\n};\n_s(EmailDetail, \"8+LoJ+wc717RWZQQ4vrhM9d1CCU=\", false, function () {\n return [useParams, useNavigate, useQueryClient, useQuery, useMutation, useMutation, useMutation];\n});\n_c = EmailDetail;\nexport default EmailDetail;\nvar _c;\n$RefreshReg$(_c, \"EmailDetail\");","map":{"version":3,"names":["React","useParams","useNavigate","useQuery","useMutation","useQueryClient","ArrowLeft","Reply","Forward","Trash2","Archive","Star","MoreVertical","Paperclip","Clock","User","api","endpoints","LoadingSpinner","toast","jsxDEV","_jsxDEV","EmailDetail","_s","id","navigate","queryClient","data","email","isLoading","get","emailDetail","then","res","onSuccess","is_read","markAsReadMutation","mutate","emailId","patch","invalidateQueries","starMutation","isStarred","is_starred","success","deleteMutation","delete","formatDate","dateString","date","Date","toLocaleString","handleStar","handleDelete","window","confirm","handleReply","handleForward","className","children","size","fileName","_jsxFileName","lineNumber","columnNumber","onClick","subject","from_email","charAt","toUpperCase","sent_at","created_at","priority","to_emails","length","join","cc_emails","bcc_emails","attachments","map","attachment","filename","toFixed","body_html","dangerouslySetInnerHTML","__html","body_text","_c","$RefreshReg$"],"sources":["/home/gnx/Desktop/gnx-mail/frontend/src/pages/EmailDetail.js"],"sourcesContent":["import React from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { \n ArrowLeft, \n Reply, \n Forward, \n Trash2, \n Archive, \n Star, \n MoreVertical,\n Paperclip,\n Clock,\n User\n} from 'lucide-react';\nimport { api, endpoints } from '../services/api';\nimport LoadingSpinner from '../components/LoadingSpinner';\nimport toast from 'react-hot-toast';\n\nconst EmailDetail = () => {\n const { id } = useParams();\n const navigate = useNavigate();\n const queryClient = useQueryClient();\n\n const { data: email, isLoading } = useQuery(\n ['email', id],\n () => api.get(endpoints.emailDetail(id)).then(res => res.data),\n {\n onSuccess: (data) => {\n // Mark as read when opened\n if (!data.is_read) {\n markAsReadMutation.mutate(id);\n }\n },\n }\n );\n\n const markAsReadMutation = useMutation(\n (emailId) => api.patch(endpoints.emailDetail(emailId), { is_read: true }),\n {\n onSuccess: () => {\n queryClient.invalidateQueries(['emails']);\n queryClient.invalidateQueries(['email', id]);\n },\n }\n );\n\n const starMutation = useMutation(\n ({ emailId, isStarred }) => \n api.patch(endpoints.emailDetail(emailId), { is_starred: !isStarred }),\n {\n onSuccess: () => {\n queryClient.invalidateQueries(['emails']);\n queryClient.invalidateQueries(['email', id]);\n toast.success('Email updated');\n },\n }\n );\n\n const deleteMutation = useMutation(\n (emailId) => api.delete(endpoints.emailDetail(emailId)),\n {\n onSuccess: () => {\n toast.success('Email deleted');\n navigate('/inbox');\n },\n }\n );\n\n const formatDate = (dateString) => {\n const date = new Date(dateString);\n return date.toLocaleString();\n };\n\n const handleStar = () => {\n starMutation.mutate({ emailId: id, isStarred: email.is_starred });\n };\n\n const handleDelete = () => {\n if (window.confirm('Are you sure you want to delete this email?')) {\n deleteMutation.mutate(id);\n }\n };\n\n const handleReply = () => {\n navigate(`/compose?reply=${id}`);\n };\n\n const handleForward = () => {\n navigate(`/compose?forward=${id}`);\n };\n\n if (isLoading) {\n return (\n
\n The email you're looking for doesn't exist or has been deleted.\n
\n \n\n {email.from_email}\n
\n{attachment.filename}
\n\n {(attachment.size / 1024).toFixed(1)} KB\n
\n