{"ast":null,"code":"var _jsxFileName = \"/home/gnx/Desktop/gnx-mail/frontend/src/pages/Settings.js\",\n _s4 = $RefreshSig$();\nimport React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { User, Mail, Shield, Bell, Palette, Globe, Save, Eye, EyeOff } 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 Settings = () => {\n _s4();\n var _s = $RefreshSig$(),\n _s2 = $RefreshSig$(),\n _s3 = $RefreshSig$();\n const [activeTab, setActiveTab] = useState('profile');\n const [showPassword, setShowPassword] = useState(false);\n const queryClient = useQueryClient();\n const {\n data: user\n } = useQuery('user', () => api.get(endpoints.profile).then(res => res.data));\n const {\n data: profile\n } = useQuery('profile', () => api.get('/accounts/profile/settings/').then(res => res.data));\n const updateProfileMutation = useMutation(data => api.patch(endpoints.profile, data), {\n onSuccess: () => {\n queryClient.invalidateQueries('user');\n toast.success('Profile updated successfully');\n },\n onError: () => {\n toast.error('Failed to update profile');\n }\n });\n const updateSettingsMutation = useMutation(data => api.patch('/accounts/profile/settings/', data), {\n onSuccess: () => {\n queryClient.invalidateQueries('profile');\n toast.success('Settings updated successfully');\n },\n onError: () => {\n toast.error('Failed to update settings');\n }\n });\n const changePasswordMutation = useMutation(data => api.post(endpoints.changePassword, data), {\n onSuccess: () => {\n toast.success('Password changed successfully');\n },\n onError: () => {\n toast.error('Failed to change password');\n }\n });\n const tabs = [{\n id: 'profile',\n name: 'Profile',\n icon: User\n }, {\n id: 'email',\n name: 'Email Settings',\n icon: Mail\n }, {\n id: 'security',\n name: 'Security',\n icon: Shield\n }, {\n id: 'notifications',\n name: 'Notifications',\n icon: Bell\n }, {\n id: 'appearance',\n name: 'Appearance',\n icon: Palette\n }];\n const ProfileTab = () => {\n _s();\n const {\n register,\n handleSubmit,\n formState: {\n errors\n }\n } = useForm({\n defaultValues: {\n first_name: (user === null || user === void 0 ? void 0 : user.first_name) || '',\n last_name: (user === null || user === void 0 ? void 0 : user.last_name) || '',\n email: (user === null || user === void 0 ? void 0 : user.email) || ''\n }\n });\n const onSubmit = data => {\n updateProfileMutation.mutate(data);\n };\n return /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleSubmit(onSubmit),\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 gap-6 sm:grid-cols-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"First Name\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 97,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('first_name', {\n required: 'First name is required'\n }),\n type: \"text\",\n className: `input ${errors.first_name ? 'input-error' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 100,\n columnNumber: 13\n }, this), errors.first_name && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-red-600\",\n children: errors.first_name.message\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 106,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 96,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"Last Name\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 111,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('last_name', {\n required: 'Last name is required'\n }),\n type: \"text\",\n className: `input ${errors.last_name ? 'input-error' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 114,\n columnNumber: 13\n }, this), errors.last_name && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-red-600\",\n children: errors.last_name.message\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 120,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 110,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 95,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"Email\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 126,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('email', {\n required: 'Email is required',\n pattern: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\n message: 'Invalid email address'\n }\n }),\n type: \"email\",\n className: `input ${errors.email ? 'input-error' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 129,\n columnNumber: 11\n }, this), errors.email && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-red-600\",\n children: errors.email.message\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 141,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 125,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex justify-end\",\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: updateProfileMutation.isLoading,\n className: \"btn-primary\",\n children: [updateProfileMutation.isLoading ? /*#__PURE__*/_jsxDEV(LoadingSpinner, {\n size: \"sm\",\n className: \"mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 152,\n columnNumber: 15\n }, this) : /*#__PURE__*/_jsxDEV(Save, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 154,\n columnNumber: 15\n }, this), \"Save Changes\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 146,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 145,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 94,\n columnNumber: 7\n }, this);\n };\n _s(ProfileTab, \"cSudtlZF25wA1QXS6hk7TRnoNuU=\", false, function () {\n return [useForm];\n });\n const EmailSettingsTab = () => {\n _s2();\n const {\n register,\n handleSubmit,\n formState: {\n errors\n }\n } = useForm({\n defaultValues: {\n smtp_host: (user === null || user === void 0 ? void 0 : user.smtp_host) || '',\n smtp_port: (user === null || user === void 0 ? void 0 : user.smtp_port) || 587,\n smtp_username: (user === null || user === void 0 ? void 0 : user.smtp_username) || '',\n smtp_use_tls: (user === null || user === void 0 ? void 0 : user.smtp_use_tls) || true,\n imap_host: (user === null || user === void 0 ? void 0 : user.imap_host) || '',\n imap_port: (user === null || user === void 0 ? void 0 : user.imap_port) || 993,\n imap_username: (user === null || user === void 0 ? void 0 : user.imap_username) || '',\n imap_use_ssl: (user === null || user === void 0 ? void 0 : user.imap_use_ssl) || true\n }\n });\n const onSubmit = data => {\n updateSettingsMutation.mutate(data);\n };\n return /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleSubmit(onSubmit),\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-lg font-medium text-gray-900 mb-4\",\n children: \"SMTP Settings\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 185,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 gap-4 sm:grid-cols-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"SMTP Host\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 188,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('smtp_host'),\n type: \"text\",\n className: \"input\",\n placeholder: \"smtp.gmail.com\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 191,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 187,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"SMTP Port\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 199,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('smtp_port', {\n valueAsNumber: true\n }),\n type: \"number\",\n className: \"input\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 202,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 198,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"SMTP Username\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 209,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('smtp_username'),\n type: \"text\",\n className: \"input\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 212,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 208,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"SMTP Password\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 219,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"password\",\n className: \"input\",\n placeholder: \"Enter password\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 222,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 218,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 186,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mt-4\",\n children: /*#__PURE__*/_jsxDEV(\"label\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n ...register('smtp_use_tls'),\n type: \"checkbox\",\n className: \"h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 231,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"ml-2 text-sm text-gray-700\",\n children: \"Use TLS\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 236,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 230,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 229,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 184,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n className: \"text-lg font-medium text-gray-900 mb-4\",\n children: \"IMAP Settings\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 242,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 gap-4 sm:grid-cols-2\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"IMAP Host\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 245,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('imap_host'),\n type: \"text\",\n className: \"input\",\n placeholder: \"imap.gmail.com\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 248,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 244,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"IMAP Port\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 256,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('imap_port', {\n valueAsNumber: true\n }),\n type: \"number\",\n className: \"input\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 259,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 255,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"IMAP Username\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 266,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('imap_username'),\n type: \"text\",\n className: \"input\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 269,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 265,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"IMAP Password\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 276,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n type: \"password\",\n className: \"input\",\n placeholder: \"Enter password\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 279,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 275,\n columnNumber: 15\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 243,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mt-4\",\n children: /*#__PURE__*/_jsxDEV(\"label\", {\n className: \"flex items-center\",\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n ...register('imap_use_ssl'),\n type: \"checkbox\",\n className: \"h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 288,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"ml-2 text-sm text-gray-700\",\n children: \"Use SSL\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 293,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 287,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 286,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 241,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 183,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex justify-end\",\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: updateSettingsMutation.isLoading,\n className: \"btn-primary\",\n children: [updateSettingsMutation.isLoading ? /*#__PURE__*/_jsxDEV(LoadingSpinner, {\n size: \"sm\",\n className: \"mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 306,\n columnNumber: 15\n }, this) : /*#__PURE__*/_jsxDEV(Save, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 308,\n columnNumber: 15\n }, this), \"Save Settings\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 300,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 299,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 182,\n columnNumber: 7\n }, this);\n };\n _s2(EmailSettingsTab, \"cSudtlZF25wA1QXS6hk7TRnoNuU=\", false, function () {\n return [useForm];\n });\n const SecurityTab = () => {\n _s3();\n const {\n register,\n handleSubmit,\n formState: {\n errors\n }\n } = useForm();\n const onSubmit = data => {\n changePasswordMutation.mutate(data);\n };\n return /*#__PURE__*/_jsxDEV(\"form\", {\n onSubmit: handleSubmit(onSubmit),\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"Current Password\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 327,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"mt-1 relative\",\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n ...register('old_password', {\n required: 'Current password is required'\n }),\n type: showPassword ? 'text' : 'password',\n className: `input pr-10 ${errors.old_password ? 'input-error' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 331,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"button\",\n className: \"absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600\",\n onClick: () => setShowPassword(!showPassword),\n children: showPassword ? /*#__PURE__*/_jsxDEV(EyeOff, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 342,\n columnNumber: 17\n }, this) : /*#__PURE__*/_jsxDEV(Eye, {\n className: \"h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 344,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 336,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 330,\n columnNumber: 11\n }, this), errors.old_password && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-red-600\",\n children: errors.old_password.message\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 349,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 326,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"New Password\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 354,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('new_password', {\n required: 'New password is required',\n minLength: {\n value: 8,\n message: 'Password must be at least 8 characters'\n }\n }),\n type: \"password\",\n className: `input ${errors.new_password ? 'input-error' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 357,\n columnNumber: 11\n }, this), errors.new_password && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-red-600\",\n children: errors.new_password.message\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 369,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 353,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"label\", {\n className: \"block text-sm font-medium text-gray-700\",\n children: \"Confirm New Password\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 374,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n ...register('new_password_confirm', {\n required: 'Please confirm your new password'\n }),\n type: \"password\",\n className: `input ${errors.new_password_confirm ? 'input-error' : ''}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 377,\n columnNumber: 11\n }, this), errors.new_password_confirm && /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-red-600\",\n children: errors.new_password_confirm.message\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 385,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 373,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex justify-end\",\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n type: \"submit\",\n disabled: changePasswordMutation.isLoading,\n className: \"btn-primary\",\n children: [changePasswordMutation.isLoading ? /*#__PURE__*/_jsxDEV(LoadingSpinner, {\n size: \"sm\",\n className: \"mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 396,\n columnNumber: 15\n }, this) : /*#__PURE__*/_jsxDEV(Save, {\n className: \"h-4 w-4 mr-2\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 398,\n columnNumber: 15\n }, this), \"Change Password\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 390,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 389,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 325,\n columnNumber: 7\n }, this);\n };\n _s3(SecurityTab, \"cSudtlZF25wA1QXS6hk7TRnoNuU=\", false, function () {\n return [useForm];\n });\n const renderTabContent = () => {\n switch (activeTab) {\n case 'profile':\n return /*#__PURE__*/_jsxDEV(ProfileTab, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 410,\n columnNumber: 16\n }, this);\n case 'email':\n return /*#__PURE__*/_jsxDEV(EmailSettingsTab, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 412,\n columnNumber: 16\n }, this);\n case 'security':\n return /*#__PURE__*/_jsxDEV(SecurityTab, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 414,\n columnNumber: 16\n }, this);\n case 'notifications':\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-center py-12\",\n children: \"Notifications settings coming soon...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 416,\n columnNumber: 16\n }, this);\n case 'appearance':\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"text-center py-12\",\n children: \"Appearance settings coming soon...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 418,\n columnNumber: 16\n }, this);\n default:\n return /*#__PURE__*/_jsxDEV(ProfileTab, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 420,\n columnNumber: 16\n }, this);\n }\n };\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"space-y-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"md:flex md:items-center md:justify-between\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"flex-1 min-w-0\",\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n className: \"text-2xl font-bold leading-7 text-gray-900 sm:text-3xl sm:truncate\",\n children: \"Settings\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 429,\n columnNumber: 11\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n className: \"mt-1 text-sm text-gray-500\",\n children: \"Manage your account settings and preferences.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 432,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 428,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 427,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"grid grid-cols-1 gap-6 lg:grid-cols-4\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"lg:col-span-1\",\n children: /*#__PURE__*/_jsxDEV(\"nav\", {\n className: \"space-y-1\",\n children: tabs.map(tab => {\n const Icon = tab.icon;\n return /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => setActiveTab(tab.id),\n className: `w-full flex items-center px-3 py-2 text-sm font-medium rounded-md ${activeTab === tab.id ? 'bg-primary-100 text-primary-700' : 'text-gray-600 hover:text-gray-900 hover:bg-gray-50'}`,\n children: [/*#__PURE__*/_jsxDEV(Icon, {\n className: \"mr-3 h-5 w-5\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 454,\n columnNumber: 19\n }, this), tab.name]\n }, tab.id, true, {\n fileName: _jsxFileName,\n lineNumber: 445,\n columnNumber: 17\n }, this);\n })\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 441,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 440,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"lg:col-span-3\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"card-body\",\n children: renderTabContent()\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 465,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 464,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 463,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 438,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 425,\n columnNumber: 5\n }, this);\n};\n_s4(Settings, \"cdli9Dod7SnmiFmt72NQgCj9SPc=\", false, function () {\n return [useQueryClient, useQuery, useQuery, useMutation, useMutation, useMutation];\n});\n_c = Settings;\nexport default Settings;\nvar _c;\n$RefreshReg$(_c, \"Settings\");","map":{"version":3,"names":["React","useState","useForm","useQuery","useMutation","useQueryClient","User","Mail","Shield","Bell","Palette","Globe","Save","Eye","EyeOff","api","endpoints","LoadingSpinner","toast","jsxDEV","_jsxDEV","Settings","_s4","_s","$RefreshSig$","_s2","_s3","activeTab","setActiveTab","showPassword","setShowPassword","queryClient","data","user","get","profile","then","res","updateProfileMutation","patch","onSuccess","invalidateQueries","success","onError","error","updateSettingsMutation","changePasswordMutation","post","changePassword","tabs","id","name","icon","ProfileTab","register","handleSubmit","formState","errors","defaultValues","first_name","last_name","email","onSubmit","mutate","className","children","fileName","_jsxFileName","lineNumber","columnNumber","required","type","message","pattern","value","disabled","isLoading","size","EmailSettingsTab","smtp_host","smtp_port","smtp_username","smtp_use_tls","imap_host","imap_port","imap_username","imap_use_ssl","placeholder","valueAsNumber","SecurityTab","old_password","onClick","minLength","new_password","new_password_confirm","renderTabContent","map","tab","Icon","_c","$RefreshReg$"],"sources":["/home/gnx/Desktop/gnx-mail/frontend/src/pages/Settings.js"],"sourcesContent":["import React, { useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { useQuery, useMutation, useQueryClient } from 'react-query';\nimport { \n User, \n Mail, \n Shield, \n Bell, \n Palette, \n Globe,\n Save,\n Eye,\n EyeOff\n} from 'lucide-react';\nimport { api, endpoints } from '../services/api';\nimport LoadingSpinner from '../components/LoadingSpinner';\nimport toast from 'react-hot-toast';\n\nconst Settings = () => {\n const [activeTab, setActiveTab] = useState('profile');\n const [showPassword, setShowPassword] = useState(false);\n const queryClient = useQueryClient();\n\n const { data: user } = useQuery(\n 'user',\n () => api.get(endpoints.profile).then(res => res.data)\n );\n\n const { data: profile } = useQuery(\n 'profile',\n () => api.get('/accounts/profile/settings/').then(res => res.data)\n );\n\n const updateProfileMutation = useMutation(\n (data) => api.patch(endpoints.profile, data),\n {\n onSuccess: () => {\n queryClient.invalidateQueries('user');\n toast.success('Profile updated successfully');\n },\n onError: () => {\n toast.error('Failed to update profile');\n },\n }\n );\n\n const updateSettingsMutation = useMutation(\n (data) => api.patch('/accounts/profile/settings/', data),\n {\n onSuccess: () => {\n queryClient.invalidateQueries('profile');\n toast.success('Settings updated successfully');\n },\n onError: () => {\n toast.error('Failed to update settings');\n },\n }\n );\n\n const changePasswordMutation = useMutation(\n (data) => api.post(endpoints.changePassword, data),\n {\n onSuccess: () => {\n toast.success('Password changed successfully');\n },\n onError: () => {\n toast.error('Failed to change password');\n },\n }\n );\n\n const tabs = [\n { id: 'profile', name: 'Profile', icon: User },\n { id: 'email', name: 'Email Settings', icon: Mail },\n { id: 'security', name: 'Security', icon: Shield },\n { id: 'notifications', name: 'Notifications', icon: Bell },\n { id: 'appearance', name: 'Appearance', icon: Palette },\n ];\n\n const ProfileTab = () => {\n const { register, handleSubmit, formState: { errors } } = useForm({\n defaultValues: {\n first_name: user?.first_name || '',\n last_name: user?.last_name || '',\n email: user?.email || '',\n },\n });\n\n const onSubmit = (data) => {\n updateProfileMutation.mutate(data);\n };\n\n return (\n
\n );\n };\n\n const EmailSettingsTab = () => {\n const { register, handleSubmit, formState: { errors } } = useForm({\n defaultValues: {\n smtp_host: user?.smtp_host || '',\n smtp_port: user?.smtp_port || 587,\n smtp_username: user?.smtp_username || '',\n smtp_use_tls: user?.smtp_use_tls || true,\n imap_host: user?.imap_host || '',\n imap_port: user?.imap_port || 993,\n imap_username: user?.imap_username || '',\n imap_use_ssl: user?.imap_use_ssl || true,\n },\n });\n\n const onSubmit = (data) => {\n updateSettingsMutation.mutate(data);\n };\n\n return (\n \n );\n };\n\n const SecurityTab = () => {\n const { register, handleSubmit, formState: { errors } } = useForm();\n\n const onSubmit = (data) => {\n changePasswordMutation.mutate(data);\n };\n\n return (\n \n );\n };\n\n const renderTabContent = () => {\n switch (activeTab) {\n case 'profile':\n return\n Manage your account settings and preferences.\n
\n