From 22d22021fa3ea5738b038af83ebc27135add15cd Mon Sep 17 00:00:00 2001 From: 0-x-14 <0x14@daum.net> Date: Thu, 9 May 2024 22:52:23 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]=20=ED=94=84=EB=A1=A0=ED=8A=B8=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ApiTestController.java | 13 ++++ .../web/controller/LoginPageController.java | 56 +++++++++--------- src/main/resources/application.yml | 12 +++- .../static/css/224.869aedb9.chunk.css | 2 + .../resources/static/css/main.6c39f2a8.css | 2 + src/main/resources/static/index.html | 21 +++++++ .../resources/static/js/224.3093597a.chunk.js | 2 + .../resources/static/js/453.51079d00.chunk.js | 2 + src/main/resources/static/js/main.9ae17e1c.js | 3 + .../static/public/course_banner_1.png | Bin 0 -> 81688 bytes .../static/public/course_banner_2.png | Bin 0 -> 83331 bytes .../static/public/course_banner_3.png | Bin 0 -> 141339 bytes .../resources/static/public/detail_ex.png | Bin 0 -> 448387 bytes .../resources/static/public/home_banner_1.png | Bin 0 -> 517897 bytes .../resources/static/public/home_banner_2.png | Bin 0 -> 486025 bytes .../resources/static/public/home_banner_3.png | Bin 0 -> 206931 bytes 16 files changed, 84 insertions(+), 29 deletions(-) create mode 100644 src/main/java/ddareunging/ddareunging_server/controller/ApiTestController.java create mode 100644 src/main/resources/static/css/224.869aedb9.chunk.css create mode 100644 src/main/resources/static/css/main.6c39f2a8.css create mode 100644 src/main/resources/static/index.html create mode 100644 src/main/resources/static/js/224.3093597a.chunk.js create mode 100644 src/main/resources/static/js/453.51079d00.chunk.js create mode 100644 src/main/resources/static/js/main.9ae17e1c.js create mode 100644 src/main/resources/static/public/course_banner_1.png create mode 100644 src/main/resources/static/public/course_banner_2.png create mode 100644 src/main/resources/static/public/course_banner_3.png create mode 100644 src/main/resources/static/public/detail_ex.png create mode 100644 src/main/resources/static/public/home_banner_1.png create mode 100644 src/main/resources/static/public/home_banner_2.png create mode 100644 src/main/resources/static/public/home_banner_3.png diff --git a/src/main/java/ddareunging/ddareunging_server/controller/ApiTestController.java b/src/main/java/ddareunging/ddareunging_server/controller/ApiTestController.java new file mode 100644 index 0000000..31dc3ba --- /dev/null +++ b/src/main/java/ddareunging/ddareunging_server/controller/ApiTestController.java @@ -0,0 +1,13 @@ +package ddareunging.ddareunging_server.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class ApiTestController { + @RequestMapping(value = "/**/{path:[^.]*}") + public String redirect() { + return "forward:/index.html"; + } +} diff --git a/src/main/java/ddareunging/ddareunging_server/web/controller/LoginPageController.java b/src/main/java/ddareunging/ddareunging_server/web/controller/LoginPageController.java index 50b366b..88c4d7f 100644 --- a/src/main/java/ddareunging/ddareunging_server/web/controller/LoginPageController.java +++ b/src/main/java/ddareunging/ddareunging_server/web/controller/LoginPageController.java @@ -1,28 +1,28 @@ -package ddareunging.ddareunging_server.web.controller; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; - - -@Controller -@RequestMapping("") -public class LoginPageController { - - @Value("${kakaoApi.serviceKey}") - private String client_id; - - @Value("${kakaoApi.redirect_uri}") - private String redirect_uri; - - @GetMapping("") - public String loginPage(Model model) { - String location = "https://kauth.kakao.com/oauth/authorize?response_type=code&client_id="+client_id+"&redirect_uri="+redirect_uri; - model.addAttribute("location", location); - - return "login"; - } - -} \ No newline at end of file +//package ddareunging.ddareunging_server.web.controller; +// +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.stereotype.Controller; +//import org.springframework.ui.Model; +//import org.springframework.web.bind.annotation.GetMapping; +//import org.springframework.web.bind.annotation.RequestMapping; +// +// +//@Controller +//@RequestMapping("") +//public class LoginPageController { +// +// @Value("${kakaoApi.serviceKey}") +// private String client_id; +// +// @Value("${kakaoApi.redirect_uri}") +// private String redirect_uri; +// +// @GetMapping("") +// public String loginPage(Model model) { +// String location = "https://kauth.kakao.com/oauth/authorize?response_type=code&client_id="+client_id+"&redirect_uri="+redirect_uri; +// model.addAttribute("location", location); +// +// return "login"; +// } +// +//} \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index c08a31e..27bf2dc 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -23,6 +23,9 @@ spring: mode: HTML encoding: UTF-8 cache: false + mvc: + pathmatch: + matching-strategy: ant_path_matcher weatherApi: serviceKey: ${weather.servicekey} @@ -34,4 +37,11 @@ kakaoApi: resources: location: C:/Users/jooye/Ddareunging-Server/src/main/resources # 개발 환경 - real.properties: # 운영 환경 추가해야 함 \ No newline at end of file + real.properties: # 운영 환경 추가해야 함 + +tmap: + api-key: ${tmap.apikey} #"tPLkF7VZBwIZSU1lW8N03zbLJTwYAGG3sEzLOQE6" + +# REACT_APP_TMAP_API_KEY=tPLkF7VZBwIZSU1lW8N03zbLJTwYAGG3sEzLOQE6 +# REACT_APP_KAKAO_REST_API_KEY=282f0bcb67baf674c825363575205734 +# REACT_APP_KAKAO_REDIRECT_URI=http://localhost:3000/callback \ No newline at end of file diff --git a/src/main/resources/static/css/224.869aedb9.chunk.css b/src/main/resources/static/css/224.869aedb9.chunk.css new file mode 100644 index 0000000..471cddc --- /dev/null +++ b/src/main/resources/static/css/224.869aedb9.chunk.css @@ -0,0 +1,2 @@ +.course-detail-container{margin-bottom:20px}.course-title-container{align-items:center;display:flex;justify-content:center;position:relative}.course-title{margin-right:10px}.like-icon{cursor:pointer;filter:grayscale(100%);height:24px;width:24px}.like-icon.favored{filter:grayscale(0)}.location-icon{height:24px;margin-right:10px;width:24px}.comments-section{margin-top:20px}.comment-input{width:100%}.comment-submit-button{cursor:pointer;margin-top:10px}.view-course-button{word-wrap:break-word;background:#fff;border:1px solid #ccc;border-radius:15px;color:#37593e;cursor:pointer;display:block;font-family:Pretendard,sans-serif;font-size:12px;font-weight:700;margin:10px auto;padding:10px 20px;text-align:center;width:auto} +/*# sourceMappingURL=224.869aedb9.chunk.css.map*/ \ No newline at end of file diff --git a/src/main/resources/static/css/main.6c39f2a8.css b/src/main/resources/static/css/main.6c39f2a8.css new file mode 100644 index 0000000..82f50c7 --- /dev/null +++ b/src/main/resources/static/css/main.6c39f2a8.css @@ -0,0 +1,2 @@ +@charset "UTF-8";body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.App{background-color:#fffdf6}@media only screen and (min-width:390px){.App{height:100%;overflow:auto;width:100%}}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{animation:App-logo-spin 20s linear infinite}}.App-header{align-items:center;background-color:#282c34;color:#fff;display:flex;flex-direction:column;font-size:calc(10px + 2vmin);justify-content:center}.App-link{color:#61dafb}@keyframes App-logo-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.navigation-bar{align-items:center;background-color:#fff;bottom:0;box-shadow:0 -2px 10px #0000001a;position:fixed;width:100%}.nav-item{color:#333}.nav-icon{font-size:1.5em}.navigation-bar span{font-size:.75em}.profile-setup{align-items:center;background:#fff;display:flex;flex-direction:column;font-family:Pretendard,sans-serif;height:100vh;justify-content:center}.title{color:#000;font-size:15px;font-weight:600}.profile-photo{align-items:center;background:#eaeaea;border-radius:50%;cursor:pointer;display:flex;height:100px;justify-content:center;margin:20px;overflow:hidden;width:100px}.profile-photo img{height:100%;object-fit:cover;width:100%}.nickname-input input{border:2px solid #ccc;border-radius:5px;color:#000;font-size:15px;margin:20px;padding:10px;width:calc(100% - 48px)}.setup-button{background-color:#fffbd8;border:none;border-radius:12.83px;color:#000;cursor:pointer;font-family:Pretendard,sans-serif;font-size:15px;font-weight:400;max-width:300px;padding:10px 20px;width:100%}.setup-button:hover{background-color:#fcc419}.congrats-screen{align-items:center;background:#fffdf6;border-radius:20px;bottom:0;box-shadow:0 4px 2px #0003;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:10}.congrats-message{word-wrap:break-word;color:#37593e;font-family:Pretendard,sans-serif;font-size:20px;font-weight:700;padding:20px;text-align:center}.home-info-container{overflow:hidden;width:100%}@media (max-width:599px){.home-info-container .info-title,.home-info-container .weather-title{word-wrap:break-word;color:#37593e;font-family:Pretendard,sans-serif;font-size:20px;font-weight:700;text-align:center}.home-info-container .weather-title{color:#37593e33;font-weight:600}}@media (min-width:600px) and (max-width:1024px){.home-info-container .info-title,.home-info-container .weather-title{font-size:24px}}@media (min-width:1025px){.home-info-container{margin:auto;max-width:960px}.home-info-container .info-title,.home-info-container .weather-title{font-size:28px}}.tab-header{background-color:#fffdf6;display:flex;justify-content:space-between;padding:20px 16px}.tab{position:relative}.tab.active .underline-bar{content:"";display:block;left:0;width:100%}.banner-slide{align-items:center;display:flex;height:100%;justify-content:center}.banner-slide img{height:auto;object-fit:cover;width:100%}.slick-dots{bottom:25px}.slick-dots li button:before{color:#37593e;font-size:12px}.slick-dots li.slick-active button:before{color:#37593e}.slick-slider{margin:0 auto;width:90%}.slick-list{overflow:visible}.slick-slide>div{margin:0 10px}.slick-slider{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;box-sizing:border-box;touch-action:pan-y;-webkit-user-select:none;user-select:none;-khtml-user-select:none}.slick-list,.slick-slider{display:block;position:relative}.slick-list{margin:0;overflow:hidden;padding:0}.slick-list:focus{outline:none}.slick-list.dragging{cursor:pointer;cursor:hand}.slick-slider .slick-list,.slick-slider .slick-track{transform:translateZ(0)}.slick-track{display:block;left:0;margin-left:auto;margin-right:auto;position:relative;top:0}.slick-track:after,.slick-track:before{content:"";display:table}.slick-track:after{clear:both}.slick-loading .slick-track{visibility:hidden}.slick-slide{display:none;float:left;height:100%;min-height:1px}[dir=rtl] .slick-slide{float:right}.slick-slide img{display:block}.slick-slide.slick-loading img{display:none}.slick-slide.dragging img{pointer-events:none}.slick-initialized .slick-slide{display:block}.slick-loading .slick-slide{visibility:hidden}.slick-vertical .slick-slide{border:1px solid #0000;display:block;height:auto}.slick-arrow.slick-hidden{display:none}.slick-loading .slick-list{background:#fff url(data:image/gif;base64,R0lGODlhIAAgAPUAAP///wAAAPr6+sTExOjo6PDw8NDQ0H5+fpqamvb29ubm5vz8/JKSkoaGhuLi4ri4uKCgoOzs7K6urtzc3D4+PlZWVmBgYHx8fKioqO7u7kpKSmxsbAwMDAAAAM7OzsjIyNjY2CwsLF5eXh4eHkxMTLCwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAIAAgAAAG/0CAcEgkFjgcR3HJJE4SxEGnMygKmkwJxRKdVocFBRRLfFAoj6GUOhQoFAVysULRjNdfQFghLxrODEJ4Qm5ifUUXZwQAgwBvEXIGBkUEZxuMXgAJb1dECWMABAcHDEpDEGcTBQMDBQtvcW0RbwuECKMHELEJF5NFCxm1AAt7cH4NuAOdcsURy0QCD7gYfcWgTQUQB6Zkr66HoeDCSwIF5ucFz3IC7O0CC6zx8YuHhW/3CvLyfPX4+OXozKnDssBdu3G/xIHTpGAgOUPrZimAJCfDPYfDin2TQ+xeBnWbHi37SC4YIYkQhdy7FvLdpwWvjA0JyU/ISyIx4xS6sgfkNS4me2rtVKkgw0JCb8YMZdjwqMQ2nIY8BbcUQNVCP7G4MQq1KRivR7tiDEuEFrggACH5BAAKAAEALAAAAAAgACAAAAb/QIBwSCQmNBpCcckkEgREA4ViKA6azM8BEZ1Wh6LOBls0HA5fgJQ6HHQ6InKRcWhA1d5hqMMpyIkOZw9Ca18Qbwd/RRhnfoUABRwdI3IESkQFZxB4bAdvV0YJQwkDAx9+bWcECQYGCQ5vFEQCEQoKC0ILHqUDBncCGA5LBiHCAAsFtgqoQwS8Aw64f8m2EXdFCxO8INPKomQCBgPMWAvL0n/ff+jYAu7vAuxy8O/myvfX8/f7/Arq+v0W0HMnr9zAeE0KJlQkJIGCfE0E+PtDq9qfDMogDkGmrIBCbNQUZIDosNq1kUsEZJBW0dY/b0ZsLViQIMFMW+RKKgjFzp4fNokPIdki+Y8JNVxA79jKwHAI0G9JGw5tCqDWTiFRhVhtmhVA16cMJTJ1OnVIMo1cy1KVI5NhEAAh+QQACgACACwAAAAAIAAgAAAG/0CAcEgkChqNQnHJJCYWRMfh4CgamkzFwBOdVocNCgNbJAwGhKGUOjRQKA1y8XOGAtZfgIWiSciJBWcTQnhCD28Qf0UgZwJ3XgAJGhQVcgKORmdXhRBvV0QMY0ILCgoRmIRnCQIODgIEbxtEJSMdHZ8AGaUKBXYLIEpFExZpAG62HRRFArsKfn8FIsgjiUwJu8FkJLYcB9lMCwUKqFgGHSJ5cnZ/uEULl/CX63/x8KTNu+RkzPj9zc/0/Cl4V0/APDIE6x0csrBJwybX9DFhBhCLgAilIvzRVUriKHGlev0JtyuDvmsZUZlcIiCDnYu7KsZ0UmrBggRP7n1DqcDJEzciOgHwcwTyZEUmIKEMFVIqgyIjpZ4tjdTxqRCMPYVMBYDV6tavUZ8yczpkKwBxHsVWtaqo5tMgACH5BAAKAAMALAAAAAAgACAAAAb/QIBwSCQuBgNBcck0FgvIQtHRZCYUGSJ0IB2WDo9qUaBQKIXbLsBxOJTExUh5mB4iDo0zXEhWJNBRQgZtA3tPZQsAdQINBwxwAnpCC2VSdQNtVEQSEkOUChGSVwoLCwUFpm0QRAMVFBQTQxllCqh0kkIECF0TG68UG2O0foYJDb8VYVa0alUXrxoQf1WmZnsTFA0EhgCJhrFMC5Hjkd57W0jpDsPDuFUDHfHyHRzstNN78PPxHOLk5dwcpBuoaYk5OAfhXHG3hAy+KgLkgNozqwzDbgWYJQyXsUwGXKNA6fnYMIO3iPeIpBwyqlSCBKUqEQk5E6YRmX2UdAT5kEnHKkQ5hXjkNqTPtKAARl1sIrGoxSFNuSEFMNWoVCxEpiqyRlQY165wEHELAgAh+QQACgAEACwAAAAAIAAgAAAG/0CAcEgsKhSLonJJTBIFR0GxwFwmFJlnlAgaTKpFqEIqFJMBhcEABC5GjkPz0KN2tsvHBH4sJKgdd1NHSXILah9tAmdCC0dUcg5qVEQfiIxHEYtXSACKnWoGXAwHBwRDGUcKBXYFi0IJHmQEEKQHEGGpCnp3AiW1DKFWqZNgGKQNA65FCwV8bQQHJcRtds9MC4rZitVgCQbf4AYEubnKTAYU6eoUGuSpu3fo6+ka2NrbgQAE4eCmS9xVAOW7Yq7IgA4Hpi0R8EZBhDshOnTgcOtfM0cAlTigILFDiAFFNjk8k0GZgAxOBozouIHIOyKbFixIkECmIyIHOEiEWbPJTTQ5FxcVOMCgzUVCWwAcyZJvzy45ADYVZNIwTlIAVfNB7XRVDLxEWLQ4E9JsKq+rTdsMyhcEACH5BAAKAAUALAAAAAAgACAAAAb/QIBwSCwqFIuicklMEgVHQVHKVCYUmWeUWFAkqtOtEKqgAsgFcDFyHJLNmbZa6x2Lyd8595h8C48RagJmQgtHaX5XZUYKQ4YKEYSKfVKPaUMZHwMDeQBxh04ABYSFGU4JBpsDBmFHdXMLIKofBEyKCpdgspsOoUsLXaRLCQMgwky+YJ1FC4POg8lVAg7U1Q5drtnHSw4H3t8HDdnZy2Dd4N4Nzc/QeqLW1bnM7rXuV9tEBhQQ5UoCbJDmWKBAQcMDZNhwRVNCYANBChZYEbkVCZOwASEcCDFQ4SEDIq6WTVqQIMECBx06iCACQQPBiSabHDqzRUTKARMhSFCDrc+WNQIcOoRw5+ZIHj8ADqSEQBQAwKKLhIzowEEeGKQ0owIYkPKjHihZoBKi0KFE01b4zg7h4y4IACH5BAAKAAYALAAAAAAgACAAAAb/QIBwSCwqFIuicklMEgVHQVHKVCYUmWeUWFAkqtOtEKqgAsgFcDFyHJLNmbZa6x2Lyd8595h8C48RagJmQgtHaX5XZUUJeQCGChGEin1SkGlubEhDcYdOAAWEhRlOC12HYUd1eqeRokOKCphgrY5MpotqhgWfunqPt4PCg71gpgXIyWSqqq9MBQPR0tHMzM5L0NPSC8PCxVUCyeLX38+/AFfXRA4HA+pjmoFqCAcHDQa3rbxzBRD1BwgcMFIlidMrAxYICHHA4N8DIqpsUWJ3wAEBChQaEBnQoB6RRr0uARjQocMAAA0w4nMz4IOaU0lImkSngYKFc3ZWyTwJAALGK4fnNA3ZOaQCBQ22wPgRQlSIAYwSfkHJMrQkTyEbKFzFydQq15ccOAjUEwQAIfkEAAoABwAsAAAAACAAIAAABv9AgHBILCoUi6JySUwSBUdBUcpUJhSZZ5RYUCSq060QqqACyAVwMXIcks2ZtlrrHYvJ3zn3mHwLjxFqAmZCC0dpfldlRQl5AIYKEYSKfVKQaW5sSENxh04ABYSFGU4LXYdhR3V6p5GiQ4oKmGCtjkymi2qGBZ+6eo+3g8KDvYLDxKrJuXNkys6qr0zNygvHxL/V1sVD29K/AFfRRQUDDt1PmoFqHgPtBLetvMwG7QMes0KxkkIFIQNKDhBgKvCh3gQiqmxt6NDBAAEIEAgUOHCgBBEH9Yg06uWAIQUABihQMACgBEUHTRwoUEOBIcqQI880OIDgm5ABDA8IgUkSwAAyij1/jejAARPPIQwONBCnBAJDCEOOCnFA8cOvEh1CEJEqBMIBEDaLcA3LJIEGDe/0BAEAIfkEAAoACAAsAAAAACAAIAAABv9AgHBILCoUi6JySUwSBUdBUcpUJhSZZ5RYUCSq060QqqACyAVwMXIcks2ZtlrrHYvJ3zn3mHwLjxFqAmZCC0dpfldlRQl5AIYKEYSKfVKQaW5sSENxh04ABYSFGU4LXYdhR3V6p5GiQ4oKmGCtjkymi2qGBZ+6eo+3g8KDvYLDxKrJuXNkys6qr0zNygvHxL/V1sVDDti/BQccA8yrYBAjHR0jc53LRQYU6R0UBnO4RxmiG/IjJUIJFuoVKeCBigBN5QCk43BgFgMKFCYUGDAgFEUQRGIRYbCh2xACEDcAcHDgQDcQFGf9s7VkA0QCI0t2W0DRw68h8ChAEELSJE8xijBvVqCgIU9PjwA+UNzG5AHEB9xkDpk4QMGvARQsEDlKxMCALDeLcA0rqEEDlWCCAAAh+QQACgAJACwAAAAAIAAgAAAG/0CAcEgsKhSLonJJTBIFR0FRylQmFJlnlFhQJKrTrRCqoALIBXAxchySzZm2Wusdi8nfOfeYfAuPEWoCZkILR2l+V2VFCXkAhgoRhIp9UpBpbmxIQ3GHTgAFhIUZTgtdh2FHdXqnkaJDigqYYK2OTKaLaoYFn7p6j0wOA8PEAw6/Z4PKUhwdzs8dEL9kqqrN0M7SetTVCsLFw8d6C8vKvUQEv+dVCRAaBnNQtkwPFRQUFXOduUoTG/cUNkyYg+tIBlEMAFYYMAaBuCekxmhaJeSeBgiOHhw4QECAAwcCLhGJRUQCg3RDCmyUVmBYmlOiGqmBsPGlyz9YkAlxsJEhqCubABS9AsPgQAMqLQfM0oTMwEZ4QpLOwvMLxAEEXIBG5aczqtaut4YNXRIEACH5BAAKAAoALAAAAAAgACAAAAb/QIBwSCwqFIuicklMEgVHQVHKVCYUmWeUWFAkqtOtEKqgAsgFcDFyHJLNmbZa6x2Lyd8595h8C48RahAQRQtHaX5XZUUJeQAGHR0jA0SKfVKGCmlubEhCBSGRHSQOQwVmQwsZTgtdh0UQHKIHm2quChGophuiJHO3jkwOFB2UaoYFTnMGegDKRQQG0tMGBM1nAtnaABoU3t8UD81kR+UK3eDe4nrk5grR1NLWegva9s9czfhVAgMNpWqgBGNigMGBAwzmxBGjhACEgwcgzAPTqlwGXQ8gMgAhZIGHWm5WjelUZ8jBBgPMTBgwIMGCRgsygVSkgMiHByD7DWDmx5WuMkZqDLCU4gfAq2sACrAEWFSRLjUfWDopCqDTNQIsJ1LF0yzDAA90UHV5eo0qUjB8mgUBACH5BAAKAAsALAAAAAAgACAAAAb/QIBwSCwqFIuickk0FIiCo6A4ZSoZnRBUSiwoEtYipNOBDKOKKgD9DBNHHU4brc4c3cUBeSOk949geEQUZA5rXABHEW4PD0UOZBSHaQAJiEMJgQATFBQVBkQHZKACUwtHbX0RR0mVFp0UFwRCBSQDSgsZrQteqEUPGrAQmmG9ChFqRAkMsBd4xsRLBBsUoG6nBa14E4IA2kUFDuLjDql4peilAA0H7e4H1udH8/Ps7+3xbmj0qOTj5mEWpEP3DUq3glYWOBgAcEmUaNI+DBjwAY+dS0USGJg4wABEXMYyJNvE8UOGISKVCNClah4xjg60WUKyINOCUwrMzVRARMGENWQ4n/jpNTKTm15J/CTK2e0MoD+UKmHEs4onVDVVmyqdpAbNR4cKTjqNSots07EjzzJh1S0IADsAAAAAAAAAAAA=) 50% no-repeat}@font-face{font-family:slick;font-style:normal;font-weight:400;src:url(/static/media/slick.a4e97f5a2a64f0ab1323.eot);src:url(/static/media/slick.a4e97f5a2a64f0ab1323.eot?#iefix) format("embedded-opentype"),url(/static/media/slick.295183786cd8a1389865.woff) format("woff"),url(/static/media/slick.c94f7671dcc99dce43e2.ttf) format("truetype"),url(/static/media/slick.2630a3e3eab21c607e21.svg#slick) format("svg")}.slick-next,.slick-prev{border:none;cursor:pointer;display:block;font-size:0;height:20px;line-height:0;padding:0;position:absolute;top:50%;transform:translateY(-50%);width:20px}.slick-next,.slick-next:focus,.slick-next:hover,.slick-prev,.slick-prev:focus,.slick-prev:hover{background:#0000;color:#0000;outline:none}.slick-next:focus:before,.slick-next:hover:before,.slick-prev:focus:before,.slick-prev:hover:before{opacity:1}.slick-next.slick-disabled:before,.slick-prev.slick-disabled:before{opacity:.25}.slick-next:before,.slick-prev:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#fff;font-family:slick;font-size:20px;line-height:1;opacity:.75}.slick-prev{left:-25px}[dir=rtl] .slick-prev{left:auto;right:-25px}.slick-prev:before{content:"←"}[dir=rtl] .slick-prev:before{content:"→"}.slick-next{right:-25px}[dir=rtl] .slick-next{left:-25px;right:auto}.slick-next:before{content:"→"}[dir=rtl] .slick-next:before{content:"←"}.slick-dotted.slick-slider{margin-bottom:30px}.slick-dots{bottom:-25px;display:block;list-style:none;margin:0;padding:0;position:absolute;text-align:center;width:100%}.slick-dots li{display:inline-block;margin:0 5px;padding:0;position:relative}.slick-dots li,.slick-dots li button{cursor:pointer;height:20px;width:20px}.slick-dots li button{background:#0000;border:0;color:#0000;display:block;font-size:0;line-height:0;outline:none;padding:5px}.slick-dots li button:focus,.slick-dots li button:hover{outline:none}.slick-dots li button:focus:before,.slick-dots li button:hover:before{opacity:1}.slick-dots li button:before{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#000;content:"•";font-family:slick;font-size:6px;height:20px;left:0;line-height:20px;opacity:.25;position:absolute;text-align:center;top:0;width:20px}.slick-dots li.slick-active button:before{color:#000;opacity:.75}.homeWeather{background:#fffdf6;height:100%;padding:20px;position:relative;width:100%}.caution,.location{font-size:20px;font-weight:700;margin-bottom:10px;text-align:center}.caution,.location,.weatherContainer{color:#37593e;font-family:Pretendard,sans-serif}.weatherContainer{grid-gap:10px;display:grid;gap:10px;grid-template-columns:1fr 2fr}.weatherIconContainer{align-items:center;display:flex;grid-row:1/3;justify-content:center}.dateTemperature{align-items:center;color:#37593e;display:flex;flex-direction:column;font-size:20px;justify-content:space-around}.dateTemperature span{text-align:center}.dateTemperature span:nth-child(2){font-size:29.68px}.pollutionLevels{align-items:center;display:flex;grid-column:1/3;justify-content:space-around;margin-top:20px}.pollutionIndex,.pollutionLabel,.pollutionStatus{font-size:18px;font-weight:700}.pollutionStatus{border-radius:10px;color:#fff;padding:4px 8px}.pollutionStatus.good{background-color:#0038ff}.pollutionStatus.fair{background-color:#00cf2b}.pollutionStatus.bad{background-color:#ffa300}.pollutionStatus.veryBad{background-color:#ff6e00}.dataDisclaimer{color:#1f2329;font-size:12px;line-height:16px;margin-top:20px;text-align:center;width:auto}.home-container{background:#fffdf6;padding-bottom:60px}.body{background:#fffdf6;font-family:Pretendard,sans-serif;margin:0;padding:0}.tabs{display:flex;justify-content:center;padding:20px}.tab{background:none;border:none;color:#37593e;cursor:pointer;font-family:Pretendard,sans-serif;font-size:20px;font-weight:700;margin:0 15px;outline:none;padding:5px 0;text-align:center}.tab.active{position:relative}.tab.active .underline-bar{background-color:#37593e;border-radius:1.5px;bottom:-10px;height:2px;left:50%;position:absolute;transform:translateX(-50%);width:15px}.modal{background-color:#0006;display:none;height:100%;left:0;overflow:auto;position:fixed;top:0;width:100%;z-index:1}.modal-content{background-color:#fefefe;border:1px solid #888;margin:15% auto;max-width:600px;width:80%}.button-container{display:flex;justify-content:flex-end;margin-top:20px}button{background-color:#4caf50;border:none;border-radius:4px;color:#fff;cursor:pointer;margin:5px;padding:10px 20px}button:hover{background-color:#45a049}button:focus{outline:none}.course-card{background-color:#fff;border-radius:10px;box-shadow:0 4px 6px #0000001a;display:flex;flex-direction:column;justify-content:space-between;overflow:hidden}.course-link{color:inherit;display:block;text-decoration:none}.courses-grid{grid-gap:20px;display:grid;gap:20px;grid-template-columns:repeat(2,1fr)}.course-thumbnail{height:150px;object-fit:cover;width:100%}.course-info{padding:10px}.course-title{color:#37593e;font-size:17px}.profile-section{align-items:center;display:flex;justify-content:flex-start;margin-bottom:10px}.profile-icon{height:26px;margin-right:10px;width:26px}.nickname{color:#37593e;font-size:12px;white-space:nowrap}.create-course-center{align-items:center;display:flex;height:100vh;justify-content:center}.create-course-button{background:#fff;border-radius:14px;box-shadow:1px 1px 20px 5px #00000014;display:flex;flex-direction:column;height:210px;justify-content:center;margin:auto;padding:16px;text-align:center;width:90%}.create-course-button.no-border{border:none;box-shadow:none}.course-community-container{background:#fffdf6;margin:0 auto;max-width:100%}.course-banner{overflow:hidden;width:100%}.course-banner img{display:block;height:100px;object-fit:cover;width:100%}.course-categories{background-color:#ebefa580;display:flex;justify-content:space-around;margin-top:-6px}.course-categories button{align-items:center;background-color:initial;border:none;border-radius:20px;color:#37593e;cursor:pointer;display:flex;flex-direction:column;font-family:Pretendard,sans-serif;font-size:12px;font-weight:600;margin:5px;padding:8px 16px;position:relative}.tab-indicator{background:#37593e;border-radius:1.5px;bottom:-5px;height:3px;position:absolute;width:28%}.tab-button{background-color:#fffdf6;border:none;border-radius:32px;box-shadow:1px 1px 5px #0003;color:#37593e;cursor:pointer;font-family:Pretendard,sans-serif;font-size:11px;font-weight:600;line-height:1;margin-right:10px;outline:none;padding:6px 14px}.tab-button:not(:last-child){margin-right:4px}.tab-button:nth-child(2){margin-right:26px}.tab-button.active{background-color:#37593e;color:#fff}.sorting{align-items:center;color:#37593e80;display:flex;font-family:Pretendard,sans-serif;font-size:11px;font-weight:700;margin-right:16px;text-align:center}.sorting-arrow{height:auto;margin-left:5px;width:12px}.active{font-weight:700}.mypage-container{background:#fffdf6;color:#37593e;font-family:Pretendard,sans-serif;padding:20px}.header-section .header-title{word-wrap:break-word;color:#37593e;font-size:20px;font-weight:700;margin-bottom:20px;text-align:left}.actions-section,.profile-section{align-items:center;display:flex;flex-direction:column;width:100%}.profile-image{background:#fff;border-radius:50%;box-shadow:0 4px 2px #00000040;height:86px;width:86px}.profile-info h1{color:#37593e;font-size:20px;font-weight:700}.profile-info p{color:#37593e33;font-size:11px;font-weight:700}.actions-section{display:flex;flex-direction:row;justify-content:space-around;padding:20px 0;width:100%}.action-button{align-items:center;background:none;border:none;color:#37593e;cursor:pointer;display:flex;flex-direction:column;font-size:14px;justify-content:center;margin:10px;text-align:center}.action-icon{height:35px;margin-bottom:5px;width:35px}.action-text{color:#37593e;font-family:Pretendard;font-size:14px;font-weight:600}.links-section{flex-direction:column;width:100%}.link-item,.links-section{align-items:center;display:flex}.link-item{border-bottom:1px solid #37593e33;font-size:18px;justify-content:space-between;padding:20px 0;width:90%}.link-item:last-child{border-bottom:none}.link-item-text{word-wrap:break-word;color:#37593e;font-family:Pretendard,sans-serif;font-size:14px;font-weight:600;text-align:center}.navigation-bar{background:#fffdf6;display:flex;justify-content:space-around;padding:10px 0}.nav-item{align-items:center;color:#ccc;display:flex;flex-direction:column;text-decoration:none}.nav-item.active .nav-icon{fill:#37593e}.nav-dot{background-color:initial;border-radius:50%;height:0;transition:width .3s ease,height .3s ease;width:0}.nav-item.active .nav-dot{background-color:red;height:5px;width:5px}.fixed-button{background:#fff;border-radius:15px;bottom:60px;box-shadow:0 2px 4px #0000001a;color:#37593e;cursor:pointer;font-family:Pretendard;font-size:12px;font-weight:700;left:50%;margin-top:20px;padding:10px 0;position:fixed;text-align:center;transform:translateX(-50%);width:100%;z-index:1002}.body-content{padding-bottom:60px}.input-style,.text-area-style{border:1px solid #37593e33;border-radius:6px;box-shadow:1px 1px 4px #0000001a;margin-bottom:10px;padding:10px;width:100%}.text-area-style{height:100px}.action-buttons{display:flex;justify-content:space-between}.complete-course-button,.modify-course-button{background:#fff;border-radius:15px;box-shadow:0 2px 4px #0000001a;color:#37593e;cursor:pointer;flex:1 1;font-size:12px;margin:5px;padding:10px 0;text-align:center}.input-container{background:#fffdf6;display:flex;justify-content:center;margin-left:16px;margin-right:16px}.button-add,.button-search,.input-field{border:1px solid #fff;box-shadow:1px 1px 5px #0003;margin:5px;padding:4px}.input-field{background:#fff9e4;border:1px solid #fff;border-radius:5px;box-shadow:1px 1px 5px #0003;padding:6px 10px;width:calc(100% - 120px)}.input-field,.input-field::placeholder{color:#37593e}.button-search{background-color:#fff;border:"1px white solid";border-radius:32px;box-shadow:1px 1px 5px #0000001a;color:#37593e;cursor:pointer;font-family:Pretendard,sans-serif;font-size:11px;font-weight:600;height:24px;margin-top:8px;width:86px}.button-add{background:#fff9e4 url(/static/media/course_add_icon.238737ffbd4dfe2259da.svg) no-repeat 50%;border:none;cursor:pointer;height:24px;width:24px}.location-info{border-bottom:1px solid #ccc;padding:10px;text-align:center}.location-item{align-items:center;display:flex;justify-content:center;padding:5px 0}.location-icon{height:24px;margin-right:10px;width:24px}.search-results-container{display:flex;flex-direction:column}.search-result-item{align-items:center;border-bottom:1px solid #ccc;cursor:pointer;display:flex;padding:10px}.place-thumbnail{border-radius:5px;height:50px;margin-right:10px;width:50px}.place-info{flex-grow:1}.place-name{color:#333;font-size:14px}.place-details{color:#666;font-size:12px}.modal-overlay{align-items:center;background-color:#00000080;bottom:0;display:flex;justify-content:center;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:1000}.modal-content{background:#fff;border-radius:10px;box-shadow:0 2px 6px #0000001a;max-height:80vh;max-width:400px;overflow-y:auto;padding:20px;width:90%;z-index:1001} +/*# sourceMappingURL=main.6c39f2a8.css.map*/ \ No newline at end of file diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html new file mode 100644 index 0000000..0cdd3a1 --- /dev/null +++ b/src/main/resources/static/index.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + React App + + + + + + +
+ + diff --git a/src/main/resources/static/js/224.3093597a.chunk.js b/src/main/resources/static/js/224.3093597a.chunk.js new file mode 100644 index 0000000..b6f4f88 --- /dev/null +++ b/src/main/resources/static/js/224.3093597a.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkdatapj=self.webpackChunkdatapj||[]).push([[224],{224:(e,t,s)=>{s.r(t),s.d(t,{default:()=>r});var a=s(43),i=s(216),c=s(956),n=s(19),l=s(744),o=s(579);const r=()=>{const{courseId:e}=(0,i.g)(),t=(0,i.Zp)(),[s,r]=(0,a.useState)(null),[d,m]=(0,a.useState)([]),[u,p]=(0,a.useState)(""),[g,h]=(0,a.useState)(!1);(0,a.useEffect)((()=>{const t=(JSON.parse(localStorage.getItem("courses"))||[]).find((t=>t.id===e)),s=JSON.parse(localStorage.getItem("favoredCourses"))||[];h(s.includes(e)),t?(r(t),m(t.comments||[])):console.error("Course not found")}),[e]);const x=()=>{if(!u.trim())return void alert("\ub313\uae00\uc744 \uc785\ub825\ud558\uc138\uc694");const t=[...d,u.trim()];m(t),p("");const s=JSON.parse(localStorage.getItem("courses")).map((s=>s.id===e?{...s,comments:t}:s));localStorage.setItem("courses",JSON.stringify(s))};return s?(0,o.jsxs)("div",{className:"course-detail-container",children:[s.image&&(0,o.jsx)("img",{src:s.image,alt:"Course",style:{width:"100%",height:"auto"}}),(0,o.jsxs)("div",{className:"course-title-container",children:[(0,o.jsx)("h1",{className:"course-title",children:s.title}),(0,o.jsx)("img",{src:l.A,alt:"Like",onClick:()=>{const t=JSON.parse(localStorage.getItem("favoredCourses"))||[];if(t.includes(e)){const s=t.filter((t=>t!==e));localStorage.setItem("favoredCourses",JSON.stringify(s)),h(!1)}else t.push(e),localStorage.setItem("favoredCourses",JSON.stringify(t)),h(!0)},className:"like-icon ".concat(g?"favored":"")})]}),(0,o.jsxs)("div",{style:{textAlign:"center",padding:"10px",borderBottom:"1px solid #ccc"},children:[s.places.start&&(0,o.jsxs)("div",{className:"location-item",children:[(0,o.jsx)("img",{src:c.A,alt:"Start",style:{marginRight:"10px",width:"24px",height:"24px"}}),s.places.start.name," (\ucd9c\ubc1c\uc9c0)"]}),s.places.waypoint.map(((e,t)=>(0,o.jsxs)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",padding:"5px 0"},children:[e.name," (\uacbd\uc720\uc9c0",t+1,")"]},t))),s.places.destination&&(0,o.jsxs)("div",{className:"location-item",children:[(0,o.jsx)("img",{src:n.A,alt:"Destination",style:{marginRight:"10px",width:"24px",height:"24px"}}),s.places.destination.name," (\ub3c4\ucc29\uc9c0)"]})]}),(0,o.jsx)("button",{className:"view-course-button",onClick:()=>{t("/map",{state:{course:s.places}})},children:"\ucf54\uc2a4\ubcf4\ub7ec\uac00\uae30"}),(0,o.jsx)("p",{children:s.description}),(0,o.jsxs)("div",{className:"comments-section",children:[(0,o.jsx)("h3",{children:"\ub313\uae00"}),d.map(((e,t)=>(0,o.jsx)("p",{children:e},t))),(0,o.jsx)("input",{type:"text",className:"comment-input",value:u,onChange:e=>p(e.target.value),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),x())},placeholder:"\ub313\uae00\uc744 \uc785\ub825\ud558\uc138\uc694"}),(0,o.jsx)("button",{className:"comment-submit-button",onClick:x,children:"\ub313\uae00 \ucd94\uac00"})]})]}):(0,o.jsx)("div",{children:"\ucf54\uc2a4\ub97c \ubd88\ub7ec\uc624\ub294 \uc911..."})}}}]); +//# sourceMappingURL=224.3093597a.chunk.js.map \ No newline at end of file diff --git a/src/main/resources/static/js/453.51079d00.chunk.js b/src/main/resources/static/js/453.51079d00.chunk.js new file mode 100644 index 0000000..5e226cc --- /dev/null +++ b/src/main/resources/static/js/453.51079d00.chunk.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunkdatapj=self.webpackChunkdatapj||[]).push([[453],{453:(e,t,n)=>{n.r(t),n.d(t,{getCLS:()=>y,getFCP:()=>g,getFID:()=>C,getLCP:()=>P,getTTFB:()=>D});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,p=function(){return"hidden"===document.visibilityState?0:1/0},d=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=p(),d(),s((function(){setTimeout((function(){v=p(),d()}),0)}))),{get firstHiddenTime(){return v}}},g=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},p=c("layout-shift",v);p&&(n=m(i,r,t),f((function(){p.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=u("FID"),p=function(e){e.startTimeperformance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]); +//# sourceMappingURL=453.51079d00.chunk.js.map \ No newline at end of file diff --git a/src/main/resources/static/js/main.9ae17e1c.js b/src/main/resources/static/js/main.9ae17e1c.js new file mode 100644 index 0000000..40a1d5d --- /dev/null +++ b/src/main/resources/static/js/main.9ae17e1c.js @@ -0,0 +1,3 @@ +/*! For license information please see main.9ae17e1c.js.LICENSE.txt */ +(()=>{var e={956:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});n(43);const r=n.p+"static/media/course_arrbike_icon.248d8d83490733b864d626fbbe77d384.svg"},19:(e,t,n)=>{"use strict";n.d(t,{A:()=>r});n(43);const r=n.p+"static/media/course_destbike_icon.bfc3e6a6046074c96899305700baaac2.svg"},744:(e,t,n)=>{"use strict";n.d(t,{A:()=>s,h:()=>u});var r,a,i=n(43);function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;td,B6:()=>_,Gh:()=>N,HS:()=>z,Oi:()=>l,Rr:()=>f,pX:()=>A,pb:()=>j,rc:()=>a,tH:()=>F,ue:()=>m,yD:()=>T,zR:()=>o}),function(e){e.Pop="POP",e.Push="PUSH",e.Replace="REPLACE"}(a||(a={}));const i="popstate";function o(e){return void 0===e&&(e={}),p((function(e,t){let{pathname:n,search:r,hash:a}=e.location;return c("",{pathname:n,search:r,hash:a},t.state&&t.state.usr||null,t.state&&t.state.key||"default")}),(function(e,t){return"string"===typeof t?t:d(t)}),null,e)}function l(e,t){if(!1===e||null===e||"undefined"===typeof e)throw new Error(t)}function u(e,t){if(!e){"undefined"!==typeof console&&console.warn(t);try{throw new Error(t)}catch(n){}}}function s(e,t){return{usr:e.state,key:e.key,idx:t}}function c(e,t,n,a){return void 0===n&&(n=null),r({pathname:"string"===typeof e?e:e.pathname,search:"",hash:""},"string"===typeof t?f(t):t,{state:n,key:t&&t.key||a||Math.random().toString(36).substr(2,8)})}function d(e){let{pathname:t="/",search:n="",hash:r=""}=e;return n&&"?"!==n&&(t+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(t+="#"===r.charAt(0)?r:"#"+r),t}function f(e){let t={};if(e){let n=e.indexOf("#");n>=0&&(t.hash=e.substr(n),e=e.substr(0,n));let r=e.indexOf("?");r>=0&&(t.search=e.substr(r),e=e.substr(0,r)),e&&(t.pathname=e)}return t}function p(e,t,n,o){void 0===o&&(o={});let{window:u=document.defaultView,v5Compat:f=!1}=o,p=u.history,h=a.Pop,m=null,v=g();function g(){return(p.state||{idx:null}).idx}function y(){h=a.Pop;let e=g(),t=null==e?null:e-v;v=e,m&&m({action:h,location:w.location,delta:t})}function b(e){let t="null"!==u.location.origin?u.location.origin:u.location.href,n="string"===typeof e?e:d(e);return n=n.replace(/ $/,"%20"),l(t,"No window.location.(origin|href) available to create URL for href: "+n),new URL(n,t)}null==v&&(v=0,p.replaceState(r({},p.state,{idx:v}),""));let w={get action(){return h},get location(){return e(u,p)},listen(e){if(m)throw new Error("A history only accepts one active listener");return u.addEventListener(i,y),m=e,()=>{u.removeEventListener(i,y),m=null}},createHref:e=>t(u,e),createURL:b,encodeLocation(e){let t=b(e);return{pathname:t.pathname,search:t.search,hash:t.hash}},push:function(e,t){h=a.Push;let r=c(w.location,e,t);n&&n(r,e),v=g()+1;let i=s(r,v),o=w.createHref(r);try{p.pushState(i,"",o)}catch(l){if(l instanceof DOMException&&"DataCloneError"===l.name)throw l;u.location.assign(o)}f&&m&&m({action:h,location:w.location,delta:1})},replace:function(e,t){h=a.Replace;let r=c(w.location,e,t);n&&n(r,e),v=g();let i=s(r,v),o=w.createHref(r);p.replaceState(i,"",o),f&&m&&m({action:h,location:w.location,delta:0})},go:e=>p.go(e)};return w}var h;!function(e){e.data="data",e.deferred="deferred",e.redirect="redirect",e.error="error"}(h||(h={}));new Set(["lazy","caseSensitive","path","id","index","children"]);function m(e,t,n){void 0===n&&(n="/");let r=j(("string"===typeof t?f(t):t).pathname||"/",n);if(null==r)return null;let a=v(e);!function(e){e.sort(((e,t)=>e.score!==t.score?t.score-e.score:function(e,t){let n=e.length===t.length&&e.slice(0,-1).every(((e,n)=>e===t[n]));return n?e[e.length-1]-t[t.length-1]:0}(e.routesMeta.map((e=>e.childrenIndex)),t.routesMeta.map((e=>e.childrenIndex)))))}(a);let i=null;for(let o=0;null==i&&o{let o={relativePath:void 0===i?e.path||"":i,caseSensitive:!0===e.caseSensitive,childrenIndex:a,route:e};o.relativePath.startsWith("/")&&(l(o.relativePath.startsWith(r),'Absolute route path "'+o.relativePath+'" nested under path "'+r+'" is not valid. An absolute child route path must start with the combined path of all its parent routes.'),o.relativePath=o.relativePath.slice(r.length));let u=z([r,o.relativePath]),s=n.concat(o);e.children&&e.children.length>0&&(l(!0!==e.index,'Index routes must not have child routes. Please remove all child routes from route path "'+u+'".'),v(e.children,t,s,u)),(null!=e.path||e.index)&&t.push({path:u,score:E(u,e.index),routesMeta:s})};return e.forEach(((e,t)=>{var n;if(""!==e.path&&null!=(n=e.path)&&n.includes("?"))for(let r of g(e.path))a(e,t,r);else a(e,t)})),t}function g(e){let t=e.split("/");if(0===t.length)return[];let[n,...r]=t,a=n.endsWith("?"),i=n.replace(/\?$/,"");if(0===r.length)return a?[i,""]:[i];let o=g(r.join("/")),l=[];return l.push(...o.map((e=>""===e?i:[i,e].join("/")))),a&&l.push(...o),l.map((t=>e.startsWith("/")&&""===t?"/":t))}const y=/^:[\w-]+$/,b=3,w=2,S=1,k=10,x=-2,C=e=>"*"===e;function E(e,t){let n=e.split("/"),r=n.length;return n.some(C)&&(r+=x),t&&(r+=w),n.filter((e=>!C(e))).reduce(((e,t)=>e+(y.test(t)?b:""===t?S:k)),r)}function L(e,t){let{routesMeta:n}=e,r={},a="/",i=[];for(let o=0;o(r.push({paramName:t,isOptional:null!=n}),n?"/?([^\\/]+)?":"/([^\\/]+)")));e.endsWith("*")?(r.push({paramName:"*"}),a+="*"===e||"/*"===e?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?a+="\\/*$":""!==e&&"/"!==e&&(a+="(?:(?=\\/|$))");let i=new RegExp(a,t?void 0:"i");return[i,r]}(e.path,e.caseSensitive,e.end),a=t.match(n);if(!a)return null;let i=a[0],o=i.replace(/(.)\/+$/,"$1"),l=a.slice(1);return{params:r.reduce(((e,t,n)=>{let{paramName:r,isOptional:a}=t;if("*"===r){let e=l[n]||"";o=i.slice(0,i.length-e.length).replace(/(.)\/+$/,"$1")}const u=l[n];return e[r]=a&&!u?void 0:(u||"").replace(/%2F/g,"/"),e}),{}),pathname:i,pathnameBase:o,pattern:e}}function O(e){try{return e.split("/").map((e=>decodeURIComponent(e).replace(/\//g,"%2F"))).join("/")}catch(t){return u(!1,'The URL path "'+e+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent encoding ('+t+")."),e}}function j(e,t){if("/"===t)return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let n=t.endsWith("/")?t.length-1:t.length,r=e.charAt(n);return r&&"/"!==r?null:e.slice(n)||"/"}function P(e,t,n,r){return"Cannot include a '"+e+"' character in a manually specified `to."+t+"` field ["+JSON.stringify(r)+"]. Please separate it out to the `to."+n+'` field. Alternatively you may provide the full path as a string in and the router will parse it for you.'}function M(e){return e.filter(((e,t)=>0===t||e.route.path&&e.route.path.length>0))}function T(e,t){let n=M(e);return t?n.map(((t,n)=>n===e.length-1?t.pathname:t.pathnameBase)):n.map((e=>e.pathnameBase))}function N(e,t,n,a){let i;void 0===a&&(a=!1),"string"===typeof e?i=f(e):(i=r({},e),l(!i.pathname||!i.pathname.includes("?"),P("?","pathname","search",i)),l(!i.pathname||!i.pathname.includes("#"),P("#","pathname","hash",i)),l(!i.search||!i.search.includes("#"),P("#","search","hash",i)));let o,u=""===e||""===i.pathname,s=u?"/":i.pathname;if(null==s)o=n;else{let e=t.length-1;if(!a&&s.startsWith("..")){let t=s.split("/");for(;".."===t[0];)t.shift(),e-=1;i.pathname=t.join("/")}o=e>=0?t[e]:"/"}let c=function(e,t){void 0===t&&(t="/");let{pathname:n,search:r="",hash:a=""}="string"===typeof e?f(e):e,i=n?n.startsWith("/")?n:function(e,t){let n=t.replace(/\/+$/,"").split("/");return e.split("/").forEach((e=>{".."===e?n.length>1&&n.pop():"."!==e&&n.push(e)})),n.length>1?n.join("/"):"/"}(n,t):t;return{pathname:i,search:D(r),hash:I(a)}}(i,o),d=s&&"/"!==s&&s.endsWith("/"),p=(u||"."===s)&&n.endsWith("/");return c.pathname.endsWith("/")||!d&&!p||(c.pathname+="/"),c}const z=e=>e.join("/").replace(/\/\/+/g,"/"),R=e=>e.replace(/\/+$/,"").replace(/^\/*/,"/"),D=e=>e&&"?"!==e?e.startsWith("?")?e:"?"+e:"",I=e=>e&&"#"!==e?e.startsWith("#")?e:"#"+e:"";class F extends Error{}function A(e){return null!=e&&"number"===typeof e.status&&"string"===typeof e.statusText&&"boolean"===typeof e.internal&&"data"in e}const H=["post","put","patch","delete"],U=(new Set(H),["get",...H]);new Set(U),new Set([301,302,303,307,308]),new Set([307,308]);Symbol("deferred")},811:(e,t,n)=>{var r=n(347),a=n(303).each;function i(e,t){this.query=e,this.isUnconditional=t,this.handlers=[],this.mql=window.matchMedia(e);var n=this;this.listener=function(e){n.mql=e.currentTarget||e,n.assess()},this.mql.addListener(this.listener)}i.prototype={constuctor:i,addHandler:function(e){var t=new r(e);this.handlers.push(t),this.matches()&&t.on()},removeHandler:function(e){var t=this.handlers;a(t,(function(n,r){if(n.equals(e))return n.destroy(),!t.splice(r,1)}))},matches:function(){return this.mql.matches||this.isUnconditional},clear:function(){a(this.handlers,(function(e){e.destroy()})),this.mql.removeListener(this.listener),this.handlers.length=0},assess:function(){var e=this.matches()?"on":"off";a(this.handlers,(function(t){t[e]()}))}},e.exports=i},537:(e,t,n)=>{var r=n(811),a=n(303),i=a.each,o=a.isFunction,l=a.isArray;function u(){if(!window.matchMedia)throw new Error("matchMedia not present, legacy browsers require a polyfill");this.queries={},this.browserIsIncapable=!window.matchMedia("only all").matches}u.prototype={constructor:u,register:function(e,t,n){var a=this.queries,u=n&&this.browserIsIncapable;return a[e]||(a[e]=new r(e,u)),o(t)&&(t={match:t}),l(t)||(t=[t]),i(t,(function(t){o(t)&&(t={match:t}),a[e].addHandler(t)})),this},unregister:function(e,t){var n=this.queries[e];return n&&(t?n.removeHandler(t):(n.clear(),delete this.queries[e])),this}},e.exports=u},347:e=>{function t(e){this.options=e,!e.deferSetup&&this.setup()}t.prototype={constructor:t,setup:function(){this.options.setup&&this.options.setup(),this.initialised=!0},on:function(){!this.initialised&&this.setup(),this.options.match&&this.options.match()},off:function(){this.options.unmatch&&this.options.unmatch()},destroy:function(){this.options.destroy?this.options.destroy():this.off()},equals:function(e){return this.options===e||this.options.match===e}},e.exports=t},303:e=>{e.exports={isFunction:function(e){return"function"===typeof e},isArray:function(e){return"[object Array]"===Object.prototype.toString.apply(e)},each:function(e,t){for(var n=0,r=e.length;n{var r=n(537);e.exports=new r},270:(e,t,n)=>{var r=n(475),a=function(e){var t="",n=Object.keys(e);return n.forEach((function(a,i){var o=e[a];(function(e){return/[height|width]$/.test(e)})(a=r(a))&&"number"===typeof o&&(o+="px"),t+=!0===o?a:!1===o?"not "+a:"("+a+": "+o+")",i{var r=NaN,a="[object Symbol]",i=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,l=/^0b[01]+$/i,u=/^0o[0-7]+$/i,s=parseInt,c="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g,d="object"==typeof self&&self&&self.Object===Object&&self,f=c||d||Function("return this")(),p=Object.prototype.toString,h=Math.max,m=Math.min,v=function(){return f.Date.now()};function g(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function y(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&p.call(e)==a}(e))return r;if(g(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=g(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(i,"");var n=l.test(e);return n||u.test(e)?s(e.slice(2),n?2:8):o.test(e)?r:+e}e.exports=function(e,t,n){var r,a,i,o,l,u,s=0,c=!1,d=!1,f=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function p(t){var n=r,i=a;return r=a=void 0,s=t,o=e.apply(i,n)}function b(e){var n=e-u;return void 0===u||n>=t||n<0||d&&e-s>=i}function w(){var e=v();if(b(e))return S(e);l=setTimeout(w,function(e){var n=t-(e-u);return d?m(n,i-(e-s)):n}(e))}function S(e){return l=void 0,f&&r?p(e):(r=a=void 0,o)}function k(){var e=v(),n=b(e);if(r=arguments,a=this,u=e,n){if(void 0===l)return function(e){return s=e,l=setTimeout(w,t),c?p(e):o}(u);if(d)return l=setTimeout(w,t),p(u)}return void 0===l&&(l=setTimeout(w,t)),o}return t=y(t)||0,g(n)&&(c=!!n.leading,i=(d="maxWait"in n)?h(y(n.maxWait)||0,t):i,f="trailing"in n?!!n.trailing:f),k.cancel=function(){void 0!==l&&clearTimeout(l),s=0,r=u=a=l=void 0},k.flush=function(){return void 0===l?o:S(v())},k}},730:(e,t,n)=>{"use strict";var r=n(43),a=n(853);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n