{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\pages\\\\Login.js\",\n  _s = $RefreshSig$();\n// src/pages/Login.js\nimport React, { useState, useContext } from \"react\";\nimport { AuthContext } from \"../contexts/AuthContext\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function Login({\n  onClose\n}) {\n  _s();\n  const {\n    login\n  } = useContext(AuthContext);\n  const [form, setForm] = useState({\n    username: '',\n    password: ''\n  });\n  const [msg, setMsg] = useState('');\n  const handleChange = e => setForm({\n    ...form,\n    [e.target.name]: e.target.value\n  });\n  const handleSubmit = async e => {\n    e.preventDefault();\n    const res = await fetch(\"http://localhost:4000/api/auth/login\", {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/json\"\n      },\n      body: JSON.stringify(form)\n    });\n    const data = await res.json();\n    if (data.token) {\n      login({\n        ...data.user,\n        token: data.token\n      });\n      setMsg(\"로그인 성공!\");\n      setTimeout(() => onClose && onClose(), 700);\n    } else {\n      setMsg(data.msg || \"로그인 실패\");\n    }\n  };\n  return /*#__PURE__*/_jsxDEV(\"form\", {\n    className: \"editorial-modal-form\",\n    onSubmit: handleSubmit,\n    style: {\n      minWidth: 320\n    },\n    children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n      style: {\n        fontFamily: \"Source Sans Pro, Arial, sans-serif\",\n        fontWeight: 900,\n        marginBottom: \"1.3em\",\n        fontSize: \"1.5em\",\n        letterSpacing: \"-0.03em\"\n      },\n      children: \"\\uB85C\\uADF8\\uC778\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 30,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      className: \"field\",\n      style: {\n        marginBottom: \"1.4em\"\n      },\n      children: [/*#__PURE__*/_jsxDEV(\"label\", {\n        htmlFor: \"username\",\n        children: \"\\uC544\\uC774\\uB514\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 38,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n        type: \"text\",\n        name: \"username\",\n        id: \"username\",\n        autoFocus: true,\n        required: true,\n        value: form.username,\n        onChange: handleChange\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 39,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 37,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      className: \"field\",\n      style: {\n        marginBottom: \"1.5em\"\n      },\n      children: [/*#__PURE__*/_jsxDEV(\"label\", {\n        htmlFor: \"password\",\n        children: \"\\uBE44\\uBC00\\uBC88\\uD638\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 50,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n        type: \"password\",\n        name: \"password\",\n        id: \"password\",\n        required: true,\n        value: form.password,\n        onChange: handleChange\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 51,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 49,\n      columnNumber: 7\n    }, this), msg && /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        color: \"#d4403a\",\n        fontWeight: 600,\n        margin: \"0 0 1em 0\",\n        textAlign: \"center\"\n      },\n      children: msg\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 60,\n      columnNumber: 15\n    }, this), /*#__PURE__*/_jsxDEV(\"ul\", {\n      className: \"actions\",\n      style: {\n        justifyContent: \"center\"\n      },\n      children: /*#__PURE__*/_jsxDEV(\"li\", {\n        children: /*#__PURE__*/_jsxDEV(\"button\", {\n          type: \"submit\",\n          className: \"primary\",\n          style: {\n            minWidth: 120\n          },\n          children: \"\\uB85C\\uADF8\\uC778\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 68,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 67,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 66,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 29,\n    columnNumber: 5\n  }, this);\n}\n_s(Login, \"ZNG76k07dqFGqfAFel/PQLXwqVc=\");\n_c = Login;\nvar _c;\n$RefreshReg$(_c, \"Login\");","map":{"version":3,"names":["React","useState","useContext","AuthContext","jsxDEV","_jsxDEV","Login","onClose","_s","login","form","setForm","username","password","msg","setMsg","handleChange","e","target","name","value","handleSubmit","preventDefault","res","fetch","method","headers","body","JSON","stringify","data","json","token","user","setTimeout","className","onSubmit","style","minWidth","children","fontFamily","fontWeight","marginBottom","fontSize","letterSpacing","fileName","_jsxFileName","lineNumber","columnNumber","htmlFor","type","id","autoFocus","required","onChange","color","margin","textAlign","justifyContent","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/pages/Login.js"],"sourcesContent":["// src/pages/Login.js\r\nimport React, { useState, useContext } from \"react\";\r\nimport { AuthContext } from \"../contexts/AuthContext\";\r\n\r\nexport default function Login({ onClose }) {\r\n  const { login } = useContext(AuthContext);\r\n  const [form, setForm] = useState({ username: '', password: '' });\r\n  const [msg, setMsg] = useState('');\r\n\r\n  const handleChange = e => setForm({ ...form, [e.target.name]: e.target.value });\r\n  const handleSubmit = async e => {\r\n    e.preventDefault();\r\n    const res = await fetch(\"http://localhost:4000/api/auth/login\", {\r\n      method: \"POST\",\r\n      headers: { \"Content-Type\": \"application/json\" },\r\n      body: JSON.stringify(form),\r\n    });\r\n    const data = await res.json();\r\n    if (data.token) {\r\n      login({ ...data.user, token: data.token });\r\n      setMsg(\"로그인 성공!\");\r\n      setTimeout(() => onClose && onClose(), 700);\r\n    } else {\r\n      setMsg(data.msg || \"로그인 실패\");\r\n    }\r\n  };\r\n\r\n  return (\r\n    <form className=\"editorial-modal-form\" onSubmit={handleSubmit} style={{ minWidth: 320 }}>\r\n      <h2 style={{\r\n        fontFamily: \"Source Sans Pro, Arial, sans-serif\",\r\n        fontWeight: 900,\r\n        marginBottom: \"1.3em\",\r\n        fontSize: \"1.5em\",\r\n        letterSpacing: \"-0.03em\"\r\n      }}>로그인</h2>\r\n      <div className=\"field\" style={{ marginBottom: \"1.4em\" }}>\r\n        <label htmlFor=\"username\">아이디</label>\r\n        <input\r\n          type=\"text\"\r\n          name=\"username\"\r\n          id=\"username\"\r\n          autoFocus\r\n          required\r\n          value={form.username}\r\n          onChange={handleChange}\r\n        />\r\n      </div>\r\n      <div className=\"field\" style={{ marginBottom: \"1.5em\" }}>\r\n        <label htmlFor=\"password\">비밀번호</label>\r\n        <input\r\n          type=\"password\"\r\n          name=\"password\"\r\n          id=\"password\"\r\n          required\r\n          value={form.password}\r\n          onChange={handleChange}\r\n        />\r\n      </div>\r\n      {msg && <div style={{\r\n        color: \"#d4403a\",\r\n        fontWeight: 600,\r\n        margin: \"0 0 1em 0\",\r\n        textAlign: \"center\"\r\n      }}>{msg}</div>}\r\n      <ul className=\"actions\" style={{ justifyContent: \"center\" }}>\r\n        <li>\r\n          <button type=\"submit\" className=\"primary\" style={{ minWidth: 120 }}>로그인</button>\r\n        </li>\r\n      </ul>\r\n    </form>\r\n  );\r\n}\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}