diff --git a/app/Http/Controllers/Admin/IndexController.php b/app/Http/Controllers/Admin/IndexController.php index 21ec45f..542afe3 100644 --- a/app/Http/Controllers/Admin/IndexController.php +++ b/app/Http/Controllers/Admin/IndexController.php @@ -2,18 +2,17 @@ namespace App\Http\Controllers\Admin; +use App\Http\Controllers\Controller; use App\Models\Server; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Cache; -use App\Http\Controllers\Controller; class IndexController extends Controller { public function index(Request $request) { // if not login, redirect to login - if (! Auth::guard('admin')->check()) { + if (!Auth::guard('admin')->check()) { return view('admin.login'); } else { $servers = Server::where('status', '!=', 'up')->get(); @@ -27,7 +26,8 @@ public function login(Request $request) // attempt to login if (Auth::guard('admin')->attempt($request->only(['email', 'password']), $request->has('remember'))) { // if success, redirect to home - return redirect()->intended('/'); +// return redirect()->intended('admin.index'); + return redirect()->route('admin.index'); } else { // if fail, redirect to login with error message return redirect()->back()->withErrors(['message' => '用户名或密码错误'])->withInput(); diff --git a/app/Http/Controllers/Admin/ServerController.php b/app/Http/Controllers/Admin/ServerController.php index 89f1bff..20c97cf 100644 --- a/app/Http/Controllers/Admin/ServerController.php +++ b/app/Http/Controllers/Admin/ServerController.php @@ -2,17 +2,17 @@ namespace App\Http\Controllers\Admin; -use App\Support\Frp; -use App\Models\Server; -use Illuminate\View\View; -use App\Jobs\ServerCheckJob; -use Illuminate\Http\Request; -use Illuminate\Validation\Rule; -use Illuminate\Support\Facades\Log; use App\Http\Controllers\Controller; -use Illuminate\Http\RedirectResponse; -use Illuminate\Support\Facades\Cache; +use App\Jobs\ServerCheckJob; +use App\Models\Server; +use App\Support\Frp; use GuzzleHttp\Exception\RequestException; +use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\Log; +use Illuminate\Validation\Rule; +use Illuminate\View\View; class ServerController extends Controller { @@ -30,20 +30,10 @@ public function index() return view('admin.servers.index', compact('servers')); } - /** - * Show the form for creating a new resource. - * - * @return View - */ - public function create() - { - return view('admin.servers.create'); - } - /** * Store a newly created resource in storage. * - * @param \Illuminate\Http\Request $request + * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) @@ -67,78 +57,6 @@ public function store(Request $request) return redirect()->route('admin.servers.edit', $server); } - /** - * Display the specified resource. - * - * @param Server $server - * @return RedirectResponse|View - */ - public function show(Server $server) - { - try { - $serverInfo = (object) (new Frp($server))->serverInfo(); - } catch (RequestException $e) { - Log::error($e->getMessage()); - - return redirect()->route('admin.servers.index')->with('error', '服务器连接失败。'); - } - - return view('admin.servers.show', compact('server')); - } - - /** - * Show the form for editing the specified resource. - * - * @param Server $server - * @return View - */ - public function edit(Server $server) - { - $serverInfo = (object) (new Frp($server))->serverInfo(); - - return view('admin.servers.edit', compact('server', 'serverInfo')); - } - - /** - * Update the specified resource in storage. - * - * @param \Illuminate\Http\Request $request - * @param Server $server - * @return RedirectResponse - */ - public function update(Request $request, Server $server) - { - if (! $request->has('status')) { - $request->merge(['allow_http' => $request->has('allow_http') ? true : false]); - $request->merge(['allow_https' => $request->has('allow_https') ? true : false]); - $request->merge(['allow_tcp' => $request->has('allow_tcp') ? true : false]); - $request->merge(['allow_udp' => $request->has('allow_udp') ? true : false]); - $request->merge(['allow_stcp' => $request->has('allow_stcp') ? true : false]); - $request->merge(['allow_xtcp' => $request->has('allow_xtcp') ? true : false]); - $request->merge(['allow_sudp' => $request->has('allow_sudp') ? true : false]); - $request->merge(['is_china_mainland' => $request->has('is_china_mainland') ? true : false]); - } - - $data = $request->all(); - - $server->update($data); - - return redirect()->route('admin.servers.index')->with('success', '服务器成功更新。'); - } - - /** - * Remove the specified resource from storage. - * - * @param Server $server - * @return RedirectResponse - */ - public function destroy(Server $server) - { - $server->delete(); - - return redirect()->route('admin.servers.index')->with('success', '服务器成功删除。'); - } - public function rules($id = null) { return [ @@ -165,6 +83,88 @@ public function rules($id = null) ]; } + /** + * Show the form for creating a new resource. + * + * @return View + */ + public function create() + { + return view('admin.servers.create'); + } + + /** + * Display the specified resource. + * + * @param Server $server + * @return RedirectResponse|View + */ + public function show(Server $server) + { + try { + $serverInfo = (object)(new Frp($server))->serverInfo(); + } catch (RequestException $e) { + Log::error($e->getMessage()); + + return redirect()->route('admin.servers.index')->with('error', '服务器连接失败。'); + } + + return view('admin.servers.show', compact('server')); + } + + /** + * Show the form for editing the specified resource. + * + * @param Server $server + * @return View + */ + public function edit(Server $server) + { + $serverInfo = (object)(new Frp($server))->serverInfo(); + + return view('admin.servers.edit', compact('server', 'serverInfo')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param Server $server + * @return RedirectResponse + */ + public function update(Request $request, Server $server) + { + if (!$request->has('status')) { + $request->merge(['allow_http' => $request->has('allow_http') ? true : false]); + $request->merge(['allow_https' => $request->has('allow_https') ? true : false]); + $request->merge(['allow_tcp' => $request->has('allow_tcp') ? true : false]); + $request->merge(['allow_udp' => $request->has('allow_udp') ? true : false]); + $request->merge(['allow_stcp' => $request->has('allow_stcp') ? true : false]); + $request->merge(['allow_xtcp' => $request->has('allow_xtcp') ? true : false]); + $request->merge(['allow_sudp' => $request->has('allow_sudp') ? true : false]); + $request->merge(['is_china_mainland' => $request->has('is_china_mainland') ? true : false]); + } + + $data = $request->all(); + + $server->update($data); + + return redirect()->route('admin.servers.index')->with('success', '服务器成功更新。'); + } + + /** + * Remove the specified resource from storage. + * + * @param Server $server + * @return RedirectResponse + */ + public function destroy(Server $server) + { + $server->delete(); + + return redirect()->route('admin.servers.index')->with('success', '服务器成功删除。'); + } + public function checkServer($id = null) { if (is_null($id)) { @@ -228,11 +228,11 @@ public function scanTunnel($server_id) private function cacheProxies($proxies) { foreach ($proxies as $proxy) { - if (! isset($proxy['name'])) { + if (!isset($proxy['name'])) { continue; } - $cache_key = 'frpTunnel_data_'.$proxy['name']; + $cache_key = 'frpTunnel_data_' . $proxy['name']; Cache::put($cache_key, $proxy, 86400); } @@ -240,7 +240,7 @@ private function cacheProxies($proxies) public function getTunnel($name) { - $cache_key = 'frpTunnel_data_'.$name; + $cache_key = 'frpTunnel_data_' . $name; return Cache::get($cache_key); } diff --git a/app/Http/Controllers/Admin/TunnelController.php b/app/Http/Controllers/Admin/TunnelController.php index 575fa1b..1cc296e 100644 --- a/app/Http/Controllers/Admin/TunnelController.php +++ b/app/Http/Controllers/Admin/TunnelController.php @@ -2,12 +2,12 @@ namespace App\Http\Controllers\Admin; -use App\Models\Tunnel; -use Illuminate\View\View; -use Illuminate\Support\Str; -use Illuminate\Http\Request; use App\Http\Controllers\Controller; +use App\Models\Tunnel; use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\Support\Str; +use Illuminate\View\View; class TunnelController extends Controller { @@ -31,7 +31,7 @@ public function index(Request $request) } if ($request->{$key}) { - $hosts = $hosts->where($key, 'LIKE', '%'.$value.'%'); + $hosts = $hosts->where($key, 'LIKE', '%' . $value . '%'); } } @@ -45,7 +45,7 @@ public function index(Request $request) /** * Display the specified resource. * - * @param Tunnel $tunnel + * @param Tunnel $tunnel * @return View */ public function show(Tunnel $tunnel) @@ -58,8 +58,8 @@ public function show(Tunnel $tunnel) /** * Update the specified resource in storage. * - * @param \Illuminate\Http\Request $request - * @param Tunnel $tunnel + * @param \Illuminate\Http\Request $request + * @param Tunnel $tunnel * @return RedirectResponse */ public function update(Request $request, Tunnel $tunnel) @@ -76,7 +76,7 @@ public function update(Request $request, Tunnel $tunnel) /** * Remove the specified resource from storage. * - * @param Tunnel $host + * @param Tunnel $host * @return RedirectResponse */ public function destroy(Tunnel $host) diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 737fbc0..9913bb3 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -2,11 +2,11 @@ namespace App\Http\Controllers\Admin; -use App\Models\User; -use Illuminate\View\View; -use Illuminate\Http\Request; use App\Http\Controllers\Controller; +use App\Models\User; use Illuminate\Http\RedirectResponse; +use Illuminate\Http\Request; +use Illuminate\View\View; class UserController extends Controller { @@ -25,7 +25,7 @@ public function index(Request $request) continue; } if ($request->{$key}) { - $users = $users->where($key, 'LIKE', '%'.$value.'%'); + $users = $users->where($key, 'LIKE', '%' . $value . '%'); } } @@ -54,7 +54,7 @@ public function update(Request $request, User $user) /** * Remove the specified resource from storage. * - * @param User $user + * @param User $user * @return RedirectResponse */ public function destroy(User $user) diff --git a/app/Http/Controllers/Api/TicketController.php b/app/Http/Controllers/Api/TicketController.php index d6eed24..a5970d0 100644 --- a/app/Http/Controllers/Api/TicketController.php +++ b/app/Http/Controllers/Api/TicketController.php @@ -2,13 +2,14 @@ namespace App\Http\Controllers\Api; +use App\Http\Controllers\Controller; use App\Support\WHMCS; use Illuminate\Http\Request; -use App\Http\Controllers\Controller; class TicketController extends Controller { - public function submit(Request $request, string $provider) { + public function submit(Request $request, string $provider) + { $request->validate([ 'title' => 'required', 'content' => 'required', diff --git a/app/Http/Controllers/Api/TrafficController.php b/app/Http/Controllers/Api/TrafficController.php index 6a2a292..567dea3 100644 --- a/app/Http/Controllers/Api/TrafficController.php +++ b/app/Http/Controllers/Api/TrafficController.php @@ -4,8 +4,8 @@ use App\Http\Controllers\Controller; use App\Support\WHMCS; -use Illuminate\Support\Facades\Cache; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Cache; class TrafficController extends Controller @@ -87,7 +87,6 @@ public function charge(Request $request, string $provider) } - } diff --git a/app/Http/Controllers/Api/TunnelController.php b/app/Http/Controllers/Api/TunnelController.php index 055f743..4cacfc0 100644 --- a/app/Http/Controllers/Api/TunnelController.php +++ b/app/Http/Controllers/Api/TunnelController.php @@ -2,14 +2,13 @@ namespace App\Http\Controllers\Api; -use App\Models\Server; -use App\Models\Tunnel; -use Illuminate\Support\Str; -use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Http\Requests\TunnelRequest; +use App\Models\Server; +use App\Models\Tunnel; use App\Support\Frp; -use Illuminate\Support\Facades\Cache; +use Illuminate\Http\Request; +use Illuminate\Support\Str; class TunnelController extends Controller { @@ -176,7 +175,8 @@ public function show(TunnelRequest $tunnelRequest, Tunnel $tunnel) return $this->success($tunnel); } - public function close(TunnelRequest $tunnelRequest, Tunnel $tunnel) { + public function close(TunnelRequest $tunnelRequest, Tunnel $tunnel) + { unset($tunnelRequest); $tunnel->close(); return $this->noContent(); diff --git a/app/Http/Controllers/Api/UserController.php b/app/Http/Controllers/Api/UserController.php index 93e0f45..acd2ae4 100644 --- a/app/Http/Controllers/Api/UserController.php +++ b/app/Http/Controllers/Api/UserController.php @@ -7,11 +7,6 @@ class UserController extends Controller { - public function user(Request $request) - { - return $this->success($request->user('sanctum')); - } - public function create(Request $request) { $name = date('Y-m-d H:i:s'); @@ -22,6 +17,11 @@ public function create(Request $request) ]); } + public function user(Request $request) + { + return $this->success($request->user('sanctum')); + } + public function deleteAll(Request $request) { $request->user()->tokens()->delete(); diff --git a/app/Http/Controllers/Application/UserController.php b/app/Http/Controllers/Application/UserController.php index 7280472..af4e104 100644 --- a/app/Http/Controllers/Application/UserController.php +++ b/app/Http/Controllers/Application/UserController.php @@ -2,9 +2,9 @@ namespace App\Http\Controllers\Application; +use App\Http\Controllers\Controller; use App\Models\User; use Illuminate\Http\Request; -use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Cache; class UserController extends Controller @@ -33,14 +33,6 @@ public function show(User $user) // } - /** - * Update the specified resource in storage. - */ - public function update(Request $request, User $user) - { - // - } - /** * Remove the specified resource from storage. */ @@ -67,4 +59,12 @@ public function addTraffic(Request $request, User $user) 'message' => 'success', ]); } + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, User $user) + { + // + } } diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 219ae14..531f850 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -48,6 +48,7 @@ public function callback(Request $request): RedirectResponse 'redirect_uri' => config('oauth.callback_uri'), 'code' => $request->input('code'), ], +// 'verify' => false, ])->getBody(); } catch (GuzzleException $e) { } @@ -59,6 +60,7 @@ public function callback(Request $request): RedirectResponse 'Accept' => 'application/json', 'Authorization' => 'Bearer ' . $authorize->access_token, ], +// 'verify' => false ])->getBody(); } catch (GuzzleException $e) { } diff --git a/app/Support/WHMCS.php b/app/Support/WHMCS.php index 5329335..b66c46a 100644 --- a/app/Support/WHMCS.php +++ b/app/Support/WHMCS.php @@ -68,11 +68,19 @@ private function request($action, $params = []): ?array ], $params); - $http = Http::asForm()->post($this->url . '/includes/api.php', $params)->throw(); - - $response = $http->body(); - $json = $http->json(); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $this->url . '/includes/api.php'); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt( + $ch, + CURLOPT_POSTFIELDS, + http_build_query($params) + ); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $response = curl_exec($ch); + curl_close($ch); + $json = json_decode($response, true); if (is_null($json)) { Log::error('WHMCS response is not valid JSON', [$response]); diff --git a/composer.json b/composer.json index 24e15c0..b3fff0b 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,8 @@ "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^10.0", "laravel/sanctum": "^3.2", - "laravel/tinker": "^2.8" + "laravel/tinker": "^2.8", + "twbs/bootstrap": "5.3.0" }, "require-dev": { "fakerphp/faker": "^1.9.1", diff --git a/composer.lock b/composer.lock index 2122151..790d8a2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "38e7ef326635a7b2292aab6f0e872fbe", + "content-hash": "f39ffd8da21666501191e102ff07ba3d", "packages": [ { "name": "brick/math", @@ -5191,6 +5191,62 @@ }, "time": "2023-01-03T09:29:04+00:00" }, + { + "name": "twbs/bootstrap", + "version": "v5.3.0", + "source": { + "type": "git", + "url": "https://github.com/twbs/bootstrap.git", + "reference": "60098ac499d30aa50575b0b7137391c06ef25429" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twbs/bootstrap/zipball/60098ac499d30aa50575b0b7137391c06ef25429", + "reference": "60098ac499d30aa50575b0b7137391c06ef25429", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "replace": { + "twitter/bootstrap": "self.version" + }, + "type": "library", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Otto", + "email": "markdotto@gmail.com" + }, + { + "name": "Jacob Thornton", + "email": "jacobthornton@gmail.com" + } + ], + "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", + "homepage": "https://getbootstrap.com/", + "keywords": [ + "JS", + "css", + "framework", + "front-end", + "mobile-first", + "responsive", + "sass", + "web" + ], + "support": { + "issues": "https://github.com/twbs/bootstrap/issues", + "source": "https://github.com/twbs/bootstrap/tree/v5.3.0" + }, + "time": "2023-05-30T15:15:55+00:00" + }, { "name": "vlucas/phpdotenv", "version": "v5.5.0", diff --git a/config/app.php b/config/app.php index 39926f1..754cde8 100644 --- a/config/app.php +++ b/config/app.php @@ -85,7 +85,7 @@ | */ - 'locale' => 'en', + 'locale' => 'zh', /* |-------------------------------------------------------------------------- diff --git a/public/build/assets/Charge-3c0346d5.js b/public/build/assets/Charge-742f0fb0.js similarity index 96% rename from public/build/assets/Charge-3c0346d5.js rename to public/build/assets/Charge-742f0fb0.js index 3f67014..1cabbfc 100644 --- a/public/build/assets/Charge-3c0346d5.js +++ b/public/build/assets/Charge-742f0fb0.js @@ -1 +1 @@ -import{r as l,o as t,c as o,a as e,t as v,j as y,v as w,F as b,e as C,b as p,g as f,l as B}from"./app-426d2bdb.js";import{i as m}from"./http-419d7b2b.js";const G=e("div",null,[e("h3",null,"流量充值")],-1),N=e("h5",null,"您要充值多少元的流量?",-1),T=f(" 每 GB 价格: "),U=f(" 元。 "),D={class:"input-group mb-3"},F=e("div",{class:"input-group-append"},[e("span",{class:"input-group-text"},"GB")],-1),M={key:0},j=f("大约 "),E=["textContent"],L=f(" 元。"),P={key:0},R=e("h5",{class:"mt-3"},"您将要使用哪个平台充值?",-1),S=e("p",null,"如果您在选中的平台没有账号,我们将会帮您自动创建一个。",-1),q={class:"form-group form-check"},z=["id","value"],A=["textContent","for"],H={key:1},I=e("h5",{class:"mt-3"},"暂时没有可用的",-1),J=[I],K={key:2},O=e("h5",{class:"mt-3"},"让我们来选择支付方式。",-1),Q=e("p",null,"在支付后,您的流量大概需要数秒钟到账。",-1),W={class:"form-group form-check"},X=["id","value"],Y=["textContent","for"],Z={key:3},$=["textContent","disabled"],ee={key:0},te={key:1,class:"mt-3"},oe=e("h5",null,"完成",-1),ne=e("p",null,"如果您浏览器没有打开新的创建,请点击以下链接来打开。",-1),se=["href"],ie={name:"Charge",setup(le){const g=l(0),u=l([]),i=l(""),r=l({}),d=l(""),c=l(10),h=l(""),_=l(!1);m.get("price").then(s=>{g.value=s.data.price_per_gb}),m.get("providers").then(s=>{u.value=s.data,u.value.length>0&&(i.value=u.value[0],x())});function x(){m.get("providers/"+i.value+"/payments").then(s=>{r.value=s.data,r.value.length>0&&(d.value=r.value[0].name)})}function V(){_.value=!0,m.post("providers/"+i.value+"/charge",{payment:d.value,traffic:c.value}).then(s=>{h.value=s.data.redirect_url,setTimeout(()=>{window.open(h.value,"_blank")})}).finally(()=>{_.value=!1})}return(s,a)=>(t(),o(b,null,[G,e("div",null,[N,e("p",null,[T,e("span",null,v(g.value),1),U]),e("div",D,[y(e("input",{autofocus:"",type:"number",class:"form-control",placeholder:"输入您要的流量 (单位: GB)","onUpdate:modelValue":a[0]||(a[0]=n=>c.value=n)},null,512),[[w,c.value]]),F]),c.value?(t(),o("div",M,[e("p",null,[j,e("span",{textContent:v(c.value*g.value)},null,8,E),L]),u.value?(t(),o("div",P,[R,S,(t(!0),o(b,null,C(u.value,n=>(t(),o("div",q,[y(e("input",{type:"radio",class:"form-check-input",name:"provider",id:"providers_"+n,value:n,"onUpdate:modelValue":a[1]||(a[1]=k=>i.value=k),onChange:x},null,40,z),[[B,i.value,void 0,{value:!0}]]),e("label",{textContent:v(n),class:"form-check-label",for:"providers_"+n},null,8,A)]))),256))])):(t(),o("div",H,J)),r.value?(t(),o("div",K,[O,Q,(t(!0),o(b,null,C(r.value,n=>(t(),o("div",W,[y(e("input",{type:"radio",class:"form-check-input",name:"payment",id:"payments_"+n.name,"onUpdate:modelValue":a[2]||(a[2]=k=>d.value=k),value:n.name},null,8,X),[[B,d.value]]),e("label",{textContent:v(n.title),class:"form-check-label",for:"payments_"+n.name},null,8,Y)]))),256))])):p("",!0),d.value?(t(),o("div",Z,[e("button",{class:"btn btn-primary mt-3",onClick:V,textContent:v(_.value?"请稍后":"立即支付"),disabled:_.value},null,8,$)])):p("",!0)])):p("",!0)]),_.value?(t(),o("p",ee,"正在创建订单...")):p("",!0),h.value?(t(),o("div",te,[oe,ne,e("a",{href:h.value,class:"link",target:"_blank"},"支付",8,se)])):p("",!0)],64))}};export{ie as default}; +import{r as l,o as t,c as o,a as e,t as v,j as y,v as w,F as b,e as C,b as p,g as f,l as B}from"./app-b63b1aed.js";import{i as m}from"./http-eca01039.js";const G=e("div",null,[e("h3",null,"流量充值")],-1),N=e("h5",null,"您要充值多少元的流量?",-1),T=f(" 每 GB 价格: "),U=f(" 元。 "),D={class:"input-group mb-3"},F=e("div",{class:"input-group-append"},[e("span",{class:"input-group-text"},"GB")],-1),M={key:0},j=f("大约 "),E=["textContent"],L=f(" 元。"),P={key:0},R=e("h5",{class:"mt-3"},"您将要使用哪个平台充值?",-1),S=e("p",null,"如果您在选中的平台没有账号,我们将会帮您自动创建一个。",-1),q={class:"form-group form-check"},z=["id","value"],A=["textContent","for"],H={key:1},I=e("h5",{class:"mt-3"},"暂时没有可用的",-1),J=[I],K={key:2},O=e("h5",{class:"mt-3"},"让我们来选择支付方式。",-1),Q=e("p",null,"在支付后,您的流量大概需要数秒钟到账。",-1),W={class:"form-group form-check"},X=["id","value"],Y=["textContent","for"],Z={key:3},$=["textContent","disabled"],ee={key:0},te={key:1,class:"mt-3"},oe=e("h5",null,"完成",-1),ne=e("p",null,"如果您浏览器没有打开新的创建,请点击以下链接来打开。",-1),se=["href"],ie={name:"Charge",setup(le){const g=l(0),u=l([]),i=l(""),r=l({}),d=l(""),c=l(10),h=l(""),_=l(!1);m.get("price").then(s=>{g.value=s.data.price_per_gb}),m.get("providers").then(s=>{u.value=s.data,u.value.length>0&&(i.value=u.value[0],x())});function x(){m.get("providers/"+i.value+"/payments").then(s=>{r.value=s.data,r.value.length>0&&(d.value=r.value[0].name)})}function V(){_.value=!0,m.post("providers/"+i.value+"/charge",{payment:d.value,traffic:c.value}).then(s=>{h.value=s.data.redirect_url,setTimeout(()=>{window.open(h.value,"_blank")})}).finally(()=>{_.value=!1})}return(s,a)=>(t(),o(b,null,[G,e("div",null,[N,e("p",null,[T,e("span",null,v(g.value),1),U]),e("div",D,[y(e("input",{autofocus:"",type:"number",class:"form-control",placeholder:"输入您要的流量 (单位: GB)","onUpdate:modelValue":a[0]||(a[0]=n=>c.value=n)},null,512),[[w,c.value]]),F]),c.value?(t(),o("div",M,[e("p",null,[j,e("span",{textContent:v(c.value*g.value)},null,8,E),L]),u.value?(t(),o("div",P,[R,S,(t(!0),o(b,null,C(u.value,n=>(t(),o("div",q,[y(e("input",{type:"radio",class:"form-check-input",name:"provider",id:"providers_"+n,value:n,"onUpdate:modelValue":a[1]||(a[1]=k=>i.value=k),onChange:x},null,40,z),[[B,i.value,void 0,{value:!0}]]),e("label",{textContent:v(n),class:"form-check-label",for:"providers_"+n},null,8,A)]))),256))])):(t(),o("div",H,J)),r.value?(t(),o("div",K,[O,Q,(t(!0),o(b,null,C(r.value,n=>(t(),o("div",W,[y(e("input",{type:"radio",class:"form-check-input",name:"payment",id:"payments_"+n.name,"onUpdate:modelValue":a[2]||(a[2]=k=>d.value=k),value:n.name},null,8,X),[[B,d.value]]),e("label",{textContent:v(n.title),class:"form-check-label",for:"payments_"+n.name},null,8,Y)]))),256))])):p("",!0),d.value?(t(),o("div",Z,[e("button",{class:"btn btn-primary mt-3",onClick:V,textContent:v(_.value?"请稍后":"立即支付"),disabled:_.value},null,8,$)])):p("",!0)])):p("",!0)]),_.value?(t(),o("p",ee,"正在创建订单...")):p("",!0),h.value?(t(),o("div",te,[oe,ne,e("a",{href:h.value,class:"link",target:"_blank"},"支付",8,se)])):p("",!0)],64))}};export{ie as default}; diff --git a/public/build/assets/Create-5885dd13.js b/public/build/assets/Create-5fe9455d.js similarity index 97% rename from public/build/assets/Create-5885dd13.js rename to public/build/assets/Create-5fe9455d.js index 9fc92cd..a087a40 100644 --- a/public/build/assets/Create-5885dd13.js +++ b/public/build/assets/Create-5fe9455d.js @@ -1 +1 @@ -import{r as v,h as k,i as P,o as d,c,a as o,j as s,v as u,k as w,F as _,e as T,l as i,b as p,t as U}from"./app-426d2bdb.js";import{i as m}from"./http-419d7b2b.js";const y=o("h3",null,"创建隧道",-1),S=o("h5",null,"好的名称是好的开始。",-1),V={class:"form-floating mb-3"},g=o("label",{for:"tunnelName"},"隧道名称",-1),x={class:"form-floating mb-3"},C=["value"],D=o("label",{for:"serverSelect"},"服务器",-1),H={key:0},M={class:"form-check form-check-inline"},N=["disabled"],B=o("label",{class:"form-check-label",for:"protocolHTTP"},"HTTP",-1),L={class:"form-check form-check-inline"},R=["disabled"],X=o("label",{class:"form-check-label",for:"protocolHTTPS"},"HTTPS",-1),A={class:"form-check form-check-inline"},F=["disabled"],$=o("label",{class:"form-check-label",for:"protocolTCP"},"TCP",-1),j={class:"form-check form-check-inline"},E=["disabled"],q=o("label",{class:"form-check-label",for:"protocolUDP"},"UDP",-1),z={class:"form-check form-check-inline"},G=["disabled"],I=o("label",{class:"form-check-label",for:"protocolSTCP"},"STCP",-1),J={class:"form-check form-check-inline"},K=["disabled"],O=o("label",{class:"form-check-label",for:"protocolSUDP"},"SUDP",-1),Q={class:"form-check form-check-inline"},W=["disabled"],Y=o("label",{class:"form-check-label",for:"protocolXTCP"},"XTCP",-1),Z=o("h5",{class:"mt-3"},"本地服务的地址",-1),oo={class:"form-floating mb-3"},eo=o("label",{for:"localAddress"},"本地地址",-1),lo={key:1},to=o("h5",null,"自定义域名",-1),so={class:"form-floating mb-3"},ao=o("label",{for:"customDomain"},"自定义域名",-1),ro={key:2},co=o("h5",null,"外部端口",-1),io={class:"form-floating mb-3"},no=o("label",{for:"remotePort"},"外部端口",-1),uo={key:3},po=o("h5",null,"访问密钥",-1),vo={class:"form-floating mb-3"},_o=o("label",{for:"sk"},"访问密钥",-1),bo={name:"Create",setup(mo){const r=v({id:"",name:"",allow_http:!0,allow_https:!0,allow_tcp:!0,allow_udp:!0,allow_stcp:!0,allow_sudp:!0,allow_xtcp:!0}),n=v([]),e=v({name:"",protocol:"http",server_id:"",local_address:"",custom_domain:"",remote_port:"",sk:""});m.get("/servers").then(a=>{n.value=a.data,!e.value.server_id&&n.value.length>0&&(e.value.server_id=n.value[0].id)});function h(){r.value=n.value.find(l=>l.id===e.value.server_id);const a=new URLSearchParams(window.location.search);a.set("server_id",e.value.server_id),window.history.replaceState({},"",`${window.location.pathname}?${a.toString()}`)}k(()=>e.value.server_id,h);const f=async()=>{const a=new URLSearchParams(window.location.search);e.value.server_id=a.get("server_id")};P(()=>{f()});const b=()=>{m.post("/tunnels",e.value).then(a=>{(a.status===200||a.status===201)&&alert("创建成功")})};return(a,l)=>(d(),c(_,null,[y,S,o("div",V,[s(o("input",{"onUpdate:modelValue":l[0]||(l[0]=t=>e.value.name=t),type:"text",class:"form-control",id:"tunnelName",placeholder:"起一个易于辨别的名字"},null,512),[[u,e.value.name]]),g]),o("div",x,[s(o("select",{"onUpdate:modelValue":l[1]||(l[1]=t=>e.value.server_id=t),class:"form-select",id:"serverSelect"},[(d(!0),c(_,null,T(n.value,t=>(d(),c("option",{value:t.id},U(t.name),9,C))),256))],512),[[w,e.value.server_id]]),D]),r.value?(d(),c("div",H,[o("div",M,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolHTTP",value:"http",disabled:!r.value.allow_http,"onUpdate:modelValue":l[2]||(l[2]=t=>e.value.protocol=t)},null,8,N),[[i,e.value.protocol]]),B]),o("div",L,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolHTTPS",value:"https",disabled:!r.value.allow_https,"onUpdate:modelValue":l[3]||(l[3]=t=>e.value.protocol=t)},null,8,R),[[i,e.value.protocol]]),X]),o("div",A,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolTCP",value:"tcp",disabled:!r.value.allow_tcp,"onUpdate:modelValue":l[4]||(l[4]=t=>e.value.protocol=t)},null,8,F),[[i,e.value.protocol]]),$]),o("div",j,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolUDP",value:"udp",disabled:!r.value.allow_udp,"onUpdate:modelValue":l[5]||(l[5]=t=>e.value.protocol=t)},null,8,E),[[i,e.value.protocol]]),q]),o("div",z,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolSTCP",value:"stcp",disabled:!r.value.allow_stcp,"onUpdate:modelValue":l[6]||(l[6]=t=>e.value.protocol=t)},null,8,G),[[i,e.value.protocol]]),I]),o("div",J,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolSUDP",value:"sudp",disabled:!r.value.allow_sudp,"onUpdate:modelValue":l[7]||(l[7]=t=>e.value.protocol=t)},null,8,K),[[i,e.value.protocol]]),O]),o("div",Q,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolXTCP",value:"xtcp",disabled:!r.value.allow_xtcp,"onUpdate:modelValue":l[8]||(l[8]=t=>e.value.protocol=t)},null,8,W),[[i,e.value.protocol]]),Y])])):p("",!0),Z,o("div",oo,[s(o("input",{"onUpdate:modelValue":l[9]||(l[9]=t=>e.value.local_address=t),type:"text",class:"form-control",id:"localAddress",placeholder:"比如 127.0.0.1:80"},null,512),[[u,e.value.local_address]]),eo]),e.value.protocol==="http"||e.value.protocol==="https"?(d(),c("div",lo,[to,o("div",so,[s(o("input",{"onUpdate:modelValue":l[10]||(l[10]=t=>e.value.custom_domain=t),type:"text",class:"form-control",id:"customDomain",placeholder:"比如 example.com"},null,512),[[u,e.value.custom_domain]]),ao])])):p("",!0),e.value.protocol==="tcp"||e.value.protocol==="udp"?(d(),c("div",ro,[co,o("div",io,[s(o("input",{"onUpdate:modelValue":l[11]||(l[11]=t=>e.value.remote_port=t),type:"text",class:"form-control",id:"remotePort",placeholder:"比如 25565"},null,512),[[u,e.value.remote_port]]),no])])):p("",!0),e.value.protocol==="stcp"||e.value.protocol==="sudp"||e.value.protocol==="xtcp"?(d(),c("div",uo,[po,o("div",vo,[s(o("input",{"onUpdate:modelValue":l[12]||(l[12]=t=>e.value.sk=t),type:"text",class:"form-control",id:"sk",placeholder:"比如 25565"},null,512),[[u,e.value.sk]]),_o])])):p("",!0),o("button",{class:"btn btn-primary",onClick:b},"创建")],64))}};export{bo as default}; +import{r as v,h as k,i as P,o as d,c,a as o,j as s,v as u,k as w,F as _,e as T,l as i,b as p,t as U}from"./app-b63b1aed.js";import{i as m}from"./http-eca01039.js";const y=o("h3",null,"创建隧道",-1),S=o("h5",null,"好的名称是好的开始。",-1),V={class:"form-floating mb-3"},g=o("label",{for:"tunnelName"},"隧道名称",-1),x={class:"form-floating mb-3"},C=["value"],D=o("label",{for:"serverSelect"},"服务器",-1),H={key:0},M={class:"form-check form-check-inline"},N=["disabled"],B=o("label",{class:"form-check-label",for:"protocolHTTP"},"HTTP",-1),L={class:"form-check form-check-inline"},R=["disabled"],X=o("label",{class:"form-check-label",for:"protocolHTTPS"},"HTTPS",-1),A={class:"form-check form-check-inline"},F=["disabled"],$=o("label",{class:"form-check-label",for:"protocolTCP"},"TCP",-1),j={class:"form-check form-check-inline"},E=["disabled"],q=o("label",{class:"form-check-label",for:"protocolUDP"},"UDP",-1),z={class:"form-check form-check-inline"},G=["disabled"],I=o("label",{class:"form-check-label",for:"protocolSTCP"},"STCP",-1),J={class:"form-check form-check-inline"},K=["disabled"],O=o("label",{class:"form-check-label",for:"protocolSUDP"},"SUDP",-1),Q={class:"form-check form-check-inline"},W=["disabled"],Y=o("label",{class:"form-check-label",for:"protocolXTCP"},"XTCP",-1),Z=o("h5",{class:"mt-3"},"本地服务的地址",-1),oo={class:"form-floating mb-3"},eo=o("label",{for:"localAddress"},"本地地址",-1),lo={key:1},to=o("h5",null,"自定义域名",-1),so={class:"form-floating mb-3"},ao=o("label",{for:"customDomain"},"自定义域名",-1),ro={key:2},co=o("h5",null,"外部端口",-1),io={class:"form-floating mb-3"},no=o("label",{for:"remotePort"},"外部端口",-1),uo={key:3},po=o("h5",null,"访问密钥",-1),vo={class:"form-floating mb-3"},_o=o("label",{for:"sk"},"访问密钥",-1),bo={name:"Create",setup(mo){const r=v({id:"",name:"",allow_http:!0,allow_https:!0,allow_tcp:!0,allow_udp:!0,allow_stcp:!0,allow_sudp:!0,allow_xtcp:!0}),n=v([]),e=v({name:"",protocol:"http",server_id:"",local_address:"",custom_domain:"",remote_port:"",sk:""});m.get("/servers").then(a=>{n.value=a.data,!e.value.server_id&&n.value.length>0&&(e.value.server_id=n.value[0].id)});function h(){r.value=n.value.find(l=>l.id===e.value.server_id);const a=new URLSearchParams(window.location.search);a.set("server_id",e.value.server_id),window.history.replaceState({},"",`${window.location.pathname}?${a.toString()}`)}k(()=>e.value.server_id,h);const f=async()=>{const a=new URLSearchParams(window.location.search);e.value.server_id=a.get("server_id")};P(()=>{f()});const b=()=>{m.post("/tunnels",e.value).then(a=>{(a.status===200||a.status===201)&&alert("创建成功")})};return(a,l)=>(d(),c(_,null,[y,S,o("div",V,[s(o("input",{"onUpdate:modelValue":l[0]||(l[0]=t=>e.value.name=t),type:"text",class:"form-control",id:"tunnelName",placeholder:"起一个易于辨别的名字"},null,512),[[u,e.value.name]]),g]),o("div",x,[s(o("select",{"onUpdate:modelValue":l[1]||(l[1]=t=>e.value.server_id=t),class:"form-select",id:"serverSelect"},[(d(!0),c(_,null,T(n.value,t=>(d(),c("option",{value:t.id},U(t.name),9,C))),256))],512),[[w,e.value.server_id]]),D]),r.value?(d(),c("div",H,[o("div",M,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolHTTP",value:"http",disabled:!r.value.allow_http,"onUpdate:modelValue":l[2]||(l[2]=t=>e.value.protocol=t)},null,8,N),[[i,e.value.protocol]]),B]),o("div",L,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolHTTPS",value:"https",disabled:!r.value.allow_https,"onUpdate:modelValue":l[3]||(l[3]=t=>e.value.protocol=t)},null,8,R),[[i,e.value.protocol]]),X]),o("div",A,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolTCP",value:"tcp",disabled:!r.value.allow_tcp,"onUpdate:modelValue":l[4]||(l[4]=t=>e.value.protocol=t)},null,8,F),[[i,e.value.protocol]]),$]),o("div",j,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolUDP",value:"udp",disabled:!r.value.allow_udp,"onUpdate:modelValue":l[5]||(l[5]=t=>e.value.protocol=t)},null,8,E),[[i,e.value.protocol]]),q]),o("div",z,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolSTCP",value:"stcp",disabled:!r.value.allow_stcp,"onUpdate:modelValue":l[6]||(l[6]=t=>e.value.protocol=t)},null,8,G),[[i,e.value.protocol]]),I]),o("div",J,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolSUDP",value:"sudp",disabled:!r.value.allow_sudp,"onUpdate:modelValue":l[7]||(l[7]=t=>e.value.protocol=t)},null,8,K),[[i,e.value.protocol]]),O]),o("div",Q,[s(o("input",{class:"form-check-input",type:"radio",id:"protocolXTCP",value:"xtcp",disabled:!r.value.allow_xtcp,"onUpdate:modelValue":l[8]||(l[8]=t=>e.value.protocol=t)},null,8,W),[[i,e.value.protocol]]),Y])])):p("",!0),Z,o("div",oo,[s(o("input",{"onUpdate:modelValue":l[9]||(l[9]=t=>e.value.local_address=t),type:"text",class:"form-control",id:"localAddress",placeholder:"比如 127.0.0.1:80"},null,512),[[u,e.value.local_address]]),eo]),e.value.protocol==="http"||e.value.protocol==="https"?(d(),c("div",lo,[to,o("div",so,[s(o("input",{"onUpdate:modelValue":l[10]||(l[10]=t=>e.value.custom_domain=t),type:"text",class:"form-control",id:"customDomain",placeholder:"比如 example.com"},null,512),[[u,e.value.custom_domain]]),ao])])):p("",!0),e.value.protocol==="tcp"||e.value.protocol==="udp"?(d(),c("div",ro,[co,o("div",io,[s(o("input",{"onUpdate:modelValue":l[11]||(l[11]=t=>e.value.remote_port=t),type:"text",class:"form-control",id:"remotePort",placeholder:"比如 25565"},null,512),[[u,e.value.remote_port]]),no])])):p("",!0),e.value.protocol==="stcp"||e.value.protocol==="sudp"||e.value.protocol==="xtcp"?(d(),c("div",uo,[po,o("div",vo,[s(o("input",{"onUpdate:modelValue":l[12]||(l[12]=t=>e.value.sk=t),type:"text",class:"form-control",id:"sk",placeholder:"比如 25565"},null,512),[[u,e.value.sk]]),_o])])):p("",!0),o("button",{class:"btn btn-primary",onClick:b},"创建")],64))}};export{bo as default}; diff --git a/public/build/assets/Downloads-1fe05572.js b/public/build/assets/Downloads-1fe05572.js deleted file mode 100644 index 9a6810d..0000000 --- a/public/build/assets/Downloads-1fe05572.js +++ /dev/null @@ -1 +0,0 @@ -import{r as s,o as a,c as t,a as r,F as l,e as c,t as n}from"./app-426d2bdb.js";const _=r("h3",null,"客户端下载",-1),d={class:"table table-bordered mt-3"},p=r("thead",null,[r("tr",null,[r("th",null,"名称"),r("th",null,"架构"),r("th",null,"下载")])],-1),u=["href"],g={name:"Downloads",setup(m){const o=s([{name:"Windows Frpc",arch:"amd64",url:"https://r2.laecloud.com/MEFrpRelease/MirrorEdgeFrp_0.46.1_beta_windows_amd64.zip"},{name:"Windows Frpc",arch:"i386",url:"https://r2.laecloud.com/MEFrpRelease/MirrorEdgeFrp_0.46.1_beta_windows_386.zip"},{name:"Linux Frpc amd64",arch:"amd64",url:"https://r2.laecloud.com/MEFrpRelease/frp_MirrorEdgeFrp_0.46.1_beta_linux_amd64.tar.gz"},{name:"Linux Frpc arm64",arch:"arm64",url:"https://r2.laecloud.com/MEFrpRelease/frp_MirrorEdgeFrp_0.46.1_beta_linux_arm64.tar.gz"},{name:"Darwin Frpc amd64",arch:"amd64",url:"https://r2.laecloud.com/MEFrpRelease/frp_MirrorEdgeFrp_0.46.1_beta_darwin_amd64.tar.gz"},{name:"Darwin Frpc arm64",arch:"arm64",url:"https://r2.laecloud.com/MEFrpRelease/frp_MirrorEdgeFrp_0.46.1_beta_darwin_arm64.tar.gz"}]);return(h,F)=>(a(),t(l,null,[_,r("table",d,[p,r("tbody",null,[(a(!0),t(l,null,c(o.value,e=>(a(),t("tr",null,[r("td",null,n(e.name),1),r("td",null,n(e.arch),1),r("td",null,[r("a",{href:e.url},"下载",8,u)])]))),256))])])],64))}};export{g as default}; diff --git a/public/build/assets/Downloads-5f629c5d.js b/public/build/assets/Downloads-5f629c5d.js new file mode 100644 index 0000000..e821c09 --- /dev/null +++ b/public/build/assets/Downloads-5f629c5d.js @@ -0,0 +1 @@ +import{r as o,o as n,c as t,a as r,F as l,e as c,t as p}from"./app-b63b1aed.js";const m=r("h3",null,"客户端下载",-1),u={class:"table table-bordered mt-3"},e=r("thead",null,[r("tr",null,[r("th",null,"名称"),r("th",null,"架构"),r("th",null,"下载")])],-1),h=["href"],x={name:"Downloads",setup(s){const d=o([{name:"Windows Frpc",arch:"amd64",url:"https://download.muhanfrp.cn/frp_0.46.1_windows_amd64.zip"},{name:"Windows Frpc",arch:"i386",url:"https://download.muhanfrp.cn/frp_0.46.1_windows_386.zip"},{name:"Linux Frpc i386",arch:"i386",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_386.tar.gz"},{name:"Linux Frpc amd64",arch:"amd64",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_amd64.tar.gz"},{name:"Linux Frpc arm32",arch:"arm32",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_arm32.tar.gz"},{name:"Linux Frpc arm64",arch:"arm64",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_arm64.tar.gz"},{name:"Darwin Frpc amd64",arch:"amd64",url:"https://download.muhanfrp.cn/frp_0.46.1_darwin_amd64.tar.gz"},{name:"Darwin Frpc arm64",arch:"arm64",url:"https://download.muhanfrp.cn/frp_0.46.1_darwin_arm64.tar.gz"},{name:"Freebsd Frpc i386",arch:"i386",url:"https://download.muhanfrp.cn/frp_0.46.1_freebsd_386.tar.gz"},{name:"Freebsd Frpc arm64",arch:"arm64",url:"https://download.muhanfrp.cn/frp_0.46.1_freebsd_amd64.tar.gz"},{name:"Mips Frpc i386",arch:"i386",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_mips.tar.gz"},{name:"Mips Frpc amd64",arch:"amd64",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_mips64.tar.gz"},{name:"Mipsle Frpc i386",arch:"i386",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_mipsle.tar.gz"},{name:"Mipsle Frpc amd64",arch:"amd64",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_mips64le.tar.gz"},{name:"Riscv Frpc amd64",arch:"amd64",url:"https://download.muhanfrp.cn/frp_0.46.1_linux_riscv64.tar.gz"},{name:"android-v0.39.1.1 Frpc 图形客户端",arch:"android",url:"https://download.muhanfrp.cn/frpc_android-v0.39.1.1.apk"},{name:"android-v0.31.2 Frpc 图形客户端",arch:"android",url:"https://download.muhanfrp.cn/FRP.apk"},{name:"Termux 客户端 ",arch:"android",url:"https://download.muhanfrp.cn/com.termux_118.apk"},{name:"Windows PortIO_Python 图形客户端",arch:"86-64",url:"https://download.muhanfrp.cn/PortIO_Client.zip"},{name:"Windows PortIO_Client_CLI_Python 命令行图形客户端",arch:"86-64",url:"https://download.muhanfrp.cn/PortIO_Client_CLI.exe"},{name:"Windows PortIO_Pascal 图形客户端",arch:"86-64",url:"https://download.muhanfrp.cn/pioc_windows_x86_64.zip"},{name:"Linux PortIO_Pascal 图形客户端",arch:"86-64",url:"https://download.muhanfrp.cn/pioc_linux_x86_64.tar.gz"}]);return(i,f)=>(n(),t(l,null,[m,r("table",u,[e,r("tbody",null,[(n(!0),t(l,null,c(d.value,a=>(n(),t("tr",null,[r("td",null,p(a.name),1),r("td",null,p(a.arch),1),r("td",null,[r("a",{href:a.url},"下载",8,h)])]))),256))])])],64))}};export{x as default}; diff --git a/public/build/assets/Index-3dd3acd6.js b/public/build/assets/Index-2516cda8.js similarity index 91% rename from public/build/assets/Index-3dd3acd6.js rename to public/build/assets/Index-2516cda8.js index 96e2a1f..696413d 100644 --- a/public/build/assets/Index-3dd3acd6.js +++ b/public/build/assets/Index-2516cda8.js @@ -1 +1 @@ -import{i as d}from"./http-419d7b2b.js";import{r as p,d as _,o as s,c as r,a as e,F as c,e as i,t as o,f as h,w as u,g as m}from"./app-426d2bdb.js";const v=e("h3",null,"隧道列表",-1),k={class:"table table-hover"},f=e("thead",null,[e("tr",null,[e("th",{scope:"col"},"ID"),e("th",{scope:"col"},"名称"),e("th",{scope:"col"},"协议"),e("th",{scope:"col"},"本地地址"),e("th",{scope:"col"},"远程端口/域名"),e("th",{scope:"col"},"服务器"),e("th",{scope:"col"},"状态")])],-1),g={key:0},x={key:1},y={key:0,class:"text-success"},b={key:1,class:"text-danger"},V={name:"Index",setup(w){const a=p([{id:"0",protocol:"",server:{server_address:"",server_port:"",name:""},run_id:""}]);return d.get("tunnels").then(l=>{a.value=l.data,console.log(a.value)}),(l,B)=>{const n=_("router-link");return s(),r(c,null,[v,e("table",k,[f,e("tbody",null,[(s(!0),r(c,null,i(a.value,t=>(s(),r("tr",null,[e("th",null,o(t.id),1),e("td",null,[h(n,{to:{name:"tunnels.show",params:{id:t.id}}},{default:u(()=>[m(o(t.name),1)]),_:2},1032,["to"])]),e("td",null,o(t.protocol.toString().toUpperCase()),1),e("td",null,o(t.local_address),1),e("td",null,[t.protocol==="http"||t.protocol==="https"?(s(),r("span",g,o(t.custom_domain),1)):(s(),r("span",x,o(t.server.server_address)+":"+o(t.remote_port),1))]),e("td",null,o(t.server.name),1),e("td",null,[t.run_id?(s(),r("span",y,"在线")):(s(),r("span",b,"离线"))])]))),256))])])],64)}}};export{V as default}; +import{i as d}from"./http-eca01039.js";import{r as p,d as _,o as s,c as r,a as e,F as c,e as i,t as o,f as h,w as u,g as m}from"./app-b63b1aed.js";const v=e("h3",null,"隧道列表",-1),k={class:"table table-hover"},f=e("thead",null,[e("tr",null,[e("th",{scope:"col"},"ID"),e("th",{scope:"col"},"名称"),e("th",{scope:"col"},"协议"),e("th",{scope:"col"},"本地地址"),e("th",{scope:"col"},"远程端口/域名"),e("th",{scope:"col"},"服务器"),e("th",{scope:"col"},"状态")])],-1),g={key:0},x={key:1},y={key:0,class:"text-success"},b={key:1,class:"text-danger"},V={name:"Index",setup(w){const a=p([{id:"0",protocol:"",server:{server_address:"",server_port:"",name:""},run_id:""}]);return d.get("tunnels").then(l=>{a.value=l.data,console.log(a.value)}),(l,B)=>{const n=_("router-link");return s(),r(c,null,[v,e("table",k,[f,e("tbody",null,[(s(!0),r(c,null,i(a.value,t=>(s(),r("tr",null,[e("th",null,o(t.id),1),e("td",null,[h(n,{to:{name:"tunnels.show",params:{id:t.id}}},{default:u(()=>[m(o(t.name),1)]),_:2},1032,["to"])]),e("td",null,o(t.protocol.toString().toUpperCase()),1),e("td",null,o(t.local_address),1),e("td",null,[t.protocol==="http"||t.protocol==="https"?(s(),r("span",g,o(t.custom_domain),1)):(s(),r("span",x,o(t.server.server_address)+":"+o(t.remote_port),1))]),e("td",null,o(t.server.name),1),e("td",null,[t.run_id?(s(),r("span",y,"在线")):(s(),r("span",b,"离线"))])]))),256))])])],64)}}};export{V as default}; diff --git a/public/build/assets/Index-9cef052a.js b/public/build/assets/Index-9900345d.js similarity index 91% rename from public/build/assets/Index-9cef052a.js rename to public/build/assets/Index-9900345d.js index abad7a9..47c4946 100644 --- a/public/build/assets/Index-9cef052a.js +++ b/public/build/assets/Index-9900345d.js @@ -1 +1 @@ -import{i as o}from"./http-419d7b2b.js";import{r as u,o as l,c,a as e,t as n,u as i,b as d,F as h}from"./app-426d2bdb.js";const p=e("div",null,[e("h3",null,"欢迎")],-1),k={class:"mt-3"},f={key:0,class:"mt-3"},v=e("h3",null,"实名认证",-1),b=e("p",null," 注意,您没有完成实名认证,请点击下方按钮完成实名认证,否则您只能使用中国大陆以外的隧道。 ",-1),g=e("a",{class:"btn btn-primary",target:"_blank",href:"https://oauth.laecloud.com/real_name"},"实名认证",-1),y=e("h3",null,"访问密钥",-1),x={class:"mt-3"},B={key:0,class:"text-success"},A={name:"Index",setup(T){const r=window.Base.SiteName,s=u({name:"loading...",traffic:""}),a=u("");o.get("user").then(t=>{s.value=t.data});function _(){o.post("tokens").then(t=>{a.value=t.data.token})}function m(){o.delete("tokens").then(t=>{alert("所有 Token 删除成功。")})}return(t,w)=>(l(),c(h,null,[p,e("div",k,[e("p",null,"用户名: "+n(s.value.name),1),e("p",null,"剩余流量: "+n(s.value.traffic)+" GB",1)]),s.value.realnamed?d("",!0):(l(),c("div",f,[v,b,g,e("p",null,"在实名认证后,请重新登录 "+n(i(r))+"。",1)])),y,e("div",x,[e("p",null," 访问密钥是用于访问 "+n(i(r))+" API 的密钥,您可以使用它来开发自己的客户端。 ",1),a.value?(l(),c("p",B,"获取成功,请妥善保管您的 Token: "+n(a.value),1)):d("",!0),e("button",{class:"btn btn-primary",onClick:_}," 获取新密钥 "),e("button",{class:"btn btn-danger",style:{"margin-left":"5px"},onClick:m}," 删除所有密钥 ")])],64))}};export{A as default}; +import{i as o}from"./http-eca01039.js";import{r as u,o as l,c,a as e,t as n,u as i,b as d,F as h}from"./app-b63b1aed.js";const p=e("div",null,[e("h3",null,"欢迎")],-1),k={class:"mt-3"},f={key:0,class:"mt-3"},v=e("h3",null,"实名认证",-1),b=e("p",null," 注意,您没有完成实名认证,请点击下方按钮完成实名认证,否则您只能使用中国大陆以外的隧道。 ",-1),g=e("a",{class:"btn btn-primary",target:"_blank",href:"https://oauth.laecloud.com/real_name"},"实名认证",-1),y=e("h3",null,"访问密钥",-1),x={class:"mt-3"},B={key:0,class:"text-success"},A={name:"Index",setup(T){const r=window.Base.SiteName,s=u({name:"loading...",traffic:""}),a=u("");o.get("user").then(t=>{s.value=t.data});function _(){o.post("tokens").then(t=>{a.value=t.data.token})}function m(){o.delete("tokens").then(t=>{alert("所有 Token 删除成功。")})}return(t,w)=>(l(),c(h,null,[p,e("div",k,[e("p",null,"用户名: "+n(s.value.name),1),e("p",null,"剩余流量: "+n(s.value.traffic)+" GB",1)]),s.value.realnamed?d("",!0):(l(),c("div",f,[v,b,g,e("p",null,"在实名认证后,请重新登录 "+n(i(r))+"。",1)])),y,e("div",x,[e("p",null," 访问密钥是用于访问 "+n(i(r))+" API 的密钥,您可以使用它来开发自己的客户端。 ",1),a.value?(l(),c("p",B,"获取成功,请妥善保管您的 Token: "+n(a.value),1)):d("",!0),e("button",{class:"btn btn-primary",onClick:_}," 获取新密钥 "),e("button",{class:"btn btn-danger",style:{"margin-left":"5px"},onClick:m}," 删除所有密钥 ")])],64))}};export{A as default}; diff --git a/public/build/assets/Show-f0c4e11e.js b/public/build/assets/Show-f5a80327.js similarity index 99% rename from public/build/assets/Show-f0c4e11e.js rename to public/build/assets/Show-f5a80327.js index c1f06d3..b49acc8 100644 --- a/public/build/assets/Show-f0c4e11e.js +++ b/public/build/assets/Show-f5a80327.js @@ -1,4 +1,4 @@ -import{i as Tl}from"./http-419d7b2b.js";import{r as tm,m as em,i as cL,n as pL,o as rm,c as am,a as Ke,t as kh,b as dL,F as gL}from"./app-426d2bdb.js";/*! ***************************************************************************** +import{i as Tl}from"./http-eca01039.js";import{r as tm,m as em,i as cL,n as pL,o as rm,c as am,a as Ke,t as kh,b as dL,F as gL}from"./app-b63b1aed.js";/*! ***************************************************************************** Copyright (c) Microsoft Corporation. Permission to use, copy, modify, and/or distribute this software for any diff --git a/public/build/assets/Sign-152c9e31.js b/public/build/assets/Sign-e61967c6.js similarity index 83% rename from public/build/assets/Sign-152c9e31.js rename to public/build/assets/Sign-e61967c6.js index b464e13..870da3d 100644 --- a/public/build/assets/Sign-152c9e31.js +++ b/public/build/assets/Sign-e61967c6.js @@ -1 +1 @@ -import{i}from"./http-419d7b2b.js";import{r as s,o as c,c as f,a as e,t as r}from"./app-426d2bdb.js";const o=e("h3",null,"流量补给",-1),u={key:0},d={key:1},h={name:"Sign",setup(_){const a=s({last_sign_at:null,traffic:0});i.get("user").then(t=>{a.value.traffic=t.data.traffic});function l(){i.post("traffic").then(t=>{a.value=t.data;let n=`获得了 ${t.data.traffic} GB 流量!`;t.data.traffic===0&&(n="没有获得流量~"),alert(n)}).finally(()=>{i.get("user").then(t=>{a.value.traffic=t.data.traffic}).finally(()=>{})})}return(t,n)=>(c(),f("div",null,[o,e("div",null,[e("p",null,"当前流量: "+r(a.value.traffic)+"GB",1),a.value.is_signed?(c(),f("div",u,"今日已签到")):(c(),f("div",d,[e("button",{class:"btn btn-primary",onClick:l},"试试手气")]))])]))}};export{h as default}; +import{i}from"./http-eca01039.js";import{r as s,o as c,c as f,a as e,t as r}from"./app-b63b1aed.js";const o=e("h3",null,"流量补给",-1),u={key:0},d={key:1},h={name:"Sign",setup(_){const a=s({last_sign_at:null,traffic:0});i.get("user").then(t=>{a.value.traffic=t.data.traffic});function l(){i.post("traffic").then(t=>{a.value=t.data;let n=`获得了 ${t.data.traffic} GB 流量!`;t.data.traffic===0&&(n="没有获得流量~"),alert(n)}).finally(()=>{i.get("user").then(t=>{a.value.traffic=t.data.traffic}).finally(()=>{})})}return(t,n)=>(c(),f("div",null,[o,e("div",null,[e("p",null,"当前流量: "+r(a.value.traffic)+"GB",1),a.value.is_signed?(c(),f("div",u,"今日已签到")):(c(),f("div",d,[e("button",{class:"btn btn-primary",onClick:l},"试试手气")]))])]))}};export{h as default}; diff --git a/public/build/assets/Ticket-fb342565.js b/public/build/assets/Ticket-d9bf034e.js similarity index 95% rename from public/build/assets/Ticket-fb342565.js rename to public/build/assets/Ticket-d9bf034e.js index 29d0e65..c676458 100644 --- a/public/build/assets/Ticket-fb342565.js +++ b/public/build/assets/Ticket-d9bf034e.js @@ -1 +1 @@ -import{_ as w,r as c,o as t,c as o,a as e,j as m,v as k,b as r,F as f,e as I,t as b,g as x,l as S,p as B,q as N}from"./app-426d2bdb.js";import{i as y}from"./http-419d7b2b.js";const a=_=>(B("data-v-04d8426c"),_=_(),N(),_),U=a(()=>e("div",null,[e("h3",null,"发工单")],-1)),D=a(()=>e("h5",null,"有遇到什么问题吗?",-1)),F=x(" 您可以选择以下常见问题: "),M=x("   "),j={class:"input-group mb-3"},q={key:0,class:"input-group"},E={key:1},L={key:0},R=a(()=>e("h5",{class:"mt-3"},"选择发工单的平台",-1)),z=a(()=>e("p",null,"如果您在选中的平台没有账号,我们将会帮您自动创建一个。",-1)),A={class:"form-group form-check"},G=["id","value"],H=["textContent","for"],J={key:1},K=a(()=>e("h5",{class:"mt-3"},"暂时没有可用的提供商",-1)),O=[K],P={key:2},Q=["textContent","disabled"],W={key:0},X={key:1,class:"mt-3"},Y=a(()=>e("h5",null,"完成",-1)),Z=a(()=>e("p",null,"如果您浏览器没有打开新的创建,请点击以下链接来打开。",-1)),$=["href"],ee={name:"Ticket",setup(_){const u=c([]),v=c(""),l=c(""),n=c(""),p=c(""),d=c(!1);y.get("providers").then(h=>{u.value=h.data,u.value.length>0&&(v.value=u.value[0])});function g(){d.value=!0,y.post("providers/"+v.value+"/ticket",{title:l.value,content:n.value}).then(h=>{p.value=h.data.redirect_url,setTimeout(()=>{window.open(p.value,"_blank")})}).finally(()=>{d.value=!1})}function C(){l.value="域名 {你的域名} 过白。",n.value="您好,我的域名已备案,请将我的域名 {你的域名} 加入白名单,谢谢。"}function T(){l.value="{节点} 的隧道无法连接。",n.value="您好,这个节点无法连接,请检查。"}return(h,i)=>(t(),o(f,null,[U,e("div",null,[D,e("div",{class:"mb-3"},[F,e("a",{onClick:C,class:"link"},"域名白名单"),M,e("a",{onClick:T,class:"link"},"映射问题")]),e("div",j,[m(e("input",{autofocus:"",type:"text",class:"form-control",placeholder:"简要概述您遇到的问题","onUpdate:modelValue":i[0]||(i[0]=s=>l.value=s)},null,512),[[k,l.value]])]),l.value?(t(),o("div",q,[m(e("textarea",{class:"form-control","onUpdate:modelValue":i[1]||(i[1]=s=>n.value=s),placeholder:"详细说明您遇到的问题..."},null,512),[[k,n.value]])])):r("",!0),l.value?(t(),o("div",E,[u.value?(t(),o("div",L,[R,z,(t(!0),o(f,null,I(u.value,s=>(t(),o("div",A,[m(e("input",{type:"radio",class:"form-check-input",name:"provider",id:"providers_"+s,value:s,"onUpdate:modelValue":i[2]||(i[2]=V=>v.value=V)},null,8,G),[[S,v.value,void 0,{value:!0}]]),e("label",{textContent:b(s),class:"form-check-label",for:"providers_"+s},null,8,H)]))),256))])):(t(),o("div",J,O)),n.value?(t(),o("div",P,[e("button",{class:"btn btn-primary mt-3",onClick:g,textContent:b(d.value?"请稍后":"创建工单"),disabled:d.value},null,8,Q)])):r("",!0)])):r("",!0)]),d.value?(t(),o("p",W,"正在打开工单...")):r("",!0),p.value?(t(),o("div",X,[Y,Z,e("a",{href:p.value,class:"link",target:"_blank"},"打开工单",8,$)])):r("",!0)],64))}},se=w(ee,[["__scopeId","data-v-04d8426c"]]);export{se as default}; +import{_ as w,r as c,o as t,c as o,a as e,j as m,v as k,b as r,F as f,e as I,t as b,g as x,l as S,p as B,q as N}from"./app-b63b1aed.js";import{i as y}from"./http-eca01039.js";const a=_=>(B("data-v-04d8426c"),_=_(),N(),_),U=a(()=>e("div",null,[e("h3",null,"发工单")],-1)),D=a(()=>e("h5",null,"有遇到什么问题吗?",-1)),F=x(" 您可以选择以下常见问题: "),M=x("   "),j={class:"input-group mb-3"},q={key:0,class:"input-group"},E={key:1},L={key:0},R=a(()=>e("h5",{class:"mt-3"},"选择发工单的平台",-1)),z=a(()=>e("p",null,"如果您在选中的平台没有账号,我们将会帮您自动创建一个。",-1)),A={class:"form-group form-check"},G=["id","value"],H=["textContent","for"],J={key:1},K=a(()=>e("h5",{class:"mt-3"},"暂时没有可用的提供商",-1)),O=[K],P={key:2},Q=["textContent","disabled"],W={key:0},X={key:1,class:"mt-3"},Y=a(()=>e("h5",null,"完成",-1)),Z=a(()=>e("p",null,"如果您浏览器没有打开新的创建,请点击以下链接来打开。",-1)),$=["href"],ee={name:"Ticket",setup(_){const u=c([]),v=c(""),l=c(""),n=c(""),p=c(""),d=c(!1);y.get("providers").then(h=>{u.value=h.data,u.value.length>0&&(v.value=u.value[0])});function g(){d.value=!0,y.post("providers/"+v.value+"/ticket",{title:l.value,content:n.value}).then(h=>{p.value=h.data.redirect_url,setTimeout(()=>{window.open(p.value,"_blank")})}).finally(()=>{d.value=!1})}function C(){l.value="域名 {你的域名} 过白。",n.value="您好,我的域名已备案,请将我的域名 {你的域名} 加入白名单,谢谢。"}function T(){l.value="{节点} 的隧道无法连接。",n.value="您好,这个节点无法连接,请检查。"}return(h,i)=>(t(),o(f,null,[U,e("div",null,[D,e("div",{class:"mb-3"},[F,e("a",{onClick:C,class:"link"},"域名白名单"),M,e("a",{onClick:T,class:"link"},"映射问题")]),e("div",j,[m(e("input",{autofocus:"",type:"text",class:"form-control",placeholder:"简要概述您遇到的问题","onUpdate:modelValue":i[0]||(i[0]=s=>l.value=s)},null,512),[[k,l.value]])]),l.value?(t(),o("div",q,[m(e("textarea",{class:"form-control","onUpdate:modelValue":i[1]||(i[1]=s=>n.value=s),placeholder:"详细说明您遇到的问题..."},null,512),[[k,n.value]])])):r("",!0),l.value?(t(),o("div",E,[u.value?(t(),o("div",L,[R,z,(t(!0),o(f,null,I(u.value,s=>(t(),o("div",A,[m(e("input",{type:"radio",class:"form-check-input",name:"provider",id:"providers_"+s,value:s,"onUpdate:modelValue":i[2]||(i[2]=V=>v.value=V)},null,8,G),[[S,v.value,void 0,{value:!0}]]),e("label",{textContent:b(s),class:"form-check-label",for:"providers_"+s},null,8,H)]))),256))])):(t(),o("div",J,O)),n.value?(t(),o("div",P,[e("button",{class:"btn btn-primary mt-3",onClick:g,textContent:b(d.value?"请稍后":"创建工单"),disabled:d.value},null,8,Q)])):r("",!0)])):r("",!0)]),d.value?(t(),o("p",W,"正在打开工单...")):r("",!0),p.value?(t(),o("div",X,[Y,Z,e("a",{href:p.value,class:"link",target:"_blank"},"打开工单",8,$)])):r("",!0)],64))}},se=w(ee,[["__scopeId","data-v-04d8426c"]]);export{se as default}; diff --git a/public/build/assets/app-426d2bdb.js b/public/build/assets/app-b63b1aed.js similarity index 99% rename from public/build/assets/app-426d2bdb.js rename to public/build/assets/app-b63b1aed.js index b5d53db..d9ccaf2 100644 --- a/public/build/assets/app-426d2bdb.js +++ b/public/build/assets/app-b63b1aed.js @@ -8,7 +8,7 @@ function gl(e,t){return function(){return e.apply(t,arguments)}}const{toString:E * Bootstrap v5.3.0-alpha1 (https://getbootstrap.com/) * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */const sg=1e6,rg=1e3,Ii="transitionend",Su=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(t,n)=>`#${CSS.escape(n)}`)),e),ig=e=>e==null?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),og=e=>{do e+=Math.floor(Math.random()*sg);while(document.getElementById(e));return e},ag=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const s=Number.parseFloat(t),r=Number.parseFloat(n);return!s&&!r?0:(t=t.split(",")[0],n=n.split(",")[0],(Number.parseFloat(t)+Number.parseFloat(n))*rg)},Nu=e=>{e.dispatchEvent(new Event(Ii))},pt=e=>!e||typeof e!="object"?!1:(typeof e.jquery<"u"&&(e=e[0]),typeof e.nodeType<"u"),kt=e=>pt(e)?e.jquery?e[0]:e:typeof e=="string"&&e.length>0?document.querySelector(Su(e)):null,Vn=e=>{if(!pt(e)||e.getClientRects().length===0)return!1;const t=getComputedStyle(e).getPropertyValue("visibility")==="visible",n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const s=e.closest("summary");if(s&&s.parentNode!==n||s===null)return!1}return t},Ft=e=>!e||e.nodeType!==Node.ELEMENT_NODE||e.classList.contains("disabled")?!0:typeof e.disabled<"u"?e.disabled:e.hasAttribute("disabled")&&e.getAttribute("disabled")!=="false",xu=e=>{if(!document.documentElement.attachShadow)return null;if(typeof e.getRootNode=="function"){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?xu(e.parentNode):null},lr=()=>{},vs=e=>{e.offsetHeight},Ru=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,zr=[],lg=e=>{document.readyState==="loading"?(zr.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of zr)t()}),zr.push(e)):e()},We=()=>document.documentElement.dir==="rtl",qe=e=>{lg(()=>{const t=Ru();if(t){const n=e.NAME,s=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=s,e.jQueryInterface)}})},Le=(e,t=[],n=e)=>typeof e=="function"?e(...t):n,Pu=(e,t,n=!0)=>{if(!n){Le(e);return}const s=5,r=ag(t)+s;let i=!1;const o=({target:a})=>{a===t&&(i=!0,t.removeEventListener(Ii,o),Le(e))};t.addEventListener(Ii,o),setTimeout(()=>{i||Nu(t)},r)},Co=(e,t,n,s)=>{const r=e.length;let i=e.indexOf(t);return i===-1?!n&&s?e[r-1]:e[0]:(i+=n?1:-1,s&&(i=(i+r)%r),e[Math.max(0,Math.min(i,r-1))])},cg=/[^.]*(?=\..*)\.|.*/,ug=/\..*/,fg=/::\d+$/,Yr={};let Wa=1;const Lu={mouseenter:"mouseover",mouseleave:"mouseout"},dg=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Du(e,t){return t&&`${t}::${Wa++}`||e.uidEvent||Wa++}function Iu(e){const t=Du(e);return e.uidEvent=t,Yr[t]=Yr[t]||{},Yr[t]}function hg(e,t){return function n(s){return So(s,{delegateTarget:e}),n.oneOff&&O.off(e,s.type,t),t.apply(e,[s])}}function pg(e,t,n){return function s(r){const i=e.querySelectorAll(t);for(let{target:o}=r;o&&o!==this;o=o.parentNode)for(const a of i)if(a===o)return So(r,{delegateTarget:o}),s.oneOff&&O.off(e,r.type,t,n),n.apply(o,[r])}}function $u(e,t,n=null){return Object.values(e).find(s=>s.callable===t&&s.delegationSelector===n)}function Mu(e,t,n){const s=typeof t=="string",r=s?n:t||n;let i=ku(e);return dg.has(i)||(i=e),[s,r,i]}function Ka(e,t,n,s,r){if(typeof t!="string"||!e)return;let[i,o,a]=Mu(t,n,s);t in Lu&&(o=(_=>function(E){if(!E.relatedTarget||E.relatedTarget!==E.delegateTarget&&!E.delegateTarget.contains(E.relatedTarget))return _.call(this,E)})(o));const l=Iu(e),c=l[a]||(l[a]={}),u=$u(c,o,i?n:null);if(u){u.oneOff=u.oneOff&&r;return}const d=Du(o,t.replace(cg,"")),h=i?pg(e,n,o):hg(e,o);h.delegationSelector=i?n:null,h.callable=o,h.oneOff=r,h.uidEvent=d,c[d]=h,e.addEventListener(a,h,i)}function $i(e,t,n,s,r){const i=$u(t[n],s,r);i&&(e.removeEventListener(n,i,Boolean(r)),delete t[n][i.uidEvent])}function mg(e,t,n,s){const r=t[n]||{};for(const[i,o]of Object.entries(r))i.includes(s)&&$i(e,t,n,o.callable,o.delegationSelector)}function ku(e){return e=e.replace(ug,""),Lu[e]||e}const O={on(e,t,n,s){Ka(e,t,n,s,!1)},one(e,t,n,s){Ka(e,t,n,s,!0)},off(e,t,n,s){if(typeof t!="string"||!e)return;const[r,i,o]=Mu(t,n,s),a=o!==t,l=Iu(e),c=l[o]||{},u=t.startsWith(".");if(typeof i<"u"){if(!Object.keys(c).length)return;$i(e,l,o,i,r?n:null);return}if(u)for(const d of Object.keys(l))mg(e,l,d,t.slice(1));for(const[d,h]of Object.entries(c)){const m=d.replace(fg,"");(!a||t.includes(m))&&$i(e,l,o,h.callable,h.delegationSelector)}},trigger(e,t,n){if(typeof t!="string"||!e)return null;const s=Ru(),r=ku(t),i=t!==r;let o=null,a=!0,l=!0,c=!1;i&&s&&(o=s.Event(t,n),s(e).trigger(o),a=!o.isPropagationStopped(),l=!o.isImmediatePropagationStopped(),c=o.isDefaultPrevented());let u=new Event(t,{bubbles:a,cancelable:!0});return u=So(u,n),c&&u.preventDefault(),l&&e.dispatchEvent(u),u.defaultPrevented&&o&&o.preventDefault(),u}};function So(e,t={}){for(const[n,s]of Object.entries(t))try{e[n]=s}catch{Object.defineProperty(e,n,{configurable:!0,get(){return s}})}return e}const Ct=new Map,Gr={set(e,t,n){Ct.has(e)||Ct.set(e,new Map);const s=Ct.get(e);if(!s.has(t)&&s.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`);return}s.set(t,n)},get(e,t){return Ct.has(e)&&Ct.get(e).get(t)||null},remove(e,t){if(!Ct.has(e))return;const n=Ct.get(e);n.delete(t),n.size===0&&Ct.delete(e)}};function qa(e){if(e==="true")return!0;if(e==="false")return!1;if(e===Number(e).toString())return Number(e);if(e===""||e==="null")return null;if(typeof e!="string")return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function Xr(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const mt={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${Xr(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${Xr(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(s=>s.startsWith("bs")&&!s.startsWith("bsConfig"));for(const s of n){let r=s.replace(/^bs/,"");r=r.charAt(0).toLowerCase()+r.slice(1,r.length),t[r]=qa(e.dataset[s])}return t},getDataAttribute(e,t){return qa(e.getAttribute(`data-bs-${Xr(t)}`))}};class ys{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,n){const s=pt(n)?mt.getDataAttribute(n,"config"):{};return{...this.constructor.Default,...typeof s=="object"?s:{},...pt(n)?mt.getDataAttributes(n):{},...typeof t=="object"?t:{}}}_typeCheckConfig(t,n=this.constructor.DefaultType){for(const[s,r]of Object.entries(n)){const i=t[s],o=pt(i)?"element":ig(i);if(!new RegExp(r).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${o}" but expected type "${r}".`)}}}const _g="5.3.0-alpha1";class Ze extends ys{constructor(t,n){super(),t=kt(t),t&&(this._element=t,this._config=this._getConfig(n),Gr.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Gr.remove(this._element,this.constructor.DATA_KEY),O.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,n,s=!0){Pu(t,n,s)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Gr.get(kt(t),this.DATA_KEY)}static getOrCreateInstance(t,n={}){return this.getInstance(t)||new this(t,typeof n=="object"?n:null)}static get VERSION(){return _g}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const Jr=e=>{let t=e.getAttribute("data-bs-target");if(!t||t==="#"){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&n!=="#"?n.trim():null}return Su(t)},V={find(e,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e,t=document.documentElement){return Element.prototype.querySelector.call(t,e)},children(e,t){return[].concat(...e.children).filter(n=>n.matches(t))},parents(e,t){const n=[];let s=e.parentNode.closest(t);for(;s;)n.push(s),s=s.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(n=>`${n}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(n=>!Ft(n)&&Vn(n))},getSelectorFromElement(e){const t=Jr(e);return t&&V.findOne(t)?t:null},getElementFromSelector(e){const t=Jr(e);return t?V.findOne(t):null},getMultipleElementsFromSelector(e){const t=Jr(e);return t?V.find(t):[]}},Lr=(e,t="hide")=>{const n=`click.dismiss${e.EVENT_KEY}`,s=e.NAME;O.on(document,n,`[data-bs-dismiss="${s}"]`,function(r){if(["A","AREA"].includes(this.tagName)&&r.preventDefault(),Ft(this))return;const i=V.getElementFromSelector(this)||this.closest(`.${s}`);e.getOrCreateInstance(i)[t]()})},gg="alert",Eg="bs.alert",Fu=`.${Eg}`,bg=`close${Fu}`,vg=`closed${Fu}`,yg="fade",Ag="show";class Dr extends Ze{static get NAME(){return gg}close(){if(O.trigger(this._element,bg).defaultPrevented)return;this._element.classList.remove(Ag);const n=this._element.classList.contains(yg);this._queueCallback(()=>this._destroyElement(),this._element,n)}_destroyElement(){this._element.remove(),O.trigger(this._element,vg),this.dispose()}static jQueryInterface(t){return this.each(function(){const n=Dr.getOrCreateInstance(this);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t](this)}})}}Lr(Dr,"close");qe(Dr);const wg="button",Tg="bs.button",Og=`.${Tg}`,Cg=".data-api",Sg="active",za='[data-bs-toggle="button"]',Ng=`click${Og}${Cg}`;class Ir extends Ze{static get NAME(){return wg}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(Sg))}static jQueryInterface(t){return this.each(function(){const n=Ir.getOrCreateInstance(this);t==="toggle"&&n[t]()})}}O.on(document,Ng,za,e=>{e.preventDefault();const t=e.target.closest(za);Ir.getOrCreateInstance(t).toggle()});qe(Ir);const xg="swipe",jn=".bs.swipe",Rg=`touchstart${jn}`,Pg=`touchmove${jn}`,Lg=`touchend${jn}`,Dg=`pointerdown${jn}`,Ig=`pointerup${jn}`,$g="touch",Mg="pen",kg="pointer-event",Fg=40,Hg={endCallback:null,leftCallback:null,rightCallback:null},Bg={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class cr extends ys{constructor(t,n){super(),this._element=t,!(!t||!cr.isSupported())&&(this._config=this._getConfig(n),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Hg}static get DefaultType(){return Bg}static get NAME(){return xg}dispose(){O.off(this._element,jn)}_start(t){if(!this._supportPointerEvents){this._deltaX=t.touches[0].clientX;return}this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX)}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Le(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=Fg)return;const n=t/this._deltaX;this._deltaX=0,n&&Le(n>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(O.on(this._element,Dg,t=>this._start(t)),O.on(this._element,Ig,t=>this._end(t)),this._element.classList.add(kg)):(O.on(this._element,Rg,t=>this._start(t)),O.on(this._element,Pg,t=>this._move(t)),O.on(this._element,Lg,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(t.pointerType===Mg||t.pointerType===$g)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Vg="carousel",jg="bs.carousel",Vt=`.${jg}`,Hu=".data-api",Ug="ArrowLeft",Wg="ArrowRight",Kg=500,qn="next",cn="prev",mn="left",Xs="right",qg=`slide${Vt}`,Qr=`slid${Vt}`,zg=`keydown${Vt}`,Yg=`mouseenter${Vt}`,Gg=`mouseleave${Vt}`,Xg=`dragstart${Vt}`,Jg=`load${Vt}${Hu}`,Qg=`click${Vt}${Hu}`,Bu="carousel",Ps="active",Zg="slide",eE="carousel-item-end",tE="carousel-item-start",nE="carousel-item-next",sE="carousel-item-prev",Vu=".active",ju=".carousel-item",rE=Vu+ju,iE=".carousel-item img",oE=".carousel-indicators",aE="[data-bs-slide], [data-bs-slide-to]",lE='[data-bs-ride="carousel"]',cE={[Ug]:Xs,[Wg]:mn},uE={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},fE={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class As extends Ze{constructor(t,n){super(t,n),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=V.findOne(oE,this._element),this._addEventListeners(),this._config.ride===Bu&&this.cycle()}static get Default(){return uE}static get DefaultType(){return fE}static get NAME(){return Vg}next(){this._slide(qn)}nextWhenVisible(){!document.hidden&&Vn(this._element)&&this.next()}prev(){this._slide(cn)}pause(){this._isSliding&&Nu(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){O.one(this._element,Qr,()=>this.cycle());return}this.cycle()}}to(t){const n=this._getItems();if(t>n.length-1||t<0)return;if(this._isSliding){O.one(this._element,Qr,()=>this.to(t));return}const s=this._getItemIndex(this._getActive());if(s===t)return;const r=t>s?qn:cn;this._slide(r,n[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&O.on(this._element,zg,t=>this._keydown(t)),this._config.pause==="hover"&&(O.on(this._element,Yg,()=>this.pause()),O.on(this._element,Gg,()=>this._maybeEnableCycle())),this._config.touch&&cr.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const s of V.find(iE,this._element))O.on(s,Xg,r=>r.preventDefault());const n={leftCallback:()=>this._slide(this._directionToOrder(mn)),rightCallback:()=>this._slide(this._directionToOrder(Xs)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),Kg+this._config.interval))}};this._swipeHelper=new cr(this._element,n)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const n=cE[t.key];n&&(t.preventDefault(),this._slide(this._directionToOrder(n)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const n=V.findOne(Vu,this._indicatorsElement);n.classList.remove(Ps),n.removeAttribute("aria-current");const s=V.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);s&&(s.classList.add(Ps),s.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const n=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=n||this._config.defaultInterval}_slide(t,n=null){if(this._isSliding)return;const s=this._getActive(),r=t===qn,i=n||Co(this._getItems(),s,r,this._config.wrap);if(i===s)return;const o=this._getItemIndex(i),a=m=>O.trigger(this._element,m,{relatedTarget:i,direction:this._orderToDirection(t),from:this._getItemIndex(s),to:o});if(a(qg).defaultPrevented||!s||!i)return;const c=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=i;const u=r?tE:eE,d=r?nE:sE;i.classList.add(d),vs(i),s.classList.add(u),i.classList.add(u);const h=()=>{i.classList.remove(u,d),i.classList.add(Ps),s.classList.remove(Ps,d,u),this._isSliding=!1,a(Qr)};this._queueCallback(h,s,this._isAnimated()),c&&this.cycle()}_isAnimated(){return this._element.classList.contains(Zg)}_getActive(){return V.findOne(rE,this._element)}_getItems(){return V.find(ju,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return We()?t===mn?cn:qn:t===mn?qn:cn}_orderToDirection(t){return We()?t===cn?mn:Xs:t===cn?Xs:mn}static jQueryInterface(t){return this.each(function(){const n=As.getOrCreateInstance(this,t);if(typeof t=="number"){n.to(t);return}if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t]()}})}}O.on(document,Qg,aE,function(e){const t=V.getElementFromSelector(this);if(!t||!t.classList.contains(Bu))return;e.preventDefault();const n=As.getOrCreateInstance(t),s=this.getAttribute("data-bs-slide-to");if(s){n.to(s),n._maybeEnableCycle();return}if(mt.getDataAttribute(this,"slide")==="next"){n.next(),n._maybeEnableCycle();return}n.prev(),n._maybeEnableCycle()});O.on(window,Jg,()=>{const e=V.find(lE);for(const t of e)As.getOrCreateInstance(t)});qe(As);const dE="collapse",hE="bs.collapse",ws=`.${hE}`,pE=".data-api",mE=`show${ws}`,_E=`shown${ws}`,gE=`hide${ws}`,EE=`hidden${ws}`,bE=`click${ws}${pE}`,Zr="show",gn="collapse",Ls="collapsing",vE="collapsed",yE=`:scope .${gn} .${gn}`,AE="collapse-horizontal",wE="width",TE="height",OE=".collapse.show, .collapse.collapsing",Mi='[data-bs-toggle="collapse"]',CE={parent:null,toggle:!0},SE={parent:"(null|element)",toggle:"boolean"};class ps extends Ze{constructor(t,n){super(t,n),this._isTransitioning=!1,this._triggerArray=[];const s=V.find(Mi);for(const r of s){const i=V.getSelectorFromElement(r),o=V.find(i).filter(a=>a===this._element);i!==null&&o.length&&this._triggerArray.push(r)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return CE}static get DefaultType(){return SE}static get NAME(){return dE}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(OE).filter(a=>a!==this._element).map(a=>ps.getOrCreateInstance(a,{toggle:!1}))),t.length&&t[0]._isTransitioning||O.trigger(this._element,mE).defaultPrevented)return;for(const a of t)a.hide();const s=this._getDimension();this._element.classList.remove(gn),this._element.classList.add(Ls),this._element.style[s]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const r=()=>{this._isTransitioning=!1,this._element.classList.remove(Ls),this._element.classList.add(gn,Zr),this._element.style[s]="",O.trigger(this._element,_E)},o=`scroll${s[0].toUpperCase()+s.slice(1)}`;this._queueCallback(r,this._element,!0),this._element.style[s]=`${this._element[o]}px`}hide(){if(this._isTransitioning||!this._isShown()||O.trigger(this._element,gE).defaultPrevented)return;const n=this._getDimension();this._element.style[n]=`${this._element.getBoundingClientRect()[n]}px`,vs(this._element),this._element.classList.add(Ls),this._element.classList.remove(gn,Zr);for(const r of this._triggerArray){const i=V.getElementFromSelector(r);i&&!this._isShown(i)&&this._addAriaAndCollapsedClass([r],!1)}this._isTransitioning=!0;const s=()=>{this._isTransitioning=!1,this._element.classList.remove(Ls),this._element.classList.add(gn),O.trigger(this._element,EE)};this._element.style[n]="",this._queueCallback(s,this._element,!0)}_isShown(t=this._element){return t.classList.contains(Zr)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=kt(t.parent),t}_getDimension(){return this._element.classList.contains(AE)?wE:TE}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Mi);for(const n of t){const s=V.getElementFromSelector(n);s&&this._addAriaAndCollapsedClass([n],this._isShown(s))}}_getFirstLevelChildren(t){const n=V.find(yE,this._config.parent);return V.find(t,this._config.parent).filter(s=>!n.includes(s))}_addAriaAndCollapsedClass(t,n){if(t.length)for(const s of t)s.classList.toggle(vE,!n),s.setAttribute("aria-expanded",n)}static jQueryInterface(t){const n={};return typeof t=="string"&&/show|hide/.test(t)&&(n.toggle=!1),this.each(function(){const s=ps.getOrCreateInstance(this,n);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t]()}})}}O.on(document,bE,Mi,function(e){(e.target.tagName==="A"||e.delegateTarget&&e.delegateTarget.tagName==="A")&&e.preventDefault();for(const t of V.getMultipleElementsFromSelector(this))ps.getOrCreateInstance(t,{toggle:!1}).toggle()});qe(ps);const Ya="dropdown",NE="bs.dropdown",sn=`.${NE}`,No=".data-api",xE="Escape",Ga="Tab",RE="ArrowUp",Xa="ArrowDown",PE=2,LE=`hide${sn}`,DE=`hidden${sn}`,IE=`show${sn}`,$E=`shown${sn}`,Uu=`click${sn}${No}`,Wu=`keydown${sn}${No}`,ME=`keyup${sn}${No}`,_n="show",kE="dropup",FE="dropend",HE="dropstart",BE="dropup-center",VE="dropdown-center",Gt='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',jE=`${Gt}.${_n}`,Js=".dropdown-menu",UE=".navbar",WE=".navbar-nav",KE=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",qE=We()?"top-end":"top-start",zE=We()?"top-start":"top-end",YE=We()?"bottom-end":"bottom-start",GE=We()?"bottom-start":"bottom-end",XE=We()?"left-start":"right-start",JE=We()?"right-start":"left-start",QE="top",ZE="bottom",eb={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},tb={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class ct extends Ze{constructor(t,n){super(t,n),this._popper=null,this._parent=this._element.parentNode,this._menu=V.next(this._element,Js)[0]||V.prev(this._element,Js)[0]||V.findOne(Js,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return eb}static get DefaultType(){return tb}static get NAME(){return Ya}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Ft(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!O.trigger(this._element,IE,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(WE))for(const s of[].concat(...document.body.children))O.on(s,"mouseover",lr);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(_n),this._element.classList.add(_n),O.trigger(this._element,$E,t)}}hide(){if(Ft(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!O.trigger(this._element,LE,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const s of[].concat(...document.body.children))O.off(s,"mouseover",lr);this._popper&&this._popper.destroy(),this._menu.classList.remove(_n),this._element.classList.remove(_n),this._element.setAttribute("aria-expanded","false"),mt.removeDataAttribute(this._menu,"popper"),O.trigger(this._element,DE,t)}}_getConfig(t){if(t=super._getConfig(t),typeof t.reference=="object"&&!pt(t.reference)&&typeof t.reference.getBoundingClientRect!="function")throw new TypeError(`${Ya.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(typeof Cu>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;this._config.reference==="parent"?t=this._parent:pt(this._config.reference)?t=kt(this._config.reference):typeof this._config.reference=="object"&&(t=this._config.reference);const n=this._getPopperConfig();this._popper=Oo(t,this._menu,n)}_isShown(){return this._menu.classList.contains(_n)}_getPlacement(){const t=this._parent;if(t.classList.contains(FE))return XE;if(t.classList.contains(HE))return JE;if(t.classList.contains(BE))return QE;if(t.classList.contains(VE))return ZE;const n=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return t.classList.contains(kE)?n?zE:qE:n?GE:YE}_detectNavbar(){return this._element.closest(UE)!==null}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(n=>Number.parseInt(n,10)):typeof t=="function"?n=>t(n,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(mt.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Le(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:n}){const s=V.find(KE,this._menu).filter(r=>Vn(r));s.length&&Co(s,n,t===Xa,!s.includes(n)).focus()}static jQueryInterface(t){return this.each(function(){const n=ct.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}static clearMenus(t){if(t.button===PE||t.type==="keyup"&&t.key!==Ga)return;const n=V.find(jE);for(const s of n){const r=ct.getInstance(s);if(!r||r._config.autoClose===!1)continue;const i=t.composedPath(),o=i.includes(r._menu);if(i.includes(r._element)||r._config.autoClose==="inside"&&!o||r._config.autoClose==="outside"&&o||r._menu.contains(t.target)&&(t.type==="keyup"&&t.key===Ga||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const a={relatedTarget:r._element};t.type==="click"&&(a.clickEvent=t),r._completeHide(a)}}static dataApiKeydownHandler(t){const n=/input|textarea/i.test(t.target.tagName),s=t.key===xE,r=[RE,Xa].includes(t.key);if(!r&&!s||n&&!s)return;t.preventDefault();const i=this.matches(Gt)?this:V.prev(this,Gt)[0]||V.next(this,Gt)[0]||V.findOne(Gt,t.delegateTarget.parentNode),o=ct.getOrCreateInstance(i);if(r){t.stopPropagation(),o.show(),o._selectMenuItem(t);return}o._isShown()&&(t.stopPropagation(),o.hide(),i.focus())}}O.on(document,Wu,Gt,ct.dataApiKeydownHandler);O.on(document,Wu,Js,ct.dataApiKeydownHandler);O.on(document,Uu,ct.clearMenus);O.on(document,ME,ct.clearMenus);O.on(document,Uu,Gt,function(e){e.preventDefault(),ct.getOrCreateInstance(this).toggle()});qe(ct);const Ja=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Qa=".sticky-top",Ds="padding-right",Za="margin-right";class ki{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Ds,n=>n+t),this._setElementAttributes(Ja,Ds,n=>n+t),this._setElementAttributes(Qa,Za,n=>n-t)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Ds),this._resetElementAttributes(Ja,Ds),this._resetElementAttributes(Qa,Za)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,n,s){const r=this.getWidth(),i=o=>{if(o!==this._element&&window.innerWidth>o.clientWidth+r)return;this._saveInitialAttribute(o,n);const a=window.getComputedStyle(o).getPropertyValue(n);o.style.setProperty(n,`${s(Number.parseFloat(a))}px`)};this._applyManipulationCallback(t,i)}_saveInitialAttribute(t,n){const s=t.style.getPropertyValue(n);s&&mt.setDataAttribute(t,n,s)}_resetElementAttributes(t,n){const s=r=>{const i=mt.getDataAttribute(r,n);if(i===null){r.style.removeProperty(n);return}mt.removeDataAttribute(r,n),r.style.setProperty(n,i)};this._applyManipulationCallback(t,s)}_applyManipulationCallback(t,n){if(pt(t)){n(t);return}for(const s of V.find(t,this._element))n(s)}}const Ku="backdrop",nb="fade",el="show",tl=`mousedown.bs.${Ku}`,sb={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},rb={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class qu extends ys{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return sb}static get DefaultType(){return rb}static get NAME(){return Ku}show(t){if(!this._config.isVisible){Le(t);return}this._append();const n=this._getElement();this._config.isAnimated&&vs(n),n.classList.add(el),this._emulateAnimation(()=>{Le(t)})}hide(t){if(!this._config.isVisible){Le(t);return}this._getElement().classList.remove(el),this._emulateAnimation(()=>{this.dispose(),Le(t)})}dispose(){this._isAppended&&(O.off(this._element,tl),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add(nb),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=kt(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),O.on(t,tl,()=>{Le(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){Pu(t,this._getElement(),this._config.isAnimated)}}const ib="focustrap",ob="bs.focustrap",ur=`.${ob}`,ab=`focusin${ur}`,lb=`keydown.tab${ur}`,cb="Tab",ub="forward",nl="backward",fb={autofocus:!0,trapElement:null},db={autofocus:"boolean",trapElement:"element"};class zu extends ys{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return fb}static get DefaultType(){return db}static get NAME(){return ib}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),O.off(document,ur),O.on(document,ab,t=>this._handleFocusin(t)),O.on(document,lb,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,O.off(document,ur))}_handleFocusin(t){const{trapElement:n}=this._config;if(t.target===document||t.target===n||n.contains(t.target))return;const s=V.focusableChildren(n);s.length===0?n.focus():this._lastTabNavDirection===nl?s[s.length-1].focus():s[0].focus()}_handleKeydown(t){t.key===cb&&(this._lastTabNavDirection=t.shiftKey?nl:ub)}}const hb="modal",pb="bs.modal",et=`.${pb}`,mb=".data-api",_b="Escape",gb=`hide${et}`,Eb=`hidePrevented${et}`,Yu=`hidden${et}`,Gu=`show${et}`,bb=`shown${et}`,vb=`resize${et}`,yb=`click.dismiss${et}`,Ab=`mousedown.dismiss${et}`,wb=`keydown.dismiss${et}`,Tb=`click${et}${mb}`,sl="modal-open",Ob="fade",rl="show",ei="modal-static",Cb=".modal.show",Sb=".modal-dialog",Nb=".modal-body",xb='[data-bs-toggle="modal"]',Rb={backdrop:!0,focus:!0,keyboard:!0},Pb={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Dn extends Ze{constructor(t,n){super(t,n),this._dialog=V.findOne(Sb,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ki,this._addEventListeners()}static get Default(){return Rb}static get DefaultType(){return Pb}static get NAME(){return hb}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||O.trigger(this._element,Gu,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(sl),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){!this._isShown||this._isTransitioning||O.trigger(this._element,gb).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(rl),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){for(const t of[window,this._dialog])O.off(t,et);this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new qu({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new zu({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const n=V.findOne(Nb,this._dialog);n&&(n.scrollTop=0),vs(this._element),this._element.classList.add(rl);const s=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,O.trigger(this._element,bb,{relatedTarget:t})};this._queueCallback(s,this._dialog,this._isAnimated())}_addEventListeners(){O.on(this._element,wb,t=>{if(t.key===_b){if(this._config.keyboard){t.preventDefault(),this.hide();return}this._triggerBackdropTransition()}}),O.on(window,vb,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),O.on(this._element,Ab,t=>{O.one(this._element,yb,n=>{if(!(this._element!==t.target||this._element!==n.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(sl),this._resetAdjustments(),this._scrollBar.reset(),O.trigger(this._element,Yu)})}_isAnimated(){return this._element.classList.contains(Ob)}_triggerBackdropTransition(){if(O.trigger(this._element,Eb).defaultPrevented)return;const n=this._element.scrollHeight>document.documentElement.clientHeight,s=this._element.style.overflowY;s==="hidden"||this._element.classList.contains(ei)||(n||(this._element.style.overflowY="hidden"),this._element.classList.add(ei),this._queueCallback(()=>{this._element.classList.remove(ei),this._queueCallback(()=>{this._element.style.overflowY=s},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,n=this._scrollBar.getWidth(),s=n>0;if(s&&!t){const r=We()?"paddingLeft":"paddingRight";this._element.style[r]=`${n}px`}if(!s&&t){const r=We()?"paddingRight":"paddingLeft";this._element.style[r]=`${n}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,n){return this.each(function(){const s=Dn.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](n)}})}}O.on(document,Tb,xb,function(e){const t=V.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),O.one(t,Gu,r=>{r.defaultPrevented||O.one(t,Yu,()=>{Vn(this)&&this.focus()})});const n=V.findOne(Cb);n&&Dn.getInstance(n).hide(),Dn.getOrCreateInstance(t).toggle(this)});Lr(Dn);qe(Dn);const Lb="offcanvas",Db="bs.offcanvas",vt=`.${Db}`,Xu=".data-api",Ib=`load${vt}${Xu}`,$b="Escape",il="show",ol="showing",al="hiding",Mb="offcanvas-backdrop",Ju=".offcanvas.show",kb=`show${vt}`,Fb=`shown${vt}`,Hb=`hide${vt}`,ll=`hidePrevented${vt}`,Qu=`hidden${vt}`,Bb=`resize${vt}`,Vb=`click${vt}${Xu}`,jb=`keydown.dismiss${vt}`,Ub='[data-bs-toggle="offcanvas"]',Wb={backdrop:!0,keyboard:!0,scroll:!1},Kb={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Ht extends Ze{constructor(t,n){super(t,n),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Wb}static get DefaultType(){return Kb}static get NAME(){return Lb}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||O.trigger(this._element,kb,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new ki().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ol);const s=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(il),this._element.classList.remove(ol),O.trigger(this._element,Fb,{relatedTarget:t})};this._queueCallback(s,this._element,!0)}hide(){if(!this._isShown||O.trigger(this._element,Hb).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(al),this._backdrop.hide();const n=()=>{this._element.classList.remove(il,al),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new ki().reset(),O.trigger(this._element,Qu)};this._queueCallback(n,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=()=>{if(this._config.backdrop==="static"){O.trigger(this._element,ll);return}this.hide()},n=Boolean(this._config.backdrop);return new qu({className:Mb,isVisible:n,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:n?t:null})}_initializeFocusTrap(){return new zu({trapElement:this._element})}_addEventListeners(){O.on(this._element,jb,t=>{if(t.key===$b){if(!this._config.keyboard){O.trigger(this._element,ll);return}this.hide()}})}static jQueryInterface(t){return this.each(function(){const n=Ht.getOrCreateInstance(this,t);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t](this)}})}}O.on(document,Vb,Ub,function(e){const t=V.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),Ft(this))return;O.one(t,Qu,()=>{Vn(this)&&this.focus()});const n=V.findOne(Ju);n&&n!==t&&Ht.getInstance(n).hide(),Ht.getOrCreateInstance(t).toggle(this)});O.on(window,Ib,()=>{for(const e of V.find(Ju))Ht.getOrCreateInstance(e).show()});O.on(window,Bb,()=>{for(const e of V.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(e).position!=="fixed"&&Ht.getOrCreateInstance(e).hide()});Lr(Ht);qe(Ht);const qb=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),zb=/^aria-[\w-]*$/i,Yb=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Gb=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xb=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?qb.has(n)?Boolean(Yb.test(e.nodeValue)||Gb.test(e.nodeValue)):!0:t.filter(s=>s instanceof RegExp).some(s=>s.test(n))},Zu={"*":["class","dir","id","lang","role",zb],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};function Jb(e,t,n){if(!e.length)return e;if(n&&typeof n=="function")return n(e);const r=new window.DOMParser().parseFromString(e,"text/html"),i=[].concat(...r.body.querySelectorAll("*"));for(const o of i){const a=o.nodeName.toLowerCase();if(!Object.keys(t).includes(a)){o.remove();continue}const l=[].concat(...o.attributes),c=[].concat(t["*"]||[],t[a]||[]);for(const u of l)Xb(u,c)||o.removeAttribute(u.nodeName)}return r.body.innerHTML}const Qb="TemplateFactory",Zb={allowList:Zu,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},ev={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},tv={entry:"(string|element|function|null)",selector:"(string|element)"};class nv extends ys{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Zb}static get DefaultType(){return ev}static get NAME(){return Qb}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[r,i]of Object.entries(this._config.content))this._setContent(t,i,r);const n=t.children[0],s=this._resolvePossibleFunction(this._config.extraClass);return s&&n.classList.add(...s.split(" ")),n}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[n,s]of Object.entries(t))super._typeCheckConfig({selector:n,entry:s},tv)}_setContent(t,n,s){const r=V.findOne(s,t);if(r){if(n=this._resolvePossibleFunction(n),!n){r.remove();return}if(pt(n)){this._putElementInTemplate(kt(n),r);return}if(this._config.html){r.innerHTML=this._maybeSanitize(n);return}r.textContent=n}}_maybeSanitize(t){return this._config.sanitize?Jb(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Le(t,[this])}_putElementInTemplate(t,n){if(this._config.html){n.innerHTML="",n.append(t);return}n.textContent=t.textContent}}const sv="tooltip",rv=new Set(["sanitize","allowList","sanitizeFn"]),ti="fade",iv="modal",Is="show",ov=".tooltip-inner",cl=`.${iv}`,ul="hide.bs.modal",zn="hover",ni="focus",av="click",lv="manual",cv="hide",uv="hidden",fv="show",dv="shown",hv="inserted",pv="click",mv="focusin",_v="focusout",gv="mouseenter",Ev="mouseleave",bv={AUTO:"auto",TOP:"top",RIGHT:We()?"left":"right",BOTTOM:"bottom",LEFT:We()?"right":"left"},vv={allowList:Zu,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},yv={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class rn extends Ze{constructor(t,n){if(typeof Cu>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,n),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return vv}static get DefaultType(){return yv}static get NAME(){return sv}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),O.off(this._element.closest(cl),ul,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const t=O.trigger(this._element,this.constructor.eventName(fv)),s=(xu(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!s)return;this._disposePopper();const r=this._getTipElement();this._element.setAttribute("aria-describedby",r.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(r),O.trigger(this._element,this.constructor.eventName(hv))),this._popper=this._createPopper(r),r.classList.add(Is),"ontouchstart"in document.documentElement)for(const a of[].concat(...document.body.children))O.on(a,"mouseover",lr);const o=()=>{O.trigger(this._element,this.constructor.eventName(dv)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(o,this.tip,this._isAnimated())}hide(){if(!this._isShown()||O.trigger(this._element,this.constructor.eventName(cv)).defaultPrevented)return;if(this._getTipElement().classList.remove(Is),"ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))O.off(r,"mouseover",lr);this._activeTrigger[av]=!1,this._activeTrigger[ni]=!1,this._activeTrigger[zn]=!1,this._isHovered=null;const s=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),O.trigger(this._element,this.constructor.eventName(uv)))};this._queueCallback(s,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const n=this._getTemplateFactory(t).toHtml();if(!n)return null;n.classList.remove(ti,Is),n.classList.add(`bs-${this.constructor.NAME}-auto`);const s=og(this.constructor.NAME).toString();return n.setAttribute("id",s),this._isAnimated()&&n.classList.add(ti),n}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new nv({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[ov]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ti)}_isShown(){return this.tip&&this.tip.classList.contains(Is)}_createPopper(t){const n=Le(this._config.placement,[this,t,this._element]),s=bv[n.toUpperCase()];return Oo(this._element,t,this._getPopperConfig(s))}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(n=>Number.parseInt(n,10)):typeof t=="function"?n=>t(n,this._element):t}_resolvePossibleFunction(t){return Le(t,[this._element])}_getPopperConfig(t){const n={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:s=>{this._getTipElement().setAttribute("data-popper-placement",s.state.placement)}}]};return{...n,...Le(this._config.popperConfig,[n])}}_setListeners(){const t=this._config.trigger.split(" ");for(const n of t)if(n==="click")O.on(this._element,this.constructor.eventName(pv),this._config.selector,s=>{this._initializeOnDelegatedTarget(s).toggle()});else if(n!==lv){const s=n===zn?this.constructor.eventName(gv):this.constructor.eventName(mv),r=n===zn?this.constructor.eventName(Ev):this.constructor.eventName(_v);O.on(this._element,s,this._config.selector,i=>{const o=this._initializeOnDelegatedTarget(i);o._activeTrigger[i.type==="focusin"?ni:zn]=!0,o._enter()}),O.on(this._element,r,this._config.selector,i=>{const o=this._initializeOnDelegatedTarget(i);o._activeTrigger[i.type==="focusout"?ni:zn]=o._element.contains(i.relatedTarget),o._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},O.on(this._element.closest(cl),ul,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,n){clearTimeout(this._timeout),this._timeout=setTimeout(t,n)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const n=mt.getDataAttributes(this._element);for(const s of Object.keys(n))rv.has(s)&&delete n[s];return t={...n,...typeof t=="object"&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=t.container===!1?document.body:kt(t.container),typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title=="number"&&(t.title=t.title.toString()),typeof t.content=="number"&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[n,s]of Object.entries(this._config))this.constructor.Default[n]!==s&&(t[n]=s);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const n=rn.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}}qe(rn);const Av="popover",wv=".popover-header",Tv=".popover-body",Ov={...rn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Cv={...rn.DefaultType,content:"(null|string|element|function)"};class xo extends rn{static get Default(){return Ov}static get DefaultType(){return Cv}static get NAME(){return Av}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[wv]:this._getTitle(),[Tv]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const n=xo.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}}qe(xo);const Sv="scrollspy",Nv="bs.scrollspy",Ro=`.${Nv}`,xv=".data-api",Rv=`activate${Ro}`,fl=`click${Ro}`,Pv=`load${Ro}${xv}`,Lv="dropdown-item",un="active",Dv='[data-bs-spy="scroll"]',si="[href]",Iv=".nav, .list-group",dl=".nav-link",$v=".nav-item",Mv=".list-group-item",kv=`${dl}, ${$v} > ${dl}, ${Mv}`,Fv=".dropdown",Hv=".dropdown-toggle",Bv={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Vv={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class $r extends Ze{constructor(t,n){super(t,n),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Bv}static get DefaultType(){return Vv}static get NAME(){return Sv}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=kt(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,typeof t.threshold=="string"&&(t.threshold=t.threshold.split(",").map(n=>Number.parseFloat(n))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(O.off(this._config.target,fl),O.on(this._config.target,fl,si,t=>{const n=this._observableSections.get(t.target.hash);if(n){t.preventDefault();const s=this._rootElement||window,r=n.offsetTop-this._element.offsetTop;if(s.scrollTo){s.scrollTo({top:r,behavior:"smooth"});return}s.scrollTop=r}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(n=>this._observerCallback(n),t)}_observerCallback(t){const n=o=>this._targetLinks.get(`#${o.target.id}`),s=o=>{this._previousScrollData.visibleEntryTop=o.target.offsetTop,this._process(n(o))},r=(this._rootElement||document.documentElement).scrollTop,i=r>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=r;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(n(o));continue}const a=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(i&&a){if(s(o),!r)return;continue}!i&&!a&&s(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=V.find(si,this._config.target);for(const n of t){if(!n.hash||Ft(n))continue;const s=V.findOne(n.hash,this._element);Vn(s)&&(this._targetLinks.set(n.hash,n),this._observableSections.set(n.hash,s))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(un),this._activateParents(t),O.trigger(this._element,Rv,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(Lv)){V.findOne(Hv,t.closest(Fv)).classList.add(un);return}for(const n of V.parents(t,Iv))for(const s of V.prev(n,kv))s.classList.add(un)}_clearActiveClass(t){t.classList.remove(un);const n=V.find(`${si}.${un}`,t);for(const s of n)s.classList.remove(un)}static jQueryInterface(t){return this.each(function(){const n=$r.getOrCreateInstance(this,t);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t]()}})}}O.on(window,Pv,()=>{for(const e of V.find(Dv))$r.getOrCreateInstance(e)});qe($r);const jv="tab",Uv="bs.tab",on=`.${Uv}`,Wv=`hide${on}`,Kv=`hidden${on}`,qv=`show${on}`,zv=`shown${on}`,Yv=`click${on}`,Gv=`keydown${on}`,Xv=`load${on}`,Jv="ArrowLeft",hl="ArrowRight",Qv="ArrowUp",pl="ArrowDown",Xt="active",ml="fade",ri="show",Zv="dropdown",ey=".dropdown-toggle",ty=".dropdown-menu",ii=":not(.dropdown-toggle)",ny='.list-group, .nav, [role="tablist"]',sy=".nav-item, .list-group-item",ry=`.nav-link${ii}, .list-group-item${ii}, [role="tab"]${ii}`,ef='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',oi=`${ry}, ${ef}`,iy=`.${Xt}[data-bs-toggle="tab"], .${Xt}[data-bs-toggle="pill"], .${Xt}[data-bs-toggle="list"]`;class In extends Ze{constructor(t){super(t),this._parent=this._element.closest(ny),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),O.on(this._element,Gv,n=>this._keydown(n)))}static get NAME(){return jv}show(){const t=this._element;if(this._elemIsActive(t))return;const n=this._getActiveElem(),s=n?O.trigger(n,Wv,{relatedTarget:t}):null;O.trigger(t,qv,{relatedTarget:n}).defaultPrevented||s&&s.defaultPrevented||(this._deactivate(n,t),this._activate(t,n))}_activate(t,n){if(!t)return;t.classList.add(Xt),this._activate(V.getElementFromSelector(t));const s=()=>{if(t.getAttribute("role")!=="tab"){t.classList.add(ri);return}t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),O.trigger(t,zv,{relatedTarget:n})};this._queueCallback(s,t,t.classList.contains(ml))}_deactivate(t,n){if(!t)return;t.classList.remove(Xt),t.blur(),this._deactivate(V.getElementFromSelector(t));const s=()=>{if(t.getAttribute("role")!=="tab"){t.classList.remove(ri);return}t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),O.trigger(t,Kv,{relatedTarget:n})};this._queueCallback(s,t,t.classList.contains(ml))}_keydown(t){if(![Jv,hl,Qv,pl].includes(t.key))return;t.stopPropagation(),t.preventDefault();const n=[hl,pl].includes(t.key),s=Co(this._getChildren().filter(r=>!Ft(r)),t.target,n,!0);s&&(s.focus({preventScroll:!0}),In.getOrCreateInstance(s).show())}_getChildren(){return V.find(oi,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,n){this._setAttributeIfNotExists(t,"role","tablist");for(const s of n)this._setInitialAttributesOnChild(s)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const n=this._elemIsActive(t),s=this._getOuterElement(t);t.setAttribute("aria-selected",n),s!==t&&this._setAttributeIfNotExists(s,"role","presentation"),n||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const n=V.getElementFromSelector(t);n&&(this._setAttributeIfNotExists(n,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(n,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,n){const s=this._getOuterElement(t);if(!s.classList.contains(Zv))return;const r=(i,o)=>{const a=V.findOne(i,s);a&&a.classList.toggle(o,n)};r(ey,Xt),r(ty,ri),s.setAttribute("aria-expanded",n)}_setAttributeIfNotExists(t,n,s){t.hasAttribute(n)||t.setAttribute(n,s)}_elemIsActive(t){return t.classList.contains(Xt)}_getInnerElement(t){return t.matches(oi)?t:V.findOne(oi,t)}_getOuterElement(t){return t.closest(sy)||t}static jQueryInterface(t){return this.each(function(){const n=In.getOrCreateInstance(this);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t]()}})}}O.on(document,Yv,ef,function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),!Ft(this)&&In.getOrCreateInstance(this).show()});O.on(window,Xv,()=>{for(const e of V.find(iy))In.getOrCreateInstance(e)});qe(In);const oy="toast",ay="bs.toast",jt=`.${ay}`,ly=`mouseover${jt}`,cy=`mouseout${jt}`,uy=`focusin${jt}`,fy=`focusout${jt}`,dy=`hide${jt}`,hy=`hidden${jt}`,py=`show${jt}`,my=`shown${jt}`,_y="fade",_l="hide",$s="show",Ms="showing",gy={animation:"boolean",autohide:"boolean",delay:"number"},Ey={animation:!0,autohide:!0,delay:5e3};class Ts extends Ze{constructor(t,n){super(t,n),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Ey}static get DefaultType(){return gy}static get NAME(){return oy}show(){if(O.trigger(this._element,py).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(_y);const n=()=>{this._element.classList.remove(Ms),O.trigger(this._element,my),this._maybeScheduleHide()};this._element.classList.remove(_l),vs(this._element),this._element.classList.add($s,Ms),this._queueCallback(n,this._element,this._config.animation)}hide(){if(!this.isShown()||O.trigger(this._element,dy).defaultPrevented)return;const n=()=>{this._element.classList.add(_l),this._element.classList.remove(Ms,$s),O.trigger(this._element,hy)};this._element.classList.add(Ms),this._queueCallback(n,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove($s),super.dispose()}isShown(){return this._element.classList.contains($s)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,n){switch(t.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=n;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=n;break}}if(n){this._clearTimeout();return}const s=t.relatedTarget;this._element===s||this._element.contains(s)||this._maybeScheduleHide()}_setListeners(){O.on(this._element,ly,t=>this._onInteraction(t,!0)),O.on(this._element,cy,t=>this._onInteraction(t,!1)),O.on(this._element,uy,t=>this._onInteraction(t,!0)),O.on(this._element,fy,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const n=Ts.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t](this)}})}}Lr(Ts);qe(Ts);const tf=[{path:"/",name:"index",component:()=>wt(()=>import("./Index-9cef052a.js"),["assets/Index-9cef052a.js","assets/http-419d7b2b.js"]),meta:{title:"欢迎"}},{path:"/tunnels",name:"tunnels",component:()=>wt(()=>import("./Index-3dd3acd6.js"),["assets/Index-3dd3acd6.js","assets/http-419d7b2b.js"]),meta:{title:"隧道"}},{path:"/tunnels/create",name:"tunnels.create",component:()=>wt(()=>import("./Create-5885dd13.js"),["assets/Create-5885dd13.js","assets/http-419d7b2b.js"]),meta:{title:"创建隧道"}},{path:"/tunnels/:id",name:"tunnels.show",component:()=>wt(()=>import("./Show-f0c4e11e.js"),["assets/Show-f0c4e11e.js","assets/http-419d7b2b.js"]),meta:{title:"隧道"}},{path:"/downloads",name:"downloads",component:()=>wt(()=>import("./Downloads-1fe05572.js"),[]),meta:{title:"客户端下载"}},{path:"/sign",name:"sign",component:()=>wt(()=>import("./Sign-152c9e31.js"),["assets/Sign-152c9e31.js","assets/http-419d7b2b.js"]),meta:{title:"签到"}},{path:"/charge",name:"charge",component:()=>wt(()=>import("./Charge-3c0346d5.js"),["assets/Charge-3c0346d5.js","assets/http-419d7b2b.js"]),meta:{title:"流量充值"}},{path:"/ticket",name:"ticket",component:()=>wt(()=>import("./Ticket-fb342565.js"),["assets/Ticket-fb342565.js","assets/http-419d7b2b.js","assets/Ticket-41ca6517.css"]),meta:{title:"发布工单"}}],by=()=>window.Base.User.is_admin,nf=m_({history:Pm(),routes:tf});tf.forEach(e=>{nf.beforeEach((t,n)=>{new rn(document.body,{selector:"[data-bs-toggle='tooltip']"}),Array.from(document.querySelectorAll(".toast")).forEach(s=>new Ts(s))}),e.beforeEnter=(t,n,s)=>{e.meta.admin&&!by()?s({name:"index"}):s()}});/*! + */const sg=1e6,rg=1e3,Ii="transitionend",Su=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,(t,n)=>`#${CSS.escape(n)}`)),e),ig=e=>e==null?`${e}`:Object.prototype.toString.call(e).match(/\s([a-z]+)/i)[1].toLowerCase(),og=e=>{do e+=Math.floor(Math.random()*sg);while(document.getElementById(e));return e},ag=e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const s=Number.parseFloat(t),r=Number.parseFloat(n);return!s&&!r?0:(t=t.split(",")[0],n=n.split(",")[0],(Number.parseFloat(t)+Number.parseFloat(n))*rg)},Nu=e=>{e.dispatchEvent(new Event(Ii))},pt=e=>!e||typeof e!="object"?!1:(typeof e.jquery<"u"&&(e=e[0]),typeof e.nodeType<"u"),kt=e=>pt(e)?e.jquery?e[0]:e:typeof e=="string"&&e.length>0?document.querySelector(Su(e)):null,Vn=e=>{if(!pt(e)||e.getClientRects().length===0)return!1;const t=getComputedStyle(e).getPropertyValue("visibility")==="visible",n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const s=e.closest("summary");if(s&&s.parentNode!==n||s===null)return!1}return t},Ft=e=>!e||e.nodeType!==Node.ELEMENT_NODE||e.classList.contains("disabled")?!0:typeof e.disabled<"u"?e.disabled:e.hasAttribute("disabled")&&e.getAttribute("disabled")!=="false",xu=e=>{if(!document.documentElement.attachShadow)return null;if(typeof e.getRootNode=="function"){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?xu(e.parentNode):null},lr=()=>{},vs=e=>{e.offsetHeight},Ru=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,zr=[],lg=e=>{document.readyState==="loading"?(zr.length||document.addEventListener("DOMContentLoaded",()=>{for(const t of zr)t()}),zr.push(e)):e()},We=()=>document.documentElement.dir==="rtl",qe=e=>{lg(()=>{const t=Ru();if(t){const n=e.NAME,s=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=s,e.jQueryInterface)}})},Le=(e,t=[],n=e)=>typeof e=="function"?e(...t):n,Pu=(e,t,n=!0)=>{if(!n){Le(e);return}const s=5,r=ag(t)+s;let i=!1;const o=({target:a})=>{a===t&&(i=!0,t.removeEventListener(Ii,o),Le(e))};t.addEventListener(Ii,o),setTimeout(()=>{i||Nu(t)},r)},Co=(e,t,n,s)=>{const r=e.length;let i=e.indexOf(t);return i===-1?!n&&s?e[r-1]:e[0]:(i+=n?1:-1,s&&(i=(i+r)%r),e[Math.max(0,Math.min(i,r-1))])},cg=/[^.]*(?=\..*)\.|.*/,ug=/\..*/,fg=/::\d+$/,Yr={};let Wa=1;const Lu={mouseenter:"mouseover",mouseleave:"mouseout"},dg=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Du(e,t){return t&&`${t}::${Wa++}`||e.uidEvent||Wa++}function Iu(e){const t=Du(e);return e.uidEvent=t,Yr[t]=Yr[t]||{},Yr[t]}function hg(e,t){return function n(s){return So(s,{delegateTarget:e}),n.oneOff&&O.off(e,s.type,t),t.apply(e,[s])}}function pg(e,t,n){return function s(r){const i=e.querySelectorAll(t);for(let{target:o}=r;o&&o!==this;o=o.parentNode)for(const a of i)if(a===o)return So(r,{delegateTarget:o}),s.oneOff&&O.off(e,r.type,t,n),n.apply(o,[r])}}function $u(e,t,n=null){return Object.values(e).find(s=>s.callable===t&&s.delegationSelector===n)}function Mu(e,t,n){const s=typeof t=="string",r=s?n:t||n;let i=ku(e);return dg.has(i)||(i=e),[s,r,i]}function Ka(e,t,n,s,r){if(typeof t!="string"||!e)return;let[i,o,a]=Mu(t,n,s);t in Lu&&(o=(_=>function(E){if(!E.relatedTarget||E.relatedTarget!==E.delegateTarget&&!E.delegateTarget.contains(E.relatedTarget))return _.call(this,E)})(o));const l=Iu(e),c=l[a]||(l[a]={}),u=$u(c,o,i?n:null);if(u){u.oneOff=u.oneOff&&r;return}const d=Du(o,t.replace(cg,"")),h=i?pg(e,n,o):hg(e,o);h.delegationSelector=i?n:null,h.callable=o,h.oneOff=r,h.uidEvent=d,c[d]=h,e.addEventListener(a,h,i)}function $i(e,t,n,s,r){const i=$u(t[n],s,r);i&&(e.removeEventListener(n,i,Boolean(r)),delete t[n][i.uidEvent])}function mg(e,t,n,s){const r=t[n]||{};for(const[i,o]of Object.entries(r))i.includes(s)&&$i(e,t,n,o.callable,o.delegationSelector)}function ku(e){return e=e.replace(ug,""),Lu[e]||e}const O={on(e,t,n,s){Ka(e,t,n,s,!1)},one(e,t,n,s){Ka(e,t,n,s,!0)},off(e,t,n,s){if(typeof t!="string"||!e)return;const[r,i,o]=Mu(t,n,s),a=o!==t,l=Iu(e),c=l[o]||{},u=t.startsWith(".");if(typeof i<"u"){if(!Object.keys(c).length)return;$i(e,l,o,i,r?n:null);return}if(u)for(const d of Object.keys(l))mg(e,l,d,t.slice(1));for(const[d,h]of Object.entries(c)){const m=d.replace(fg,"");(!a||t.includes(m))&&$i(e,l,o,h.callable,h.delegationSelector)}},trigger(e,t,n){if(typeof t!="string"||!e)return null;const s=Ru(),r=ku(t),i=t!==r;let o=null,a=!0,l=!0,c=!1;i&&s&&(o=s.Event(t,n),s(e).trigger(o),a=!o.isPropagationStopped(),l=!o.isImmediatePropagationStopped(),c=o.isDefaultPrevented());let u=new Event(t,{bubbles:a,cancelable:!0});return u=So(u,n),c&&u.preventDefault(),l&&e.dispatchEvent(u),u.defaultPrevented&&o&&o.preventDefault(),u}};function So(e,t={}){for(const[n,s]of Object.entries(t))try{e[n]=s}catch{Object.defineProperty(e,n,{configurable:!0,get(){return s}})}return e}const Ct=new Map,Gr={set(e,t,n){Ct.has(e)||Ct.set(e,new Map);const s=Ct.get(e);if(!s.has(t)&&s.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`);return}s.set(t,n)},get(e,t){return Ct.has(e)&&Ct.get(e).get(t)||null},remove(e,t){if(!Ct.has(e))return;const n=Ct.get(e);n.delete(t),n.size===0&&Ct.delete(e)}};function qa(e){if(e==="true")return!0;if(e==="false")return!1;if(e===Number(e).toString())return Number(e);if(e===""||e==="null")return null;if(typeof e!="string")return e;try{return JSON.parse(decodeURIComponent(e))}catch{return e}}function Xr(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}const mt={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${Xr(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${Xr(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter(s=>s.startsWith("bs")&&!s.startsWith("bsConfig"));for(const s of n){let r=s.replace(/^bs/,"");r=r.charAt(0).toLowerCase()+r.slice(1,r.length),t[r]=qa(e.dataset[s])}return t},getDataAttribute(e,t){return qa(e.getAttribute(`data-bs-${Xr(t)}`))}};class ys{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,n){const s=pt(n)?mt.getDataAttribute(n,"config"):{};return{...this.constructor.Default,...typeof s=="object"?s:{},...pt(n)?mt.getDataAttributes(n):{},...typeof t=="object"?t:{}}}_typeCheckConfig(t,n=this.constructor.DefaultType){for(const[s,r]of Object.entries(n)){const i=t[s],o=pt(i)?"element":ig(i);if(!new RegExp(r).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${s}" provided type "${o}" but expected type "${r}".`)}}}const _g="5.3.0-alpha1";class Ze extends ys{constructor(t,n){super(),t=kt(t),t&&(this._element=t,this._config=this._getConfig(n),Gr.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Gr.remove(this._element,this.constructor.DATA_KEY),O.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,n,s=!0){Pu(t,n,s)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return Gr.get(kt(t),this.DATA_KEY)}static getOrCreateInstance(t,n={}){return this.getInstance(t)||new this(t,typeof n=="object"?n:null)}static get VERSION(){return _g}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const Jr=e=>{let t=e.getAttribute("data-bs-target");if(!t||t==="#"){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&n!=="#"?n.trim():null}return Su(t)},V={find(e,t=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(t,e))},findOne(e,t=document.documentElement){return Element.prototype.querySelector.call(t,e)},children(e,t){return[].concat(...e.children).filter(n=>n.matches(t))},parents(e,t){const n=[];let s=e.parentNode.closest(t);for(;s;)n.push(s),s=s.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(n=>`${n}:not([tabindex^="-"])`).join(",");return this.find(t,e).filter(n=>!Ft(n)&&Vn(n))},getSelectorFromElement(e){const t=Jr(e);return t&&V.findOne(t)?t:null},getElementFromSelector(e){const t=Jr(e);return t?V.findOne(t):null},getMultipleElementsFromSelector(e){const t=Jr(e);return t?V.find(t):[]}},Lr=(e,t="hide")=>{const n=`click.dismiss${e.EVENT_KEY}`,s=e.NAME;O.on(document,n,`[data-bs-dismiss="${s}"]`,function(r){if(["A","AREA"].includes(this.tagName)&&r.preventDefault(),Ft(this))return;const i=V.getElementFromSelector(this)||this.closest(`.${s}`);e.getOrCreateInstance(i)[t]()})},gg="alert",Eg="bs.alert",Fu=`.${Eg}`,bg=`close${Fu}`,vg=`closed${Fu}`,yg="fade",Ag="show";class Dr extends Ze{static get NAME(){return gg}close(){if(O.trigger(this._element,bg).defaultPrevented)return;this._element.classList.remove(Ag);const n=this._element.classList.contains(yg);this._queueCallback(()=>this._destroyElement(),this._element,n)}_destroyElement(){this._element.remove(),O.trigger(this._element,vg),this.dispose()}static jQueryInterface(t){return this.each(function(){const n=Dr.getOrCreateInstance(this);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t](this)}})}}Lr(Dr,"close");qe(Dr);const wg="button",Tg="bs.button",Og=`.${Tg}`,Cg=".data-api",Sg="active",za='[data-bs-toggle="button"]',Ng=`click${Og}${Cg}`;class Ir extends Ze{static get NAME(){return wg}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(Sg))}static jQueryInterface(t){return this.each(function(){const n=Ir.getOrCreateInstance(this);t==="toggle"&&n[t]()})}}O.on(document,Ng,za,e=>{e.preventDefault();const t=e.target.closest(za);Ir.getOrCreateInstance(t).toggle()});qe(Ir);const xg="swipe",jn=".bs.swipe",Rg=`touchstart${jn}`,Pg=`touchmove${jn}`,Lg=`touchend${jn}`,Dg=`pointerdown${jn}`,Ig=`pointerup${jn}`,$g="touch",Mg="pen",kg="pointer-event",Fg=40,Hg={endCallback:null,leftCallback:null,rightCallback:null},Bg={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class cr extends ys{constructor(t,n){super(),this._element=t,!(!t||!cr.isSupported())&&(this._config=this._getConfig(n),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Hg}static get DefaultType(){return Bg}static get NAME(){return xg}dispose(){O.off(this._element,jn)}_start(t){if(!this._supportPointerEvents){this._deltaX=t.touches[0].clientX;return}this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX)}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),Le(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=Fg)return;const n=t/this._deltaX;this._deltaX=0,n&&Le(n>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(O.on(this._element,Dg,t=>this._start(t)),O.on(this._element,Ig,t=>this._end(t)),this._element.classList.add(kg)):(O.on(this._element,Rg,t=>this._start(t)),O.on(this._element,Pg,t=>this._move(t)),O.on(this._element,Lg,t=>this._end(t)))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&(t.pointerType===Mg||t.pointerType===$g)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const Vg="carousel",jg="bs.carousel",Vt=`.${jg}`,Hu=".data-api",Ug="ArrowLeft",Wg="ArrowRight",Kg=500,qn="next",cn="prev",mn="left",Xs="right",qg=`slide${Vt}`,Qr=`slid${Vt}`,zg=`keydown${Vt}`,Yg=`mouseenter${Vt}`,Gg=`mouseleave${Vt}`,Xg=`dragstart${Vt}`,Jg=`load${Vt}${Hu}`,Qg=`click${Vt}${Hu}`,Bu="carousel",Ps="active",Zg="slide",eE="carousel-item-end",tE="carousel-item-start",nE="carousel-item-next",sE="carousel-item-prev",Vu=".active",ju=".carousel-item",rE=Vu+ju,iE=".carousel-item img",oE=".carousel-indicators",aE="[data-bs-slide], [data-bs-slide-to]",lE='[data-bs-ride="carousel"]',cE={[Ug]:Xs,[Wg]:mn},uE={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},fE={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class As extends Ze{constructor(t,n){super(t,n),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=V.findOne(oE,this._element),this._addEventListeners(),this._config.ride===Bu&&this.cycle()}static get Default(){return uE}static get DefaultType(){return fE}static get NAME(){return Vg}next(){this._slide(qn)}nextWhenVisible(){!document.hidden&&Vn(this._element)&&this.next()}prev(){this._slide(cn)}pause(){this._isSliding&&Nu(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){O.one(this._element,Qr,()=>this.cycle());return}this.cycle()}}to(t){const n=this._getItems();if(t>n.length-1||t<0)return;if(this._isSliding){O.one(this._element,Qr,()=>this.to(t));return}const s=this._getItemIndex(this._getActive());if(s===t)return;const r=t>s?qn:cn;this._slide(r,n[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&O.on(this._element,zg,t=>this._keydown(t)),this._config.pause==="hover"&&(O.on(this._element,Yg,()=>this.pause()),O.on(this._element,Gg,()=>this._maybeEnableCycle())),this._config.touch&&cr.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const s of V.find(iE,this._element))O.on(s,Xg,r=>r.preventDefault());const n={leftCallback:()=>this._slide(this._directionToOrder(mn)),rightCallback:()=>this._slide(this._directionToOrder(Xs)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),Kg+this._config.interval))}};this._swipeHelper=new cr(this._element,n)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const n=cE[t.key];n&&(t.preventDefault(),this._slide(this._directionToOrder(n)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const n=V.findOne(Vu,this._indicatorsElement);n.classList.remove(Ps),n.removeAttribute("aria-current");const s=V.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);s&&(s.classList.add(Ps),s.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const n=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=n||this._config.defaultInterval}_slide(t,n=null){if(this._isSliding)return;const s=this._getActive(),r=t===qn,i=n||Co(this._getItems(),s,r,this._config.wrap);if(i===s)return;const o=this._getItemIndex(i),a=m=>O.trigger(this._element,m,{relatedTarget:i,direction:this._orderToDirection(t),from:this._getItemIndex(s),to:o});if(a(qg).defaultPrevented||!s||!i)return;const c=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=i;const u=r?tE:eE,d=r?nE:sE;i.classList.add(d),vs(i),s.classList.add(u),i.classList.add(u);const h=()=>{i.classList.remove(u,d),i.classList.add(Ps),s.classList.remove(Ps,d,u),this._isSliding=!1,a(Qr)};this._queueCallback(h,s,this._isAnimated()),c&&this.cycle()}_isAnimated(){return this._element.classList.contains(Zg)}_getActive(){return V.findOne(rE,this._element)}_getItems(){return V.find(ju,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return We()?t===mn?cn:qn:t===mn?qn:cn}_orderToDirection(t){return We()?t===cn?mn:Xs:t===cn?Xs:mn}static jQueryInterface(t){return this.each(function(){const n=As.getOrCreateInstance(this,t);if(typeof t=="number"){n.to(t);return}if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t]()}})}}O.on(document,Qg,aE,function(e){const t=V.getElementFromSelector(this);if(!t||!t.classList.contains(Bu))return;e.preventDefault();const n=As.getOrCreateInstance(t),s=this.getAttribute("data-bs-slide-to");if(s){n.to(s),n._maybeEnableCycle();return}if(mt.getDataAttribute(this,"slide")==="next"){n.next(),n._maybeEnableCycle();return}n.prev(),n._maybeEnableCycle()});O.on(window,Jg,()=>{const e=V.find(lE);for(const t of e)As.getOrCreateInstance(t)});qe(As);const dE="collapse",hE="bs.collapse",ws=`.${hE}`,pE=".data-api",mE=`show${ws}`,_E=`shown${ws}`,gE=`hide${ws}`,EE=`hidden${ws}`,bE=`click${ws}${pE}`,Zr="show",gn="collapse",Ls="collapsing",vE="collapsed",yE=`:scope .${gn} .${gn}`,AE="collapse-horizontal",wE="width",TE="height",OE=".collapse.show, .collapse.collapsing",Mi='[data-bs-toggle="collapse"]',CE={parent:null,toggle:!0},SE={parent:"(null|element)",toggle:"boolean"};class ps extends Ze{constructor(t,n){super(t,n),this._isTransitioning=!1,this._triggerArray=[];const s=V.find(Mi);for(const r of s){const i=V.getSelectorFromElement(r),o=V.find(i).filter(a=>a===this._element);i!==null&&o.length&&this._triggerArray.push(r)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return CE}static get DefaultType(){return SE}static get NAME(){return dE}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(OE).filter(a=>a!==this._element).map(a=>ps.getOrCreateInstance(a,{toggle:!1}))),t.length&&t[0]._isTransitioning||O.trigger(this._element,mE).defaultPrevented)return;for(const a of t)a.hide();const s=this._getDimension();this._element.classList.remove(gn),this._element.classList.add(Ls),this._element.style[s]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const r=()=>{this._isTransitioning=!1,this._element.classList.remove(Ls),this._element.classList.add(gn,Zr),this._element.style[s]="",O.trigger(this._element,_E)},o=`scroll${s[0].toUpperCase()+s.slice(1)}`;this._queueCallback(r,this._element,!0),this._element.style[s]=`${this._element[o]}px`}hide(){if(this._isTransitioning||!this._isShown()||O.trigger(this._element,gE).defaultPrevented)return;const n=this._getDimension();this._element.style[n]=`${this._element.getBoundingClientRect()[n]}px`,vs(this._element),this._element.classList.add(Ls),this._element.classList.remove(gn,Zr);for(const r of this._triggerArray){const i=V.getElementFromSelector(r);i&&!this._isShown(i)&&this._addAriaAndCollapsedClass([r],!1)}this._isTransitioning=!0;const s=()=>{this._isTransitioning=!1,this._element.classList.remove(Ls),this._element.classList.add(gn),O.trigger(this._element,EE)};this._element.style[n]="",this._queueCallback(s,this._element,!0)}_isShown(t=this._element){return t.classList.contains(Zr)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=kt(t.parent),t}_getDimension(){return this._element.classList.contains(AE)?wE:TE}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Mi);for(const n of t){const s=V.getElementFromSelector(n);s&&this._addAriaAndCollapsedClass([n],this._isShown(s))}}_getFirstLevelChildren(t){const n=V.find(yE,this._config.parent);return V.find(t,this._config.parent).filter(s=>!n.includes(s))}_addAriaAndCollapsedClass(t,n){if(t.length)for(const s of t)s.classList.toggle(vE,!n),s.setAttribute("aria-expanded",n)}static jQueryInterface(t){const n={};return typeof t=="string"&&/show|hide/.test(t)&&(n.toggle=!1),this.each(function(){const s=ps.getOrCreateInstance(this,n);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t]()}})}}O.on(document,bE,Mi,function(e){(e.target.tagName==="A"||e.delegateTarget&&e.delegateTarget.tagName==="A")&&e.preventDefault();for(const t of V.getMultipleElementsFromSelector(this))ps.getOrCreateInstance(t,{toggle:!1}).toggle()});qe(ps);const Ya="dropdown",NE="bs.dropdown",sn=`.${NE}`,No=".data-api",xE="Escape",Ga="Tab",RE="ArrowUp",Xa="ArrowDown",PE=2,LE=`hide${sn}`,DE=`hidden${sn}`,IE=`show${sn}`,$E=`shown${sn}`,Uu=`click${sn}${No}`,Wu=`keydown${sn}${No}`,ME=`keyup${sn}${No}`,_n="show",kE="dropup",FE="dropend",HE="dropstart",BE="dropup-center",VE="dropdown-center",Gt='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',jE=`${Gt}.${_n}`,Js=".dropdown-menu",UE=".navbar",WE=".navbar-nav",KE=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",qE=We()?"top-end":"top-start",zE=We()?"top-start":"top-end",YE=We()?"bottom-end":"bottom-start",GE=We()?"bottom-start":"bottom-end",XE=We()?"left-start":"right-start",JE=We()?"right-start":"left-start",QE="top",ZE="bottom",eb={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},tb={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class ct extends Ze{constructor(t,n){super(t,n),this._popper=null,this._parent=this._element.parentNode,this._menu=V.next(this._element,Js)[0]||V.prev(this._element,Js)[0]||V.findOne(Js,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return eb}static get DefaultType(){return tb}static get NAME(){return Ya}toggle(){return this._isShown()?this.hide():this.show()}show(){if(Ft(this._element)||this._isShown())return;const t={relatedTarget:this._element};if(!O.trigger(this._element,IE,t).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(WE))for(const s of[].concat(...document.body.children))O.on(s,"mouseover",lr);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(_n),this._element.classList.add(_n),O.trigger(this._element,$E,t)}}hide(){if(Ft(this._element)||!this._isShown())return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){if(!O.trigger(this._element,LE,t).defaultPrevented){if("ontouchstart"in document.documentElement)for(const s of[].concat(...document.body.children))O.off(s,"mouseover",lr);this._popper&&this._popper.destroy(),this._menu.classList.remove(_n),this._element.classList.remove(_n),this._element.setAttribute("aria-expanded","false"),mt.removeDataAttribute(this._menu,"popper"),O.trigger(this._element,DE,t)}}_getConfig(t){if(t=super._getConfig(t),typeof t.reference=="object"&&!pt(t.reference)&&typeof t.reference.getBoundingClientRect!="function")throw new TypeError(`${Ya.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(){if(typeof Cu>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let t=this._element;this._config.reference==="parent"?t=this._parent:pt(this._config.reference)?t=kt(this._config.reference):typeof this._config.reference=="object"&&(t=this._config.reference);const n=this._getPopperConfig();this._popper=Oo(t,this._menu,n)}_isShown(){return this._menu.classList.contains(_n)}_getPlacement(){const t=this._parent;if(t.classList.contains(FE))return XE;if(t.classList.contains(HE))return JE;if(t.classList.contains(BE))return QE;if(t.classList.contains(VE))return ZE;const n=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return t.classList.contains(kE)?n?zE:qE:n?GE:YE}_detectNavbar(){return this._element.closest(UE)!==null}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(n=>Number.parseInt(n,10)):typeof t=="function"?n=>t(n,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(mt.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...Le(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:n}){const s=V.find(KE,this._menu).filter(r=>Vn(r));s.length&&Co(s,n,t===Xa,!s.includes(n)).focus()}static jQueryInterface(t){return this.each(function(){const n=ct.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}static clearMenus(t){if(t.button===PE||t.type==="keyup"&&t.key!==Ga)return;const n=V.find(jE);for(const s of n){const r=ct.getInstance(s);if(!r||r._config.autoClose===!1)continue;const i=t.composedPath(),o=i.includes(r._menu);if(i.includes(r._element)||r._config.autoClose==="inside"&&!o||r._config.autoClose==="outside"&&o||r._menu.contains(t.target)&&(t.type==="keyup"&&t.key===Ga||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const a={relatedTarget:r._element};t.type==="click"&&(a.clickEvent=t),r._completeHide(a)}}static dataApiKeydownHandler(t){const n=/input|textarea/i.test(t.target.tagName),s=t.key===xE,r=[RE,Xa].includes(t.key);if(!r&&!s||n&&!s)return;t.preventDefault();const i=this.matches(Gt)?this:V.prev(this,Gt)[0]||V.next(this,Gt)[0]||V.findOne(Gt,t.delegateTarget.parentNode),o=ct.getOrCreateInstance(i);if(r){t.stopPropagation(),o.show(),o._selectMenuItem(t);return}o._isShown()&&(t.stopPropagation(),o.hide(),i.focus())}}O.on(document,Wu,Gt,ct.dataApiKeydownHandler);O.on(document,Wu,Js,ct.dataApiKeydownHandler);O.on(document,Uu,ct.clearMenus);O.on(document,ME,ct.clearMenus);O.on(document,Uu,Gt,function(e){e.preventDefault(),ct.getOrCreateInstance(this).toggle()});qe(ct);const Ja=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Qa=".sticky-top",Ds="padding-right",Za="margin-right";class ki{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Ds,n=>n+t),this._setElementAttributes(Ja,Ds,n=>n+t),this._setElementAttributes(Qa,Za,n=>n-t)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Ds),this._resetElementAttributes(Ja,Ds),this._resetElementAttributes(Qa,Za)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,n,s){const r=this.getWidth(),i=o=>{if(o!==this._element&&window.innerWidth>o.clientWidth+r)return;this._saveInitialAttribute(o,n);const a=window.getComputedStyle(o).getPropertyValue(n);o.style.setProperty(n,`${s(Number.parseFloat(a))}px`)};this._applyManipulationCallback(t,i)}_saveInitialAttribute(t,n){const s=t.style.getPropertyValue(n);s&&mt.setDataAttribute(t,n,s)}_resetElementAttributes(t,n){const s=r=>{const i=mt.getDataAttribute(r,n);if(i===null){r.style.removeProperty(n);return}mt.removeDataAttribute(r,n),r.style.setProperty(n,i)};this._applyManipulationCallback(t,s)}_applyManipulationCallback(t,n){if(pt(t)){n(t);return}for(const s of V.find(t,this._element))n(s)}}const Ku="backdrop",nb="fade",el="show",tl=`mousedown.bs.${Ku}`,sb={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},rb={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class qu extends ys{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return sb}static get DefaultType(){return rb}static get NAME(){return Ku}show(t){if(!this._config.isVisible){Le(t);return}this._append();const n=this._getElement();this._config.isAnimated&&vs(n),n.classList.add(el),this._emulateAnimation(()=>{Le(t)})}hide(t){if(!this._config.isVisible){Le(t);return}this._getElement().classList.remove(el),this._emulateAnimation(()=>{this.dispose(),Le(t)})}dispose(){this._isAppended&&(O.off(this._element,tl),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add(nb),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=kt(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),O.on(t,tl,()=>{Le(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(t){Pu(t,this._getElement(),this._config.isAnimated)}}const ib="focustrap",ob="bs.focustrap",ur=`.${ob}`,ab=`focusin${ur}`,lb=`keydown.tab${ur}`,cb="Tab",ub="forward",nl="backward",fb={autofocus:!0,trapElement:null},db={autofocus:"boolean",trapElement:"element"};class zu extends ys{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return fb}static get DefaultType(){return db}static get NAME(){return ib}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),O.off(document,ur),O.on(document,ab,t=>this._handleFocusin(t)),O.on(document,lb,t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,O.off(document,ur))}_handleFocusin(t){const{trapElement:n}=this._config;if(t.target===document||t.target===n||n.contains(t.target))return;const s=V.focusableChildren(n);s.length===0?n.focus():this._lastTabNavDirection===nl?s[s.length-1].focus():s[0].focus()}_handleKeydown(t){t.key===cb&&(this._lastTabNavDirection=t.shiftKey?nl:ub)}}const hb="modal",pb="bs.modal",et=`.${pb}`,mb=".data-api",_b="Escape",gb=`hide${et}`,Eb=`hidePrevented${et}`,Yu=`hidden${et}`,Gu=`show${et}`,bb=`shown${et}`,vb=`resize${et}`,yb=`click.dismiss${et}`,Ab=`mousedown.dismiss${et}`,wb=`keydown.dismiss${et}`,Tb=`click${et}${mb}`,sl="modal-open",Ob="fade",rl="show",ei="modal-static",Cb=".modal.show",Sb=".modal-dialog",Nb=".modal-body",xb='[data-bs-toggle="modal"]',Rb={backdrop:!0,focus:!0,keyboard:!0},Pb={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Dn extends Ze{constructor(t,n){super(t,n),this._dialog=V.findOne(Sb,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ki,this._addEventListeners()}static get Default(){return Rb}static get DefaultType(){return Pb}static get NAME(){return hb}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||O.trigger(this._element,Gu,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(sl),this._adjustDialog(),this._backdrop.show(()=>this._showElement(t)))}hide(){!this._isShown||this._isTransitioning||O.trigger(this._element,gb).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(rl),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){for(const t of[window,this._dialog])O.off(t,et);this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new qu({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new zu({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const n=V.findOne(Nb,this._dialog);n&&(n.scrollTop=0),vs(this._element),this._element.classList.add(rl);const s=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,O.trigger(this._element,bb,{relatedTarget:t})};this._queueCallback(s,this._dialog,this._isAnimated())}_addEventListeners(){O.on(this._element,wb,t=>{if(t.key===_b){if(this._config.keyboard){t.preventDefault(),this.hide();return}this._triggerBackdropTransition()}}),O.on(window,vb,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),O.on(this._element,Ab,t=>{O.one(this._element,yb,n=>{if(!(this._element!==t.target||this._element!==n.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(sl),this._resetAdjustments(),this._scrollBar.reset(),O.trigger(this._element,Yu)})}_isAnimated(){return this._element.classList.contains(Ob)}_triggerBackdropTransition(){if(O.trigger(this._element,Eb).defaultPrevented)return;const n=this._element.scrollHeight>document.documentElement.clientHeight,s=this._element.style.overflowY;s==="hidden"||this._element.classList.contains(ei)||(n||(this._element.style.overflowY="hidden"),this._element.classList.add(ei),this._queueCallback(()=>{this._element.classList.remove(ei),this._queueCallback(()=>{this._element.style.overflowY=s},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,n=this._scrollBar.getWidth(),s=n>0;if(s&&!t){const r=We()?"paddingLeft":"paddingRight";this._element.style[r]=`${n}px`}if(!s&&t){const r=We()?"paddingRight":"paddingLeft";this._element.style[r]=`${n}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,n){return this.each(function(){const s=Dn.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof s[t]>"u")throw new TypeError(`No method named "${t}"`);s[t](n)}})}}O.on(document,Tb,xb,function(e){const t=V.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),O.one(t,Gu,r=>{r.defaultPrevented||O.one(t,Yu,()=>{Vn(this)&&this.focus()})});const n=V.findOne(Cb);n&&Dn.getInstance(n).hide(),Dn.getOrCreateInstance(t).toggle(this)});Lr(Dn);qe(Dn);const Lb="offcanvas",Db="bs.offcanvas",vt=`.${Db}`,Xu=".data-api",Ib=`load${vt}${Xu}`,$b="Escape",il="show",ol="showing",al="hiding",Mb="offcanvas-backdrop",Ju=".offcanvas.show",kb=`show${vt}`,Fb=`shown${vt}`,Hb=`hide${vt}`,ll=`hidePrevented${vt}`,Qu=`hidden${vt}`,Bb=`resize${vt}`,Vb=`click${vt}${Xu}`,jb=`keydown.dismiss${vt}`,Ub='[data-bs-toggle="offcanvas"]',Wb={backdrop:!0,keyboard:!0,scroll:!1},Kb={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Ht extends Ze{constructor(t,n){super(t,n),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Wb}static get DefaultType(){return Kb}static get NAME(){return Lb}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){if(this._isShown||O.trigger(this._element,kb,{relatedTarget:t}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new ki().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(ol);const s=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(il),this._element.classList.remove(ol),O.trigger(this._element,Fb,{relatedTarget:t})};this._queueCallback(s,this._element,!0)}hide(){if(!this._isShown||O.trigger(this._element,Hb).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(al),this._backdrop.hide();const n=()=>{this._element.classList.remove(il,al),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new ki().reset(),O.trigger(this._element,Qu)};this._queueCallback(n,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=()=>{if(this._config.backdrop==="static"){O.trigger(this._element,ll);return}this.hide()},n=Boolean(this._config.backdrop);return new qu({className:Mb,isVisible:n,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:n?t:null})}_initializeFocusTrap(){return new zu({trapElement:this._element})}_addEventListeners(){O.on(this._element,jb,t=>{if(t.key===$b){if(!this._config.keyboard){O.trigger(this._element,ll);return}this.hide()}})}static jQueryInterface(t){return this.each(function(){const n=Ht.getOrCreateInstance(this,t);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t](this)}})}}O.on(document,Vb,Ub,function(e){const t=V.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),Ft(this))return;O.one(t,Qu,()=>{Vn(this)&&this.focus()});const n=V.findOne(Ju);n&&n!==t&&Ht.getInstance(n).hide(),Ht.getOrCreateInstance(t).toggle(this)});O.on(window,Ib,()=>{for(const e of V.find(Ju))Ht.getOrCreateInstance(e).show()});O.on(window,Bb,()=>{for(const e of V.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(e).position!=="fixed"&&Ht.getOrCreateInstance(e).hide()});Lr(Ht);qe(Ht);const qb=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),zb=/^aria-[\w-]*$/i,Yb=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Gb=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xb=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?qb.has(n)?Boolean(Yb.test(e.nodeValue)||Gb.test(e.nodeValue)):!0:t.filter(s=>s instanceof RegExp).some(s=>s.test(n))},Zu={"*":["class","dir","id","lang","role",zb],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};function Jb(e,t,n){if(!e.length)return e;if(n&&typeof n=="function")return n(e);const r=new window.DOMParser().parseFromString(e,"text/html"),i=[].concat(...r.body.querySelectorAll("*"));for(const o of i){const a=o.nodeName.toLowerCase();if(!Object.keys(t).includes(a)){o.remove();continue}const l=[].concat(...o.attributes),c=[].concat(t["*"]||[],t[a]||[]);for(const u of l)Xb(u,c)||o.removeAttribute(u.nodeName)}return r.body.innerHTML}const Qb="TemplateFactory",Zb={allowList:Zu,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},ev={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},tv={entry:"(string|element|function|null)",selector:"(string|element)"};class nv extends ys{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Zb}static get DefaultType(){return ev}static get NAME(){return Qb}getContent(){return Object.values(this._config.content).map(t=>this._resolvePossibleFunction(t)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[r,i]of Object.entries(this._config.content))this._setContent(t,i,r);const n=t.children[0],s=this._resolvePossibleFunction(this._config.extraClass);return s&&n.classList.add(...s.split(" ")),n}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[n,s]of Object.entries(t))super._typeCheckConfig({selector:n,entry:s},tv)}_setContent(t,n,s){const r=V.findOne(s,t);if(r){if(n=this._resolvePossibleFunction(n),!n){r.remove();return}if(pt(n)){this._putElementInTemplate(kt(n),r);return}if(this._config.html){r.innerHTML=this._maybeSanitize(n);return}r.textContent=n}}_maybeSanitize(t){return this._config.sanitize?Jb(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return Le(t,[this])}_putElementInTemplate(t,n){if(this._config.html){n.innerHTML="",n.append(t);return}n.textContent=t.textContent}}const sv="tooltip",rv=new Set(["sanitize","allowList","sanitizeFn"]),ti="fade",iv="modal",Is="show",ov=".tooltip-inner",cl=`.${iv}`,ul="hide.bs.modal",zn="hover",ni="focus",av="click",lv="manual",cv="hide",uv="hidden",fv="show",dv="shown",hv="inserted",pv="click",mv="focusin",_v="focusout",gv="mouseenter",Ev="mouseleave",bv={AUTO:"auto",TOP:"top",RIGHT:We()?"left":"right",BOTTOM:"bottom",LEFT:We()?"right":"left"},vv={allowList:Zu,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,0],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},yv={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class rn extends Ze{constructor(t,n){if(typeof Cu>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,n),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return vv}static get DefaultType(){return yv}static get NAME(){return sv}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),O.off(this._element.closest(cl),ul,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const t=O.trigger(this._element,this.constructor.eventName(fv)),s=(xu(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!s)return;this._disposePopper();const r=this._getTipElement();this._element.setAttribute("aria-describedby",r.getAttribute("id"));const{container:i}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(i.append(r),O.trigger(this._element,this.constructor.eventName(hv))),this._popper=this._createPopper(r),r.classList.add(Is),"ontouchstart"in document.documentElement)for(const a of[].concat(...document.body.children))O.on(a,"mouseover",lr);const o=()=>{O.trigger(this._element,this.constructor.eventName(dv)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(o,this.tip,this._isAnimated())}hide(){if(!this._isShown()||O.trigger(this._element,this.constructor.eventName(cv)).defaultPrevented)return;if(this._getTipElement().classList.remove(Is),"ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))O.off(r,"mouseover",lr);this._activeTrigger[av]=!1,this._activeTrigger[ni]=!1,this._activeTrigger[zn]=!1,this._isHovered=null;const s=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),O.trigger(this._element,this.constructor.eventName(uv)))};this._queueCallback(s,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const n=this._getTemplateFactory(t).toHtml();if(!n)return null;n.classList.remove(ti,Is),n.classList.add(`bs-${this.constructor.NAME}-auto`);const s=og(this.constructor.NAME).toString();return n.setAttribute("id",s),this._isAnimated()&&n.classList.add(ti),n}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new nv({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[ov]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ti)}_isShown(){return this.tip&&this.tip.classList.contains(Is)}_createPopper(t){const n=Le(this._config.placement,[this,t,this._element]),s=bv[n.toUpperCase()];return Oo(this._element,t,this._getPopperConfig(s))}_getOffset(){const{offset:t}=this._config;return typeof t=="string"?t.split(",").map(n=>Number.parseInt(n,10)):typeof t=="function"?n=>t(n,this._element):t}_resolvePossibleFunction(t){return Le(t,[this._element])}_getPopperConfig(t){const n={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:s=>{this._getTipElement().setAttribute("data-popper-placement",s.state.placement)}}]};return{...n,...Le(this._config.popperConfig,[n])}}_setListeners(){const t=this._config.trigger.split(" ");for(const n of t)if(n==="click")O.on(this._element,this.constructor.eventName(pv),this._config.selector,s=>{this._initializeOnDelegatedTarget(s).toggle()});else if(n!==lv){const s=n===zn?this.constructor.eventName(gv):this.constructor.eventName(mv),r=n===zn?this.constructor.eventName(Ev):this.constructor.eventName(_v);O.on(this._element,s,this._config.selector,i=>{const o=this._initializeOnDelegatedTarget(i);o._activeTrigger[i.type==="focusin"?ni:zn]=!0,o._enter()}),O.on(this._element,r,this._config.selector,i=>{const o=this._initializeOnDelegatedTarget(i);o._activeTrigger[i.type==="focusout"?ni:zn]=o._element.contains(i.relatedTarget),o._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},O.on(this._element.closest(cl),ul,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(t,n){clearTimeout(this._timeout),this._timeout=setTimeout(t,n)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const n=mt.getDataAttributes(this._element);for(const s of Object.keys(n))rv.has(s)&&delete n[s];return t={...n,...typeof t=="object"&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=t.container===!1?document.body:kt(t.container),typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),typeof t.title=="number"&&(t.title=t.title.toString()),typeof t.content=="number"&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[n,s]of Object.entries(this._config))this.constructor.Default[n]!==s&&(t[n]=s);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each(function(){const n=rn.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}}qe(rn);const Av="popover",wv=".popover-header",Tv=".popover-body",Ov={...rn.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},Cv={...rn.DefaultType,content:"(null|string|element|function)"};class xo extends rn{static get Default(){return Ov}static get DefaultType(){return Cv}static get NAME(){return Av}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[wv]:this._getTitle(),[Tv]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each(function(){const n=xo.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t]()}})}}qe(xo);const Sv="scrollspy",Nv="bs.scrollspy",Ro=`.${Nv}`,xv=".data-api",Rv=`activate${Ro}`,fl=`click${Ro}`,Pv=`load${Ro}${xv}`,Lv="dropdown-item",un="active",Dv='[data-bs-spy="scroll"]',si="[href]",Iv=".nav, .list-group",dl=".nav-link",$v=".nav-item",Mv=".list-group-item",kv=`${dl}, ${$v} > ${dl}, ${Mv}`,Fv=".dropdown",Hv=".dropdown-toggle",Bv={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Vv={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class $r extends Ze{constructor(t,n){super(t,n),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Bv}static get DefaultType(){return Vv}static get NAME(){return Sv}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=kt(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,typeof t.threshold=="string"&&(t.threshold=t.threshold.split(",").map(n=>Number.parseFloat(n))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(O.off(this._config.target,fl),O.on(this._config.target,fl,si,t=>{const n=this._observableSections.get(t.target.hash);if(n){t.preventDefault();const s=this._rootElement||window,r=n.offsetTop-this._element.offsetTop;if(s.scrollTo){s.scrollTo({top:r,behavior:"smooth"});return}s.scrollTop=r}}))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(n=>this._observerCallback(n),t)}_observerCallback(t){const n=o=>this._targetLinks.get(`#${o.target.id}`),s=o=>{this._previousScrollData.visibleEntryTop=o.target.offsetTop,this._process(n(o))},r=(this._rootElement||document.documentElement).scrollTop,i=r>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=r;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(n(o));continue}const a=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(i&&a){if(s(o),!r)return;continue}!i&&!a&&s(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=V.find(si,this._config.target);for(const n of t){if(!n.hash||Ft(n))continue;const s=V.findOne(n.hash,this._element);Vn(s)&&(this._targetLinks.set(n.hash,n),this._observableSections.set(n.hash,s))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(un),this._activateParents(t),O.trigger(this._element,Rv,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains(Lv)){V.findOne(Hv,t.closest(Fv)).classList.add(un);return}for(const n of V.parents(t,Iv))for(const s of V.prev(n,kv))s.classList.add(un)}_clearActiveClass(t){t.classList.remove(un);const n=V.find(`${si}.${un}`,t);for(const s of n)s.classList.remove(un)}static jQueryInterface(t){return this.each(function(){const n=$r.getOrCreateInstance(this,t);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t]()}})}}O.on(window,Pv,()=>{for(const e of V.find(Dv))$r.getOrCreateInstance(e)});qe($r);const jv="tab",Uv="bs.tab",on=`.${Uv}`,Wv=`hide${on}`,Kv=`hidden${on}`,qv=`show${on}`,zv=`shown${on}`,Yv=`click${on}`,Gv=`keydown${on}`,Xv=`load${on}`,Jv="ArrowLeft",hl="ArrowRight",Qv="ArrowUp",pl="ArrowDown",Xt="active",ml="fade",ri="show",Zv="dropdown",ey=".dropdown-toggle",ty=".dropdown-menu",ii=":not(.dropdown-toggle)",ny='.list-group, .nav, [role="tablist"]',sy=".nav-item, .list-group-item",ry=`.nav-link${ii}, .list-group-item${ii}, [role="tab"]${ii}`,ef='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',oi=`${ry}, ${ef}`,iy=`.${Xt}[data-bs-toggle="tab"], .${Xt}[data-bs-toggle="pill"], .${Xt}[data-bs-toggle="list"]`;class In extends Ze{constructor(t){super(t),this._parent=this._element.closest(ny),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),O.on(this._element,Gv,n=>this._keydown(n)))}static get NAME(){return jv}show(){const t=this._element;if(this._elemIsActive(t))return;const n=this._getActiveElem(),s=n?O.trigger(n,Wv,{relatedTarget:t}):null;O.trigger(t,qv,{relatedTarget:n}).defaultPrevented||s&&s.defaultPrevented||(this._deactivate(n,t),this._activate(t,n))}_activate(t,n){if(!t)return;t.classList.add(Xt),this._activate(V.getElementFromSelector(t));const s=()=>{if(t.getAttribute("role")!=="tab"){t.classList.add(ri);return}t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),O.trigger(t,zv,{relatedTarget:n})};this._queueCallback(s,t,t.classList.contains(ml))}_deactivate(t,n){if(!t)return;t.classList.remove(Xt),t.blur(),this._deactivate(V.getElementFromSelector(t));const s=()=>{if(t.getAttribute("role")!=="tab"){t.classList.remove(ri);return}t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),O.trigger(t,Kv,{relatedTarget:n})};this._queueCallback(s,t,t.classList.contains(ml))}_keydown(t){if(![Jv,hl,Qv,pl].includes(t.key))return;t.stopPropagation(),t.preventDefault();const n=[hl,pl].includes(t.key),s=Co(this._getChildren().filter(r=>!Ft(r)),t.target,n,!0);s&&(s.focus({preventScroll:!0}),In.getOrCreateInstance(s).show())}_getChildren(){return V.find(oi,this._parent)}_getActiveElem(){return this._getChildren().find(t=>this._elemIsActive(t))||null}_setInitialAttributes(t,n){this._setAttributeIfNotExists(t,"role","tablist");for(const s of n)this._setInitialAttributesOnChild(s)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const n=this._elemIsActive(t),s=this._getOuterElement(t);t.setAttribute("aria-selected",n),s!==t&&this._setAttributeIfNotExists(s,"role","presentation"),n||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const n=V.getElementFromSelector(t);n&&(this._setAttributeIfNotExists(n,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(n,"aria-labelledby",`#${t.id}`))}_toggleDropDown(t,n){const s=this._getOuterElement(t);if(!s.classList.contains(Zv))return;const r=(i,o)=>{const a=V.findOne(i,s);a&&a.classList.toggle(o,n)};r(ey,Xt),r(ty,ri),s.setAttribute("aria-expanded",n)}_setAttributeIfNotExists(t,n,s){t.hasAttribute(n)||t.setAttribute(n,s)}_elemIsActive(t){return t.classList.contains(Xt)}_getInnerElement(t){return t.matches(oi)?t:V.findOne(oi,t)}_getOuterElement(t){return t.closest(sy)||t}static jQueryInterface(t){return this.each(function(){const n=In.getOrCreateInstance(this);if(typeof t=="string"){if(n[t]===void 0||t.startsWith("_")||t==="constructor")throw new TypeError(`No method named "${t}"`);n[t]()}})}}O.on(document,Yv,ef,function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),!Ft(this)&&In.getOrCreateInstance(this).show()});O.on(window,Xv,()=>{for(const e of V.find(iy))In.getOrCreateInstance(e)});qe(In);const oy="toast",ay="bs.toast",jt=`.${ay}`,ly=`mouseover${jt}`,cy=`mouseout${jt}`,uy=`focusin${jt}`,fy=`focusout${jt}`,dy=`hide${jt}`,hy=`hidden${jt}`,py=`show${jt}`,my=`shown${jt}`,_y="fade",_l="hide",$s="show",Ms="showing",gy={animation:"boolean",autohide:"boolean",delay:"number"},Ey={animation:!0,autohide:!0,delay:5e3};class Ts extends Ze{constructor(t,n){super(t,n),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Ey}static get DefaultType(){return gy}static get NAME(){return oy}show(){if(O.trigger(this._element,py).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(_y);const n=()=>{this._element.classList.remove(Ms),O.trigger(this._element,my),this._maybeScheduleHide()};this._element.classList.remove(_l),vs(this._element),this._element.classList.add($s,Ms),this._queueCallback(n,this._element,this._config.animation)}hide(){if(!this.isShown()||O.trigger(this._element,dy).defaultPrevented)return;const n=()=>{this._element.classList.add(_l),this._element.classList.remove(Ms,$s),O.trigger(this._element,hy)};this._element.classList.add(Ms),this._queueCallback(n,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove($s),super.dispose()}isShown(){return this._element.classList.contains($s)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,n){switch(t.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=n;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=n;break}}if(n){this._clearTimeout();return}const s=t.relatedTarget;this._element===s||this._element.contains(s)||this._maybeScheduleHide()}_setListeners(){O.on(this._element,ly,t=>this._onInteraction(t,!0)),O.on(this._element,cy,t=>this._onInteraction(t,!1)),O.on(this._element,uy,t=>this._onInteraction(t,!0)),O.on(this._element,fy,t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each(function(){const n=Ts.getOrCreateInstance(this,t);if(typeof t=="string"){if(typeof n[t]>"u")throw new TypeError(`No method named "${t}"`);n[t](this)}})}}Lr(Ts);qe(Ts);const tf=[{path:"/",name:"index",component:()=>wt(()=>import("./Index-9900345d.js"),["assets/Index-9900345d.js","assets/http-eca01039.js"]),meta:{title:"欢迎"}},{path:"/tunnels",name:"tunnels",component:()=>wt(()=>import("./Index-2516cda8.js"),["assets/Index-2516cda8.js","assets/http-eca01039.js"]),meta:{title:"隧道"}},{path:"/tunnels/create",name:"tunnels.create",component:()=>wt(()=>import("./Create-5fe9455d.js"),["assets/Create-5fe9455d.js","assets/http-eca01039.js"]),meta:{title:"创建隧道"}},{path:"/tunnels/:id",name:"tunnels.show",component:()=>wt(()=>import("./Show-f5a80327.js"),["assets/Show-f5a80327.js","assets/http-eca01039.js"]),meta:{title:"隧道"}},{path:"/downloads",name:"downloads",component:()=>wt(()=>import("./Downloads-5f629c5d.js"),[]),meta:{title:"客户端下载"}},{path:"/sign",name:"sign",component:()=>wt(()=>import("./Sign-e61967c6.js"),["assets/Sign-e61967c6.js","assets/http-eca01039.js"]),meta:{title:"签到"}},{path:"/charge",name:"charge",component:()=>wt(()=>import("./Charge-742f0fb0.js"),["assets/Charge-742f0fb0.js","assets/http-eca01039.js"]),meta:{title:"流量充值"}},{path:"/ticket",name:"ticket",component:()=>wt(()=>import("./Ticket-d9bf034e.js"),["assets/Ticket-d9bf034e.js","assets/http-eca01039.js","assets/Ticket-41ca6517.css"]),meta:{title:"发布工单"}}],by=()=>window.Base.User.is_admin,nf=m_({history:Pm(),routes:tf});tf.forEach(e=>{nf.beforeEach((t,n)=>{new rn(document.body,{selector:"[data-bs-toggle='tooltip']"}),Array.from(document.querySelectorAll(".toast")).forEach(s=>new Ts(s))}),e.beforeEnter=(t,n,s)=>{e.meta.admin&&!by()?s({name:"index"}):s()}});/*! * Color mode toggler for Bootstrap's docs (https://getbootstrap.com/) * Copyright 2011-2023 The Bootstrap Authors * Licensed under the Creative Commons Attribution 3.0 Unported License. diff --git a/public/build/assets/http-419d7b2b.js b/public/build/assets/http-eca01039.js similarity index 91% rename from public/build/assets/http-419d7b2b.js rename to public/build/assets/http-eca01039.js index 9f9ed4c..d0f8b4b 100644 --- a/public/build/assets/http-419d7b2b.js +++ b/public/build/assets/http-eca01039.js @@ -1 +1 @@ -import{s as a,m as n}from"./app-426d2bdb.js";let t=a.create({baseURL:"/api",timeout:1e4,headers:{"X-Requested-With":"XMLHttpRequest","X-CSRF-TOKEN":document.querySelector('meta[name="csrf-token"]').getAttribute("content")}});t.interceptors.request.use(e=>(e.headers,e.headers.Accept="application/json",e),e=>(console.error(e),Promise.reject(e)));t.interceptors.response.use(e=>Promise.resolve(e),e=>{console.error("axios error",e);let s=[];e.response.data.data&&(s=e.response.data.data),e.response.data.message&&(s=e.response.data.message),e.response.data.error&&(s=e.response.data.error.message),e.response.status===429?alert("请求次数过多"):e.response.status===401||(e.response.status===404?n.push({name:"index"}):s.length!==0&&alert(s))});export{t as i}; +import{s as a,m as n}from"./app-b63b1aed.js";let t=a.create({baseURL:"/api",timeout:1e4,headers:{"X-Requested-With":"XMLHttpRequest","X-CSRF-TOKEN":document.querySelector('meta[name="csrf-token"]').getAttribute("content")}});t.interceptors.request.use(e=>(e.headers,e.headers.Accept="application/json",e),e=>(console.error(e),Promise.reject(e)));t.interceptors.response.use(e=>Promise.resolve(e),e=>{console.error("axios error",e);let s=[];e.response.data.data&&(s=e.response.data.data),e.response.data.message&&(s=e.response.data.message),e.response.data.error&&(s=e.response.data.error.message),e.response.status===429?alert("请求次数过多"):e.response.status===401||(e.response.status===404?n.push({name:"index"}):s.length!==0&&alert(s))});export{t as i}; diff --git a/public/build/manifest.json b/public/build/manifest.json index 9adcb44..58ec1fd 100644 --- a/public/build/manifest.json +++ b/public/build/manifest.json @@ -1,6 +1,6 @@ { - "_http-419d7b2b.js": { - "file": "assets/http-419d7b2b.js", + "_http-eca01039.js": { + "file": "assets/http-eca01039.js", "imports": [ "resources/js/app.js" ] @@ -40,21 +40,21 @@ "resources/js/views/Charge.vue", "resources/js/views/Ticket.vue" ], - "file": "assets/app-426d2bdb.js", + "file": "assets/app-b63b1aed.js", "isEntry": true, "src": "resources/js/app.js" }, "resources/js/views/Charge.vue": { - "file": "assets/Charge-3c0346d5.js", + "file": "assets/Charge-742f0fb0.js", "imports": [ "resources/js/app.js", - "_http-419d7b2b.js" + "_http-eca01039.js" ], "isDynamicEntry": true, "src": "resources/js/views/Charge.vue" }, "resources/js/views/Downloads.vue": { - "file": "assets/Downloads-1fe05572.js", + "file": "assets/Downloads-5f629c5d.js", "imports": [ "resources/js/app.js" ], @@ -62,18 +62,18 @@ "src": "resources/js/views/Downloads.vue" }, "resources/js/views/Index.vue": { - "file": "assets/Index-9cef052a.js", + "file": "assets/Index-9900345d.js", "imports": [ - "_http-419d7b2b.js", + "_http-eca01039.js", "resources/js/app.js" ], "isDynamicEntry": true, "src": "resources/js/views/Index.vue" }, "resources/js/views/Sign.vue": { - "file": "assets/Sign-152c9e31.js", + "file": "assets/Sign-e61967c6.js", "imports": [ - "_http-419d7b2b.js", + "_http-eca01039.js", "resources/js/app.js" ], "isDynamicEntry": true, @@ -87,36 +87,36 @@ "css": [ "assets/Ticket-41ca6517.css" ], - "file": "assets/Ticket-fb342565.js", + "file": "assets/Ticket-d9bf034e.js", "imports": [ "resources/js/app.js", - "_http-419d7b2b.js" + "_http-eca01039.js" ], "isDynamicEntry": true, "src": "resources/js/views/Ticket.vue" }, "resources/js/views/Tunnels/Create.vue": { - "file": "assets/Create-5885dd13.js", + "file": "assets/Create-5fe9455d.js", "imports": [ "resources/js/app.js", - "_http-419d7b2b.js" + "_http-eca01039.js" ], "isDynamicEntry": true, "src": "resources/js/views/Tunnels/Create.vue" }, "resources/js/views/Tunnels/Index.vue": { - "file": "assets/Index-3dd3acd6.js", + "file": "assets/Index-2516cda8.js", "imports": [ - "_http-419d7b2b.js", + "_http-eca01039.js", "resources/js/app.js" ], "isDynamicEntry": true, "src": "resources/js/views/Tunnels/Index.vue" }, "resources/js/views/Tunnels/Show.vue": { - "file": "assets/Show-f0c4e11e.js", + "file": "assets/Show-f5a80327.js", "imports": [ - "_http-419d7b2b.js", + "_http-eca01039.js", "resources/js/app.js" ], "isDynamicEntry": true, diff --git a/resources/views/admin/index.blade.php b/resources/views/admin/index.blade.php index 2e3b073..ef36c8d 100644 --- a/resources/views/admin/index.blade.php +++ b/resources/views/admin/index.blade.php @@ -1,10 +1,20 @@ @if (count($servers) > 0) -

不在线或维护中的服务器

+

不在线或维护中的服务器

@foreach ($servers as $server) - + @endforeach + @else +
+ + + + +

服务器一切正常

+
@endif
diff --git a/resources/views/admin/login.blade.php b/resources/views/admin/login.blade.php index cf6d625..73bed3f 100644 --- a/resources/views/admin/login.blade.php +++ b/resources/views/admin/login.blade.php @@ -1,19 +1,29 @@ -
-

登录

+
+

登录

-
- @csrf - - {{-- email --}} - - {{-- password --}} - - {{-- remember --}} - - - {{-- submit --}} - + + @csrf +
+
+ 登录 +
+
+
+
+ +
+
+ +
+
+
+ + +
+ +
+
diff --git a/resources/views/admin/servers/create.blade.php b/resources/views/admin/servers/create.blade.php index 03b5b4b..273ad3f 100644 --- a/resources/views/admin/servers/create.blade.php +++ b/resources/views/admin/servers/create.blade.php @@ -1,19 +1,17 @@ - -
@csrf
-

服务器

+

服务器

+ name="name">
-

Frps 信息

+

Frps 信息

@@ -32,48 +30,48 @@
-

Frps Dashboard 配置

+

Frps Dashboard 配置

+ value="7500">
+ value="admin">
+ value="admin">
-

端口范围限制

+

端口范围限制

- - + +
-

最多隧道数量

+

最多隧道数量

- +
+
-

隧道协议限制

+
+

隧道协议限制

-
- 超文本传输协议
@@ -99,7 +97,7 @@
+ id="allow_stcp"> @@ -107,24 +105,29 @@
+ id="allow_xtcp">
-

服务器是否位于中国大陆

-
-
-
- {{-- checkbox --}} - -
-
+
+ +
+
+ + +
-
+
diff --git a/resources/views/admin/servers/edit.blade.php b/resources/views/admin/servers/edit.blade.php index 2185dac..8502ed2 100644 --- a/resources/views/admin/servers/edit.blade.php +++ b/resources/views/admin/servers/edit.blade.php @@ -13,312 +13,302 @@
--}} -