{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\App.js\",\n  _s = $RefreshSig$();\nimport React, { useState } from \"react\";\nimport { BrowserRouter as Router, Routes, Route, Navigate } from \"react-router-dom\";\nimport { AuthProvider, AuthContext } from \"./contexts/AuthContext\";\nimport Sidebar from \"./components/Sidebar\";\nimport MenuButton from \"./components/MenuButton\";\nimport Header from \"./components/Header\";\nimport Footer from \"./components/Footer\";\nimport Tabs from \"./components/Tabs\";\nimport Modal from \"./components/Modal\";\nimport Login from \"./pages/Login\";\nimport Register from \"./pages/Register\";\nimport SensorList from \"./pages/SensorList\";\nimport Admin from \"./pages/Admin\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction App() {\n  _s();\n  const [modal, setModal] = useState(null);\n  const handleOpenLogin = () => setModal(\"login\");\n  const handleOpenRegister = () => setModal(\"register\");\n  const handleCloseModal = () => setModal(null);\n  const [sidebarOpen, setSidebarOpen] = useState(true);\n  const sidebarWidth = 320; // Editorial 기준\n\n  return /*#__PURE__*/_jsxDEV(AuthProvider, {\n    children: /*#__PURE__*/_jsxDEV(Router, {\n      children: /*#__PURE__*/_jsxDEV(\"div\", {\n        id: \"wrapper\",\n        children: [/*#__PURE__*/_jsxDEV(\"div\", {\n          id: \"main\",\n          style: {\n            flex: 1,\n            minWidth: 0\n          },\n          children: /*#__PURE__*/_jsxDEV(\"div\", {\n            className: \"inner\",\n            children: [/*#__PURE__*/_jsxDEV(Header, {}, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 35,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(Tabs, {\n              onOpenLogin: handleOpenLogin,\n              onOpenRegister: handleOpenRegister\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 37,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(\"main\", {\n              id: \"main-content\",\n              style: {\n                padding: 0,\n                background: 'transparent'\n              },\n              children: /*#__PURE__*/_jsxDEV(Routes, {\n                children: [/*#__PURE__*/_jsxDEV(Route, {\n                  path: \"/sensor\",\n                  element: /*#__PURE__*/_jsxDEV(SensorList, {}, void 0, false, {\n                    fileName: _jsxFileName,\n                    lineNumber: 41,\n                    columnNumber: 50\n                  }, this)\n                }, void 0, false, {\n                  fileName: _jsxFileName,\n                  lineNumber: 41,\n                  columnNumber: 19\n                }, this), /*#__PURE__*/_jsxDEV(Route, {\n                  path: \"/admin\",\n                  element: /*#__PURE__*/_jsxDEV(AuthContext.Consumer, {\n                    children: ({\n                      user\n                    }) => user && user.role === \"admin\" ? /*#__PURE__*/_jsxDEV(Admin, {}, void 0, false, {\n                      fileName: _jsxFileName,\n                      lineNumber: 48,\n                      columnNumber: 29\n                    }, this) : /*#__PURE__*/_jsxDEV(Navigate, {\n                      to: \"/sensor\",\n                      replace: true\n                    }, void 0, false, {\n                      fileName: _jsxFileName,\n                      lineNumber: 50,\n                      columnNumber: 29\n                    }, this)\n                  }, void 0, false, {\n                    fileName: _jsxFileName,\n                    lineNumber: 45,\n                    columnNumber: 23\n                  }, this)\n                }, void 0, false, {\n                  fileName: _jsxFileName,\n                  lineNumber: 42,\n                  columnNumber: 19\n                }, this), /*#__PURE__*/_jsxDEV(Route, {\n                  path: \"/\",\n                  element: /*#__PURE__*/_jsxDEV(Navigate, {\n                    to: \"/sensor\",\n                    replace: true\n                  }, void 0, false, {\n                    fileName: _jsxFileName,\n                    lineNumber: 56,\n                    columnNumber: 44\n                  }, this)\n                }, void 0, false, {\n                  fileName: _jsxFileName,\n                  lineNumber: 56,\n                  columnNumber: 19\n                }, this)]\n              }, void 0, true, {\n                fileName: _jsxFileName,\n                lineNumber: 40,\n                columnNumber: 17\n              }, this)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 39,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(Footer, {}, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 60,\n              columnNumber: 15\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 33,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 31,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Sidebar, {\n          visible: sidebarOpen,\n          width: sidebarOpen ? window.innerWidth < 600 ? 320 : 100 : 0\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 65,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(MenuButton, {\n          onClick: () => setSidebarOpen(open => !open),\n          style: {\n            position: \"fixed\",\n            left: sidebarOpen ? `${sidebarWidth + 10}px` : \"16px\",\n            top: \"24px\",\n            transition: \"left 0.33s cubic-bezier(.4,1,.3,1)\"\n          },\n          isOpen: sidebarOpen\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 68,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Modal, {\n          open: modal === \"login\",\n          onClose: handleCloseModal,\n          children: /*#__PURE__*/_jsxDEV(Login, {\n            onClose: handleCloseModal\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 81,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 80,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Modal, {\n          open: modal === \"register\",\n          onClose: handleCloseModal,\n          children: /*#__PURE__*/_jsxDEV(Register, {\n            onClose: handleCloseModal\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 84,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 83,\n          columnNumber: 11\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 28,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 27,\n      columnNumber: 7\n    }, this)\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 26,\n    columnNumber: 5\n  }, this);\n}\n_s(App, \"182Sab3c+Q96MQafzLVmF759gtk=\");\n_c = App;\nexport default App;\nvar _c;\n$RefreshReg$(_c, \"App\");","map":{"version":3,"names":["React","useState","BrowserRouter","Router","Routes","Route","Navigate","AuthProvider","AuthContext","Sidebar","MenuButton","Header","Footer","Tabs","Modal","Login","Register","SensorList","Admin","jsxDEV","_jsxDEV","App","_s","modal","setModal","handleOpenLogin","handleOpenRegister","handleCloseModal","sidebarOpen","setSidebarOpen","sidebarWidth","children","id","style","flex","minWidth","className","fileName","_jsxFileName","lineNumber","columnNumber","onOpenLogin","onOpenRegister","padding","background","path","element","Consumer","user","role","to","replace","visible","width","window","innerWidth","onClick","open","position","left","top","transition","isOpen","onClose","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/App.js"],"sourcesContent":["import React, { useState } from \"react\";\r\nimport { BrowserRouter as Router, Routes, Route, Navigate } from \"react-router-dom\";\r\nimport { AuthProvider, AuthContext } from \"./contexts/AuthContext\";\r\nimport Sidebar from \"./components/Sidebar\";\r\nimport MenuButton from \"./components/MenuButton\";\r\nimport Header from \"./components/Header\";\r\nimport Footer from \"./components/Footer\";\r\nimport Tabs from \"./components/Tabs\";\r\nimport Modal from \"./components/Modal\";\r\nimport Login from \"./pages/Login\";\r\nimport Register from \"./pages/Register\";\r\nimport SensorList from \"./pages/SensorList\";\r\nimport Admin from \"./pages/Admin\";\r\n\r\nfunction App() {\r\n  const [modal, setModal] = useState(null);\r\n\r\n  const handleOpenLogin = () => setModal(\"login\");\r\n  const handleOpenRegister = () => setModal(\"register\");\r\n  const handleCloseModal = () => setModal(null);\r\n\r\n  const [sidebarOpen, setSidebarOpen] = useState(true);\r\n  const sidebarWidth = 320; // Editorial 기준\r\n\r\n  return (\r\n    <AuthProvider>\r\n      <Router>\r\n        <div id=\"wrapper\">\r\n\r\n          {/* 메인 콘텐츠 */}\r\n          <div id=\"main\" style={{ flex: 1, minWidth: 0 }}>\r\n            {/* 상단 탭(메뉴) */}\r\n            <div className=\"inner\">\r\n\r\n              <Header />\r\n\r\n              <Tabs onOpenLogin={handleOpenLogin} onOpenRegister={handleOpenRegister} />\r\n\r\n              <main id=\"main-content\" style={{ padding: 0, background: 'transparent' }}>\r\n                <Routes>\r\n                  <Route path=\"/sensor\" element={<SensorList />} />\r\n                  <Route\r\n                    path=\"/admin\"\r\n                    element={\r\n                      <AuthContext.Consumer>\r\n                        {({ user }) =>\r\n                          user && user.role === \"admin\" ? (\r\n                            <Admin />\r\n                          ) : (\r\n                            <Navigate to=\"/sensor\" replace />\r\n                          )\r\n                        }\r\n                      </AuthContext.Consumer>\r\n                    }\r\n                  />\r\n                  <Route path=\"/\" element={<Navigate to=\"/sensor\" replace />} />\r\n                </Routes>\r\n\r\n              </main>\r\n              <Footer />\r\n            </div>\r\n          </div>\r\n\r\n          {/* Editorial 구조: 좌측에 Sidebar */}\r\n          <Sidebar visible={sidebarOpen} width={sidebarOpen ? (window.innerWidth < 600 ? 320 : 100) : 0} />\r\n\r\n          {/* MenuButton: 항상 fixed로 화면 상에 보임! */}\r\n          <MenuButton\r\n            onClick={() => setSidebarOpen(open => !open)}\r\n            style={{\r\n              position: \"fixed\",\r\n              left: sidebarOpen ? `${sidebarWidth + 10}px` : \"16px\",\r\n              top: \"24px\",\r\n              transition: \"left 0.33s cubic-bezier(.4,1,.3,1)\"\r\n            }}\r\n            isOpen={sidebarOpen}\r\n          />\r\n\r\n          {/* 팝업 모달 */}\r\n          <Modal open={modal === \"login\"} onClose={handleCloseModal}>\r\n            <Login onClose={handleCloseModal} />\r\n          </Modal>\r\n          <Modal open={modal === \"register\"} onClose={handleCloseModal}>\r\n            <Register onClose={handleCloseModal} />\r\n          </Modal>\r\n        </div>\r\n      </Router>\r\n    </AuthProvider>\r\n  );\r\n}\r\n\r\nexport default App;\r\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,aAAa,IAAIC,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,QAAQ,QAAQ,kBAAkB;AACnF,SAASC,YAAY,EAAEC,WAAW,QAAQ,wBAAwB;AAClE,OAAOC,OAAO,MAAM,sBAAsB;AAC1C,OAAOC,UAAU,MAAM,yBAAyB;AAChD,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,MAAM,MAAM,qBAAqB;AACxC,OAAOC,IAAI,MAAM,mBAAmB;AACpC,OAAOC,KAAK,MAAM,oBAAoB;AACtC,OAAOC,KAAK,MAAM,eAAe;AACjC,OAAOC,QAAQ,MAAM,kBAAkB;AACvC,OAAOC,UAAU,MAAM,oBAAoB;AAC3C,OAAOC,KAAK,MAAM,eAAe;AAAC,SAAAC,MAAA,IAAAC,OAAA;AAElC,SAASC,GAAGA,CAAA,EAAG;EAAAC,EAAA;EACb,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGvB,QAAQ,CAAC,IAAI,CAAC;EAExC,MAAMwB,eAAe,GAAGA,CAAA,KAAMD,QAAQ,CAAC,OAAO,CAAC;EAC/C,MAAME,kBAAkB,GAAGA,CAAA,KAAMF,QAAQ,CAAC,UAAU,CAAC;EACrD,MAAMG,gBAAgB,GAAGA,CAAA,KAAMH,QAAQ,CAAC,IAAI,CAAC;EAE7C,MAAM,CAACI,WAAW,EAAEC,cAAc,CAAC,GAAG5B,QAAQ,CAAC,IAAI,CAAC;EACpD,MAAM6B,YAAY,GAAG,GAAG,CAAC,CAAC;;EAE1B,oBACEV,OAAA,CAACb,YAAY;IAAAwB,QAAA,eACXX,OAAA,CAACjB,MAAM;MAAA4B,QAAA,eACLX,OAAA;QAAKY,EAAE,EAAC,SAAS;QAAAD,QAAA,gBAGfX,OAAA;UAAKY,EAAE,EAAC,MAAM;UAACC,KAAK,EAAE;YAAEC,IAAI,EAAE,CAAC;YAAEC,QAAQ,EAAE;UAAE,CAAE;UAAAJ,QAAA,eAE7CX,OAAA;YAAKgB,SAAS,EAAC,OAAO;YAAAL,QAAA,gBAEpBX,OAAA,CAACT,MAAM;cAAA0B,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE,CAAC,eAEVpB,OAAA,CAACP,IAAI;cAAC4B,WAAW,EAAEhB,eAAgB;cAACiB,cAAc,EAAEhB;YAAmB;cAAAW,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE,CAAC,eAE1EpB,OAAA;cAAMY,EAAE,EAAC,cAAc;cAACC,KAAK,EAAE;gBAAEU,OAAO,EAAE,CAAC;gBAAEC,UAAU,EAAE;cAAc,CAAE;cAAAb,QAAA,eACvEX,OAAA,CAAChB,MAAM;gBAAA2B,QAAA,gBACLX,OAAA,CAACf,KAAK;kBAACwC,IAAI,EAAC,SAAS;kBAACC,OAAO,eAAE1B,OAAA,CAACH,UAAU;oBAAAoB,QAAA,EAAAC,YAAA;oBAAAC,UAAA;oBAAAC,YAAA;kBAAA,OAAE;gBAAE;kBAAAH,QAAA,EAAAC,YAAA;kBAAAC,UAAA;kBAAAC,YAAA;gBAAA,OAAE,CAAC,eACjDpB,OAAA,CAACf,KAAK;kBACJwC,IAAI,EAAC,QAAQ;kBACbC,OAAO,eACL1B,OAAA,CAACZ,WAAW,CAACuC,QAAQ;oBAAAhB,QAAA,EAClBA,CAAC;sBAAEiB;oBAAK,CAAC,KACRA,IAAI,IAAIA,IAAI,CAACC,IAAI,KAAK,OAAO,gBAC3B7B,OAAA,CAACF,KAAK;sBAAAmB,QAAA,EAAAC,YAAA;sBAAAC,UAAA;sBAAAC,YAAA;oBAAA,OAAE,CAAC,gBAETpB,OAAA,CAACd,QAAQ;sBAAC4C,EAAE,EAAC,SAAS;sBAACC,OAAO;oBAAA;sBAAAd,QAAA,EAAAC,YAAA;sBAAAC,UAAA;sBAAAC,YAAA;oBAAA,OAAE;kBACjC;oBAAAH,QAAA,EAAAC,YAAA;oBAAAC,UAAA;oBAAAC,YAAA;kBAAA,OAEiB;gBACvB;kBAAAH,QAAA,EAAAC,YAAA;kBAAAC,UAAA;kBAAAC,YAAA;gBAAA,OACF,CAAC,eACFpB,OAAA,CAACf,KAAK;kBAACwC,IAAI,EAAC,GAAG;kBAACC,OAAO,eAAE1B,OAAA,CAACd,QAAQ;oBAAC4C,EAAE,EAAC,SAAS;oBAACC,OAAO;kBAAA;oBAAAd,QAAA,EAAAC,YAAA;oBAAAC,UAAA;oBAAAC,YAAA;kBAAA,OAAE;gBAAE;kBAAAH,QAAA,EAAAC,YAAA;kBAAAC,UAAA;kBAAAC,YAAA;gBAAA,OAAE,CAAC;cAAA;gBAAAH,QAAA,EAAAC,YAAA;gBAAAC,UAAA;gBAAAC,YAAA;cAAA,OACxD;YAAC;cAAAH,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAEL,CAAC,eACPpB,OAAA,CAACR,MAAM;cAAAyB,QAAA,EAAAC,YAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA,OAAE,CAAC;UAAA;YAAAH,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACP;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACH,CAAC,eAGNpB,OAAA,CAACX,OAAO;UAAC2C,OAAO,EAAExB,WAAY;UAACyB,KAAK,EAAEzB,WAAW,GAAI0B,MAAM,CAACC,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAI;QAAE;UAAAlB,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAE,CAAC,eAGjGpB,OAAA,CAACV,UAAU;UACT8C,OAAO,EAAEA,CAAA,KAAM3B,cAAc,CAAC4B,IAAI,IAAI,CAACA,IAAI,CAAE;UAC7CxB,KAAK,EAAE;YACLyB,QAAQ,EAAE,OAAO;YACjBC,IAAI,EAAE/B,WAAW,GAAG,GAAGE,YAAY,GAAG,EAAE,IAAI,GAAG,MAAM;YACrD8B,GAAG,EAAE,MAAM;YACXC,UAAU,EAAE;UACd,CAAE;UACFC,MAAM,EAAElC;QAAY;UAAAS,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACrB,CAAC,eAGFpB,OAAA,CAACN,KAAK;UAAC2C,IAAI,EAAElC,KAAK,KAAK,OAAQ;UAACwC,OAAO,EAAEpC,gBAAiB;UAAAI,QAAA,eACxDX,OAAA,CAACL,KAAK;YAACgD,OAAO,EAAEpC;UAAiB;YAAAU,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAE;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAC/B,CAAC,eACRpB,OAAA,CAACN,KAAK;UAAC2C,IAAI,EAAElC,KAAK,KAAK,UAAW;UAACwC,OAAO,EAAEpC,gBAAiB;UAAAI,QAAA,eAC3DX,OAAA,CAACJ,QAAQ;YAAC+C,OAAO,EAAEpC;UAAiB;YAAAU,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OAAE;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAClC,CAAC;MAAA;QAAAH,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACL;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACA;EAAC;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OACG,CAAC;AAEnB;AAAClB,EAAA,CA3EQD,GAAG;AAAA2C,EAAA,GAAH3C,GAAG;AA6EZ,eAAeA,GAAG;AAAC,IAAA2C,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}