From ba937e9fbf4e5a28e7f3280aa596eae79ab4d247 Mon Sep 17 00:00:00 2001 From: fatedier Date: Tue, 9 Apr 2024 15:03:32 +0800 Subject: [PATCH 01/90] update README (#4139) --- README.md | 2 +- Release.md | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 69cce9ddc48..3ff84ab2592 100644 --- a/README.md +++ b/README.md @@ -1003,7 +1003,7 @@ In this example, it will set header `x-from-where: frp` in the HTTP request. #### HTTP X-Forwarded-For -This feature is for http proxy only. +This feature is for `http` proxies or proxies with the `https2http` and `https2https` plugins enabled. You can get user's real IP from HTTP request headers `X-Forwarded-For`. diff --git a/Release.md b/Release.md index 163ca3728a1..cff4dbc12b7 100644 --- a/Release.md +++ b/Release.md @@ -1,7 +1 @@ ### Features - -* `https2http` and `https2https` plugin now supports `X-Forwared-For` header. - -### Fixes - -* `X-Forwared-For` header is now correctly set in the request to the backend server for proxy type http. From e52727e01c11cebdd08eb7e2f6a4509874e6ad13 Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 10 Apr 2024 12:05:22 +0800 Subject: [PATCH 02/90] update golib (#4142) --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 2a5003d71d8..4c07bebb369 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22 require ( github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 github.com/coreos/go-oidc/v3 v3.10.0 - github.com/fatedier/golib v0.4.2 + github.com/fatedier/golib v0.4.3 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.1 @@ -35,7 +35,7 @@ require ( ) require ( - github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c // indirect + github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect diff --git a/go.sum b/go.sum index 8f1610f357c..1d6330d4957 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,6 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c h1:/IBSNwUN8+eKzUzbJPqhK839ygXJ82sde8x3ogr6R28= -github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= +github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 h1:mFRzDkZVAjdal+s7s0MwaRv9igoPqLRdzOLzw/8Xvq8= +github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= @@ -24,8 +24,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatedier/golib v0.4.2 h1:k+ZBdUFTTipnP1RHfEhGbzyShRdz/rZtFGnjpXG9D9c= -github.com/fatedier/golib v0.4.2/go.mod h1:gpu+1vXxtJ072NYaNsn/YWgojDL8Ap2kFZQtbzT2qkg= +github.com/fatedier/golib v0.4.3 h1:eOcDBZauYqoNKwnJY9xWWa1pu7ff/JPZBizXeZOtj7k= +github.com/fatedier/golib v0.4.3/go.mod h1:W6kIYkIFxHsTzbgqg5piCxIiDo4LzwgTY6R5W8l9NFQ= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d h1:ynk1ra0RUqDWQfvFi5KtMiSobkVQ3cNc0ODb8CfIETo= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= From 07946e9752a5f829d1bb5cdf6cfbaeef906f278f Mon Sep 17 00:00:00 2001 From: gopherfarm Date: Thu, 11 Apr 2024 11:01:02 +0800 Subject: [PATCH 03/90] fix: revert gorilla/websocket from 1.5.1 to 1.5.0 (#4149) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4c07bebb369..f6fc54d63ea 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/fatedier/golib v0.4.3 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 - github.com/gorilla/websocket v1.5.1 + github.com/gorilla/websocket v1.5.0 github.com/hashicorp/yamux v0.1.1 github.com/onsi/ginkgo/v2 v2.17.1 github.com/onsi/gomega v1.32.0 diff --git a/go.sum b/go.sum index 1d6330d4957..6647ebd5658 100644 --- a/go.sum +++ b/go.sum @@ -64,8 +64,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= -github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= From dd7e2e84737dc4a78b311d8b53ccfc66a26e09d8 Mon Sep 17 00:00:00 2001 From: fatedier Date: Thu, 11 Apr 2024 20:19:08 +0800 Subject: [PATCH 04/90] return 504 instead of 404 for proxy type http request timeout (#4151) --- .golangci.yml | 6 +---- Release.md | 4 ++- client/admin_api.go | 2 +- client/connector.go | 34 ++++++++++++------------ client/proxy/proxy.go | 6 ++--- go.mod | 2 +- go.sum | 4 +-- pkg/plugin/client/http2https.go | 8 +++++- pkg/plugin/client/http_proxy.go | 3 ++- pkg/plugin/client/https2http.go | 10 ++++++- pkg/plugin/client/https2https.go | 12 +++++++-- pkg/plugin/client/static_file.go | 3 ++- pkg/util/log/log.go | 30 +++++++++++++++++++++ pkg/util/net/dial.go | 6 ++--- pkg/util/net/websocket.go | 6 +++-- pkg/util/vhost/http.go | 30 +++++++-------------- pkg/util/vhost/https_test.go | 2 +- server/service.go | 9 ++++--- test/e2e/framework/framework.go | 2 +- test/e2e/framework/process.go | 6 ++--- test/e2e/pkg/request/request.go | 6 ++--- test/e2e/v1/basic/http.go | 45 ++++++++++++++++++++++++++++++++ 22 files changed, 162 insertions(+), 74 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index e2f8a240991..2b2ccb08030 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,6 @@ service: golangci-lint-version: 1.57.x # use the fixed version to not introduce new linters unexpectedly - + run: concurrency: 4 # timeout for analysis, e.g. 30s, 5m, default is 1m @@ -86,12 +86,8 @@ linters-settings: severity: "low" confidence: "low" excludes: - - G102 - - G112 - - G306 - G401 - G402 - - G404 - G501 issues: diff --git a/Release.md b/Release.md index cff4dbc12b7..5de41f2fe0b 100644 --- a/Release.md +++ b/Release.md @@ -1 +1,3 @@ -### Features +### Fixes + +* When an HTTP proxy request times out, it returns 504 instead of 404 now. diff --git a/client/admin_api.go b/client/admin_api.go index ff889d52355..708b2cbd9e6 100644 --- a/client/admin_api.go +++ b/client/admin_api.go @@ -253,7 +253,7 @@ func (svr *Service) apiPutConfig(w http.ResponseWriter, r *http.Request) { return } - if err := os.WriteFile(svr.configFilePath, body, 0o644); err != nil { + if err := os.WriteFile(svr.configFilePath, body, 0o600); err != nil { res.Code = 500 res.Msg = fmt.Sprintf("write content to frpc config file error: %v", err) log.Warnf("%s", res.Msg) diff --git a/client/connector.go b/client/connector.go index 184194a171f..64aa71c06e1 100644 --- a/client/connector.go +++ b/client/connector.go @@ -24,7 +24,7 @@ import ( "sync" "time" - libdial "github.com/fatedier/golib/net/dial" + libnet "github.com/fatedier/golib/net" fmux "github.com/hashicorp/yamux" quic "github.com/quic-go/quic-go" "github.com/samber/lo" @@ -169,44 +169,44 @@ func (c *defaultConnectorImpl) realConnect() (net.Conn, error) { } } - proxyType, addr, auth, err := libdial.ParseProxyURL(c.cfg.Transport.ProxyURL) + proxyType, addr, auth, err := libnet.ParseProxyURL(c.cfg.Transport.ProxyURL) if err != nil { xl.Errorf("fail to parse proxy url") return nil, err } - dialOptions := []libdial.DialOption{} + dialOptions := []libnet.DialOption{} protocol := c.cfg.Transport.Protocol switch protocol { case "websocket": protocol = "tcp" - dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{Hook: netpkg.DialHookWebsocket(protocol, "")})) - dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{ + dialOptions = append(dialOptions, libnet.WithAfterHook(libnet.AfterHook{Hook: netpkg.DialHookWebsocket(protocol, "")})) + dialOptions = append(dialOptions, libnet.WithAfterHook(libnet.AfterHook{ Hook: netpkg.DialHookCustomTLSHeadByte(tlsConfig != nil, lo.FromPtr(c.cfg.Transport.TLS.DisableCustomTLSFirstByte)), })) - dialOptions = append(dialOptions, libdial.WithTLSConfig(tlsConfig)) + dialOptions = append(dialOptions, libnet.WithTLSConfig(tlsConfig)) case "wss": protocol = "tcp" - dialOptions = append(dialOptions, libdial.WithTLSConfigAndPriority(100, tlsConfig)) + dialOptions = append(dialOptions, libnet.WithTLSConfigAndPriority(100, tlsConfig)) // Make sure that if it is wss, the websocket hook is executed after the tls hook. - dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{Hook: netpkg.DialHookWebsocket(protocol, tlsConfig.ServerName), Priority: 110})) + dialOptions = append(dialOptions, libnet.WithAfterHook(libnet.AfterHook{Hook: netpkg.DialHookWebsocket(protocol, tlsConfig.ServerName), Priority: 110})) default: - dialOptions = append(dialOptions, libdial.WithAfterHook(libdial.AfterHook{ + dialOptions = append(dialOptions, libnet.WithAfterHook(libnet.AfterHook{ Hook: netpkg.DialHookCustomTLSHeadByte(tlsConfig != nil, lo.FromPtr(c.cfg.Transport.TLS.DisableCustomTLSFirstByte)), })) - dialOptions = append(dialOptions, libdial.WithTLSConfig(tlsConfig)) + dialOptions = append(dialOptions, libnet.WithTLSConfig(tlsConfig)) } if c.cfg.Transport.ConnectServerLocalIP != "" { - dialOptions = append(dialOptions, libdial.WithLocalAddr(c.cfg.Transport.ConnectServerLocalIP)) + dialOptions = append(dialOptions, libnet.WithLocalAddr(c.cfg.Transport.ConnectServerLocalIP)) } dialOptions = append(dialOptions, - libdial.WithProtocol(protocol), - libdial.WithTimeout(time.Duration(c.cfg.Transport.DialServerTimeout)*time.Second), - libdial.WithKeepAlive(time.Duration(c.cfg.Transport.DialServerKeepAlive)*time.Second), - libdial.WithProxy(proxyType, addr), - libdial.WithProxyAuth(auth), + libnet.WithProtocol(protocol), + libnet.WithTimeout(time.Duration(c.cfg.Transport.DialServerTimeout)*time.Second), + libnet.WithKeepAlive(time.Duration(c.cfg.Transport.DialServerKeepAlive)*time.Second), + libnet.WithProxy(proxyType, addr), + libnet.WithProxyAuth(auth), ) - conn, err := libdial.DialContext( + conn, err := libnet.DialContext( c.ctx, net.JoinHostPort(c.cfg.ServerAddr, strconv.Itoa(c.cfg.ServerPort)), dialOptions..., diff --git a/client/proxy/proxy.go b/client/proxy/proxy.go index 16295e052c7..cc02f809a9c 100644 --- a/client/proxy/proxy.go +++ b/client/proxy/proxy.go @@ -25,7 +25,7 @@ import ( "time" libio "github.com/fatedier/golib/io" - libdial "github.com/fatedier/golib/net/dial" + libnet "github.com/fatedier/golib/net" pp "github.com/pires/go-proxyproto" "golang.org/x/time/rate" @@ -197,9 +197,9 @@ func (pxy *BaseProxy) HandleTCPWorkConnection(workConn net.Conn, m *msg.StartWor return } - localConn, err := libdial.Dial( + localConn, err := libnet.Dial( net.JoinHostPort(baseCfg.LocalIP, strconv.Itoa(baseCfg.LocalPort)), - libdial.WithTimeout(10*time.Second), + libnet.WithTimeout(10*time.Second), ) if err != nil { workConn.Close() diff --git a/go.mod b/go.mod index f6fc54d63ea..72bbc0acd0f 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22 require ( github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 github.com/coreos/go-oidc/v3 v3.10.0 - github.com/fatedier/golib v0.4.3 + github.com/fatedier/golib v0.5.0 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.0 diff --git a/go.sum b/go.sum index 6647ebd5658..efcb18ee7da 100644 --- a/go.sum +++ b/go.sum @@ -24,8 +24,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatedier/golib v0.4.3 h1:eOcDBZauYqoNKwnJY9xWWa1pu7ff/JPZBizXeZOtj7k= -github.com/fatedier/golib v0.4.3/go.mod h1:W6kIYkIFxHsTzbgqg5piCxIiDo4LzwgTY6R5W8l9NFQ= +github.com/fatedier/golib v0.5.0 h1:hNcH7hgfIFqVWbP+YojCCAj4eO94pPf4dEF8lmq2jWs= +github.com/fatedier/golib v0.5.0/go.mod h1:W6kIYkIFxHsTzbgqg5piCxIiDo4LzwgTY6R5W8l9NFQ= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d h1:ynk1ra0RUqDWQfvFi5KtMiSobkVQ3cNc0ODb8CfIETo= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= diff --git a/pkg/plugin/client/http2https.go b/pkg/plugin/client/http2https.go index 65bc2140b64..b9a799bb861 100644 --- a/pkg/plugin/client/http2https.go +++ b/pkg/plugin/client/http2https.go @@ -19,11 +19,15 @@ package plugin import ( "crypto/tls" "io" + stdlog "log" "net" "net/http" "net/http/httputil" + "github.com/fatedier/golib/pool" + v1 "github.com/fatedier/frp/pkg/config/v1" + "github.com/fatedier/frp/pkg/util/log" netpkg "github.com/fatedier/frp/pkg/util/net" ) @@ -67,7 +71,9 @@ func NewHTTP2HTTPSPlugin(options v1.ClientPluginOptions) (Plugin, error) { req.Header.Set(k, v) } }, - Transport: tr, + Transport: tr, + BufferPool: pool.NewBuffer(32 * 1024), + ErrorLog: stdlog.New(log.NewWriteLogger(log.WarnLevel, 2), "", 0), } p.s = &http.Server{ diff --git a/pkg/plugin/client/http_proxy.go b/pkg/plugin/client/http_proxy.go index 90a99b09434..ed8d97ec521 100644 --- a/pkg/plugin/client/http_proxy.go +++ b/pkg/plugin/client/http_proxy.go @@ -54,7 +54,8 @@ func NewHTTPProxyPlugin(options v1.ClientPluginOptions) (Plugin, error) { } hp.s = &http.Server{ - Handler: hp, + Handler: hp, + ReadHeaderTimeout: 60 * time.Second, } go func() { diff --git a/pkg/plugin/client/https2http.go b/pkg/plugin/client/https2http.go index 1dc3840180d..d7bddcb3505 100644 --- a/pkg/plugin/client/https2http.go +++ b/pkg/plugin/client/https2http.go @@ -20,12 +20,17 @@ import ( "crypto/tls" "fmt" "io" + stdlog "log" "net" "net/http" "net/http/httputil" + "time" + + "github.com/fatedier/golib/pool" v1 "github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/transport" + "github.com/fatedier/frp/pkg/util/log" netpkg "github.com/fatedier/frp/pkg/util/net" ) @@ -63,10 +68,13 @@ func NewHTTPS2HTTPPlugin(options v1.ClientPluginOptions) (Plugin, error) { req.Header.Set(k, v) } }, + BufferPool: pool.NewBuffer(32 * 1024), + ErrorLog: stdlog.New(log.NewWriteLogger(log.WarnLevel, 2), "", 0), } p.s = &http.Server{ - Handler: rp, + Handler: rp, + ReadHeaderTimeout: 60 * time.Second, } var ( diff --git a/pkg/plugin/client/https2https.go b/pkg/plugin/client/https2https.go index dd3245f83be..047d4ff26ab 100644 --- a/pkg/plugin/client/https2https.go +++ b/pkg/plugin/client/https2https.go @@ -20,12 +20,17 @@ import ( "crypto/tls" "fmt" "io" + stdlog "log" "net" "net/http" "net/http/httputil" + "time" + + "github.com/fatedier/golib/pool" v1 "github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/transport" + "github.com/fatedier/frp/pkg/util/log" netpkg "github.com/fatedier/frp/pkg/util/net" ) @@ -68,11 +73,14 @@ func NewHTTPS2HTTPSPlugin(options v1.ClientPluginOptions) (Plugin, error) { req.Header.Set(k, v) } }, - Transport: tr, + Transport: tr, + BufferPool: pool.NewBuffer(32 * 1024), + ErrorLog: stdlog.New(log.NewWriteLogger(log.WarnLevel, 2), "", 0), } p.s = &http.Server{ - Handler: rp, + Handler: rp, + ReadHeaderTimeout: 60 * time.Second, } var ( diff --git a/pkg/plugin/client/static_file.go b/pkg/plugin/client/static_file.go index a7db2657e7e..493710205c4 100644 --- a/pkg/plugin/client/static_file.go +++ b/pkg/plugin/client/static_file.go @@ -60,7 +60,8 @@ func NewStaticFilePlugin(options v1.ClientPluginOptions) (Plugin, error) { router.Use(netpkg.NewHTTPAuthMiddleware(opts.HTTPUser, opts.HTTPPassword).SetAuthFailDelay(200 * time.Millisecond).Middleware) router.PathPrefix(prefix).Handler(netpkg.MakeHTTPGzipHandler(http.StripPrefix(prefix, http.FileServer(http.Dir(opts.LocalPath))))).Methods("GET") sp.s = &http.Server{ - Handler: router, + Handler: router, + ReadHeaderTimeout: 60 * time.Second, } go func() { _ = sp.s.Serve(listener) diff --git a/pkg/util/log/log.go b/pkg/util/log/log.go index f6399e00809..e2125365808 100644 --- a/pkg/util/log/log.go +++ b/pkg/util/log/log.go @@ -15,11 +15,20 @@ package log import ( + "bytes" "os" "github.com/fatedier/golib/log" ) +var ( + TraceLevel = log.TraceLevel + DebugLevel = log.DebugLevel + InfoLevel = log.InfoLevel + WarnLevel = log.WarnLevel + ErrorLevel = log.ErrorLevel +) + var Logger *log.Logger func init() { @@ -77,3 +86,24 @@ func Debugf(format string, v ...interface{}) { func Tracef(format string, v ...interface{}) { Logger.Tracef(format, v...) } + +func Logf(level log.Level, offset int, format string, v ...interface{}) { + Logger.Logf(level, offset, format, v...) +} + +type WriteLogger struct { + level log.Level + offset int +} + +func NewWriteLogger(level log.Level, offset int) *WriteLogger { + return &WriteLogger{ + level: level, + offset: offset, + } +} + +func (w *WriteLogger) Write(p []byte) (n int, err error) { + Logger.Log(w.level, w.offset, string(bytes.TrimRight(p, "\n"))) + return len(p), nil +} diff --git a/pkg/util/net/dial.go b/pkg/util/net/dial.go index bc670643a0b..1a3859edfa7 100644 --- a/pkg/util/net/dial.go +++ b/pkg/util/net/dial.go @@ -5,11 +5,11 @@ import ( "net" "net/url" - libdial "github.com/fatedier/golib/net/dial" + libnet "github.com/fatedier/golib/net" "golang.org/x/net/websocket" ) -func DialHookCustomTLSHeadByte(enableTLS bool, disableCustomTLSHeadByte bool) libdial.AfterHookFunc { +func DialHookCustomTLSHeadByte(enableTLS bool, disableCustomTLSHeadByte bool) libnet.AfterHookFunc { return func(ctx context.Context, c net.Conn, addr string) (context.Context, net.Conn, error) { if enableTLS && !disableCustomTLSHeadByte { _, err := c.Write([]byte{byte(FRPTLSHeadByte)}) @@ -21,7 +21,7 @@ func DialHookCustomTLSHeadByte(enableTLS bool, disableCustomTLSHeadByte bool) li } } -func DialHookWebsocket(protocol string, host string) libdial.AfterHookFunc { +func DialHookWebsocket(protocol string, host string) libnet.AfterHookFunc { return func(ctx context.Context, c net.Conn, addr string) (context.Context, net.Conn, error) { if protocol != "wss" { protocol = "ws" diff --git a/pkg/util/net/websocket.go b/pkg/util/net/websocket.go index e642be06f3c..263b3a1d98d 100644 --- a/pkg/util/net/websocket.go +++ b/pkg/util/net/websocket.go @@ -4,6 +4,7 @@ import ( "errors" "net" "net/http" + "time" "golang.org/x/net/websocket" ) @@ -39,8 +40,9 @@ func NewWebsocketListener(ln net.Listener) (wl *WebsocketListener) { })) wl.server = &http.Server{ - Addr: ln.Addr().String(), - Handler: muxer, + Addr: ln.Addr().String(), + Handler: muxer, + ReadHeaderTimeout: 60 * time.Second, } go func() { diff --git a/pkg/util/vhost/http.go b/pkg/util/vhost/http.go index 7afc7ebbf19..518f45476a4 100644 --- a/pkg/util/vhost/http.go +++ b/pkg/util/vhost/http.go @@ -15,7 +15,6 @@ package vhost import ( - "bytes" "context" "encoding/base64" "errors" @@ -116,10 +115,16 @@ func NewHTTPReverseProxy(option HTTPReverseProxyOptions, vhostRouter *Routers) * return nil, nil }, }, - BufferPool: newWrapPool(), - ErrorLog: stdlog.New(newWrapLogger(), "", 0), + BufferPool: pool.NewBuffer(32 * 1024), + ErrorLog: stdlog.New(log.NewWriteLogger(log.WarnLevel, 2), "", 0), ErrorHandler: func(rw http.ResponseWriter, req *http.Request, err error) { - log.Warnf("do http proxy request [host: %s] error: %v", req.Host, err) + log.Logf(log.WarnLevel, 1, "do http proxy request [host: %s] error: %v", req.Host, err) + if err != nil { + if e, ok := err.(net.Error); ok && e.Timeout() { + rw.WriteHeader(http.StatusGatewayTimeout) + return + } + } rw.WriteHeader(http.StatusNotFound) _, _ = rw.Write(getNotFoundPageContent()) }, @@ -322,20 +327,3 @@ func (rp *HTTPReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) rp.proxy.ServeHTTP(rw, newreq) } } - -type wrapPool struct{} - -func newWrapPool() *wrapPool { return &wrapPool{} } - -func (p *wrapPool) Get() []byte { return pool.GetBuf(32 * 1024) } - -func (p *wrapPool) Put(buf []byte) { pool.PutBuf(buf) } - -type wrapLogger struct{} - -func newWrapLogger() *wrapLogger { return &wrapLogger{} } - -func (l *wrapLogger) Write(p []byte) (n int, err error) { - log.Warnf("%s", string(bytes.TrimRight(p, "\n"))) - return len(p), nil -} diff --git a/pkg/util/vhost/https_test.go b/pkg/util/vhost/https_test.go index 47fb9dae4ed..08a3f558a86 100644 --- a/pkg/util/vhost/https_test.go +++ b/pkg/util/vhost/https_test.go @@ -12,7 +12,7 @@ import ( func TestGetHTTPSHostname(t *testing.T) { require := require.New(t) - l, err := net.Listen("tcp", ":") + l, err := net.Listen("tcp", "127.0.0.1:") require.NoError(err) defer l.Close() diff --git a/server/service.go b/server/service.go index 325f7f6cbf3..27c4110d92a 100644 --- a/server/service.go +++ b/server/service.go @@ -286,12 +286,13 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { address := net.JoinHostPort(cfg.ProxyBindAddr, strconv.Itoa(cfg.VhostHTTPPort)) server := &http.Server{ - Addr: address, - Handler: rp, + Addr: address, + Handler: rp, + ReadHeaderTimeout: 60 * time.Second, } var l net.Listener if httpMuxOn { - l = svr.muxer.ListenHttp(1) + l = svr.muxer.ListenHTTP(1) } else { l, err = net.Listen("tcp", address) if err != nil { @@ -308,7 +309,7 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { if cfg.VhostHTTPSPort > 0 { var l net.Listener if httpsMuxOn { - l = svr.muxer.ListenHttps(1) + l = svr.muxer.ListenHTTPS(1) } else { address := net.JoinHostPort(cfg.ProxyBindAddr, strconv.Itoa(cfg.VhostHTTPSPort)) l, err = net.Listen("tcp", address) diff --git a/test/e2e/framework/framework.go b/test/e2e/framework/framework.go index 527096cd1b4..efd098ab5a8 100644 --- a/test/e2e/framework/framework.go +++ b/test/e2e/framework/framework.go @@ -260,7 +260,7 @@ func (f *Framework) SetEnvs(envs []string) { func (f *Framework) WriteTempFile(name string, content string) string { filePath := filepath.Join(f.TempDirectory, name) - err := os.WriteFile(filePath, []byte(content), 0o766) + err := os.WriteFile(filePath, []byte(content), 0o600) ExpectNoError(err) return filePath } diff --git a/test/e2e/framework/process.go b/test/e2e/framework/process.go index 0845914bf06..10b3611bf6e 100644 --- a/test/e2e/framework/process.go +++ b/test/e2e/framework/process.go @@ -27,7 +27,7 @@ func (f *Framework) RunProcesses(serverTemplates []string, clientTemplates []str currentServerProcesses := make([]*process.Process, 0, len(serverTemplates)) for i := range serverTemplates { path := filepath.Join(f.TempDirectory, fmt.Sprintf("frp-e2e-server-%d", i)) - err = os.WriteFile(path, []byte(outs[i]), 0o666) + err = os.WriteFile(path, []byte(outs[i]), 0o600) ExpectNoError(err) if TestContext.Debug { @@ -48,7 +48,7 @@ func (f *Framework) RunProcesses(serverTemplates []string, clientTemplates []str for i := range clientTemplates { index := i + len(serverTemplates) path := filepath.Join(f.TempDirectory, fmt.Sprintf("frp-e2e-client-%d", i)) - err = os.WriteFile(path, []byte(outs[index]), 0o666) + err = os.WriteFile(path, []byte(outs[index]), 0o600) ExpectNoError(err) if TestContext.Debug { @@ -94,7 +94,7 @@ func (f *Framework) RunFrpc(args ...string) (*process.Process, string, error) { func (f *Framework) GenerateConfigFile(content string) string { f.configFileIndex++ path := filepath.Join(f.TempDirectory, fmt.Sprintf("frp-e2e-config-%d", f.configFileIndex)) - err := os.WriteFile(path, []byte(content), 0o666) + err := os.WriteFile(path, []byte(content), 0o600) ExpectNoError(err) return path } diff --git a/test/e2e/pkg/request/request.go b/test/e2e/pkg/request/request.go index 740bc4fbf2c..211cc42527d 100644 --- a/test/e2e/pkg/request/request.go +++ b/test/e2e/pkg/request/request.go @@ -12,7 +12,7 @@ import ( "strconv" "time" - libdial "github.com/fatedier/golib/net/dial" + libnet "github.com/fatedier/golib/net" httppkg "github.com/fatedier/frp/pkg/util/http" "github.com/fatedier/frp/test/e2e/pkg/rpc" @@ -160,11 +160,11 @@ func (r *Request) Do() (*Response, error) { if r.protocol != "tcp" { return nil, fmt.Errorf("only tcp protocol is allowed for proxy") } - proxyType, proxyAddress, auth, err := libdial.ParseProxyURL(r.proxyURL) + proxyType, proxyAddress, auth, err := libnet.ParseProxyURL(r.proxyURL) if err != nil { return nil, fmt.Errorf("parse ProxyURL error: %v", err) } - conn, err = libdial.Dial(addr, libdial.WithProxy(proxyType, proxyAddress), libdial.WithProxyAuth(auth)) + conn, err = libnet.Dial(addr, libnet.WithProxy(proxyType, proxyAddress), libnet.WithProxyAuth(auth)) if err != nil { return nil, err } diff --git a/test/e2e/v1/basic/http.go b/test/e2e/v1/basic/http.go index e649dbfbe47..4883263efae 100644 --- a/test/e2e/v1/basic/http.go +++ b/test/e2e/v1/basic/http.go @@ -5,6 +5,7 @@ import ( "net/http" "net/url" "strconv" + "time" "github.com/gorilla/websocket" "github.com/onsi/ginkgo/v2" @@ -385,4 +386,48 @@ var _ = ginkgo.Describe("[Feature: HTTP]", func() { framework.ExpectNoError(err) framework.ExpectEqualValues(consts.TestString, string(msg)) }) + + ginkgo.It("vhostHTTPTimeout", func() { + vhostHTTPPort := f.AllocPort() + serverConf := getDefaultServerConf(vhostHTTPPort) + serverConf += ` + vhostHTTPTimeout = 2 + ` + + delayDuration := 0 * time.Second + localPort := f.AllocPort() + localServer := httpserver.New( + httpserver.WithBindPort(localPort), + httpserver.WithHandler(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + time.Sleep(delayDuration) + _, _ = w.Write([]byte(req.Host)) + })), + ) + f.RunServer("", localServer) + + clientConf := consts.DefaultClientConfig + clientConf += fmt.Sprintf(` + [[proxies]] + name = "test" + type = "http" + localPort = %d + customDomains = ["normal.example.com"] + `, localPort) + + f.RunProcesses([]string{serverConf}, []string{clientConf}) + + framework.NewRequestExpect(f).Port(vhostHTTPPort). + RequestModify(func(r *request.Request) { + r.HTTP().HTTPHost("normal.example.com").HTTP().Timeout(time.Second) + }). + ExpectResp([]byte("normal.example.com")). + Ensure() + + delayDuration = 3 * time.Second + framework.NewRequestExpect(f).Port(vhostHTTPPort). + RequestModify(func(r *request.Request) { + r.HTTP().HTTPHost("normal.example.com").HTTP().Timeout(5 * time.Second) + }). + Ensure(framework.ExpectResponseCode(504)) + }) }) From f3a71bc08f0e606ff407638a34ddf09ecffe2364 Mon Sep 17 00:00:00 2001 From: fatedier Date: Thu, 11 Apr 2024 22:40:42 +0800 Subject: [PATCH 05/90] show tcpmux proxies on the frps dashboard (#4152) --- Release.md | 4 ++ .../{index-Q42Pu2_S.js => index-82-40HIG.js} | 32 ++++----- assets/frps/static/index.html | 2 +- server/dashboard_api.go | 3 +- web/frps/components.d.ts | 1 + web/frps/src/App.vue | 1 + web/frps/src/components/ProxiesTCPMux.vue | 38 ++++++++++ web/frps/src/components/ProxyViewExpand.vue | 70 +++++++++---------- web/frps/src/components/ServerOverview.vue | 4 +- web/frps/src/router/index.ts | 6 ++ web/frps/src/utils/proxy.ts | 23 ++++++ 11 files changed, 128 insertions(+), 56 deletions(-) rename assets/frps/static/{index-Q42Pu2_S.js => index-82-40HIG.js} (91%) create mode 100644 web/frps/src/components/ProxiesTCPMux.vue diff --git a/Release.md b/Release.md index 5de41f2fe0b..725ebe9457a 100644 --- a/Release.md +++ b/Release.md @@ -1,3 +1,7 @@ +### Features + +* Show tcpmux proxies on the frps dashboard. + ### Fixes * When an HTTP proxy request times out, it returns 504 instead of 404 now. diff --git a/assets/frps/static/index-Q42Pu2_S.js b/assets/frps/static/index-82-40HIG.js similarity index 91% rename from assets/frps/static/index-Q42Pu2_S.js rename to assets/frps/static/index-82-40HIG.js index 45293e05cfd..3d8e3c08da8 100644 --- a/assets/frps/static/index-Q42Pu2_S.js +++ b/assets/frps/static/index-82-40HIG.js @@ -1,20 +1,20 @@ -var DD=Object.defineProperty;var ID=(e,t,r)=>t in e?DD(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var OD=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var zt=(e,t,r)=>(ID(e,typeof t!="symbol"?t+"":t,r),r);var Ite=OD(($r,Hr)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const o of a.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function r(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(i){if(i.ep)return;i.ep=!0;const a=r(i);fetch(i.href,a)}})();/** +var DD=Object.defineProperty;var ID=(e,t,r)=>t in e?DD(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var OD=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var It=(e,t,r)=>(ID(e,typeof t!="symbol"?t+"":t,r),r);var Bte=OD(($r,Hr)=>{(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const a of i)if(a.type==="childList")for(const o of a.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function r(i){const a={};return i.integrity&&(a.integrity=i.integrity),i.referrerPolicy&&(a.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?a.credentials="include":i.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function n(i){if(i.ep)return;i.ep=!0;const a=r(i);fetch(i.href,a)}})();/** * @vue/shared v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function Wm(e,t){const r=new Set(e.split(","));return t?n=>r.has(n.toLowerCase()):n=>r.has(n)}const St={},ns=[],Bt=()=>{},RD=()=>!1,Wd=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Gm=e=>e.startsWith("onUpdate:"),$t=Object.assign,Um=(e,t)=>{const r=e.indexOf(t);r>-1&&e.splice(r,1)},kD=Object.prototype.hasOwnProperty,Ue=(e,t)=>kD.call(e,t),_e=Array.isArray,is=e=>Wu(e)==="[object Map]",Gd=e=>Wu(e)==="[object Set]",l_=e=>Wu(e)==="[object Date]",De=e=>typeof e=="function",ze=e=>typeof e=="string",oa=e=>typeof e=="symbol",qe=e=>e!==null&&typeof e=="object",Qc=e=>(qe(e)||De(e))&&De(e.then)&&De(e.catch),EC=Object.prototype.toString,Wu=e=>EC.call(e),ND=e=>Wu(e).slice(8,-1),LC=e=>Wu(e)==="[object Object]",Ym=e=>ze(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Sc=Wm(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ud=e=>{const t=Object.create(null);return r=>t[r]||(t[r]=e(r))},BD=/-(\w)/g,Pn=Ud(e=>e.replace(BD,(t,r)=>r?r.toUpperCase():"")),FD=/\B([A-Z])/g,xo=Ud(e=>e.replace(FD,"-$1").toLowerCase()),Yd=Ud(e=>e.charAt(0).toUpperCase()+e.slice(1)),xc=Ud(e=>e?`on${Yd(e)}`:""),sa=(e,t)=>!Object.is(e,t),Cc=(e,t)=>{for(let r=0;r{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:r})},$D=e=>{const t=parseFloat(e);return isNaN(t)?e:t},HD=e=>{const t=ze(e)?Number(e):NaN;return isNaN(t)?e:t};let u_;const DC=()=>u_||(u_=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ct(e){if(_e(e)){const t={};for(let r=0;r{if(r){const n=r.split(VD);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function re(e){let t="";if(ze(e))t=e;else if(_e(e))for(let r=0;rjd(r,t))}const be=e=>ze(e)?e:e==null?"":_e(e)||qe(e)&&(e.toString===EC||!De(e.toString))?JSON.stringify(e,RC,2):String(e),RC=(e,t)=>t&&t.__v_isRef?RC(e,t.value):is(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((r,[n,i],a)=>(r[Wh(n,a)+" =>"]=i,r),{})}:Gd(t)?{[`Set(${t.size})`]:[...t.values()].map(r=>Wh(r))}:oa(t)?Wh(t):qe(t)&&!_e(t)&&!LC(t)?String(t):t,Wh=(e,t="")=>{var r;return oa(e)?`Symbol(${(r=e.description)!=null?r:t})`:e};/** +**/function Wm(e,t){const r=new Set(e.split(","));return t?n=>r.has(n.toLowerCase()):n=>r.has(n)}const St={},as=[],Ft=()=>{},RD=()=>!1,Wd=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Gm=e=>e.startsWith("onUpdate:"),Ht=Object.assign,Um=(e,t)=>{const r=e.indexOf(t);r>-1&&e.splice(r,1)},kD=Object.prototype.hasOwnProperty,Ue=(e,t)=>kD.call(e,t),_e=Array.isArray,os=e=>Wu(e)==="[object Map]",Gd=e=>Wu(e)==="[object Set]",l_=e=>Wu(e)==="[object Date]",De=e=>typeof e=="function",ze=e=>typeof e=="string",oa=e=>typeof e=="symbol",qe=e=>e!==null&&typeof e=="object",Qc=e=>(qe(e)||De(e))&&De(e.then)&&De(e.catch),EC=Object.prototype.toString,Wu=e=>EC.call(e),ND=e=>Wu(e).slice(8,-1),LC=e=>Wu(e)==="[object Object]",Ym=e=>ze(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,Sc=Wm(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Ud=e=>{const t=Object.create(null);return r=>t[r]||(t[r]=e(r))},BD=/-(\w)/g,Pn=Ud(e=>e.replace(BD,(t,r)=>r?r.toUpperCase():"")),FD=/\B([A-Z])/g,xo=Ud(e=>e.replace(FD,"-$1").toLowerCase()),Yd=Ud(e=>e.charAt(0).toUpperCase()+e.slice(1)),xc=Ud(e=>e?`on${Yd(e)}`:""),sa=(e,t)=>!Object.is(e,t),Cc=(e,t)=>{for(let r=0;r{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,value:r})},$D=e=>{const t=parseFloat(e);return isNaN(t)?e:t},HD=e=>{const t=ze(e)?Number(e):NaN;return isNaN(t)?e:t};let u_;const DC=()=>u_||(u_=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function ct(e){if(_e(e)){const t={};for(let r=0;r{if(r){const n=r.split(VD);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function re(e){let t="";if(ze(e))t=e;else if(_e(e))for(let r=0;rjd(r,t))}const xe=e=>ze(e)?e:e==null?"":_e(e)||qe(e)&&(e.toString===EC||!De(e.toString))?JSON.stringify(e,RC,2):String(e),RC=(e,t)=>t&&t.__v_isRef?RC(e,t.value):os(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((r,[n,i],a)=>(r[Wh(n,a)+" =>"]=i,r),{})}:Gd(t)?{[`Set(${t.size})`]:[...t.values()].map(r=>Wh(r))}:oa(t)?Wh(t):qe(t)&&!_e(t)&&!LC(t)?String(t):t,Wh=(e,t="")=>{var r;return oa(e)?`Symbol(${(r=e.description)!=null?r:t})`:e};/** * @vue/reactivity v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/let Nr;class qD{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Nr,!t&&Nr&&(this.index=(Nr.scopes||(Nr.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const r=Nr;try{return Nr=this,t()}finally{Nr=r}}}on(){Nr=this}off(){Nr=this.parent}stop(t){if(this._active){let r,n;for(r=0,n=this.effects.length;r=2))break}this._dirtyLevel<2&&(this._dirtyLevel=0),To()}return this._dirtyLevel>=2}set dirty(t){this._dirtyLevel=t?2:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=ta,r=io;try{return ta=!0,io=this,this._runnings++,f_(this),this.fn()}finally{c_(this),this._runnings--,io=r,ta=t}}stop(){var t;this.active&&(f_(this),c_(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function XD(e){return e.value}function f_(e){e._trackId++,e._depsLength=0}function c_(e){if(e.deps&&e.deps.length>e._depsLength){for(let t=e._depsLength;t{const r=new Map;return r.cleanup=e,r.computed=t,r},ed=new WeakMap,ao=Symbol(""),Fp=Symbol("");function Lr(e,t,r){if(ta&&io){let n=ed.get(e);n||ed.set(e,n=new Map);let i=n.get(r);i||n.set(r,i=VC(()=>n.delete(r))),$C(io,i)}}function mi(e,t,r,n,i,a){const o=ed.get(e);if(!o)return;let s=[];if(t==="clear")s=[...o.values()];else if(r==="length"&&_e(e)){const l=Number(n);o.forEach((u,f)=>{(f==="length"||!oa(f)&&f>=l)&&s.push(u)})}else switch(r!==void 0&&s.push(o.get(r)),t){case"add":_e(e)?Ym(r)&&s.push(o.get("length")):(s.push(o.get(ao)),is(e)&&s.push(o.get(Fp)));break;case"delete":_e(e)||(s.push(o.get(ao)),is(e)&&s.push(o.get(Fp)));break;case"set":is(e)&&s.push(o.get(ao));break}qm();for(const l of s)l&&HC(l,2);Km()}function ZD(e,t){var r;return(r=ed.get(e))==null?void 0:r.get(t)}const QD=Wm("__proto__,__v_isRef,__isVue"),WC=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(oa)),d_=JD();function JD(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...r){const n=Qe(this);for(let a=0,o=this.length;a{e[t]=function(...r){Co(),qm();const n=Qe(this)[t].apply(this,r);return Km(),To(),n}}),e}function eI(e){const t=Qe(this);return Lr(t,"has",e),t.hasOwnProperty(e)}class GC{constructor(t=!1,r=!1){this._isReadonly=t,this._shallow=r}get(t,r,n){const i=this._isReadonly,a=this._shallow;if(r==="__v_isReactive")return!i;if(r==="__v_isReadonly")return i;if(r==="__v_isShallow")return a;if(r==="__v_raw")return n===(i?a?hI:qC:a?jC:YC).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const o=_e(t);if(!i){if(o&&Ue(d_,r))return Reflect.get(d_,r,n);if(r==="hasOwnProperty")return eI}const s=Reflect.get(t,r,n);return(oa(r)?WC.has(r):QD(r))||(i||Lr(t,"get",r),a)?s:Pt(s)?o&&Ym(r)?s:s.value:qe(s)?i?Gu(s):Ln(s):s}}class UC extends GC{constructor(t=!1){super(!1,t)}set(t,r,n,i){let a=t[r];if(!this._shallow){const l=hs(a);if(!td(n)&&!hs(n)&&(a=Qe(a),n=Qe(n)),!_e(t)&&Pt(a)&&!Pt(n))return l?!1:(a.value=n,!0)}const o=_e(t)&&Ym(r)?Number(r)e,qd=e=>Reflect.getPrototypeOf(e);function vf(e,t,r=!1,n=!1){e=e.__v_raw;const i=Qe(e),a=Qe(t);r||(sa(t,a)&&Lr(i,"get",t),Lr(i,"get",a));const{has:o}=qd(i),s=n?Xm:r?ey:su;if(o.call(i,t))return s(e.get(t));if(o.call(i,a))return s(e.get(a));e!==i&&e.get(t)}function pf(e,t=!1){const r=this.__v_raw,n=Qe(r),i=Qe(e);return t||(sa(e,i)&&Lr(n,"has",e),Lr(n,"has",i)),e===i?r.has(e):r.has(e)||r.has(i)}function gf(e,t=!1){return e=e.__v_raw,!t&&Lr(Qe(e),"iterate",ao),Reflect.get(e,"size",e)}function h_(e){e=Qe(e);const t=Qe(this);return qd(t).has.call(t,e)||(t.add(e),mi(t,"add",e,e)),this}function v_(e,t){t=Qe(t);const r=Qe(this),{has:n,get:i}=qd(r);let a=n.call(r,e);a||(e=Qe(e),a=n.call(r,e));const o=i.call(r,e);return r.set(e,t),a?sa(t,o)&&mi(r,"set",e,t):mi(r,"add",e,t),this}function p_(e){const t=Qe(this),{has:r,get:n}=qd(t);let i=r.call(t,e);i||(e=Qe(e),i=r.call(t,e)),n&&n.call(t,e);const a=t.delete(e);return i&&mi(t,"delete",e,void 0),a}function g_(){const e=Qe(this),t=e.size!==0,r=e.clear();return t&&mi(e,"clear",void 0,void 0),r}function mf(e,t){return function(n,i){const a=this,o=a.__v_raw,s=Qe(o),l=t?Xm:e?ey:su;return!e&&Lr(s,"iterate",ao),o.forEach((u,f)=>n.call(i,l(u),l(f),a))}}function yf(e,t,r){return function(...n){const i=this.__v_raw,a=Qe(i),o=is(a),s=e==="entries"||e===Symbol.iterator&&o,l=e==="keys"&&o,u=i[e](...n),f=r?Xm:t?ey:su;return!t&&Lr(a,"iterate",l?Fp:ao),{next(){const{value:c,done:h}=u.next();return h?{value:c,done:h}:{value:s?[f(c[0]),f(c[1])]:f(c),done:h}},[Symbol.iterator](){return this}}}}function Di(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function aI(){const e={get(a){return vf(this,a)},get size(){return gf(this)},has:pf,add:h_,set:v_,delete:p_,clear:g_,forEach:mf(!1,!1)},t={get(a){return vf(this,a,!1,!0)},get size(){return gf(this)},has:pf,add:h_,set:v_,delete:p_,clear:g_,forEach:mf(!1,!0)},r={get(a){return vf(this,a,!0)},get size(){return gf(this,!0)},has(a){return pf.call(this,a,!0)},add:Di("add"),set:Di("set"),delete:Di("delete"),clear:Di("clear"),forEach:mf(!0,!1)},n={get(a){return vf(this,a,!0,!0)},get size(){return gf(this,!0)},has(a){return pf.call(this,a,!0)},add:Di("add"),set:Di("set"),delete:Di("delete"),clear:Di("clear"),forEach:mf(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(a=>{e[a]=yf(a,!1,!1),r[a]=yf(a,!0,!1),t[a]=yf(a,!1,!0),n[a]=yf(a,!0,!0)}),[e,r,t,n]}const[oI,sI,lI,uI]=aI();function Zm(e,t){const r=t?e?uI:lI:e?sI:oI;return(n,i,a)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(Ue(r,i)&&i in n?r:n,i,a)}const fI={get:Zm(!1,!1)},cI={get:Zm(!1,!0)},dI={get:Zm(!0,!1)},YC=new WeakMap,jC=new WeakMap,qC=new WeakMap,hI=new WeakMap;function vI(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function pI(e){return e.__v_skip||!Object.isExtensible(e)?0:vI(ND(e))}function Ln(e){return hs(e)?e:Jm(e,!1,rI,fI,YC)}function Qm(e){return Jm(e,!1,iI,cI,jC)}function Gu(e){return Jm(e,!0,nI,dI,qC)}function Jm(e,t,r,n,i){if(!qe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=i.get(e);if(a)return a;const o=pI(e);if(o===0)return e;const s=new Proxy(e,o===2?n:r);return i.set(e,s),s}function as(e){return hs(e)?as(e.__v_raw):!!(e&&e.__v_isReactive)}function hs(e){return!!(e&&e.__v_isReadonly)}function td(e){return!!(e&&e.__v_isShallow)}function KC(e){return as(e)||hs(e)}function Qe(e){const t=e&&e.__v_raw;return t?Qe(t):e}function XC(e){return Jc(e,"__v_skip",!0),e}const su=e=>qe(e)?Ln(e):e,ey=e=>qe(e)?Gu(e):e;class ZC{constructor(t,r,n,i){this._setter=r,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new jm(()=>t(this._value),()=>Tc(this,1),()=>this.dep&&zC(this.dep)),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=n}get value(){const t=Qe(this);return(!t._cacheable||t.effect.dirty)&&sa(t._value,t._value=t.effect.run())&&Tc(t,2),JC(t),t.effect._dirtyLevel>=1&&Tc(t,1),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function QC(e,t,r=!1){let n,i;const a=De(e);return a?(n=e,i=Bt):(n=e.get,i=e.set),new ZC(n,i,a||!i,r)}function JC(e){ta&&io&&(e=Qe(e),$C(io,e.dep||(e.dep=VC(()=>e.dep=void 0,e instanceof ZC?e:void 0))))}function Tc(e,t=2,r){e=Qe(e);const n=e.dep;n&&HC(n,t)}function Pt(e){return!!(e&&e.__v_isRef===!0)}function $(e){return eT(e,!1)}function ty(e){return eT(e,!0)}function eT(e,t){return Pt(e)?e:new gI(e,t)}class gI{constructor(t,r){this.__v_isShallow=r,this.dep=void 0,this.__v_isRef=!0,this._rawValue=r?t:Qe(t),this._value=r?t:su(t)}get value(){return JC(this),this._value}set value(t){const r=this.__v_isShallow||td(t)||hs(t);t=r?t:Qe(t),sa(t,this._rawValue)&&(this._rawValue=t,this._value=r?t:su(t),Tc(this,2))}}function T(e){return Pt(e)?e.value:e}const mI={get:(e,t,r)=>T(Reflect.get(e,t,r)),set:(e,t,r,n)=>{const i=e[t];return Pt(i)&&!Pt(r)?(i.value=r,!0):Reflect.set(e,t,r,n)}};function tT(e){return as(e)?e:new Proxy(e,mI)}function Kd(e){const t=_e(e)?new Array(e.length):{};for(const r in e)t[r]=rT(e,r);return t}class yI{constructor(t,r,n){this._object=t,this._key=r,this._defaultValue=n,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ZD(Qe(this._object),this._key)}}class _I{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function wn(e,t,r){return Pt(e)?e:De(e)?new _I(e):qe(e)&&arguments.length>1?rT(e,t,r):$(e)}function rT(e,t,r){const n=e[t];return Pt(n)?n:new yI(e,t,r)}/** +**/let Nr;class qD{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this.parent=Nr,!t&&Nr&&(this.index=(Nr.scopes||(Nr.scopes=[])).push(this)-1)}get active(){return this._active}run(t){if(this._active){const r=Nr;try{return Nr=this,t()}finally{Nr=r}}}on(){Nr=this}off(){Nr=this.parent}stop(t){if(this._active){let r,n;for(r=0,n=this.effects.length;r=2))break}this._dirtyLevel<2&&(this._dirtyLevel=0),To()}return this._dirtyLevel>=2}set dirty(t){this._dirtyLevel=t?2:0}run(){if(this._dirtyLevel=0,!this.active)return this.fn();let t=ta,r=io;try{return ta=!0,io=this,this._runnings++,f_(this),this.fn()}finally{c_(this),this._runnings--,io=r,ta=t}}stop(){var t;this.active&&(f_(this),c_(this),(t=this.onStop)==null||t.call(this),this.active=!1)}}function XD(e){return e.value}function f_(e){e._trackId++,e._depsLength=0}function c_(e){if(e.deps&&e.deps.length>e._depsLength){for(let t=e._depsLength;t{const r=new Map;return r.cleanup=e,r.computed=t,r},ed=new WeakMap,ao=Symbol(""),Fp=Symbol("");function Lr(e,t,r){if(ta&&io){let n=ed.get(e);n||ed.set(e,n=new Map);let i=n.get(r);i||n.set(r,i=VC(()=>n.delete(r))),$C(io,i)}}function mi(e,t,r,n,i,a){const o=ed.get(e);if(!o)return;let s=[];if(t==="clear")s=[...o.values()];else if(r==="length"&&_e(e)){const l=Number(n);o.forEach((u,f)=>{(f==="length"||!oa(f)&&f>=l)&&s.push(u)})}else switch(r!==void 0&&s.push(o.get(r)),t){case"add":_e(e)?Ym(r)&&s.push(o.get("length")):(s.push(o.get(ao)),os(e)&&s.push(o.get(Fp)));break;case"delete":_e(e)||(s.push(o.get(ao)),os(e)&&s.push(o.get(Fp)));break;case"set":os(e)&&s.push(o.get(ao));break}qm();for(const l of s)l&&HC(l,2);Km()}function ZD(e,t){var r;return(r=ed.get(e))==null?void 0:r.get(t)}const QD=Wm("__proto__,__v_isRef,__isVue"),WC=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(oa)),d_=JD();function JD(){const e={};return["includes","indexOf","lastIndexOf"].forEach(t=>{e[t]=function(...r){const n=Qe(this);for(let a=0,o=this.length;a{e[t]=function(...r){Co(),qm();const n=Qe(this)[t].apply(this,r);return Km(),To(),n}}),e}function eI(e){const t=Qe(this);return Lr(t,"has",e),t.hasOwnProperty(e)}class GC{constructor(t=!1,r=!1){this._isReadonly=t,this._shallow=r}get(t,r,n){const i=this._isReadonly,a=this._shallow;if(r==="__v_isReactive")return!i;if(r==="__v_isReadonly")return i;if(r==="__v_isShallow")return a;if(r==="__v_raw")return n===(i?a?hI:qC:a?jC:YC).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(n)?t:void 0;const o=_e(t);if(!i){if(o&&Ue(d_,r))return Reflect.get(d_,r,n);if(r==="hasOwnProperty")return eI}const s=Reflect.get(t,r,n);return(oa(r)?WC.has(r):QD(r))||(i||Lr(t,"get",r),a)?s:Pt(s)?o&&Ym(r)?s:s.value:qe(s)?i?Gu(s):Ln(s):s}}class UC extends GC{constructor(t=!1){super(!1,t)}set(t,r,n,i){let a=t[r];if(!this._shallow){const l=ps(a);if(!td(n)&&!ps(n)&&(a=Qe(a),n=Qe(n)),!_e(t)&&Pt(a)&&!Pt(n))return l?!1:(a.value=n,!0)}const o=_e(t)&&Ym(r)?Number(r)e,qd=e=>Reflect.getPrototypeOf(e);function vf(e,t,r=!1,n=!1){e=e.__v_raw;const i=Qe(e),a=Qe(t);r||(sa(t,a)&&Lr(i,"get",t),Lr(i,"get",a));const{has:o}=qd(i),s=n?Xm:r?ey:su;if(o.call(i,t))return s(e.get(t));if(o.call(i,a))return s(e.get(a));e!==i&&e.get(t)}function pf(e,t=!1){const r=this.__v_raw,n=Qe(r),i=Qe(e);return t||(sa(e,i)&&Lr(n,"has",e),Lr(n,"has",i)),e===i?r.has(e):r.has(e)||r.has(i)}function gf(e,t=!1){return e=e.__v_raw,!t&&Lr(Qe(e),"iterate",ao),Reflect.get(e,"size",e)}function h_(e){e=Qe(e);const t=Qe(this);return qd(t).has.call(t,e)||(t.add(e),mi(t,"add",e,e)),this}function v_(e,t){t=Qe(t);const r=Qe(this),{has:n,get:i}=qd(r);let a=n.call(r,e);a||(e=Qe(e),a=n.call(r,e));const o=i.call(r,e);return r.set(e,t),a?sa(t,o)&&mi(r,"set",e,t):mi(r,"add",e,t),this}function p_(e){const t=Qe(this),{has:r,get:n}=qd(t);let i=r.call(t,e);i||(e=Qe(e),i=r.call(t,e)),n&&n.call(t,e);const a=t.delete(e);return i&&mi(t,"delete",e,void 0),a}function g_(){const e=Qe(this),t=e.size!==0,r=e.clear();return t&&mi(e,"clear",void 0,void 0),r}function mf(e,t){return function(n,i){const a=this,o=a.__v_raw,s=Qe(o),l=t?Xm:e?ey:su;return!e&&Lr(s,"iterate",ao),o.forEach((u,f)=>n.call(i,l(u),l(f),a))}}function yf(e,t,r){return function(...n){const i=this.__v_raw,a=Qe(i),o=os(a),s=e==="entries"||e===Symbol.iterator&&o,l=e==="keys"&&o,u=i[e](...n),f=r?Xm:t?ey:su;return!t&&Lr(a,"iterate",l?Fp:ao),{next(){const{value:c,done:h}=u.next();return h?{value:c,done:h}:{value:s?[f(c[0]),f(c[1])]:f(c),done:h}},[Symbol.iterator](){return this}}}}function Di(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function aI(){const e={get(a){return vf(this,a)},get size(){return gf(this)},has:pf,add:h_,set:v_,delete:p_,clear:g_,forEach:mf(!1,!1)},t={get(a){return vf(this,a,!1,!0)},get size(){return gf(this)},has:pf,add:h_,set:v_,delete:p_,clear:g_,forEach:mf(!1,!0)},r={get(a){return vf(this,a,!0)},get size(){return gf(this,!0)},has(a){return pf.call(this,a,!0)},add:Di("add"),set:Di("set"),delete:Di("delete"),clear:Di("clear"),forEach:mf(!0,!1)},n={get(a){return vf(this,a,!0,!0)},get size(){return gf(this,!0)},has(a){return pf.call(this,a,!0)},add:Di("add"),set:Di("set"),delete:Di("delete"),clear:Di("clear"),forEach:mf(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(a=>{e[a]=yf(a,!1,!1),r[a]=yf(a,!0,!1),t[a]=yf(a,!1,!0),n[a]=yf(a,!0,!0)}),[e,r,t,n]}const[oI,sI,lI,uI]=aI();function Zm(e,t){const r=t?e?uI:lI:e?sI:oI;return(n,i,a)=>i==="__v_isReactive"?!e:i==="__v_isReadonly"?e:i==="__v_raw"?n:Reflect.get(Ue(r,i)&&i in n?r:n,i,a)}const fI={get:Zm(!1,!1)},cI={get:Zm(!1,!0)},dI={get:Zm(!0,!1)},YC=new WeakMap,jC=new WeakMap,qC=new WeakMap,hI=new WeakMap;function vI(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function pI(e){return e.__v_skip||!Object.isExtensible(e)?0:vI(ND(e))}function Ln(e){return ps(e)?e:Jm(e,!1,rI,fI,YC)}function Qm(e){return Jm(e,!1,iI,cI,jC)}function Gu(e){return Jm(e,!0,nI,dI,qC)}function Jm(e,t,r,n,i){if(!qe(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=i.get(e);if(a)return a;const o=pI(e);if(o===0)return e;const s=new Proxy(e,o===2?n:r);return i.set(e,s),s}function ss(e){return ps(e)?ss(e.__v_raw):!!(e&&e.__v_isReactive)}function ps(e){return!!(e&&e.__v_isReadonly)}function td(e){return!!(e&&e.__v_isShallow)}function KC(e){return ss(e)||ps(e)}function Qe(e){const t=e&&e.__v_raw;return t?Qe(t):e}function XC(e){return Jc(e,"__v_skip",!0),e}const su=e=>qe(e)?Ln(e):e,ey=e=>qe(e)?Gu(e):e;class ZC{constructor(t,r,n,i){this._setter=r,this.dep=void 0,this.__v_isRef=!0,this.__v_isReadonly=!1,this.effect=new jm(()=>t(this._value),()=>Tc(this,1),()=>this.dep&&zC(this.dep)),this.effect.computed=this,this.effect.active=this._cacheable=!i,this.__v_isReadonly=n}get value(){const t=Qe(this);return(!t._cacheable||t.effect.dirty)&&sa(t._value,t._value=t.effect.run())&&Tc(t,2),JC(t),t.effect._dirtyLevel>=1&&Tc(t,1),t._value}set value(t){this._setter(t)}get _dirty(){return this.effect.dirty}set _dirty(t){this.effect.dirty=t}}function QC(e,t,r=!1){let n,i;const a=De(e);return a?(n=e,i=Ft):(n=e.get,i=e.set),new ZC(n,i,a||!i,r)}function JC(e){ta&&io&&(e=Qe(e),$C(io,e.dep||(e.dep=VC(()=>e.dep=void 0,e instanceof ZC?e:void 0))))}function Tc(e,t=2,r){e=Qe(e);const n=e.dep;n&&HC(n,t)}function Pt(e){return!!(e&&e.__v_isRef===!0)}function $(e){return eT(e,!1)}function ty(e){return eT(e,!0)}function eT(e,t){return Pt(e)?e:new gI(e,t)}class gI{constructor(t,r){this.__v_isShallow=r,this.dep=void 0,this.__v_isRef=!0,this._rawValue=r?t:Qe(t),this._value=r?t:su(t)}get value(){return JC(this),this._value}set value(t){const r=this.__v_isShallow||td(t)||ps(t);t=r?t:Qe(t),sa(t,this._rawValue)&&(this._rawValue=t,this._value=r?t:su(t),Tc(this,2))}}function T(e){return Pt(e)?e.value:e}const mI={get:(e,t,r)=>T(Reflect.get(e,t,r)),set:(e,t,r,n)=>{const i=e[t];return Pt(i)&&!Pt(r)?(i.value=r,!0):Reflect.set(e,t,r,n)}};function tT(e){return ss(e)?e:new Proxy(e,mI)}function Kd(e){const t=_e(e)?new Array(e.length):{};for(const r in e)t[r]=rT(e,r);return t}class yI{constructor(t,r,n){this._object=t,this._key=r,this._defaultValue=n,this.__v_isRef=!0}get value(){const t=this._object[this._key];return t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return ZD(Qe(this._object),this._key)}}class _I{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0}get value(){return this._getter()}}function wn(e,t,r){return Pt(e)?e:De(e)?new _I(e):qe(e)&&arguments.length>1?rT(e,t,r):$(e)}function rT(e,t,r){const n=e[t];return Pt(n)?n:new yI(e,t,r)}/** * @vue/runtime-core v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/function ra(e,t,r,n){let i;try{i=n?e(...n):e()}catch(a){Xd(a,t,r)}return i}function sn(e,t,r,n){if(De(e)){const a=ra(e,t,r,n);return a&&Qc(a)&&a.catch(o=>{Xd(o,t,r)}),a}const i=[];for(let a=0;a>>1,i=or[n],a=uu(i);azn&&or.splice(t,1)}function xI(e){_e(e)?os.push(...e):(!Yi||!Yi.includes(e,e.allowRecurse?Ua+1:Ua))&&os.push(e),iT()}function m_(e,t,r=lu?zn+1:0){for(;ruu(r)-uu(n));if(os.length=0,Yi){Yi.push(...t);return}for(Yi=t,Ua=0;Uae.id==null?1/0:e.id,CI=(e,t)=>{const r=uu(e)-uu(t);if(r===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return r};function oT(e){$p=!1,lu=!0,or.sort(CI);try{for(zn=0;znze(d)?d.trim():d)),c&&(i=r.map($D))}let s,l=n[s=xc(t)]||n[s=xc(Pn(t))];!l&&a&&(l=n[s=xc(xo(t))]),l&&sn(l,e,6,i);const u=n[s+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,sn(u,e,6,i)}}function sT(e,t,r=!1){const n=t.emitsCache,i=n.get(e);if(i!==void 0)return i;const a=e.emits;let o={},s=!1;if(!De(e)){const l=u=>{const f=sT(u,t,!0);f&&(s=!0,$t(o,f))};!r&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!a&&!s?(qe(e)&&n.set(e,null),null):(_e(a)?a.forEach(l=>o[l]=null):$t(o,a),qe(e)&&n.set(e,o),o)}function Zd(e,t){return!e||!Wd(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ue(e,t[0].toLowerCase()+t.slice(1))||Ue(e,xo(t))||Ue(e,t))}let Wt=null,lT=null;function rd(e){const t=Wt;return Wt=e,lT=e&&e.type.__scopeId||null,t}function j(e,t=Wt,r){if(!t||e._n)return e;const n=(...i)=>{n._d&&D_(-1);const a=rd(t);let o;try{o=e(...i)}finally{rd(a),n._d&&D_(1)}return o};return n._n=!0,n._c=!0,n._d=!0,n}function Gh(e){const{type:t,vnode:r,proxy:n,withProxy:i,props:a,propsOptions:[o],slots:s,attrs:l,emit:u,render:f,renderCache:c,data:h,setupState:d,ctx:v,inheritAttrs:p}=e;let m,g;const y=rd(e);try{if(r.shapeFlag&4){const b=i||n,x=b;m=Hn(f.call(x,b,c,a,d,h,v)),g=l}else{const b=t;m=Hn(b.length>1?b(a,{attrs:l,slots:s,emit:u}):b(a,null)),g=t.props?l:MI(l)}}catch(b){kl.length=0,Xd(b,e,1),m=Z(Mr)}let _=m;if(g&&p!==!1){const b=Object.keys(g),{shapeFlag:x}=_;b.length&&x&7&&(o&&b.some(Gm)&&(g=AI(g,o)),_=_i(_,g))}return r.dirs&&(_=_i(_),_.dirs=_.dirs?_.dirs.concat(r.dirs):r.dirs),r.transition&&(_.transition=r.transition),m=_,rd(y),m}const MI=e=>{let t;for(const r in e)(r==="class"||r==="style"||Wd(r))&&((t||(t={}))[r]=e[r]);return t},AI=(e,t)=>{const r={};for(const n in e)(!Gm(n)||!(n.slice(9)in t))&&(r[n]=e[n]);return r};function PI(e,t,r){const{props:n,children:i,component:a}=e,{props:o,children:s,patchFlag:l}=t,u=a.emitsOptions;if(t.dirs||t.transition)return!0;if(r&&l>=0){if(l&1024)return!0;if(l&16)return n?y_(n,o,u):!!o;if(l&8){const f=t.dynamicProps;for(let c=0;ce.__isSuspense;function II(e,t){t&&t.pendingBranch?_e(e)?t.effects.push(...e):t.effects.push(e):xI(e)}const OI=Symbol.for("v-scx"),RI=()=>Le(OI);function na(e,t){return oy(e,null,t)}const _f={};function we(e,t,r){return oy(e,t,r)}function oy(e,t,{immediate:r,deep:n,flush:i,once:a,onTrack:o,onTrigger:s}=St){if(t&&a){const w=t;t=(...S)=>{w(...S),x()}}const l=Qt,u=w=>n===!0?w:Xa(w,n===!1?1:void 0);let f,c=!1,h=!1;if(Pt(e)?(f=()=>e.value,c=td(e)):as(e)?(f=()=>u(e),c=!0):_e(e)?(h=!0,c=e.some(w=>as(w)||td(w)),f=()=>e.map(w=>{if(Pt(w))return w.value;if(as(w))return u(w);if(De(w))return ra(w,l,2)})):De(e)?t?f=()=>ra(e,l,2):f=()=>(d&&d(),sn(e,l,3,[v])):f=Bt,t&&n){const w=f;f=()=>Xa(w())}let d,v=w=>{d=_.onStop=()=>{ra(w,l,4),d=_.onStop=void 0}},p;if(rh)if(v=Bt,t?r&&sn(t,l,3,[f(),h?[]:void 0,v]):f(),i==="sync"){const w=RI();p=w.__watcherHandles||(w.__watcherHandles=[])}else return Bt;let m=h?new Array(e.length).fill(_f):_f;const g=()=>{if(!(!_.active||!_.dirty))if(t){const w=_.run();(n||c||(h?w.some((S,C)=>sa(S,m[C])):sa(w,m)))&&(d&&d(),sn(t,l,3,[w,m===_f?void 0:h&&m[0]===_f?[]:m,v]),m=w)}else _.run()};g.allowRecurse=!!t;let y;i==="sync"?y=g:i==="post"?y=()=>Sr(g,l&&l.suspense):(g.pre=!0,l&&(g.id=l.uid),y=()=>ny(g));const _=new jm(f,Bt,y),b=kC(),x=()=>{_.stop(),b&&Um(b.effects,_)};return t?r?g():m=_.run():i==="post"?Sr(_.run.bind(_),l&&l.suspense):_.run(),p&&p.push(x),x}function kI(e,t,r){const n=this.proxy,i=ze(e)?e.includes(".")?cT(n,e):()=>n[e]:e.bind(n,n);let a;De(t)?a=t:(a=t.handler,r=t);const o=Yu(this),s=oy(i,a.bind(n),r);return o(),s}function cT(e,t){const r=t.split(".");return()=>{let n=e;for(let i=0;i0){if(r>=t)return e;r++}if(n=n||new Set,n.has(e))return e;if(n.add(e),Pt(e))Xa(e.value,t,r,n);else if(_e(e))for(let i=0;i{Xa(i,t,r,n)});else if(LC(e))for(const i in e)Xa(e[i],t,r,n);return e}function qt(e,t){if(Wt===null)return e;const r=nh(Wt)||Wt.proxy,n=e.dirs||(e.dirs=[]);for(let i=0;i{e.isMounted=!0}),tr(()=>{e.isUnmounting=!0}),e}const jr=[Function,Array],hT={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:jr,onEnter:jr,onAfterEnter:jr,onEnterCancelled:jr,onBeforeLeave:jr,onLeave:jr,onAfterLeave:jr,onLeaveCancelled:jr,onBeforeAppear:jr,onAppear:jr,onAfterAppear:jr,onAppearCancelled:jr},NI={name:"BaseTransition",props:hT,setup(e,{slots:t}){const r=it(),n=dT();let i;return()=>{const a=t.default&&sy(t.default(),!0);if(!a||!a.length)return;let o=a[0];if(a.length>1){for(const p of a)if(p.type!==Mr){o=p;break}}const s=Qe(e),{mode:l}=s;if(n.isLeaving)return Uh(o);const u=b_(o);if(!u)return Uh(o);const f=fu(u,s,n,r);cu(u,f);const c=r.subTree,h=c&&b_(c);let d=!1;const{getTransitionKey:v}=u.type;if(v){const p=v();i===void 0?i=p:p!==i&&(i=p,d=!0)}if(h&&h.type!==Mr&&(!Ya(u,h)||d)){const p=fu(h,s,n,r);if(cu(h,p),l==="out-in")return n.isLeaving=!0,p.afterLeave=()=>{n.isLeaving=!1,r.update.active!==!1&&(r.effect.dirty=!0,r.update())},Uh(o);l==="in-out"&&u.type!==Mr&&(p.delayLeave=(m,g,y)=>{const _=vT(n,h);_[String(h.key)]=h,m[ji]=()=>{g(),m[ji]=void 0,delete f.delayedLeave},f.delayedLeave=y})}return o}}},BI=NI;function vT(e,t){const{leavingVNodes:r}=e;let n=r.get(t.type);return n||(n=Object.create(null),r.set(t.type,n)),n}function fu(e,t,r,n){const{appear:i,mode:a,persisted:o=!1,onBeforeEnter:s,onEnter:l,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:c,onLeave:h,onAfterLeave:d,onLeaveCancelled:v,onBeforeAppear:p,onAppear:m,onAfterAppear:g,onAppearCancelled:y}=t,_=String(e.key),b=vT(r,e),x=(C,M)=>{C&&sn(C,n,9,M)},w=(C,M)=>{const A=M[1];x(C,M),_e(C)?C.every(P=>P.length<=1)&&A():C.length<=1&&A()},S={mode:a,persisted:o,beforeEnter(C){let M=s;if(!r.isMounted)if(i)M=p||s;else return;C[ji]&&C[ji](!0);const A=b[_];A&&Ya(e,A)&&A.el[ji]&&A.el[ji](),x(M,[C])},enter(C){let M=l,A=u,P=f;if(!r.isMounted)if(i)M=m||l,A=g||u,P=y||f;else return;let E=!1;const L=C[bf]=O=>{E||(E=!0,O?x(P,[C]):x(A,[C]),S.delayedLeave&&S.delayedLeave(),C[bf]=void 0)};M?w(M,[C,L]):L()},leave(C,M){const A=String(e.key);if(C[bf]&&C[bf](!0),r.isUnmounting)return M();x(c,[C]);let P=!1;const E=C[ji]=L=>{P||(P=!0,M(),L?x(v,[C]):x(d,[C]),C[ji]=void 0,b[A]===e&&delete b[A])};b[A]=e,h?w(h,[C,E]):E()},clone(C){return fu(C,t,r,n)}};return S}function Uh(e){if(Qd(e))return e=_i(e),e.children=null,e}function b_(e){return Qd(e)?e.children?e.children[0]:void 0:e}function cu(e,t){e.shapeFlag&6&&e.component?cu(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function sy(e,t=!1,r){let n=[],i=0;for(let a=0;a1)for(let a=0;a!!e.type.__asyncLoader,Qd=e=>e.type.__isKeepAlive;function FI(e,t){gT(e,"a",t)}function pT(e,t){gT(e,"da",t)}function gT(e,t,r=Qt){const n=e.__wdc||(e.__wdc=()=>{let i=r;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Jd(t,n,r),r){let i=r.parent;for(;i&&i.parent;)Qd(i.parent.vnode)&&$I(n,t,r,i),i=i.parent}}function $I(e,t,r,n){const i=Jd(t,e,n,!0);Os(()=>{Um(n[t],i)},r)}function Jd(e,t,r=Qt,n=!1){if(r){const i=r[e]||(r[e]=[]),a=t.__weh||(t.__weh=(...o)=>{if(r.isUnmounted)return;Co();const s=Yu(r),l=sn(t,r,e,o);return s(),To(),l});return n?i.unshift(a):i.push(a),a}}const Ai=e=>(t,r=Qt)=>(!rh||e==="sp")&&Jd(e,(...n)=>t(...n),r),eh=Ai("bm"),_t=Ai("m"),HI=Ai("bu"),Uu=Ai("u"),tr=Ai("bum"),Os=Ai("um"),zI=Ai("sp"),VI=Ai("rtg"),WI=Ai("rtc");function GI(e,t=Qt){Jd("ec",e,t)}function Hp(e,t,r,n){let i;const a=r&&r[n];if(_e(e)||ze(e)){i=new Array(e.length);for(let o=0,s=e.length;ot(o,s,void 0,a&&a[s]));else{const o=Object.keys(e);i=new Array(o.length);for(let s=0,l=o.length;s{const a=n.fn(...i);return a&&(a.key=n.key),a}:n.fn)}return e}function Ce(e,t,r={},n,i){if(Wt.isCE||Wt.parent&&Il(Wt.parent)&&Wt.parent.isCE)return t!=="default"&&(r.name=t),Z("slot",r,n&&n());let a=e[t];a&&a._c&&(a._d=!1),G();const o=a&&mT(a(r)),s=de(ft,{key:r.key||o&&o.key||`_${t}`},o||(n?n():[]),o&&e._===1?64:-2);return!i&&s.scopeId&&(s.slotScopeIds=[s.scopeId+"-s"]),a&&a._c&&(a._d=!0),s}function mT(e){return e.some(t=>la(t)?!(t.type===Mr||t.type===ft&&!mT(t.children)):!0)?e:null}function YI(e,t){const r={};for(const n in e)r[t&&/[A-Z]/.test(n)?`on:${n}`:xc(n)]=e[n];return r}const zp=e=>e?LT(e)?nh(e)||e.proxy:zp(e.parent):null,Ol=$t(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zp(e.parent),$root:e=>zp(e.root),$emit:e=>e.emit,$options:e=>ly(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,ny(e.update)}),$nextTick:e=>e.n||(e.n=kt.bind(e.proxy)),$watch:e=>kI.bind(e)}),Yh=(e,t)=>e!==St&&!e.__isScriptSetup&&Ue(e,t),jI={get({_:e},t){const{ctx:r,setupState:n,data:i,props:a,accessCache:o,type:s,appContext:l}=e;let u;if(t[0]!=="$"){const d=o[t];if(d!==void 0)switch(d){case 1:return n[t];case 2:return i[t];case 4:return r[t];case 3:return a[t]}else{if(Yh(n,t))return o[t]=1,n[t];if(i!==St&&Ue(i,t))return o[t]=2,i[t];if((u=e.propsOptions[0])&&Ue(u,t))return o[t]=3,a[t];if(r!==St&&Ue(r,t))return o[t]=4,r[t];Vp&&(o[t]=0)}}const f=Ol[t];let c,h;if(f)return t==="$attrs"&&Lr(e,"get",t),f(e);if((c=s.__cssModules)&&(c=c[t]))return c;if(r!==St&&Ue(r,t))return o[t]=4,r[t];if(h=l.config.globalProperties,Ue(h,t))return h[t]},set({_:e},t,r){const{data:n,setupState:i,ctx:a}=e;return Yh(i,t)?(i[t]=r,!0):n!==St&&Ue(n,t)?(n[t]=r,!0):Ue(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=r,!0)},has({_:{data:e,setupState:t,accessCache:r,ctx:n,appContext:i,propsOptions:a}},o){let s;return!!r[o]||e!==St&&Ue(e,o)||Yh(t,o)||(s=a[0])&&Ue(s,o)||Ue(n,o)||Ue(Ol,o)||Ue(i.config.globalProperties,o)},defineProperty(e,t,r){return r.get!=null?e._.accessCache[t]=0:Ue(r,"value")&&this.set(e,t,r.value,null),Reflect.defineProperty(e,t,r)}};function Rs(){return qI().slots}function qI(){const e=it();return e.setupContext||(e.setupContext=IT(e))}function w_(e){return _e(e)?e.reduce((t,r)=>(t[r]=null,t),{}):e}let Vp=!0;function KI(e){const t=ly(e),r=e.proxy,n=e.ctx;Vp=!1,t.beforeCreate&&S_(t.beforeCreate,e,"bc");const{data:i,computed:a,methods:o,watch:s,provide:l,inject:u,created:f,beforeMount:c,mounted:h,beforeUpdate:d,updated:v,activated:p,deactivated:m,beforeDestroy:g,beforeUnmount:y,destroyed:_,unmounted:b,render:x,renderTracked:w,renderTriggered:S,errorCaptured:C,serverPrefetch:M,expose:A,inheritAttrs:P,components:E,directives:L,filters:O}=t;if(u&&XI(u,n,null),o)for(const V in o){const U=o[V];De(U)&&(n[V]=U.bind(r))}if(i){const V=i.call(r,r);qe(V)&&(e.data=Ln(V))}if(Vp=!0,a)for(const V in a){const U=a[V],F=De(U)?U.bind(r,r):De(U.get)?U.get.bind(r,r):Bt,z=!De(U)&&De(U.set)?U.set.bind(r):Bt,te=k({get:F,set:z});Object.defineProperty(n,V,{enumerable:!0,configurable:!0,get:()=>te.value,set:J=>te.value=J})}if(s)for(const V in s)yT(s[V],n,r,V);if(l){const V=De(l)?l.call(r):l;Reflect.ownKeys(V).forEach(U=>{Dt(U,V[U])})}f&&S_(f,e,"c");function H(V,U){_e(U)?U.forEach(F=>V(F.bind(r))):U&&V(U.bind(r))}if(H(eh,c),H(_t,h),H(HI,d),H(Uu,v),H(FI,p),H(pT,m),H(GI,C),H(WI,w),H(VI,S),H(tr,y),H(Os,b),H(zI,M),_e(A))if(A.length){const V=e.exposed||(e.exposed={});A.forEach(U=>{Object.defineProperty(V,U,{get:()=>r[U],set:F=>r[U]=F})})}else e.exposed||(e.exposed={});x&&e.render===Bt&&(e.render=x),P!=null&&(e.inheritAttrs=P),E&&(e.components=E),L&&(e.directives=L)}function XI(e,t,r=Bt){_e(e)&&(e=Wp(e));for(const n in e){const i=e[n];let a;qe(i)?"default"in i?a=Le(i.from||n,i.default,!0):a=Le(i.from||n):a=Le(i),Pt(a)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>a.value,set:o=>a.value=o}):t[n]=a}}function S_(e,t,r){sn(_e(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,r)}function yT(e,t,r,n){const i=n.includes(".")?cT(r,n):()=>r[n];if(ze(e)){const a=t[e];De(a)&&we(i,a)}else if(De(e))we(i,e.bind(r));else if(qe(e))if(_e(e))e.forEach(a=>yT(a,t,r,n));else{const a=De(e.handler)?e.handler.bind(r):t[e.handler];De(a)&&we(i,a,e)}}function ly(e){const t=e.type,{mixins:r,extends:n}=t,{mixins:i,optionsCache:a,config:{optionMergeStrategies:o}}=e.appContext,s=a.get(t);let l;return s?l=s:!i.length&&!r&&!n?l=t:(l={},i.length&&i.forEach(u=>nd(l,u,o,!0)),nd(l,t,o)),qe(t)&&a.set(t,l),l}function nd(e,t,r,n=!1){const{mixins:i,extends:a}=t;a&&nd(e,a,r,!0),i&&i.forEach(o=>nd(e,o,r,!0));for(const o in t)if(!(n&&o==="expose")){const s=ZI[o]||r&&r[o];e[o]=s?s(e[o],t[o]):t[o]}return e}const ZI={data:x_,props:C_,emits:C_,methods:Sl,computed:Sl,beforeCreate:ur,created:ur,beforeMount:ur,mounted:ur,beforeUpdate:ur,updated:ur,beforeDestroy:ur,beforeUnmount:ur,destroyed:ur,unmounted:ur,activated:ur,deactivated:ur,errorCaptured:ur,serverPrefetch:ur,components:Sl,directives:Sl,watch:JI,provide:x_,inject:QI};function x_(e,t){return t?e?function(){return $t(De(e)?e.call(this,this):e,De(t)?t.call(this,this):t)}:t:e}function QI(e,t){return Sl(Wp(e),Wp(t))}function Wp(e){if(_e(e)){const t={};for(let r=0;r1)return r&&De(t)?t.call(n&&n.proxy):t}}function rO(e,t,r,n=!1){const i={},a={};Jc(a,th,1),e.propsDefaults=Object.create(null),bT(e,t,i,a);for(const o in e.propsOptions[0])o in i||(i[o]=void 0);r?e.props=n?i:Qm(i):e.type.props?e.props=i:e.props=a,e.attrs=a}function nO(e,t,r,n){const{props:i,attrs:a,vnode:{patchFlag:o}}=e,s=Qe(i),[l]=e.propsOptions;let u=!1;if((n||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let c=0;c{l=!0;const[h,d]=wT(c,t,!0);$t(o,h),d&&s.push(...d)};!r&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!a&&!l)return qe(e)&&n.set(e,ns),ns;if(_e(a))for(let f=0;f-1,d[1]=p<0||v-1||Ue(d,"default"))&&s.push(c)}}}const u=[o,s];return qe(e)&&n.set(e,u),u}function T_(e){return e[0]!=="$"}function M_(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function A_(e,t){return M_(e)===M_(t)}function P_(e,t){return _e(t)?t.findIndex(r=>A_(r,e)):De(t)&&A_(t,e)?0:-1}const ST=e=>e[0]==="_"||e==="$stable",uy=e=>_e(e)?e.map(Hn):[Hn(e)],iO=(e,t,r)=>{if(t._n)return t;const n=j((...i)=>uy(t(...i)),r);return n._c=!1,n},xT=(e,t,r)=>{const n=e._ctx;for(const i in e){if(ST(i))continue;const a=e[i];if(De(a))t[i]=iO(i,a,n);else if(a!=null){const o=uy(a);t[i]=()=>o}}},CT=(e,t)=>{const r=uy(t);e.slots.default=()=>r},aO=(e,t)=>{if(e.vnode.shapeFlag&32){const r=t._;r?(e.slots=Qe(t),Jc(t,"_",r)):xT(t,e.slots={})}else e.slots={},t&&CT(e,t);Jc(e.slots,th,1)},oO=(e,t,r)=>{const{vnode:n,slots:i}=e;let a=!0,o=St;if(n.shapeFlag&32){const s=t._;s?r&&s===1?a=!1:($t(i,t),!r&&s===1&&delete i._):(a=!t.$stable,xT(t,i)),o=t}else t&&(CT(e,t),o={default:1});if(a)for(const s in i)!ST(s)&&o[s]==null&&delete i[s]};function Up(e,t,r,n,i=!1){if(_e(e)){e.forEach((h,d)=>Up(h,t&&(_e(t)?t[d]:t),r,n,i));return}if(Il(n)&&!i)return;const a=n.shapeFlag&4?nh(n.component)||n.component.proxy:n.el,o=i?null:a,{i:s,r:l}=e,u=t&&t.r,f=s.refs===St?s.refs={}:s.refs,c=s.setupState;if(u!=null&&u!==l&&(ze(u)?(f[u]=null,Ue(c,u)&&(c[u]=null)):Pt(u)&&(u.value=null)),De(l))ra(l,s,12,[o,f]);else{const h=ze(l),d=Pt(l),v=e.f;if(h||d){const p=()=>{if(v){const m=h?Ue(c,l)?c[l]:f[l]:l.value;i?_e(m)&&Um(m,a):_e(m)?m.includes(a)||m.push(a):h?(f[l]=[a],Ue(c,l)&&(c[l]=f[l])):(l.value=[a],e.k&&(f[e.k]=l.value))}else h?(f[l]=o,Ue(c,l)&&(c[l]=o)):d&&(l.value=o,e.k&&(f[e.k]=o))};i||v?p():(p.id=-1,Sr(p,r))}}}const Sr=II;function sO(e){return lO(e)}function lO(e,t){const r=DC();r.__VUE__=!0;const{insert:n,remove:i,patchProp:a,createElement:o,createText:s,createComment:l,setText:u,setElementText:f,parentNode:c,nextSibling:h,setScopeId:d=Bt,insertStaticContent:v}=e,p=(D,I,W,X=null,q=null,le=null,fe=void 0,ae=null,se=!!I.dynamicChildren)=>{if(D===I)return;D&&!Ya(D,I)&&(X=B(D),J(D,q,le,!0),D=null),I.patchFlag===-2&&(se=!1,I.dynamicChildren=null);const{type:ne,ref:he,shapeFlag:Me}=I;switch(ne){case ks:m(D,I,W,X);break;case Mr:g(D,I,W,X);break;case qh:D==null&&y(I,W,X,fe);break;case ft:E(D,I,W,X,q,le,fe,ae,se);break;default:Me&1?x(D,I,W,X,q,le,fe,ae,se):Me&6?L(D,I,W,X,q,le,fe,ae,se):(Me&64||Me&128)&&ne.process(D,I,W,X,q,le,fe,ae,se,Q)}he!=null&&q&&Up(he,D&&D.ref,le,I||D,!I)},m=(D,I,W,X)=>{if(D==null)n(I.el=s(I.children),W,X);else{const q=I.el=D.el;I.children!==D.children&&u(q,I.children)}},g=(D,I,W,X)=>{D==null?n(I.el=l(I.children||""),W,X):I.el=D.el},y=(D,I,W,X)=>{[D.el,D.anchor]=v(D.children,I,W,X,D.el,D.anchor)},_=({el:D,anchor:I},W,X)=>{let q;for(;D&&D!==I;)q=h(D),n(D,W,X),D=q;n(I,W,X)},b=({el:D,anchor:I})=>{let W;for(;D&&D!==I;)W=h(D),i(D),D=W;i(I)},x=(D,I,W,X,q,le,fe,ae,se)=>{I.type==="svg"?fe="svg":I.type==="math"&&(fe="mathml"),D==null?w(I,W,X,q,le,fe,ae,se):M(D,I,q,le,fe,ae,se)},w=(D,I,W,X,q,le,fe,ae)=>{let se,ne;const{props:he,shapeFlag:Me,transition:xe,dirs:ke}=D;if(se=D.el=o(D.type,le,he&&he.is,he),Me&8?f(se,D.children):Me&16&&C(D.children,se,null,X,q,jh(D,le),fe,ae),ke&&ma(D,null,X,"created"),S(se,D,D.scopeId,fe,X),he){for(const rt in he)rt!=="value"&&!Sc(rt)&&a(se,rt,null,he[rt],le,D.children,X,q,Ie);"value"in he&&a(se,"value",null,he.value,le),(ne=he.onVnodeBeforeMount)&&kn(ne,X,D)}ke&&ma(D,null,X,"beforeMount");const Ve=uO(q,xe);Ve&&xe.beforeEnter(se),n(se,I,W),((ne=he&&he.onVnodeMounted)||Ve||ke)&&Sr(()=>{ne&&kn(ne,X,D),Ve&&xe.enter(se),ke&&ma(D,null,X,"mounted")},q)},S=(D,I,W,X,q)=>{if(W&&d(D,W),X)for(let le=0;le{for(let ne=se;ne{const ae=I.el=D.el;let{patchFlag:se,dynamicChildren:ne,dirs:he}=I;se|=D.patchFlag&16;const Me=D.props||St,xe=I.props||St;let ke;if(W&&ya(W,!1),(ke=xe.onVnodeBeforeUpdate)&&kn(ke,W,I,D),he&&ma(I,D,W,"beforeUpdate"),W&&ya(W,!0),ne?A(D.dynamicChildren,ne,ae,W,X,jh(I,q),le):fe||U(D,I,ae,null,W,X,jh(I,q),le,!1),se>0){if(se&16)P(ae,I,Me,xe,W,X,q);else if(se&2&&Me.class!==xe.class&&a(ae,"class",null,xe.class,q),se&4&&a(ae,"style",Me.style,xe.style,q),se&8){const Ve=I.dynamicProps;for(let rt=0;rt{ke&&kn(ke,W,I,D),he&&ma(I,D,W,"updated")},X)},A=(D,I,W,X,q,le,fe)=>{for(let ae=0;ae{if(W!==X){if(W!==St)for(const ae in W)!Sc(ae)&&!(ae in X)&&a(D,ae,W[ae],null,fe,I.children,q,le,Ie);for(const ae in X){if(Sc(ae))continue;const se=X[ae],ne=W[ae];se!==ne&&ae!=="value"&&a(D,ae,ne,se,fe,I.children,q,le,Ie)}"value"in X&&a(D,"value",W.value,X.value,fe)}},E=(D,I,W,X,q,le,fe,ae,se)=>{const ne=I.el=D?D.el:s(""),he=I.anchor=D?D.anchor:s("");let{patchFlag:Me,dynamicChildren:xe,slotScopeIds:ke}=I;ke&&(ae=ae?ae.concat(ke):ke),D==null?(n(ne,W,X),n(he,W,X),C(I.children||[],W,he,q,le,fe,ae,se)):Me>0&&Me&64&&xe&&D.dynamicChildren?(A(D.dynamicChildren,xe,W,q,le,fe,ae),(I.key!=null||q&&I===q.subTree)&&fy(D,I,!0)):U(D,I,W,he,q,le,fe,ae,se)},L=(D,I,W,X,q,le,fe,ae,se)=>{I.slotScopeIds=ae,D==null?I.shapeFlag&512?q.ctx.activate(I,W,X,fe,se):O(I,W,X,q,le,fe,se):N(D,I,se)},O=(D,I,W,X,q,le,fe)=>{const ae=D.component=_O(D,X,q);if(Qd(D)&&(ae.ctx.renderer=Q),bO(ae),ae.asyncDep){if(q&&q.registerDep(ae,H),!D.el){const se=ae.subTree=Z(Mr);g(null,se,I,W)}}else H(ae,D,I,W,q,le,fe)},N=(D,I,W)=>{const X=I.component=D.component;if(PI(D,I,W))if(X.asyncDep&&!X.asyncResolved){V(X,I,W);return}else X.next=I,SI(X.update),X.effect.dirty=!0,X.update();else I.el=D.el,X.vnode=I},H=(D,I,W,X,q,le,fe)=>{const ae=()=>{if(D.isMounted){let{next:he,bu:Me,u:xe,parent:ke,vnode:Ve}=D;{const We=TT(D);if(We){he&&(he.el=Ve.el,V(D,he,fe)),We.asyncDep.then(()=>{D.isUnmounted||ae()});return}}let rt=he,bt;ya(D,!1),he?(he.el=Ve.el,V(D,he,fe)):he=Ve,Me&&Cc(Me),(bt=he.props&&he.props.onVnodeBeforeUpdate)&&kn(bt,ke,he,Ve),ya(D,!0);const ve=Gh(D),Pe=D.subTree;D.subTree=ve,p(Pe,ve,c(Pe.el),B(Pe),D,q,le),he.el=ve.el,rt===null&&EI(D,ve.el),xe&&Sr(xe,q),(bt=he.props&&he.props.onVnodeUpdated)&&Sr(()=>kn(bt,ke,he,Ve),q)}else{let he;const{el:Me,props:xe}=I,{bm:ke,m:Ve,parent:rt}=D,bt=Il(I);if(ya(D,!1),ke&&Cc(ke),!bt&&(he=xe&&xe.onVnodeBeforeMount)&&kn(he,rt,I),ya(D,!0),Me&&pe){const ve=()=>{D.subTree=Gh(D),pe(Me,D.subTree,D,q,null)};bt?I.type.__asyncLoader().then(()=>!D.isUnmounted&&ve()):ve()}else{const ve=D.subTree=Gh(D);p(null,ve,W,X,D,q,le),I.el=ve.el}if(Ve&&Sr(Ve,q),!bt&&(he=xe&&xe.onVnodeMounted)){const ve=I;Sr(()=>kn(he,rt,ve),q)}(I.shapeFlag&256||rt&&Il(rt.vnode)&&rt.vnode.shapeFlag&256)&&D.a&&Sr(D.a,q),D.isMounted=!0,I=W=X=null}},se=D.effect=new jm(ae,Bt,()=>ny(ne),D.scope),ne=D.update=()=>{se.dirty&&se.run()};ne.id=D.uid,ya(D,!0),ne()},V=(D,I,W)=>{I.component=D;const X=D.vnode.props;D.vnode=I,D.next=null,nO(D,I.props,X,W),oO(D,I.children,W),Co(),m_(D),To()},U=(D,I,W,X,q,le,fe,ae,se=!1)=>{const ne=D&&D.children,he=D?D.shapeFlag:0,Me=I.children,{patchFlag:xe,shapeFlag:ke}=I;if(xe>0){if(xe&128){z(ne,Me,W,X,q,le,fe,ae,se);return}else if(xe&256){F(ne,Me,W,X,q,le,fe,ae,se);return}}ke&8?(he&16&&Ie(ne,q,le),Me!==ne&&f(W,Me)):he&16?ke&16?z(ne,Me,W,X,q,le,fe,ae,se):Ie(ne,q,le,!0):(he&8&&f(W,""),ke&16&&C(Me,W,X,q,le,fe,ae,se))},F=(D,I,W,X,q,le,fe,ae,se)=>{D=D||ns,I=I||ns;const ne=D.length,he=I.length,Me=Math.min(ne,he);let xe;for(xe=0;xehe?Ie(D,q,le,!0,!1,Me):C(I,W,X,q,le,fe,ae,se,Me)},z=(D,I,W,X,q,le,fe,ae,se)=>{let ne=0;const he=I.length;let Me=D.length-1,xe=he-1;for(;ne<=Me&&ne<=xe;){const ke=D[ne],Ve=I[ne]=se?qi(I[ne]):Hn(I[ne]);if(Ya(ke,Ve))p(ke,Ve,W,null,q,le,fe,ae,se);else break;ne++}for(;ne<=Me&&ne<=xe;){const ke=D[Me],Ve=I[xe]=se?qi(I[xe]):Hn(I[xe]);if(Ya(ke,Ve))p(ke,Ve,W,null,q,le,fe,ae,se);else break;Me--,xe--}if(ne>Me){if(ne<=xe){const ke=xe+1,Ve=kexe)for(;ne<=Me;)J(D[ne],q,le,!0),ne++;else{const ke=ne,Ve=ne,rt=new Map;for(ne=Ve;ne<=xe;ne++){const pt=I[ne]=se?qi(I[ne]):Hn(I[ne]);pt.key!=null&&rt.set(pt.key,ne)}let bt,ve=0;const Pe=xe-Ve+1;let We=!1,Ge=0;const et=new Array(Pe);for(ne=0;ne=Pe){J(pt,q,le,!0);continue}let Kt;if(pt.key!=null)Kt=rt.get(pt.key);else for(bt=Ve;bt<=xe;bt++)if(et[bt-Ve]===0&&Ya(pt,I[bt])){Kt=bt;break}Kt===void 0?J(pt,q,le,!0):(et[Kt-Ve]=ne+1,Kt>=Ge?Ge=Kt:We=!0,p(pt,I[Kt],W,null,q,le,fe,ae,se),ve++)}const Ht=We?fO(et):ns;for(bt=Ht.length-1,ne=Pe-1;ne>=0;ne--){const pt=Ve+ne,Kt=I[pt],Yr=pt+1{const{el:le,type:fe,transition:ae,children:se,shapeFlag:ne}=D;if(ne&6){te(D.component.subTree,I,W,X);return}if(ne&128){D.suspense.move(I,W,X);return}if(ne&64){fe.move(D,I,W,Q);return}if(fe===ft){n(le,I,W);for(let Me=0;Meae.enter(le),q);else{const{leave:Me,delayLeave:xe,afterLeave:ke}=ae,Ve=()=>n(le,I,W),rt=()=>{Me(le,()=>{Ve(),ke&&ke()})};xe?xe(le,Ve,rt):rt()}else n(le,I,W)},J=(D,I,W,X=!1,q=!1)=>{const{type:le,props:fe,ref:ae,children:se,dynamicChildren:ne,shapeFlag:he,patchFlag:Me,dirs:xe}=D;if(ae!=null&&Up(ae,null,W,D,!0),he&256){I.ctx.deactivate(D);return}const ke=he&1&&xe,Ve=!Il(D);let rt;if(Ve&&(rt=fe&&fe.onVnodeBeforeUnmount)&&kn(rt,I,D),he&6)$e(D.component,W,X);else{if(he&128){D.suspense.unmount(W,X);return}ke&&ma(D,null,I,"beforeUnmount"),he&64?D.type.remove(D,I,W,q,Q,X):ne&&(le!==ft||Me>0&&Me&64)?Ie(ne,I,W,!1,!0):(le===ft&&Me&384||!q&&he&16)&&Ie(se,I,W),X&&me(D)}(Ve&&(rt=fe&&fe.onVnodeUnmounted)||ke)&&Sr(()=>{rt&&kn(rt,I,D),ke&&ma(D,null,I,"unmounted")},W)},me=D=>{const{type:I,el:W,anchor:X,transition:q}=D;if(I===ft){Se(W,X);return}if(I===qh){b(D);return}const le=()=>{i(W),q&&!q.persisted&&q.afterLeave&&q.afterLeave()};if(D.shapeFlag&1&&q&&!q.persisted){const{leave:fe,delayLeave:ae}=q,se=()=>fe(W,le);ae?ae(D.el,le,se):se()}else le()},Se=(D,I)=>{let W;for(;D!==I;)W=h(D),i(D),D=W;i(I)},$e=(D,I,W)=>{const{bum:X,scope:q,update:le,subTree:fe,um:ae}=D;X&&Cc(X),q.stop(),le&&(le.active=!1,J(fe,D,I,W)),ae&&Sr(ae,I),Sr(()=>{D.isUnmounted=!0},I),I&&I.pendingBranch&&!I.isUnmounted&&D.asyncDep&&!D.asyncResolved&&D.suspenseId===I.pendingId&&(I.deps--,I.deps===0&&I.resolve())},Ie=(D,I,W,X=!1,q=!1,le=0)=>{for(let fe=le;feD.shapeFlag&6?B(D.component.subTree):D.shapeFlag&128?D.suspense.next():h(D.anchor||D.el);let Y=!1;const K=(D,I,W)=>{D==null?I._vnode&&J(I._vnode,null,null,!0):p(I._vnode||null,D,I,null,null,null,W),Y||(Y=!0,m_(),aT(),Y=!1),I._vnode=D},Q={p,um:J,m:te,r:me,mt:O,mc:C,pc:U,pbc:A,n:B,o:e};let oe,pe;return t&&([oe,pe]=t(Q)),{render:K,hydrate:oe,createApp:tO(K,oe)}}function jh({type:e,props:t},r){return r==="svg"&&e==="foreignObject"||r==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:r}function ya({effect:e,update:t},r){e.allowRecurse=t.allowRecurse=r}function uO(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function fy(e,t,r=!1){const n=e.children,i=t.children;if(_e(n)&&_e(i))for(let a=0;a>1,e[r[s]]0&&(t[n]=r[a-1]),r[a]=n)}}for(a=r.length,o=r[a-1];a-- >0;)r[a]=o,o=t[o];return r}function TT(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:TT(t)}const cO=e=>e.__isTeleport,Rl=e=>e&&(e.disabled||e.disabled===""),E_=e=>typeof SVGElement<"u"&&e instanceof SVGElement,L_=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Yp=(e,t)=>{const r=e&&e.to;return ze(r)?t?t(r):null:r},dO={name:"Teleport",__isTeleport:!0,process(e,t,r,n,i,a,o,s,l,u){const{mc:f,pc:c,pbc:h,o:{insert:d,querySelector:v,createText:p,createComment:m}}=u,g=Rl(t.props);let{shapeFlag:y,children:_,dynamicChildren:b}=t;if(e==null){const x=t.el=p(""),w=t.anchor=p("");d(x,r,n),d(w,r,n);const S=t.target=Yp(t.props,v),C=t.targetAnchor=p("");S&&(d(C,S),o==="svg"||E_(S)?o="svg":(o==="mathml"||L_(S))&&(o="mathml"));const M=(A,P)=>{y&16&&f(_,A,P,i,a,o,s,l)};g?M(r,w):S&&M(S,C)}else{t.el=e.el;const x=t.anchor=e.anchor,w=t.target=e.target,S=t.targetAnchor=e.targetAnchor,C=Rl(e.props),M=C?r:w,A=C?x:S;if(o==="svg"||E_(w)?o="svg":(o==="mathml"||L_(w))&&(o="mathml"),b?(h(e.dynamicChildren,b,M,i,a,o,s),fy(e,t,!0)):l||c(e,t,M,A,i,a,o,s,!1),g)C?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):wf(t,r,x,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const P=t.target=Yp(t.props,v);P&&wf(t,P,null,u,0)}else C&&wf(t,w,S,u,1)}AT(t)},remove(e,t,r,n,{um:i,o:{remove:a}},o){const{shapeFlag:s,children:l,anchor:u,targetAnchor:f,target:c,props:h}=e;if(c&&a(f),o&&a(u),s&16){const d=o||!Rl(h);for(let v=0;v0?Sn||ns:null,vO(),du>0&&Sn&&Sn.push(e),e}function ce(e,t,r,n,i,a){return PT(ee(e,t,r,n,i,a,!0))}function de(e,t,r,n,i){return PT(Z(e,t,r,n,i,!0))}function la(e){return e?e.__v_isVNode===!0:!1}function Ya(e,t){return e.type===t.type&&e.key===t.key}const th="__vInternal",ET=({key:e})=>e??null,Mc=({ref:e,ref_key:t,ref_for:r})=>(typeof e=="number"&&(e=""+e),e!=null?ze(e)||Pt(e)||De(e)?{i:Wt,r:e,k:t,f:!!r}:e:null);function ee(e,t=null,r=null,n=0,i=null,a=e===ft?0:1,o=!1,s=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ET(t),ref:t&&Mc(t),scopeId:lT,slotScopeIds:null,children:r,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:n,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Wt};return s?(cy(l,r),a&128&&e.normalize(l)):r&&(l.shapeFlag|=ze(r)?8:16),du>0&&!o&&Sn&&(l.patchFlag>0||a&6)&&l.patchFlag!==32&&Sn.push(l),l}const Z=pO;function pO(e,t=null,r=null,n=0,i=null,a=!1){if((!e||e===uT)&&(e=Mr),la(e)){const s=_i(e,t,!0);return r&&cy(s,r),du>0&&!a&&Sn&&(s.shapeFlag&6?Sn[Sn.indexOf(e)]=s:Sn.push(s)),s.patchFlag|=-2,s}if(CO(e)&&(e=e.__vccOpts),t){t=gO(t);let{class:s,style:l}=t;s&&!ze(s)&&(t.class=re(s)),qe(l)&&(KC(l)&&!_e(l)&&(l=$t({},l)),t.style=ct(l))}const o=ze(e)?1:DI(e)?128:cO(e)?64:qe(e)?4:De(e)?2:0;return ee(e,t,r,n,i,o,a,!0)}function gO(e){return e?KC(e)||th in e?$t({},e):e:null}function _i(e,t,r=!1){const{props:n,ref:i,patchFlag:a,children:o}=e,s=t?ei(n||{},t):n;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&ET(s),ref:t&&t.ref?r&&i?_e(i)?i.concat(Mc(t)):[i,Mc(t)]:Mc(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ft?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_i(e.ssContent),ssFallback:e.ssFallback&&_i(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function mt(e=" ",t=0){return Z(ks,null,e,t)}function Ae(e="",t=!1){return t?(G(),de(Mr,null,e)):Z(Mr,null,e)}function Hn(e){return e==null||typeof e=="boolean"?Z(Mr):_e(e)?Z(ft,null,e.slice()):typeof e=="object"?qi(e):Z(ks,null,String(e))}function qi(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_i(e)}function cy(e,t){let r=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(_e(t))r=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),cy(e,i()),i._c&&(i._d=!0));return}else{r=32;const i=t._;!i&&!(th in t)?t._ctx=Wt:i===3&&Wt&&(Wt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else De(t)?(t={default:t,_ctx:Wt},r=32):(t=String(t),n&64?(r=16,t=[mt(t)]):r=8);e.children=t,e.shapeFlag|=r}function ei(...e){const t={};for(let r=0;rQt||Wt;let ad,jp;{const e=DC(),t=(r,n)=>{let i;return(i=e[r])||(i=e[r]=[]),i.push(n),a=>{i.length>1?i.forEach(o=>o(a)):i[0](a)}};ad=t("__VUE_INSTANCE_SETTERS__",r=>Qt=r),jp=t("__VUE_SSR_SETTERS__",r=>rh=r)}const Yu=e=>{const t=Qt;return ad(e),e.scope.on(),()=>{e.scope.off(),ad(t)}},I_=()=>{Qt&&Qt.scope.off(),ad(null)};function LT(e){return e.vnode.shapeFlag&4}let rh=!1;function bO(e,t=!1){t&&jp(t);const{props:r,children:n}=e.vnode,i=LT(e);rO(e,r,i,t),aO(e,n);const a=i?wO(e,t):void 0;return t&&jp(!1),a}function wO(e,t){const r=e.type;e.accessCache=Object.create(null),e.proxy=XC(new Proxy(e.ctx,jI));const{setup:n}=r;if(n){const i=e.setupContext=n.length>1?IT(e):null,a=Yu(e);Co();const o=ra(n,e,0,[e.props,i]);if(To(),a(),Qc(o)){if(o.then(I_,I_),t)return o.then(s=>{O_(e,s,t)}).catch(s=>{Xd(s,e,0)});e.asyncDep=o}else O_(e,o,t)}else DT(e,t)}function O_(e,t,r){De(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:qe(t)&&(e.setupState=tT(t)),DT(e,r)}let R_;function DT(e,t,r){const n=e.type;if(!e.render){if(!t&&R_&&!n.render){const i=n.template||ly(e).template;if(i){const{isCustomElement:a,compilerOptions:o}=e.appContext.config,{delimiters:s,compilerOptions:l}=n,u=$t($t({isCustomElement:a,delimiters:s},o),l);n.render=R_(i,u)}}e.render=n.render||Bt}{const i=Yu(e);Co();try{KI(e)}finally{To(),i()}}}function SO(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,r){return Lr(e,"get","$attrs"),t[r]}}))}function IT(e){const t=r=>{e.exposed=r||{}};return{get attrs(){return SO(e)},slots:e.slots,emit:e.emit,expose:t}}function nh(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(tT(XC(e.exposed)),{get(t,r){if(r in t)return t[r];if(r in Ol)return Ol[r](e)},has(t,r){return r in t||r in Ol}}))}function xO(e,t=!0){return De(e)?e.displayName||e.name:e.name||t&&e.__name}function CO(e){return De(e)&&"__vccOpts"in e}const k=(e,t)=>QC(e,t,rh);function Te(e,t,r){const n=arguments.length;return n===2?qe(t)&&!_e(t)?la(t)?Z(e,null,[t]):Z(e,t):Z(e,null,t):(n>3?r=Array.prototype.slice.call(arguments,2):n===3&&la(r)&&(r=[r]),Z(e,t,r))}const TO="3.4.15",MO=Bt;/** +**/function ra(e,t,r,n){let i;try{i=n?e(...n):e()}catch(a){Xd(a,t,r)}return i}function sn(e,t,r,n){if(De(e)){const a=ra(e,t,r,n);return a&&Qc(a)&&a.catch(o=>{Xd(o,t,r)}),a}const i=[];for(let a=0;a>>1,i=or[n],a=uu(i);azn&&or.splice(t,1)}function xI(e){_e(e)?ls.push(...e):(!Yi||!Yi.includes(e,e.allowRecurse?Ua+1:Ua))&&ls.push(e),iT()}function m_(e,t,r=lu?zn+1:0){for(;ruu(r)-uu(n));if(ls.length=0,Yi){Yi.push(...t);return}for(Yi=t,Ua=0;Uae.id==null?1/0:e.id,CI=(e,t)=>{const r=uu(e)-uu(t);if(r===0){if(e.pre&&!t.pre)return-1;if(t.pre&&!e.pre)return 1}return r};function oT(e){$p=!1,lu=!0,or.sort(CI);try{for(zn=0;znze(d)?d.trim():d)),c&&(i=r.map($D))}let s,l=n[s=xc(t)]||n[s=xc(Pn(t))];!l&&a&&(l=n[s=xc(xo(t))]),l&&sn(l,e,6,i);const u=n[s+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[s])return;e.emitted[s]=!0,sn(u,e,6,i)}}function sT(e,t,r=!1){const n=t.emitsCache,i=n.get(e);if(i!==void 0)return i;const a=e.emits;let o={},s=!1;if(!De(e)){const l=u=>{const f=sT(u,t,!0);f&&(s=!0,Ht(o,f))};!r&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}return!a&&!s?(qe(e)&&n.set(e,null),null):(_e(a)?a.forEach(l=>o[l]=null):Ht(o,a),qe(e)&&n.set(e,o),o)}function Zd(e,t){return!e||!Wd(t)?!1:(t=t.slice(2).replace(/Once$/,""),Ue(e,t[0].toLowerCase()+t.slice(1))||Ue(e,xo(t))||Ue(e,t))}let Wt=null,lT=null;function rd(e){const t=Wt;return Wt=e,lT=e&&e.type.__scopeId||null,t}function q(e,t=Wt,r){if(!t||e._n)return e;const n=(...i)=>{n._d&&D_(-1);const a=rd(t);let o;try{o=e(...i)}finally{rd(a),n._d&&D_(1)}return o};return n._n=!0,n._c=!0,n._d=!0,n}function Gh(e){const{type:t,vnode:r,proxy:n,withProxy:i,props:a,propsOptions:[o],slots:s,attrs:l,emit:u,render:f,renderCache:c,data:h,setupState:d,ctx:v,inheritAttrs:p}=e;let m,g;const y=rd(e);try{if(r.shapeFlag&4){const b=i||n,x=b;m=Hn(f.call(x,b,c,a,d,h,v)),g=l}else{const b=t;m=Hn(b.length>1?b(a,{attrs:l,slots:s,emit:u}):b(a,null)),g=t.props?l:MI(l)}}catch(b){kl.length=0,Xd(b,e,1),m=Z(Mr)}let _=m;if(g&&p!==!1){const b=Object.keys(g),{shapeFlag:x}=_;b.length&&x&7&&(o&&b.some(Gm)&&(g=AI(g,o)),_=_i(_,g))}return r.dirs&&(_=_i(_),_.dirs=_.dirs?_.dirs.concat(r.dirs):r.dirs),r.transition&&(_.transition=r.transition),m=_,rd(y),m}const MI=e=>{let t;for(const r in e)(r==="class"||r==="style"||Wd(r))&&((t||(t={}))[r]=e[r]);return t},AI=(e,t)=>{const r={};for(const n in e)(!Gm(n)||!(n.slice(9)in t))&&(r[n]=e[n]);return r};function PI(e,t,r){const{props:n,children:i,component:a}=e,{props:o,children:s,patchFlag:l}=t,u=a.emitsOptions;if(t.dirs||t.transition)return!0;if(r&&l>=0){if(l&1024)return!0;if(l&16)return n?y_(n,o,u):!!o;if(l&8){const f=t.dynamicProps;for(let c=0;ce.__isSuspense;function II(e,t){t&&t.pendingBranch?_e(e)?t.effects.push(...e):t.effects.push(e):xI(e)}const OI=Symbol.for("v-scx"),RI=()=>Le(OI);function na(e,t){return oy(e,null,t)}const _f={};function be(e,t,r){return oy(e,t,r)}function oy(e,t,{immediate:r,deep:n,flush:i,once:a,onTrack:o,onTrigger:s}=St){if(t&&a){const w=t;t=(...S)=>{w(...S),x()}}const l=Qt,u=w=>n===!0?w:Xa(w,n===!1?1:void 0);let f,c=!1,h=!1;if(Pt(e)?(f=()=>e.value,c=td(e)):ss(e)?(f=()=>u(e),c=!0):_e(e)?(h=!0,c=e.some(w=>ss(w)||td(w)),f=()=>e.map(w=>{if(Pt(w))return w.value;if(ss(w))return u(w);if(De(w))return ra(w,l,2)})):De(e)?t?f=()=>ra(e,l,2):f=()=>(d&&d(),sn(e,l,3,[v])):f=Ft,t&&n){const w=f;f=()=>Xa(w())}let d,v=w=>{d=_.onStop=()=>{ra(w,l,4),d=_.onStop=void 0}},p;if(rh)if(v=Ft,t?r&&sn(t,l,3,[f(),h?[]:void 0,v]):f(),i==="sync"){const w=RI();p=w.__watcherHandles||(w.__watcherHandles=[])}else return Ft;let m=h?new Array(e.length).fill(_f):_f;const g=()=>{if(!(!_.active||!_.dirty))if(t){const w=_.run();(n||c||(h?w.some((S,C)=>sa(S,m[C])):sa(w,m)))&&(d&&d(),sn(t,l,3,[w,m===_f?void 0:h&&m[0]===_f?[]:m,v]),m=w)}else _.run()};g.allowRecurse=!!t;let y;i==="sync"?y=g:i==="post"?y=()=>Sr(g,l&&l.suspense):(g.pre=!0,l&&(g.id=l.uid),y=()=>ny(g));const _=new jm(f,Ft,y),b=kC(),x=()=>{_.stop(),b&&Um(b.effects,_)};return t?r?g():m=_.run():i==="post"?Sr(_.run.bind(_),l&&l.suspense):_.run(),p&&p.push(x),x}function kI(e,t,r){const n=this.proxy,i=ze(e)?e.includes(".")?cT(n,e):()=>n[e]:e.bind(n,n);let a;De(t)?a=t:(a=t.handler,r=t);const o=Yu(this),s=oy(i,a.bind(n),r);return o(),s}function cT(e,t){const r=t.split(".");return()=>{let n=e;for(let i=0;i0){if(r>=t)return e;r++}if(n=n||new Set,n.has(e))return e;if(n.add(e),Pt(e))Xa(e.value,t,r,n);else if(_e(e))for(let i=0;i{Xa(i,t,r,n)});else if(LC(e))for(const i in e)Xa(e[i],t,r,n);return e}function qt(e,t){if(Wt===null)return e;const r=nh(Wt)||Wt.proxy,n=e.dirs||(e.dirs=[]);for(let i=0;i{e.isMounted=!0}),tr(()=>{e.isUnmounting=!0}),e}const jr=[Function,Array],hT={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:jr,onEnter:jr,onAfterEnter:jr,onEnterCancelled:jr,onBeforeLeave:jr,onLeave:jr,onAfterLeave:jr,onLeaveCancelled:jr,onBeforeAppear:jr,onAppear:jr,onAfterAppear:jr,onAppearCancelled:jr},NI={name:"BaseTransition",props:hT,setup(e,{slots:t}){const r=it(),n=dT();let i;return()=>{const a=t.default&&sy(t.default(),!0);if(!a||!a.length)return;let o=a[0];if(a.length>1){for(const p of a)if(p.type!==Mr){o=p;break}}const s=Qe(e),{mode:l}=s;if(n.isLeaving)return Uh(o);const u=b_(o);if(!u)return Uh(o);const f=fu(u,s,n,r);cu(u,f);const c=r.subTree,h=c&&b_(c);let d=!1;const{getTransitionKey:v}=u.type;if(v){const p=v();i===void 0?i=p:p!==i&&(i=p,d=!0)}if(h&&h.type!==Mr&&(!Ya(u,h)||d)){const p=fu(h,s,n,r);if(cu(h,p),l==="out-in")return n.isLeaving=!0,p.afterLeave=()=>{n.isLeaving=!1,r.update.active!==!1&&(r.effect.dirty=!0,r.update())},Uh(o);l==="in-out"&&u.type!==Mr&&(p.delayLeave=(m,g,y)=>{const _=vT(n,h);_[String(h.key)]=h,m[ji]=()=>{g(),m[ji]=void 0,delete f.delayedLeave},f.delayedLeave=y})}return o}}},BI=NI;function vT(e,t){const{leavingVNodes:r}=e;let n=r.get(t.type);return n||(n=Object.create(null),r.set(t.type,n)),n}function fu(e,t,r,n){const{appear:i,mode:a,persisted:o=!1,onBeforeEnter:s,onEnter:l,onAfterEnter:u,onEnterCancelled:f,onBeforeLeave:c,onLeave:h,onAfterLeave:d,onLeaveCancelled:v,onBeforeAppear:p,onAppear:m,onAfterAppear:g,onAppearCancelled:y}=t,_=String(e.key),b=vT(r,e),x=(C,M)=>{C&&sn(C,n,9,M)},w=(C,M)=>{const A=M[1];x(C,M),_e(C)?C.every(P=>P.length<=1)&&A():C.length<=1&&A()},S={mode:a,persisted:o,beforeEnter(C){let M=s;if(!r.isMounted)if(i)M=p||s;else return;C[ji]&&C[ji](!0);const A=b[_];A&&Ya(e,A)&&A.el[ji]&&A.el[ji](),x(M,[C])},enter(C){let M=l,A=u,P=f;if(!r.isMounted)if(i)M=m||l,A=g||u,P=y||f;else return;let E=!1;const L=C[bf]=O=>{E||(E=!0,O?x(P,[C]):x(A,[C]),S.delayedLeave&&S.delayedLeave(),C[bf]=void 0)};M?w(M,[C,L]):L()},leave(C,M){const A=String(e.key);if(C[bf]&&C[bf](!0),r.isUnmounting)return M();x(c,[C]);let P=!1;const E=C[ji]=L=>{P||(P=!0,M(),L?x(v,[C]):x(d,[C]),C[ji]=void 0,b[A]===e&&delete b[A])};b[A]=e,h?w(h,[C,E]):E()},clone(C){return fu(C,t,r,n)}};return S}function Uh(e){if(Qd(e))return e=_i(e),e.children=null,e}function b_(e){return Qd(e)?e.children?e.children[0]:void 0:e}function cu(e,t){e.shapeFlag&6&&e.component?cu(e.component.subTree,t):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function sy(e,t=!1,r){let n=[],i=0;for(let a=0;a1)for(let a=0;a!!e.type.__asyncLoader,Qd=e=>e.type.__isKeepAlive;function FI(e,t){gT(e,"a",t)}function pT(e,t){gT(e,"da",t)}function gT(e,t,r=Qt){const n=e.__wdc||(e.__wdc=()=>{let i=r;for(;i;){if(i.isDeactivated)return;i=i.parent}return e()});if(Jd(t,n,r),r){let i=r.parent;for(;i&&i.parent;)Qd(i.parent.vnode)&&$I(n,t,r,i),i=i.parent}}function $I(e,t,r,n){const i=Jd(t,e,n,!0);ks(()=>{Um(n[t],i)},r)}function Jd(e,t,r=Qt,n=!1){if(r){const i=r[e]||(r[e]=[]),a=t.__weh||(t.__weh=(...o)=>{if(r.isUnmounted)return;Co();const s=Yu(r),l=sn(t,r,e,o);return s(),To(),l});return n?i.unshift(a):i.push(a),a}}const Ai=e=>(t,r=Qt)=>(!rh||e==="sp")&&Jd(e,(...n)=>t(...n),r),eh=Ai("bm"),_t=Ai("m"),HI=Ai("bu"),Uu=Ai("u"),tr=Ai("bum"),ks=Ai("um"),zI=Ai("sp"),VI=Ai("rtg"),WI=Ai("rtc");function GI(e,t=Qt){Jd("ec",e,t)}function Hp(e,t,r,n){let i;const a=r&&r[n];if(_e(e)||ze(e)){i=new Array(e.length);for(let o=0,s=e.length;ot(o,s,void 0,a&&a[s]));else{const o=Object.keys(e);i=new Array(o.length);for(let s=0,l=o.length;s{const a=n.fn(...i);return a&&(a.key=n.key),a}:n.fn)}return e}function Ce(e,t,r={},n,i){if(Wt.isCE||Wt.parent&&Il(Wt.parent)&&Wt.parent.isCE)return t!=="default"&&(r.name=t),Z("slot",r,n&&n());let a=e[t];a&&a._c&&(a._d=!1),G();const o=a&&mT(a(r)),s=ve(ft,{key:r.key||o&&o.key||`_${t}`},o||(n?n():[]),o&&e._===1?64:-2);return!i&&s.scopeId&&(s.slotScopeIds=[s.scopeId+"-s"]),a&&a._c&&(a._d=!0),s}function mT(e){return e.some(t=>la(t)?!(t.type===Mr||t.type===ft&&!mT(t.children)):!0)?e:null}function YI(e,t){const r={};for(const n in e)r[t&&/[A-Z]/.test(n)?`on:${n}`:xc(n)]=e[n];return r}const zp=e=>e?LT(e)?nh(e)||e.proxy:zp(e.parent):null,Ol=Ht(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>zp(e.parent),$root:e=>zp(e.root),$emit:e=>e.emit,$options:e=>ly(e),$forceUpdate:e=>e.f||(e.f=()=>{e.effect.dirty=!0,ny(e.update)}),$nextTick:e=>e.n||(e.n=Nt.bind(e.proxy)),$watch:e=>kI.bind(e)}),Yh=(e,t)=>e!==St&&!e.__isScriptSetup&&Ue(e,t),jI={get({_:e},t){const{ctx:r,setupState:n,data:i,props:a,accessCache:o,type:s,appContext:l}=e;let u;if(t[0]!=="$"){const d=o[t];if(d!==void 0)switch(d){case 1:return n[t];case 2:return i[t];case 4:return r[t];case 3:return a[t]}else{if(Yh(n,t))return o[t]=1,n[t];if(i!==St&&Ue(i,t))return o[t]=2,i[t];if((u=e.propsOptions[0])&&Ue(u,t))return o[t]=3,a[t];if(r!==St&&Ue(r,t))return o[t]=4,r[t];Vp&&(o[t]=0)}}const f=Ol[t];let c,h;if(f)return t==="$attrs"&&Lr(e,"get",t),f(e);if((c=s.__cssModules)&&(c=c[t]))return c;if(r!==St&&Ue(r,t))return o[t]=4,r[t];if(h=l.config.globalProperties,Ue(h,t))return h[t]},set({_:e},t,r){const{data:n,setupState:i,ctx:a}=e;return Yh(i,t)?(i[t]=r,!0):n!==St&&Ue(n,t)?(n[t]=r,!0):Ue(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=r,!0)},has({_:{data:e,setupState:t,accessCache:r,ctx:n,appContext:i,propsOptions:a}},o){let s;return!!r[o]||e!==St&&Ue(e,o)||Yh(t,o)||(s=a[0])&&Ue(s,o)||Ue(n,o)||Ue(Ol,o)||Ue(i.config.globalProperties,o)},defineProperty(e,t,r){return r.get!=null?e._.accessCache[t]=0:Ue(r,"value")&&this.set(e,t,r.value,null),Reflect.defineProperty(e,t,r)}};function Ns(){return qI().slots}function qI(){const e=it();return e.setupContext||(e.setupContext=IT(e))}function w_(e){return _e(e)?e.reduce((t,r)=>(t[r]=null,t),{}):e}let Vp=!0;function KI(e){const t=ly(e),r=e.proxy,n=e.ctx;Vp=!1,t.beforeCreate&&S_(t.beforeCreate,e,"bc");const{data:i,computed:a,methods:o,watch:s,provide:l,inject:u,created:f,beforeMount:c,mounted:h,beforeUpdate:d,updated:v,activated:p,deactivated:m,beforeDestroy:g,beforeUnmount:y,destroyed:_,unmounted:b,render:x,renderTracked:w,renderTriggered:S,errorCaptured:C,serverPrefetch:M,expose:A,inheritAttrs:P,components:E,directives:L,filters:O}=t;if(u&&XI(u,n,null),o)for(const V in o){const U=o[V];De(U)&&(n[V]=U.bind(r))}if(i){const V=i.call(r,r);qe(V)&&(e.data=Ln(V))}if(Vp=!0,a)for(const V in a){const U=a[V],F=De(U)?U.bind(r,r):De(U.get)?U.get.bind(r,r):Ft,z=!De(U)&&De(U.set)?U.set.bind(r):Ft,ee=k({get:F,set:z});Object.defineProperty(n,V,{enumerable:!0,configurable:!0,get:()=>ee.value,set:J=>ee.value=J})}if(s)for(const V in s)yT(s[V],n,r,V);if(l){const V=De(l)?l.call(r):l;Reflect.ownKeys(V).forEach(U=>{Dt(U,V[U])})}f&&S_(f,e,"c");function H(V,U){_e(U)?U.forEach(F=>V(F.bind(r))):U&&V(U.bind(r))}if(H(eh,c),H(_t,h),H(HI,d),H(Uu,v),H(FI,p),H(pT,m),H(GI,C),H(WI,w),H(VI,S),H(tr,y),H(ks,b),H(zI,M),_e(A))if(A.length){const V=e.exposed||(e.exposed={});A.forEach(U=>{Object.defineProperty(V,U,{get:()=>r[U],set:F=>r[U]=F})})}else e.exposed||(e.exposed={});x&&e.render===Ft&&(e.render=x),P!=null&&(e.inheritAttrs=P),E&&(e.components=E),L&&(e.directives=L)}function XI(e,t,r=Ft){_e(e)&&(e=Wp(e));for(const n in e){const i=e[n];let a;qe(i)?"default"in i?a=Le(i.from||n,i.default,!0):a=Le(i.from||n):a=Le(i),Pt(a)?Object.defineProperty(t,n,{enumerable:!0,configurable:!0,get:()=>a.value,set:o=>a.value=o}):t[n]=a}}function S_(e,t,r){sn(_e(e)?e.map(n=>n.bind(t.proxy)):e.bind(t.proxy),t,r)}function yT(e,t,r,n){const i=n.includes(".")?cT(r,n):()=>r[n];if(ze(e)){const a=t[e];De(a)&&be(i,a)}else if(De(e))be(i,e.bind(r));else if(qe(e))if(_e(e))e.forEach(a=>yT(a,t,r,n));else{const a=De(e.handler)?e.handler.bind(r):t[e.handler];De(a)&&be(i,a,e)}}function ly(e){const t=e.type,{mixins:r,extends:n}=t,{mixins:i,optionsCache:a,config:{optionMergeStrategies:o}}=e.appContext,s=a.get(t);let l;return s?l=s:!i.length&&!r&&!n?l=t:(l={},i.length&&i.forEach(u=>nd(l,u,o,!0)),nd(l,t,o)),qe(t)&&a.set(t,l),l}function nd(e,t,r,n=!1){const{mixins:i,extends:a}=t;a&&nd(e,a,r,!0),i&&i.forEach(o=>nd(e,o,r,!0));for(const o in t)if(!(n&&o==="expose")){const s=ZI[o]||r&&r[o];e[o]=s?s(e[o],t[o]):t[o]}return e}const ZI={data:x_,props:C_,emits:C_,methods:Sl,computed:Sl,beforeCreate:ur,created:ur,beforeMount:ur,mounted:ur,beforeUpdate:ur,updated:ur,beforeDestroy:ur,beforeUnmount:ur,destroyed:ur,unmounted:ur,activated:ur,deactivated:ur,errorCaptured:ur,serverPrefetch:ur,components:Sl,directives:Sl,watch:JI,provide:x_,inject:QI};function x_(e,t){return t?e?function(){return Ht(De(e)?e.call(this,this):e,De(t)?t.call(this,this):t)}:t:e}function QI(e,t){return Sl(Wp(e),Wp(t))}function Wp(e){if(_e(e)){const t={};for(let r=0;r1)return r&&De(t)?t.call(n&&n.proxy):t}}function rO(e,t,r,n=!1){const i={},a={};Jc(a,th,1),e.propsDefaults=Object.create(null),bT(e,t,i,a);for(const o in e.propsOptions[0])o in i||(i[o]=void 0);r?e.props=n?i:Qm(i):e.type.props?e.props=i:e.props=a,e.attrs=a}function nO(e,t,r,n){const{props:i,attrs:a,vnode:{patchFlag:o}}=e,s=Qe(i),[l]=e.propsOptions;let u=!1;if((n||o>0)&&!(o&16)){if(o&8){const f=e.vnode.dynamicProps;for(let c=0;c{l=!0;const[h,d]=wT(c,t,!0);Ht(o,h),d&&s.push(...d)};!r&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!a&&!l)return qe(e)&&n.set(e,as),as;if(_e(a))for(let f=0;f-1,d[1]=p<0||v-1||Ue(d,"default"))&&s.push(c)}}}const u=[o,s];return qe(e)&&n.set(e,u),u}function T_(e){return e[0]!=="$"}function M_(e){const t=e&&e.toString().match(/^\s*(function|class) (\w+)/);return t?t[2]:e===null?"null":""}function A_(e,t){return M_(e)===M_(t)}function P_(e,t){return _e(t)?t.findIndex(r=>A_(r,e)):De(t)&&A_(t,e)?0:-1}const ST=e=>e[0]==="_"||e==="$stable",uy=e=>_e(e)?e.map(Hn):[Hn(e)],iO=(e,t,r)=>{if(t._n)return t;const n=q((...i)=>uy(t(...i)),r);return n._c=!1,n},xT=(e,t,r)=>{const n=e._ctx;for(const i in e){if(ST(i))continue;const a=e[i];if(De(a))t[i]=iO(i,a,n);else if(a!=null){const o=uy(a);t[i]=()=>o}}},CT=(e,t)=>{const r=uy(t);e.slots.default=()=>r},aO=(e,t)=>{if(e.vnode.shapeFlag&32){const r=t._;r?(e.slots=Qe(t),Jc(t,"_",r)):xT(t,e.slots={})}else e.slots={},t&&CT(e,t);Jc(e.slots,th,1)},oO=(e,t,r)=>{const{vnode:n,slots:i}=e;let a=!0,o=St;if(n.shapeFlag&32){const s=t._;s?r&&s===1?a=!1:(Ht(i,t),!r&&s===1&&delete i._):(a=!t.$stable,xT(t,i)),o=t}else t&&(CT(e,t),o={default:1});if(a)for(const s in i)!ST(s)&&o[s]==null&&delete i[s]};function Up(e,t,r,n,i=!1){if(_e(e)){e.forEach((h,d)=>Up(h,t&&(_e(t)?t[d]:t),r,n,i));return}if(Il(n)&&!i)return;const a=n.shapeFlag&4?nh(n.component)||n.component.proxy:n.el,o=i?null:a,{i:s,r:l}=e,u=t&&t.r,f=s.refs===St?s.refs={}:s.refs,c=s.setupState;if(u!=null&&u!==l&&(ze(u)?(f[u]=null,Ue(c,u)&&(c[u]=null)):Pt(u)&&(u.value=null)),De(l))ra(l,s,12,[o,f]);else{const h=ze(l),d=Pt(l),v=e.f;if(h||d){const p=()=>{if(v){const m=h?Ue(c,l)?c[l]:f[l]:l.value;i?_e(m)&&Um(m,a):_e(m)?m.includes(a)||m.push(a):h?(f[l]=[a],Ue(c,l)&&(c[l]=f[l])):(l.value=[a],e.k&&(f[e.k]=l.value))}else h?(f[l]=o,Ue(c,l)&&(c[l]=o)):d&&(l.value=o,e.k&&(f[e.k]=o))};i||v?p():(p.id=-1,Sr(p,r))}}}const Sr=II;function sO(e){return lO(e)}function lO(e,t){const r=DC();r.__VUE__=!0;const{insert:n,remove:i,patchProp:a,createElement:o,createText:s,createComment:l,setText:u,setElementText:f,parentNode:c,nextSibling:h,setScopeId:d=Ft,insertStaticContent:v}=e,p=(D,I,W,X=null,j=null,le=null,fe=void 0,ae=null,se=!!I.dynamicChildren)=>{if(D===I)return;D&&!Ya(D,I)&&(X=B(D),J(D,j,le,!0),D=null),I.patchFlag===-2&&(se=!1,I.dynamicChildren=null);const{type:ne,ref:de,shapeFlag:Me}=I;switch(ne){case Bs:m(D,I,W,X);break;case Mr:g(D,I,W,X);break;case qh:D==null&&y(I,W,X,fe);break;case ft:E(D,I,W,X,j,le,fe,ae,se);break;default:Me&1?x(D,I,W,X,j,le,fe,ae,se):Me&6?L(D,I,W,X,j,le,fe,ae,se):(Me&64||Me&128)&&ne.process(D,I,W,X,j,le,fe,ae,se,Q)}de!=null&&j&&Up(de,D&&D.ref,le,I||D,!I)},m=(D,I,W,X)=>{if(D==null)n(I.el=s(I.children),W,X);else{const j=I.el=D.el;I.children!==D.children&&u(j,I.children)}},g=(D,I,W,X)=>{D==null?n(I.el=l(I.children||""),W,X):I.el=D.el},y=(D,I,W,X)=>{[D.el,D.anchor]=v(D.children,I,W,X,D.el,D.anchor)},_=({el:D,anchor:I},W,X)=>{let j;for(;D&&D!==I;)j=h(D),n(D,W,X),D=j;n(I,W,X)},b=({el:D,anchor:I})=>{let W;for(;D&&D!==I;)W=h(D),i(D),D=W;i(I)},x=(D,I,W,X,j,le,fe,ae,se)=>{I.type==="svg"?fe="svg":I.type==="math"&&(fe="mathml"),D==null?w(I,W,X,j,le,fe,ae,se):M(D,I,j,le,fe,ae,se)},w=(D,I,W,X,j,le,fe,ae)=>{let se,ne;const{props:de,shapeFlag:Me,transition:Se,dirs:ke}=D;if(se=D.el=o(D.type,le,de&&de.is,de),Me&8?f(se,D.children):Me&16&&C(D.children,se,null,X,j,jh(D,le),fe,ae),ke&&ma(D,null,X,"created"),S(se,D,D.scopeId,fe,X),de){for(const rt in de)rt!=="value"&&!Sc(rt)&&a(se,rt,null,de[rt],le,D.children,X,j,Ie);"value"in de&&a(se,"value",null,de.value,le),(ne=de.onVnodeBeforeMount)&&kn(ne,X,D)}ke&&ma(D,null,X,"beforeMount");const Ve=uO(j,Se);Ve&&Se.beforeEnter(se),n(se,I,W),((ne=de&&de.onVnodeMounted)||Ve||ke)&&Sr(()=>{ne&&kn(ne,X,D),Ve&&Se.enter(se),ke&&ma(D,null,X,"mounted")},j)},S=(D,I,W,X,j)=>{if(W&&d(D,W),X)for(let le=0;le{for(let ne=se;ne{const ae=I.el=D.el;let{patchFlag:se,dynamicChildren:ne,dirs:de}=I;se|=D.patchFlag&16;const Me=D.props||St,Se=I.props||St;let ke;if(W&&ya(W,!1),(ke=Se.onVnodeBeforeUpdate)&&kn(ke,W,I,D),de&&ma(I,D,W,"beforeUpdate"),W&&ya(W,!0),ne?A(D.dynamicChildren,ne,ae,W,X,jh(I,j),le):fe||U(D,I,ae,null,W,X,jh(I,j),le,!1),se>0){if(se&16)P(ae,I,Me,Se,W,X,j);else if(se&2&&Me.class!==Se.class&&a(ae,"class",null,Se.class,j),se&4&&a(ae,"style",Me.style,Se.style,j),se&8){const Ve=I.dynamicProps;for(let rt=0;rt{ke&&kn(ke,W,I,D),de&&ma(I,D,W,"updated")},X)},A=(D,I,W,X,j,le,fe)=>{for(let ae=0;ae{if(W!==X){if(W!==St)for(const ae in W)!Sc(ae)&&!(ae in X)&&a(D,ae,W[ae],null,fe,I.children,j,le,Ie);for(const ae in X){if(Sc(ae))continue;const se=X[ae],ne=W[ae];se!==ne&&ae!=="value"&&a(D,ae,ne,se,fe,I.children,j,le,Ie)}"value"in X&&a(D,"value",W.value,X.value,fe)}},E=(D,I,W,X,j,le,fe,ae,se)=>{const ne=I.el=D?D.el:s(""),de=I.anchor=D?D.anchor:s("");let{patchFlag:Me,dynamicChildren:Se,slotScopeIds:ke}=I;ke&&(ae=ae?ae.concat(ke):ke),D==null?(n(ne,W,X),n(de,W,X),C(I.children||[],W,de,j,le,fe,ae,se)):Me>0&&Me&64&&Se&&D.dynamicChildren?(A(D.dynamicChildren,Se,W,j,le,fe,ae),(I.key!=null||j&&I===j.subTree)&&fy(D,I,!0)):U(D,I,W,de,j,le,fe,ae,se)},L=(D,I,W,X,j,le,fe,ae,se)=>{I.slotScopeIds=ae,D==null?I.shapeFlag&512?j.ctx.activate(I,W,X,fe,se):O(I,W,X,j,le,fe,se):N(D,I,se)},O=(D,I,W,X,j,le,fe)=>{const ae=D.component=_O(D,X,j);if(Qd(D)&&(ae.ctx.renderer=Q),bO(ae),ae.asyncDep){if(j&&j.registerDep(ae,H),!D.el){const se=ae.subTree=Z(Mr);g(null,se,I,W)}}else H(ae,D,I,W,j,le,fe)},N=(D,I,W)=>{const X=I.component=D.component;if(PI(D,I,W))if(X.asyncDep&&!X.asyncResolved){V(X,I,W);return}else X.next=I,SI(X.update),X.effect.dirty=!0,X.update();else I.el=D.el,X.vnode=I},H=(D,I,W,X,j,le,fe)=>{const ae=()=>{if(D.isMounted){let{next:de,bu:Me,u:Se,parent:ke,vnode:Ve}=D;{const We=TT(D);if(We){de&&(de.el=Ve.el,V(D,de,fe)),We.asyncDep.then(()=>{D.isUnmounted||ae()});return}}let rt=de,bt;ya(D,!1),de?(de.el=Ve.el,V(D,de,fe)):de=Ve,Me&&Cc(Me),(bt=de.props&&de.props.onVnodeBeforeUpdate)&&kn(bt,ke,de,Ve),ya(D,!0);const he=Gh(D),Pe=D.subTree;D.subTree=he,p(Pe,he,c(Pe.el),B(Pe),D,j,le),de.el=he.el,rt===null&&EI(D,he.el),Se&&Sr(Se,j),(bt=de.props&&de.props.onVnodeUpdated)&&Sr(()=>kn(bt,ke,de,Ve),j)}else{let de;const{el:Me,props:Se}=I,{bm:ke,m:Ve,parent:rt}=D,bt=Il(I);if(ya(D,!1),ke&&Cc(ke),!bt&&(de=Se&&Se.onVnodeBeforeMount)&&kn(de,rt,I),ya(D,!0),Me&&pe){const he=()=>{D.subTree=Gh(D),pe(Me,D.subTree,D,j,null)};bt?I.type.__asyncLoader().then(()=>!D.isUnmounted&&he()):he()}else{const he=D.subTree=Gh(D);p(null,he,W,X,D,j,le),I.el=he.el}if(Ve&&Sr(Ve,j),!bt&&(de=Se&&Se.onVnodeMounted)){const he=I;Sr(()=>kn(de,rt,he),j)}(I.shapeFlag&256||rt&&Il(rt.vnode)&&rt.vnode.shapeFlag&256)&&D.a&&Sr(D.a,j),D.isMounted=!0,I=W=X=null}},se=D.effect=new jm(ae,Ft,()=>ny(ne),D.scope),ne=D.update=()=>{se.dirty&&se.run()};ne.id=D.uid,ya(D,!0),ne()},V=(D,I,W)=>{I.component=D;const X=D.vnode.props;D.vnode=I,D.next=null,nO(D,I.props,X,W),oO(D,I.children,W),Co(),m_(D),To()},U=(D,I,W,X,j,le,fe,ae,se=!1)=>{const ne=D&&D.children,de=D?D.shapeFlag:0,Me=I.children,{patchFlag:Se,shapeFlag:ke}=I;if(Se>0){if(Se&128){z(ne,Me,W,X,j,le,fe,ae,se);return}else if(Se&256){F(ne,Me,W,X,j,le,fe,ae,se);return}}ke&8?(de&16&&Ie(ne,j,le),Me!==ne&&f(W,Me)):de&16?ke&16?z(ne,Me,W,X,j,le,fe,ae,se):Ie(ne,j,le,!0):(de&8&&f(W,""),ke&16&&C(Me,W,X,j,le,fe,ae,se))},F=(D,I,W,X,j,le,fe,ae,se)=>{D=D||as,I=I||as;const ne=D.length,de=I.length,Me=Math.min(ne,de);let Se;for(Se=0;Sede?Ie(D,j,le,!0,!1,Me):C(I,W,X,j,le,fe,ae,se,Me)},z=(D,I,W,X,j,le,fe,ae,se)=>{let ne=0;const de=I.length;let Me=D.length-1,Se=de-1;for(;ne<=Me&&ne<=Se;){const ke=D[ne],Ve=I[ne]=se?qi(I[ne]):Hn(I[ne]);if(Ya(ke,Ve))p(ke,Ve,W,null,j,le,fe,ae,se);else break;ne++}for(;ne<=Me&&ne<=Se;){const ke=D[Me],Ve=I[Se]=se?qi(I[Se]):Hn(I[Se]);if(Ya(ke,Ve))p(ke,Ve,W,null,j,le,fe,ae,se);else break;Me--,Se--}if(ne>Me){if(ne<=Se){const ke=Se+1,Ve=keSe)for(;ne<=Me;)J(D[ne],j,le,!0),ne++;else{const ke=ne,Ve=ne,rt=new Map;for(ne=Ve;ne<=Se;ne++){const gt=I[ne]=se?qi(I[ne]):Hn(I[ne]);gt.key!=null&&rt.set(gt.key,ne)}let bt,he=0;const Pe=Se-Ve+1;let We=!1,Ge=0;const et=new Array(Pe);for(ne=0;ne=Pe){J(gt,j,le,!0);continue}let Kt;if(gt.key!=null)Kt=rt.get(gt.key);else for(bt=Ve;bt<=Se;bt++)if(et[bt-Ve]===0&&Ya(gt,I[bt])){Kt=bt;break}Kt===void 0?J(gt,j,le,!0):(et[Kt-Ve]=ne+1,Kt>=Ge?Ge=Kt:We=!0,p(gt,I[Kt],W,null,j,le,fe,ae,se),he++)}const zt=We?fO(et):as;for(bt=zt.length-1,ne=Pe-1;ne>=0;ne--){const gt=Ve+ne,Kt=I[gt],Yr=gt+1{const{el:le,type:fe,transition:ae,children:se,shapeFlag:ne}=D;if(ne&6){ee(D.component.subTree,I,W,X);return}if(ne&128){D.suspense.move(I,W,X);return}if(ne&64){fe.move(D,I,W,Q);return}if(fe===ft){n(le,I,W);for(let Me=0;Meae.enter(le),j);else{const{leave:Me,delayLeave:Se,afterLeave:ke}=ae,Ve=()=>n(le,I,W),rt=()=>{Me(le,()=>{Ve(),ke&&ke()})};Se?Se(le,Ve,rt):rt()}else n(le,I,W)},J=(D,I,W,X=!1,j=!1)=>{const{type:le,props:fe,ref:ae,children:se,dynamicChildren:ne,shapeFlag:de,patchFlag:Me,dirs:Se}=D;if(ae!=null&&Up(ae,null,W,D,!0),de&256){I.ctx.deactivate(D);return}const ke=de&1&&Se,Ve=!Il(D);let rt;if(Ve&&(rt=fe&&fe.onVnodeBeforeUnmount)&&kn(rt,I,D),de&6)$e(D.component,W,X);else{if(de&128){D.suspense.unmount(W,X);return}ke&&ma(D,null,I,"beforeUnmount"),de&64?D.type.remove(D,I,W,j,Q,X):ne&&(le!==ft||Me>0&&Me&64)?Ie(ne,I,W,!1,!0):(le===ft&&Me&384||!j&&de&16)&&Ie(se,I,W),X&&me(D)}(Ve&&(rt=fe&&fe.onVnodeUnmounted)||ke)&&Sr(()=>{rt&&kn(rt,I,D),ke&&ma(D,null,I,"unmounted")},W)},me=D=>{const{type:I,el:W,anchor:X,transition:j}=D;if(I===ft){we(W,X);return}if(I===qh){b(D);return}const le=()=>{i(W),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(D.shapeFlag&1&&j&&!j.persisted){const{leave:fe,delayLeave:ae}=j,se=()=>fe(W,le);ae?ae(D.el,le,se):se()}else le()},we=(D,I)=>{let W;for(;D!==I;)W=h(D),i(D),D=W;i(I)},$e=(D,I,W)=>{const{bum:X,scope:j,update:le,subTree:fe,um:ae}=D;X&&Cc(X),j.stop(),le&&(le.active=!1,J(fe,D,I,W)),ae&&Sr(ae,I),Sr(()=>{D.isUnmounted=!0},I),I&&I.pendingBranch&&!I.isUnmounted&&D.asyncDep&&!D.asyncResolved&&D.suspenseId===I.pendingId&&(I.deps--,I.deps===0&&I.resolve())},Ie=(D,I,W,X=!1,j=!1,le=0)=>{for(let fe=le;feD.shapeFlag&6?B(D.component.subTree):D.shapeFlag&128?D.suspense.next():h(D.anchor||D.el);let Y=!1;const K=(D,I,W)=>{D==null?I._vnode&&J(I._vnode,null,null,!0):p(I._vnode||null,D,I,null,null,null,W),Y||(Y=!0,m_(),aT(),Y=!1),I._vnode=D},Q={p,um:J,m:ee,r:me,mt:O,mc:C,pc:U,pbc:A,n:B,o:e};let oe,pe;return t&&([oe,pe]=t(Q)),{render:K,hydrate:oe,createApp:tO(K,oe)}}function jh({type:e,props:t},r){return r==="svg"&&e==="foreignObject"||r==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:r}function ya({effect:e,update:t},r){e.allowRecurse=t.allowRecurse=r}function uO(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function fy(e,t,r=!1){const n=e.children,i=t.children;if(_e(n)&&_e(i))for(let a=0;a>1,e[r[s]]0&&(t[n]=r[a-1]),r[a]=n)}}for(a=r.length,o=r[a-1];a-- >0;)r[a]=o,o=t[o];return r}function TT(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:TT(t)}const cO=e=>e.__isTeleport,Rl=e=>e&&(e.disabled||e.disabled===""),E_=e=>typeof SVGElement<"u"&&e instanceof SVGElement,L_=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Yp=(e,t)=>{const r=e&&e.to;return ze(r)?t?t(r):null:r},dO={name:"Teleport",__isTeleport:!0,process(e,t,r,n,i,a,o,s,l,u){const{mc:f,pc:c,pbc:h,o:{insert:d,querySelector:v,createText:p,createComment:m}}=u,g=Rl(t.props);let{shapeFlag:y,children:_,dynamicChildren:b}=t;if(e==null){const x=t.el=p(""),w=t.anchor=p("");d(x,r,n),d(w,r,n);const S=t.target=Yp(t.props,v),C=t.targetAnchor=p("");S&&(d(C,S),o==="svg"||E_(S)?o="svg":(o==="mathml"||L_(S))&&(o="mathml"));const M=(A,P)=>{y&16&&f(_,A,P,i,a,o,s,l)};g?M(r,w):S&&M(S,C)}else{t.el=e.el;const x=t.anchor=e.anchor,w=t.target=e.target,S=t.targetAnchor=e.targetAnchor,C=Rl(e.props),M=C?r:w,A=C?x:S;if(o==="svg"||E_(w)?o="svg":(o==="mathml"||L_(w))&&(o="mathml"),b?(h(e.dynamicChildren,b,M,i,a,o,s),fy(e,t,!0)):l||c(e,t,M,A,i,a,o,s,!1),g)C?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):wf(t,r,x,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const P=t.target=Yp(t.props,v);P&&wf(t,P,null,u,0)}else C&&wf(t,w,S,u,1)}AT(t)},remove(e,t,r,n,{um:i,o:{remove:a}},o){const{shapeFlag:s,children:l,anchor:u,targetAnchor:f,target:c,props:h}=e;if(c&&a(f),o&&a(u),s&16){const d=o||!Rl(h);for(let v=0;v0?Sn||as:null,vO(),du>0&&Sn&&Sn.push(e),e}function ce(e,t,r,n,i,a){return PT(te(e,t,r,n,i,a,!0))}function ve(e,t,r,n,i){return PT(Z(e,t,r,n,i,!0))}function la(e){return e?e.__v_isVNode===!0:!1}function Ya(e,t){return e.type===t.type&&e.key===t.key}const th="__vInternal",ET=({key:e})=>e??null,Mc=({ref:e,ref_key:t,ref_for:r})=>(typeof e=="number"&&(e=""+e),e!=null?ze(e)||Pt(e)||De(e)?{i:Wt,r:e,k:t,f:!!r}:e:null);function te(e,t=null,r=null,n=0,i=null,a=e===ft?0:1,o=!1,s=!1){const l={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&ET(t),ref:t&&Mc(t),scopeId:lT,slotScopeIds:null,children:r,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:n,dynamicProps:i,dynamicChildren:null,appContext:null,ctx:Wt};return s?(cy(l,r),a&128&&e.normalize(l)):r&&(l.shapeFlag|=ze(r)?8:16),du>0&&!o&&Sn&&(l.patchFlag>0||a&6)&&l.patchFlag!==32&&Sn.push(l),l}const Z=pO;function pO(e,t=null,r=null,n=0,i=null,a=!1){if((!e||e===uT)&&(e=Mr),la(e)){const s=_i(e,t,!0);return r&&cy(s,r),du>0&&!a&&Sn&&(s.shapeFlag&6?Sn[Sn.indexOf(e)]=s:Sn.push(s)),s.patchFlag|=-2,s}if(CO(e)&&(e=e.__vccOpts),t){t=gO(t);let{class:s,style:l}=t;s&&!ze(s)&&(t.class=re(s)),qe(l)&&(KC(l)&&!_e(l)&&(l=Ht({},l)),t.style=ct(l))}const o=ze(e)?1:DI(e)?128:cO(e)?64:qe(e)?4:De(e)?2:0;return te(e,t,r,n,i,o,a,!0)}function gO(e){return e?KC(e)||th in e?Ht({},e):e:null}function _i(e,t,r=!1){const{props:n,ref:i,patchFlag:a,children:o}=e,s=t?ei(n||{},t):n;return{__v_isVNode:!0,__v_skip:!0,type:e.type,props:s,key:s&&ET(s),ref:t&&t.ref?r&&i?_e(i)?i.concat(Mc(t)):[i,Mc(t)]:Mc(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:o,target:e.target,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==ft?a===-1?16:a|16:a,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:e.transition,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&_i(e.ssContent),ssFallback:e.ssFallback&&_i(e.ssFallback),el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce}}function pt(e=" ",t=0){return Z(Bs,null,e,t)}function Ae(e="",t=!1){return t?(G(),ve(Mr,null,e)):Z(Mr,null,e)}function Hn(e){return e==null||typeof e=="boolean"?Z(Mr):_e(e)?Z(ft,null,e.slice()):typeof e=="object"?qi(e):Z(Bs,null,String(e))}function qi(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:_i(e)}function cy(e,t){let r=0;const{shapeFlag:n}=e;if(t==null)t=null;else if(_e(t))r=16;else if(typeof t=="object")if(n&65){const i=t.default;i&&(i._c&&(i._d=!1),cy(e,i()),i._c&&(i._d=!0));return}else{r=32;const i=t._;!i&&!(th in t)?t._ctx=Wt:i===3&&Wt&&(Wt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else De(t)?(t={default:t,_ctx:Wt},r=32):(t=String(t),n&64?(r=16,t=[pt(t)]):r=8);e.children=t,e.shapeFlag|=r}function ei(...e){const t={};for(let r=0;rQt||Wt;let ad,jp;{const e=DC(),t=(r,n)=>{let i;return(i=e[r])||(i=e[r]=[]),i.push(n),a=>{i.length>1?i.forEach(o=>o(a)):i[0](a)}};ad=t("__VUE_INSTANCE_SETTERS__",r=>Qt=r),jp=t("__VUE_SSR_SETTERS__",r=>rh=r)}const Yu=e=>{const t=Qt;return ad(e),e.scope.on(),()=>{e.scope.off(),ad(t)}},I_=()=>{Qt&&Qt.scope.off(),ad(null)};function LT(e){return e.vnode.shapeFlag&4}let rh=!1;function bO(e,t=!1){t&&jp(t);const{props:r,children:n}=e.vnode,i=LT(e);rO(e,r,i,t),aO(e,n);const a=i?wO(e,t):void 0;return t&&jp(!1),a}function wO(e,t){const r=e.type;e.accessCache=Object.create(null),e.proxy=XC(new Proxy(e.ctx,jI));const{setup:n}=r;if(n){const i=e.setupContext=n.length>1?IT(e):null,a=Yu(e);Co();const o=ra(n,e,0,[e.props,i]);if(To(),a(),Qc(o)){if(o.then(I_,I_),t)return o.then(s=>{O_(e,s,t)}).catch(s=>{Xd(s,e,0)});e.asyncDep=o}else O_(e,o,t)}else DT(e,t)}function O_(e,t,r){De(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:qe(t)&&(e.setupState=tT(t)),DT(e,r)}let R_;function DT(e,t,r){const n=e.type;if(!e.render){if(!t&&R_&&!n.render){const i=n.template||ly(e).template;if(i){const{isCustomElement:a,compilerOptions:o}=e.appContext.config,{delimiters:s,compilerOptions:l}=n,u=Ht(Ht({isCustomElement:a,delimiters:s},o),l);n.render=R_(i,u)}}e.render=n.render||Ft}{const i=Yu(e);Co();try{KI(e)}finally{To(),i()}}}function SO(e){return e.attrsProxy||(e.attrsProxy=new Proxy(e.attrs,{get(t,r){return Lr(e,"get","$attrs"),t[r]}}))}function IT(e){const t=r=>{e.exposed=r||{}};return{get attrs(){return SO(e)},slots:e.slots,emit:e.emit,expose:t}}function nh(e){if(e.exposed)return e.exposeProxy||(e.exposeProxy=new Proxy(tT(XC(e.exposed)),{get(t,r){if(r in t)return t[r];if(r in Ol)return Ol[r](e)},has(t,r){return r in t||r in Ol}}))}function xO(e,t=!0){return De(e)?e.displayName||e.name:e.name||t&&e.__name}function CO(e){return De(e)&&"__vccOpts"in e}const k=(e,t)=>QC(e,t,rh);function Te(e,t,r){const n=arguments.length;return n===2?qe(t)&&!_e(t)?la(t)?Z(e,null,[t]):Z(e,t):Z(e,null,t):(n>3?r=Array.prototype.slice.call(arguments,2):n===3&&la(r)&&(r=[r]),Z(e,t,r))}const TO="3.4.15",MO=Ft;/** * @vue/runtime-dom v3.4.15 * (c) 2018-present Yuxi (Evan) You and Vue contributors * @license MIT -**/const AO="http://www.w3.org/2000/svg",PO="http://www.w3.org/1998/Math/MathML",Ki=typeof document<"u"?document:null,k_=Ki&&Ki.createElement("template"),EO={insert:(e,t,r)=>{t.insertBefore(e,r||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,r,n)=>{const i=t==="svg"?Ki.createElementNS(AO,e):t==="mathml"?Ki.createElementNS(PO,e):Ki.createElement(e,r?{is:r}:void 0);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>Ki.createTextNode(e),createComment:e=>Ki.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ki.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,r,n,i,a){const o=r?r.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),r),!(i===a||!(i=i.nextSibling)););else{k_.innerHTML=n==="svg"?`${e}`:n==="mathml"?`${e}`:e;const s=k_.content;if(n==="svg"||n==="mathml"){const l=s.firstChild;for(;l.firstChild;)s.appendChild(l.firstChild);s.removeChild(l)}t.insertBefore(s,r)}return[o?o.nextSibling:t.firstChild,r?r.previousSibling:t.lastChild]}},Ii="transition",Xs="animation",vs=Symbol("_vtc"),ti=(e,{slots:t})=>Te(BI,RT(e),t);ti.displayName="Transition";const OT={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},LO=ti.props=$t({},hT,OT),_a=(e,t=[])=>{_e(e)?e.forEach(r=>r(...t)):e&&e(...t)},N_=e=>e?_e(e)?e.some(t=>t.length>1):e.length>1:!1;function RT(e){const t={};for(const E in e)E in OT||(t[E]=e[E]);if(e.css===!1)return t;const{name:r="v",type:n,duration:i,enterFromClass:a=`${r}-enter-from`,enterActiveClass:o=`${r}-enter-active`,enterToClass:s=`${r}-enter-to`,appearFromClass:l=a,appearActiveClass:u=o,appearToClass:f=s,leaveFromClass:c=`${r}-leave-from`,leaveActiveClass:h=`${r}-leave-active`,leaveToClass:d=`${r}-leave-to`}=e,v=DO(i),p=v&&v[0],m=v&&v[1],{onBeforeEnter:g,onEnter:y,onEnterCancelled:_,onLeave:b,onLeaveCancelled:x,onBeforeAppear:w=g,onAppear:S=y,onAppearCancelled:C=_}=t,M=(E,L,O)=>{zi(E,L?f:s),zi(E,L?u:o),O&&O()},A=(E,L)=>{E._isLeaving=!1,zi(E,c),zi(E,d),zi(E,h),L&&L()},P=E=>(L,O)=>{const N=E?S:y,H=()=>M(L,E,O);_a(N,[L,H]),B_(()=>{zi(L,E?l:a),ci(L,E?f:s),N_(N)||F_(L,n,p,H)})};return $t(t,{onBeforeEnter(E){_a(g,[E]),ci(E,a),ci(E,o)},onBeforeAppear(E){_a(w,[E]),ci(E,l),ci(E,u)},onEnter:P(!1),onAppear:P(!0),onLeave(E,L){E._isLeaving=!0;const O=()=>A(E,L);ci(E,c),NT(),ci(E,h),B_(()=>{E._isLeaving&&(zi(E,c),ci(E,d),N_(b)||F_(E,n,m,O))}),_a(b,[E,O])},onEnterCancelled(E){M(E,!1),_a(_,[E])},onAppearCancelled(E){M(E,!0),_a(C,[E])},onLeaveCancelled(E){A(E),_a(x,[E])}})}function DO(e){if(e==null)return null;if(qe(e))return[Kh(e.enter),Kh(e.leave)];{const t=Kh(e);return[t,t]}}function Kh(e){return HD(e)}function ci(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.add(r)),(e[vs]||(e[vs]=new Set)).add(t)}function zi(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const r=e[vs];r&&(r.delete(t),r.size||(e[vs]=void 0))}function B_(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let IO=0;function F_(e,t,r,n){const i=e._endId=++IO,a=()=>{i===e._endId&&n()};if(r)return setTimeout(a,r);const{type:o,timeout:s,propCount:l}=kT(e,t);if(!o)return n();const u=o+"end";let f=0;const c=()=>{e.removeEventListener(u,h),a()},h=d=>{d.target===e&&++f>=l&&c()};setTimeout(()=>{f(r[v]||"").split(", "),i=n(`${Ii}Delay`),a=n(`${Ii}Duration`),o=$_(i,a),s=n(`${Xs}Delay`),l=n(`${Xs}Duration`),u=$_(s,l);let f=null,c=0,h=0;t===Ii?o>0&&(f=Ii,c=o,h=a.length):t===Xs?u>0&&(f=Xs,c=u,h=l.length):(c=Math.max(o,u),f=c>0?o>u?Ii:Xs:null,h=f?f===Ii?a.length:l.length:0);const d=f===Ii&&/\b(transform|all)(,|$)/.test(n(`${Ii}Property`).toString());return{type:f,timeout:c,propCount:h,hasTransform:d}}function $_(e,t){for(;e.lengthH_(r)+H_(e[n])))}function H_(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function NT(){return document.body.offsetHeight}function OO(e,t,r){const n=e[vs];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):r?e.setAttribute("class",t):e.className=t}const dy=Symbol("_vod"),Kn={beforeMount(e,{value:t},{transition:r}){e[dy]=e.style.display==="none"?"":e.style.display,r&&t?r.beforeEnter(e):Zs(e,t)},mounted(e,{value:t},{transition:r}){r&&t&&r.enter(e)},updated(e,{value:t,oldValue:r},{transition:n}){!t!=!r&&(n?t?(n.beforeEnter(e),Zs(e,!0),n.enter(e)):n.leave(e,()=>{Zs(e,!1)}):Zs(e,t))},beforeUnmount(e,{value:t}){Zs(e,t)}};function Zs(e,t){e.style.display=t?e[dy]:"none"}const RO=Symbol("");function kO(e,t,r){const n=e.style,i=n.display,a=ze(r);if(r&&!a){if(t&&!ze(t))for(const o in t)r[o]==null&&qp(n,o,"");for(const o in r)qp(n,o,r[o])}else if(a){if(t!==r){const o=n[RO];o&&(r+=";"+o),n.cssText=r}}else t&&e.removeAttribute("style");dy in e&&(n.display=i)}const z_=/\s*!important$/;function qp(e,t,r){if(_e(r))r.forEach(n=>qp(e,t,n));else if(r==null&&(r=""),t.startsWith("--"))e.setProperty(t,r);else{const n=NO(e,t);z_.test(r)?e.setProperty(xo(n),r.replace(z_,""),"important"):e[n]=r}}const V_=["Webkit","Moz","ms"],Xh={};function NO(e,t){const r=Xh[t];if(r)return r;let n=Pn(t);if(n!=="filter"&&n in e)return Xh[t]=n;n=Yd(n);for(let i=0;iZh||(VO.then(()=>Zh=0),Zh=Date.now());function GO(e,t){const r=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=r.attached)return;sn(UO(n,r.value),t,5,[n])};return r.value=e,r.attached=WO(),r}function UO(e,t){if(_e(t)){const r=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{r.call(e),e._stopped=!0},t.map(n=>i=>!i._stopped&&n&&n(i))}else return t}const Y_=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,YO=(e,t,r,n,i,a,o,s,l)=>{const u=i==="svg";t==="class"?OO(e,n,u):t==="style"?kO(e,r,n):Wd(t)?Gm(t)||HO(e,t,r,n,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):jO(e,t,n,u))?FO(e,t,n,a,o,s,l):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),BO(e,t,n,u))};function jO(e,t,r,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Y_(t)&&De(r));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return Y_(t)&&ze(r)?!1:t in e}const FT=new WeakMap,$T=new WeakMap,od=Symbol("_moveCb"),j_=Symbol("_enterCb"),HT={name:"TransitionGroup",props:$t({},LO,{tag:String,moveClass:String}),setup(e,{slots:t}){const r=it(),n=dT();let i,a;return Uu(()=>{if(!i.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!JO(i[0].el,r.vnode.el,o))return;i.forEach(XO),i.forEach(ZO);const s=i.filter(QO);NT(),s.forEach(l=>{const u=l.el,f=u.style;ci(u,o),f.transform=f.webkitTransform=f.transitionDuration="";const c=u[od]=h=>{h&&h.target!==u||(!h||/transform$/.test(h.propertyName))&&(u.removeEventListener("transitionend",c),u[od]=null,zi(u,o))};u.addEventListener("transitionend",c)})}),()=>{const o=Qe(e),s=RT(o);let l=o.tag||ft;i=a,a=t.default?sy(t.default()):[];for(let u=0;udelete e.mode;HT.props;const KO=HT;function XO(e){const t=e.el;t[od]&&t[od](),t[j_]&&t[j_]()}function ZO(e){$T.set(e,e.el.getBoundingClientRect())}function QO(e){const t=FT.get(e),r=$T.get(e),n=t.left-r.left,i=t.top-r.top;if(n||i){const a=e.el.style;return a.transform=a.webkitTransform=`translate(${n}px,${i}px)`,a.transitionDuration="0s",e}}function JO(e,t,r){const n=e.cloneNode(),i=e[vs];i&&i.forEach(s=>{s.split(/\s+/).forEach(l=>l&&n.classList.remove(l))}),r.split(/\s+/).forEach(s=>s&&n.classList.add(s)),n.style.display="none";const a=t.nodeType===1?t:t.parentNode;a.appendChild(n);const{hasTransform:o}=kT(n);return a.removeChild(n),o}const q_=e=>{const t=e.props["onUpdate:modelValue"]||!1;return _e(t)?r=>Cc(t,r):t},Qh=Symbol("_assign"),sd={deep:!0,created(e,t,r){e[Qh]=q_(r),BT(e,"change",()=>{const n=e._modelValue,i=eR(e),a=e.checked,o=e[Qh];if(_e(n)){const s=OC(n,i),l=s!==-1;if(a&&!l)o(n.concat(i));else if(!a&&l){const u=[...n];u.splice(s,1),o(u)}}else if(Gd(n)){const s=new Set(n);a?s.add(i):s.delete(i),o(s)}else o(zT(e,a))})},mounted:K_,beforeUpdate(e,t,r){e[Qh]=q_(r),K_(e,t,r)}};function K_(e,{value:t,oldValue:r},n){e._modelValue=t,_e(t)?e.checked=OC(t,n.props.value)>-1:Gd(t)?e.checked=t.has(n.props.value):t!==r&&(e.checked=jd(t,zT(e,!0)))}function eR(e){return"_value"in e?e._value:e.value}function zT(e,t){const r=t?"_trueValue":"_falseValue";return r in e?e[r]:t}const tR=["ctrl","shift","alt","meta"],rR={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>tR.some(r=>e[`${r}Key`]&&!t.includes(r))},ua=(e,t)=>{const r=e._withMods||(e._withMods={}),n=t.join(".");return r[n]||(r[n]=(i,...a)=>{for(let o=0;o{const r=e._withKeys||(e._withKeys={}),n=t.join(".");return r[n]||(r[n]=i=>{if(!("key"in i))return;const a=xo(i.key);if(t.some(o=>o===a||nR[o]===a))return e(i)})},aR=$t({patchProp:YO},EO);let X_;function VT(){return X_||(X_=sO(aR))}const ld=(...e)=>{VT().render(...e)},oR=(...e)=>{const t=VT().createApp(...e),{mount:r}=t;return t.mount=n=>{const i=lR(n);if(!i)return;const a=t._component;!De(a)&&!a.render&&!a.template&&(a.template=i.innerHTML),i.innerHTML="";const o=r(i,!1,sR(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),o},t};function sR(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function lR(e){return ze(e)?document.querySelector(e):e}const Ac=function(e,t,...r){let n;t.includes("mouse")||t.includes("click")?n="MouseEvents":t.includes("key")?n="KeyboardEvent":n="HTMLEvents";const i=document.createEvent(n);return i.initEvent(t,...r),e.dispatchEvent(i),e},di=(e,t,{checkForDefaultPrevented:r=!0}={})=>i=>{const a=e==null?void 0:e(i);if(r===!1||!a)return t==null?void 0:t(i)};var Z_;const At=typeof window<"u",uR=e=>typeof e=="function",fR=e=>typeof e=="string",Kp=()=>{};At&&((Z_=window==null?void 0:window.navigator)!=null&&Z_.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function po(e){return typeof e=="function"?e():T(e)}function WT(e,t){function r(...n){return new Promise((i,a)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(i).catch(a)})}return r}const GT=e=>e();function cR(e,t={}){let r,n,i=Kp;const a=s=>{clearTimeout(s),i(),i=Kp};return s=>{const l=po(e),u=po(t.maxWait);return r&&a(r),l<=0||u!==void 0&&u<=0?(n&&(a(n),n=null),Promise.resolve(s())):new Promise((f,c)=>{i=t.rejectOnCancel?c:f,u&&!n&&(n=setTimeout(()=>{r&&a(r),n=null,f(s())},u)),r=setTimeout(()=>{n&&a(n),n=null,f(s())},l)})}}function dR(e=GT){const t=$(!0);function r(){t.value=!1}function n(){t.value=!0}const i=(...a)=>{t.value&&e(...a)};return{isActive:Gu(t),pause:r,resume:n,eventFilter:i}}function hR(e){return e}function ju(e){return kC()?(NC(e),!0):!1}function vR(e,t=200,r={}){return WT(cR(t,r),e)}function pR(e,t=200,r={}){const n=$(e.value),i=vR(()=>{n.value=e.value},t,r);return we(e,()=>i()),n}function gR(e){return typeof e=="function"?k(e):$(e)}function UT(e,t=!0){it()?_t(e):t?e():kt(e)}function hu(e,t,r={}){const{immediate:n=!0}=r,i=$(!1);let a=null;function o(){a&&(clearTimeout(a),a=null)}function s(){i.value=!1,o()}function l(...u){o(),i.value=!0,a=setTimeout(()=>{i.value=!1,a=null,e(...u)},po(t))}return n&&(i.value=!0,At&&l()),ju(s),{isPending:Gu(i),start:l,stop:s}}function mR(e=!1,t={}){const{truthyValue:r=!0,falsyValue:n=!1}=t,i=Pt(e),a=$(e);function o(s){if(arguments.length)return a.value=s,a.value;{const l=po(r);return a.value=a.value===l?po(n):l,a.value}}return i?o:[a,o]}var Q_=Object.getOwnPropertySymbols,yR=Object.prototype.hasOwnProperty,_R=Object.prototype.propertyIsEnumerable,bR=(e,t)=>{var r={};for(var n in e)yR.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Q_)for(var n of Q_(e))t.indexOf(n)<0&&_R.call(e,n)&&(r[n]=e[n]);return r};function wR(e,t,r={}){const n=r,{eventFilter:i=GT}=n,a=bR(n,["eventFilter"]);return we(e,WT(i,t),a)}var SR=Object.defineProperty,xR=Object.defineProperties,CR=Object.getOwnPropertyDescriptors,ud=Object.getOwnPropertySymbols,YT=Object.prototype.hasOwnProperty,jT=Object.prototype.propertyIsEnumerable,J_=(e,t,r)=>t in e?SR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,TR=(e,t)=>{for(var r in t||(t={}))YT.call(t,r)&&J_(e,r,t[r]);if(ud)for(var r of ud(t))jT.call(t,r)&&J_(e,r,t[r]);return e},MR=(e,t)=>xR(e,CR(t)),AR=(e,t)=>{var r={};for(var n in e)YT.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ud)for(var n of ud(e))t.indexOf(n)<0&&jT.call(e,n)&&(r[n]=e[n]);return r};function PR(e,t,r={}){const n=r,{eventFilter:i}=n,a=AR(n,["eventFilter"]),{eventFilter:o,pause:s,resume:l,isActive:u}=dR(i);return{stop:wR(e,t,MR(TR({},a),{eventFilter:o})),pause:s,resume:l,isActive:u}}function Zi(e){var t;const r=po(e);return(t=r==null?void 0:r.$el)!=null?t:r}const fa=At?window:void 0;function xn(...e){let t,r,n,i;if(fR(e[0])||Array.isArray(e[0])?([r,n,i]=e,t=fa):[t,r,n,i]=e,!t)return Kp;Array.isArray(r)||(r=[r]),Array.isArray(n)||(n=[n]);const a=[],o=()=>{a.forEach(f=>f()),a.length=0},s=(f,c,h)=>(f.addEventListener(c,h,i),()=>f.removeEventListener(c,h,i)),l=we(()=>Zi(t),f=>{o(),f&&a.push(...r.flatMap(c=>n.map(h=>s(f,c,h))))},{immediate:!0,flush:"post"}),u=()=>{l(),o()};return ju(u),u}function ER(e,t,r={}){const{window:n=fa,ignore:i=[],capture:a=!0,detectIframe:o=!1}=r;if(!n)return;let s=!0,l;const u=d=>i.some(v=>{if(typeof v=="string")return Array.from(n.document.querySelectorAll(v)).some(p=>p===d.target||d.composedPath().includes(p));{const p=Zi(v);return p&&(d.target===p||d.composedPath().includes(p))}}),f=d=>{n.clearTimeout(l);const v=Zi(e);if(!(!v||v===d.target||d.composedPath().includes(v))){if(d.detail===0&&(s=!u(d)),!s){s=!0;return}t(d)}},c=[xn(n,"click",f,{passive:!0,capture:a}),xn(n,"pointerdown",d=>{const v=Zi(e);v&&(s=!d.composedPath().includes(v)&&!u(d))},{passive:!0}),xn(n,"pointerup",d=>{if(d.button===0){const v=d.composedPath();d.composedPath=()=>v,l=n.setTimeout(()=>f(d),50)}},{passive:!0}),o&&xn(n,"blur",d=>{var v;const p=Zi(e);((v=n.document.activeElement)==null?void 0:v.tagName)==="IFRAME"&&!(p!=null&&p.contains(n.document.activeElement))&&t(d)})].filter(Boolean);return()=>c.forEach(d=>d())}function qT(e,t=!1){const r=$(),n=()=>r.value=!!e();return n(),UT(n,t),r}function LR(e,t={}){const{window:r=fa}=t,n=qT(()=>r&&"matchMedia"in r&&typeof r.matchMedia=="function");let i;const a=$(!1),o=()=>{i&&("removeEventListener"in i?i.removeEventListener("change",s):i.removeListener(s))},s=()=>{n.value&&(o(),i=r.matchMedia(gR(e).value),a.value=i.matches,"addEventListener"in i?i.addEventListener("change",s):i.addListener(s))};return na(s),ju(()=>o()),a}const Xp=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Zp="__vueuse_ssr_handlers__";Xp[Zp]=Xp[Zp]||{};const DR=Xp[Zp];function KT(e,t){return DR[e]||t}function IR(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}var OR=Object.defineProperty,eb=Object.getOwnPropertySymbols,RR=Object.prototype.hasOwnProperty,kR=Object.prototype.propertyIsEnumerable,tb=(e,t,r)=>t in e?OR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,rb=(e,t)=>{for(var r in t||(t={}))RR.call(t,r)&&tb(e,r,t[r]);if(eb)for(var r of eb(t))kR.call(t,r)&&tb(e,r,t[r]);return e};const NR={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function BR(e,t,r,n={}){var i;const{flush:a="pre",deep:o=!0,listenToStorageChanges:s=!0,writeDefaults:l=!0,mergeDefaults:u=!1,shallow:f,window:c=fa,eventFilter:h,onError:d=S=>{console.error(S)}}=n,v=(f?ty:$)(t);if(!r)try{r=KT("getDefaultStorage",()=>{var S;return(S=fa)==null?void 0:S.localStorage})()}catch(S){d(S)}if(!r)return v;const p=po(t),m=IR(p),g=(i=n.serializer)!=null?i:NR[m],{pause:y,resume:_}=PR(v,()=>b(v.value),{flush:a,deep:o,eventFilter:h});return c&&s&&xn(c,"storage",w),w(),v;function b(S){try{if(S==null)r.removeItem(e);else{const C=g.write(S),M=r.getItem(e);M!==C&&(r.setItem(e,C),c&&(c==null||c.dispatchEvent(new StorageEvent("storage",{key:e,oldValue:M,newValue:C,storageArea:r}))))}}catch(C){d(C)}}function x(S){const C=S?S.newValue:r.getItem(e);if(C==null)return l&&p!==null&&r.setItem(e,g.write(p)),p;if(!S&&u){const M=g.read(C);return uR(u)?u(M,p):m==="object"&&!Array.isArray(M)?rb(rb({},p),M):M}else return typeof C!="string"?C:g.read(C)}function w(S){if(!(S&&S.storageArea!==r)){if(S&&S.key==null){v.value=p;return}if(!(S&&S.key!==e)){y();try{v.value=x(S)}catch(C){d(C)}finally{S?kt(_):_()}}}}}function XT(e){return LR("(prefers-color-scheme: dark)",e)}var FR=Object.defineProperty,nb=Object.getOwnPropertySymbols,$R=Object.prototype.hasOwnProperty,HR=Object.prototype.propertyIsEnumerable,ib=(e,t,r)=>t in e?FR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,zR=(e,t)=>{for(var r in t||(t={}))$R.call(t,r)&&ib(e,r,t[r]);if(nb)for(var r of nb(t))HR.call(t,r)&&ib(e,r,t[r]);return e};function VR(e={}){const{selector:t="html",attribute:r="class",initialValue:n="auto",window:i=fa,storage:a,storageKey:o="vueuse-color-scheme",listenToStorageChanges:s=!0,storageRef:l,emitAuto:u}=e,f=zR({auto:"",light:"light",dark:"dark"},e.modes||{}),c=XT({window:i}),h=k(()=>c.value?"dark":"light"),d=l||(o==null?$(n):BR(o,n,a,{window:i,listenToStorageChanges:s})),v=k({get(){return d.value==="auto"&&!u?h.value:d.value},set(y){d.value=y}}),p=KT("updateHTMLAttrs",(y,_,b)=>{const x=i==null?void 0:i.document.querySelector(y);if(x)if(_==="class"){const w=b.split(/\s/g);Object.values(f).flatMap(S=>(S||"").split(/\s/g)).filter(Boolean).forEach(S=>{w.includes(S)?x.classList.add(S):x.classList.remove(S)})}else x.setAttribute(_,b)});function m(y){var _;const b=y==="auto"?h.value:y;p(t,r,(_=f[b])!=null?_:b)}function g(y){e.onChanged?e.onChanged(y,m):m(y)}return we(v,g,{flush:"post",immediate:!0}),u&&we(h,()=>g(v.value),{flush:"post"}),UT(()=>g(v.value)),v}var WR=Object.defineProperty,GR=Object.defineProperties,UR=Object.getOwnPropertyDescriptors,ab=Object.getOwnPropertySymbols,YR=Object.prototype.hasOwnProperty,jR=Object.prototype.propertyIsEnumerable,ob=(e,t,r)=>t in e?WR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qR=(e,t)=>{for(var r in t||(t={}))YR.call(t,r)&&ob(e,r,t[r]);if(ab)for(var r of ab(t))jR.call(t,r)&&ob(e,r,t[r]);return e},KR=(e,t)=>GR(e,UR(t));function XR(e={}){const{valueDark:t="dark",valueLight:r="",window:n=fa}=e,i=VR(KR(qR({},e),{onChanged:(s,l)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,s==="dark"):l(s)},modes:{dark:t,light:r}})),a=XT({window:n});return k({get(){return i.value==="dark"},set(s){s===a.value?i.value="auto":i.value=s?"dark":"light"}})}var sb=Object.getOwnPropertySymbols,ZR=Object.prototype.hasOwnProperty,QR=Object.prototype.propertyIsEnumerable,JR=(e,t)=>{var r={};for(var n in e)ZR.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&sb)for(var n of sb(e))t.indexOf(n)<0&&QR.call(e,n)&&(r[n]=e[n]);return r};function ps(e,t,r={}){const n=r,{window:i=fa}=n,a=JR(n,["window"]);let o;const s=qT(()=>i&&"ResizeObserver"in i),l=()=>{o&&(o.disconnect(),o=void 0)},u=we(()=>Zi(e),c=>{l(),s.value&&i&&c&&(o=new ResizeObserver(t),o.observe(c,a))},{immediate:!0,flush:"post"}),f=()=>{l(),u()};return ju(f),{isSupported:s,stop:f}}var lb;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(lb||(lb={}));var ek=Object.defineProperty,ub=Object.getOwnPropertySymbols,tk=Object.prototype.hasOwnProperty,rk=Object.prototype.propertyIsEnumerable,fb=(e,t,r)=>t in e?ek(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,nk=(e,t)=>{for(var r in t||(t={}))tk.call(t,r)&&fb(e,r,t[r]);if(ub)for(var r of ub(t))rk.call(t,r)&&fb(e,r,t[r]);return e};const ik={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};nk({linear:hR},ik);var ZT=typeof global=="object"&&global&&global.Object===Object&&global,ak=typeof self=="object"&&self&&self.Object===Object&&self,Dn=ZT||ak||Function("return this")(),fn=Dn.Symbol,QT=Object.prototype,ok=QT.hasOwnProperty,sk=QT.toString,Qs=fn?fn.toStringTag:void 0;function lk(e){var t=ok.call(e,Qs),r=e[Qs];try{e[Qs]=void 0;var n=!0}catch{}var i=sk.call(e);return n&&(t?e[Qs]=r:delete e[Qs]),i}var uk=Object.prototype,fk=uk.toString;function ck(e){return fk.call(e)}var dk="[object Null]",hk="[object Undefined]",cb=fn?fn.toStringTag:void 0;function Mo(e){return e==null?e===void 0?hk:dk:cb&&cb in Object(e)?lk(e):ck(e)}function Xn(e){return e!=null&&typeof e=="object"}var vk="[object Symbol]";function ih(e){return typeof e=="symbol"||Xn(e)&&Mo(e)==vk}function JT(e,t){for(var r=-1,n=e==null?0:e.length,i=Array(n);++r0){if(++t>=Vk)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Yk(e){return function(){return e}}var fd=function(){try{var e=Po(Object,"defineProperty");return e({},"",{}),e}catch{}}(),jk=fd?function(e,t){return fd(e,"toString",{configurable:!0,enumerable:!1,value:Yk(t),writable:!0})}:hy;const qk=jk;var rM=Uk(qk);function Kk(e,t){for(var r=-1,n=e==null?0:e.length;++r-1&&e%1==0&&e-1&&e%1==0&&e<=tN}function Ns(e){return e!=null&&my(e.length)&&!vy(e)}function rN(e,t,r){if(!Dr(r))return!1;var n=typeof t;return(n=="number"?Ns(r)&&ah(t,r.length):n=="string"&&t in r)?qu(r[t],e):!1}function nN(e){return eN(function(t,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,o=i>2?r[2]:void 0;for(a=e.length>3&&typeof a=="function"?(i--,a):void 0,o&&rN(r[0],r[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++n-1}function hB(e,t){var r=this.__data__,n=oh(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}function Pi(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t0&&r(s)?t>1?Ty(s,t-1,r,n,i):Cy(i,s):n||(i[i.length]=s)}return i}function EB(e){var t=e==null?0:e.length;return t?Ty(e,1):[]}function LB(e){return rM(nM(e,void 0,EB),e+"")}var DB=lM(Object.getPrototypeOf,Object);const My=DB;var IB="[object Object]",OB=Function.prototype,RB=Object.prototype,uM=OB.toString,kB=RB.hasOwnProperty,NB=uM.call(Object);function BB(e){if(!Xn(e)||Mo(e)!=IB)return!1;var t=My(e);if(t===null)return!0;var r=kB.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&uM.call(r)==NB}function Jp(){if(!arguments.length)return[];var e=arguments[0];return gr(e)?e:[e]}function FB(){this.__data__=new Pi,this.size=0}function $B(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}function HB(e){return this.__data__.get(e)}function zB(e){return this.__data__.has(e)}var VB=200;function WB(e,t){var r=this.__data__;if(r instanceof Pi){var n=r.__data__;if(!mu||n.lengths))return!1;var u=a.get(e),f=a.get(t);if(u&&f)return u==t&&f==e;var c=-1,h=!0,d=r&y$?new dd:void 0;for(a.set(e,t),a.set(t,e);++c=t||S<0||c&&C>=a}function g(){var w=rv();if(m(w))return y(w);s=setTimeout(g,p(w))}function y(w){return s=void 0,h&&n?d(w):(n=i=void 0,o)}function _(){s!==void 0&&clearTimeout(s),u=0,n=l=i=s=void 0}function b(){return s===void 0?o:y(rv())}function x(){var w=rv(),S=m(w);if(n=arguments,i=this,l=w,S){if(s===void 0)return v(l);if(c)return clearTimeout(s),s=setTimeout(g,t),d(l)}return s===void 0&&(s=setTimeout(g,t)),o}return x.cancel=_,x.flush=b,x}function ig(e,t,r){(r!==void 0&&!qu(e[t],r)||r===void 0&&!(t in e))&&py(e,t,r)}function u3(e){return Xn(e)&&Ns(e)}function ag(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}function f3(e){return Ku(e,Zu(e))}function c3(e,t,r,n,i,a,o){var s=ag(e,r),l=ag(t,r),u=o.get(l);if(u){ig(e,r,u);return}var f=a?a(s,l,r+"",e,t,o):void 0,c=f===void 0;if(c){var h=gr(l),d=!h&&pu(l),v=!h&&!d&&by(l);f=l,h||d||v?gr(s)?f=s:u3(s)?f=tM(s):d?(c=!1,f=cM(l,!0)):v?(c=!1,f=pM(l,!0)):f=[]:BB(l)||vu(l)?(f=s,vu(s)?f=f3(s):(!Dr(s)||vy(s))&&(f=gM(l))):c=!1}c&&(o.set(l,f),i(f,l,n,a,o),o.delete(l)),ig(e,r,f)}function TM(e,t,r,n,i){e!==t&&CM(t,function(a,o){if(i||(i=new An),Dr(a))c3(e,t,o,r,TM,n,i);else{var s=n?n(ag(e,o),a,o+"",e,t,i):void 0;s===void 0&&(s=a),ig(e,o,s)}},Zu)}function d3(e,t){var r=-1,n=Ns(e)?Array(e.length):[];return a3(e,function(i,a,o){n[++r]=t(i,a,o)}),n}function h3(e,t){var r=gr(e)?JT:d3;return r(e,t3(t))}function v3(e,t){return Ty(h3(e,t),1)}function og(e){for(var t=-1,r=e==null?0:e.length,n={};++te===void 0,zr=e=>typeof e=="boolean",Rt=e=>typeof e=="number",mo=e=>typeof Element>"u"?!1:e instanceof Element,S3=e=>ze(e)?!Number.isNaN(Number(e)):!1,Vb=e=>Object.keys(e),Ec=(e,t,r)=>({get value(){return yu(e,t,r)},set value(n){w3(e,t,n)}});class x3 extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function bi(e,t){throw new x3(`[${e}] ${t}`)}const PM=(e="")=>e.split(" ").filter(t=>!!t.trim()),oo=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Za=(e,t)=>{!e||!t.trim()||e.classList.add(...PM(t))},so=(e,t)=>{!e||!t.trim()||e.classList.remove(...PM(t))},C3=(e,t)=>{var r;if(!At||!e||!t)return"";let n=Pn(t);n==="float"&&(n="cssFloat");try{const i=e.style[n];if(i)return i;const a=(r=document.defaultView)==null?void 0:r.getComputedStyle(e,"");return a?a[n]:""}catch{return e.style[n]}};function Zn(e,t="px"){if(!e)return"";if(Rt(e)||S3(e))return`${e}${t}`;if(ze(e))return e}let xf;const T3=e=>{var t;if(!At)return 0;if(xf!==void 0)return xf;const r=document.createElement("div");r.className=`${e}-scrollbar__wrap`,r.style.visibility="hidden",r.style.width="100px",r.style.position="absolute",r.style.top="-9999px",document.body.appendChild(r);const n=r.offsetWidth;r.style.overflow="scroll";const i=document.createElement("div");i.style.width="100%",r.appendChild(i);const a=i.offsetWidth;return(t=r.parentNode)==null||t.removeChild(r),xf=n-a,xf};/*! Element Plus Icons Vue v2.3.1 */var M3=ie({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),EM=M3,A3=ie({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Ey=A3,P3=ie({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),E3=P3,L3=ie({name:"Back",__name:"back",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),ee("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),D3=L3,I3=ie({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),LM=I3,O3=ie({name:"Close",__name:"close",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),vd=O3,R3=ie({name:"InfoFilled",__name:"info-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),DM=R3,k3=ie({name:"Loading",__name:"loading",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Ly=k3,N3=ie({name:"More",__name:"more",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),B3=N3,F3=ie({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),$3=F3,H3=ie({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),IM=H3,z3=ie({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[ee("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),OM=z3;const RM="__epPropKey",Be=e=>e,V3=e=>qe(e)&&!!e[RM],fh=(e,t)=>{if(!qe(e)||V3(e))return e;const{values:r,required:n,default:i,type:a,validator:o}=e,l={type:a,required:!!n,validator:r||o?u=>{let f=!1,c=[];if(r&&(c=Array.from(r),Ue(e,"default")&&c.push(i),f||(f=c.includes(u))),o&&(f||(f=o(u))),!f&&c.length>0){const h=[...new Set(c)].map(d=>JSON.stringify(d)).join(", ");MO(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${h}], got value ${JSON.stringify(u)}.`)}return f}:void 0,[RM]:!0};return Ue(e,"default")&&(l.default=i),l},Je=e=>og(Object.entries(e).map(([t,r])=>[t,fh(r,t)])),vr=Be([String,Object,Function]),W3={Close:vd},G3={Close:vd,SuccessFilled:IM,InfoFilled:DM,WarningFilled:OM,CircleCloseFilled:LM},Wb={success:IM,warning:OM,error:LM,info:DM},Yt=(e,t)=>{if(e.install=r=>{for(const n of[e,...Object.values(t??{})])r.component(n.name,n)},t)for(const[r,n]of Object.entries(t))e[r]=n;return e},U3=(e,t)=>(e.install=r=>{e._context=r._context,r.config.globalProperties[t]=e},e),pa=e=>(e.install=Bt,e),Y3=(...e)=>t=>{e.forEach(r=>{De(r)?r(t):r.value=t})},hr={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},wi="update:modelValue",sg="change",lg="input",Bs=["","default","small","large"],j3=e=>["",...Bs].includes(e);var Lc=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Lc||{});const Dc=e=>{const t=_e(e)?e:[e],r=[];return t.forEach(n=>{var i;_e(n)?r.push(...Dc(n)):la(n)&&_e(n.children)?r.push(...Dc(n.children)):(r.push(n),la(n)&&((i=n.component)!=null&&i.subTree)&&r.push(...Dc(n.component.subTree)))}),r},q3=e=>At?window.requestAnimationFrame(e):setTimeout(e,16),ja=e=>e,bu=({from:e,replacement:t,scope:r,version:n,ref:i,type:a="API"},o)=>{we(()=>T(o),s=>{},{immediate:!0})},K3=(e,t,r)=>{let n={offsetX:0,offsetY:0};const i=s=>{const l=s.clientX,u=s.clientY,{offsetX:f,offsetY:c}=n,h=e.value.getBoundingClientRect(),d=h.left,v=h.top,p=h.width,m=h.height,g=document.documentElement.clientWidth,y=document.documentElement.clientHeight,_=-d+f,b=-v+c,x=g-d-p+f,w=y-v-m+c,S=M=>{const A=Math.min(Math.max(f+M.clientX-l,_),x),P=Math.min(Math.max(c+M.clientY-u,b),w);n={offsetX:A,offsetY:P},e.value&&(e.value.style.transform=`translate(${Zn(A)}, ${Zn(P)})`)},C=()=>{document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",C)};document.addEventListener("mousemove",S),document.addEventListener("mouseup",C)},a=()=>{t.value&&e.value&&t.value.addEventListener("mousedown",i)},o=()=>{t.value&&e.value&&t.value.removeEventListener("mousedown",i)};_t(()=>{na(()=>{r.value?a():o()})}),tr(()=>{o()})};var X3={name:"en",el:{colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"}}};const Z3=e=>(t,r)=>Q3(t,r,T(e)),Q3=(e,t,r)=>yu(r,e,e).replace(/\{(\w+)\}/g,(n,i)=>{var a;return`${(a=t==null?void 0:t[i])!=null?a:`{${i}}`}`}),J3=e=>{const t=k(()=>T(e).name),r=Pt(e)?e:$(e);return{lang:t,locale:r,t:Z3(e)}},kM=Symbol("localeContextKey"),Fs=e=>{const t=e||Le(kM,$());return J3(k(()=>t.value||X3))},Bl="el",e5="is-",ba=(e,t,r,n,i)=>{let a=`${e}-${t}`;return r&&(a+=`-${r}`),n&&(a+=`__${n}`),i&&(a+=`--${i}`),a},NM=Symbol("namespaceContextKey"),Dy=e=>{const t=e||(it()?Le(NM,$(Bl)):$(Bl));return k(()=>T(t)||Bl)},Oe=(e,t)=>{const r=Dy(t);return{namespace:r,b:(p="")=>ba(r.value,e,p,"",""),e:p=>p?ba(r.value,e,"",p,""):"",m:p=>p?ba(r.value,e,"","",p):"",be:(p,m)=>p&&m?ba(r.value,e,p,m,""):"",em:(p,m)=>p&&m?ba(r.value,e,"",p,m):"",bm:(p,m)=>p&&m?ba(r.value,e,p,"",m):"",bem:(p,m,g)=>p&&m&&g?ba(r.value,e,p,m,g):"",is:(p,...m)=>{const g=m.length>=1?m[0]:!0;return p&&g?`${e5}${p}`:""},cssVar:p=>{const m={};for(const g in p)p[g]&&(m[`--${r.value}-${g}`]=p[g]);return m},cssVarName:p=>`--${r.value}-${p}`,cssVarBlock:p=>{const m={};for(const g in p)p[g]&&(m[`--${r.value}-${e}-${g}`]=p[g]);return m},cssVarBlockName:p=>`--${r.value}-${e}-${p}`}},t5=(e,t={})=>{Pt(e)||bi("[useLockscreen]","You need to pass a ref param to this function");const r=t.ns||Oe("popup"),n=QC(()=>r.bm("parent","hidden"));if(!At||oo(document.body,n.value))return;let i=0,a=!1,o="0";const s=()=>{setTimeout(()=>{so(document==null?void 0:document.body,n.value),a&&document&&(document.body.style.width=o)},200)};we(e,l=>{if(!l){s();return}a=!oo(document.body,n.value),a&&(o=document.body.style.width),i=T3(r.namespace.value);const u=document.documentElement.clientHeight0&&(u||f==="scroll")&&a&&(document.body.style.width=`calc(100% - ${i}px)`),Za(document.body,n.value)}),NC(()=>s())},r5=fh({type:Be(Boolean),default:null}),n5=fh({type:Be(Function)}),BM=e=>{const t=`update:${e}`,r=`onUpdate:${e}`,n=[t],i={[e]:r5,[r]:n5};return{useModelToggle:({indicator:o,toggleReason:s,shouldHideWhenRouteChanges:l,shouldProceed:u,onShow:f,onHide:c})=>{const h=it(),{emit:d}=h,v=h.props,p=k(()=>De(v[r])),m=k(()=>v[e]===null),g=S=>{o.value!==!0&&(o.value=!0,s&&(s.value=S),De(f)&&f(S))},y=S=>{o.value!==!1&&(o.value=!1,s&&(s.value=S),De(c)&&c(S))},_=S=>{if(v.disabled===!0||De(u)&&!u())return;const C=p.value&&At;C&&d(t,!0),(m.value||!C)&&g(S)},b=S=>{if(v.disabled===!0||!At)return;const C=p.value&&At;C&&d(t,!1),(m.value||!C)&&y(S)},x=S=>{zr(S)&&(v.disabled&&S?p.value&&d(t,!1):o.value!==S&&(S?g():y()))},w=()=>{o.value?b():_()};return we(()=>v[e],x),l&&h.appContext.config.globalProperties.$route!==void 0&&we(()=>({...h.proxy.$route}),()=>{l.value&&o.value&&b()}),_t(()=>{x(v[e])}),{hide:b,show:_,toggle:w,hasUpdateHandler:p}},useModelToggleProps:i,useModelToggleEmits:n}};BM("modelValue");const FM=e=>{const t=it();return k(()=>{var r,n;return(n=(r=t==null?void 0:t.proxy)==null?void 0:r.$props)==null?void 0:n[e]})};var Ar="top",cn="bottom",dn="right",Pr="left",Iy="auto",Ju=[Ar,cn,dn,Pr],_s="start",wu="end",i5="clippingParents",$M="viewport",Js="popper",a5="reference",Gb=Ju.reduce(function(e,t){return e.concat([t+"-"+_s,t+"-"+wu])},[]),Oy=[].concat(Ju,[Iy]).reduce(function(e,t){return e.concat([t,t+"-"+_s,t+"-"+wu])},[]),o5="beforeRead",s5="read",l5="afterRead",u5="beforeMain",f5="main",c5="afterMain",d5="beforeWrite",h5="write",v5="afterWrite",p5=[o5,s5,l5,u5,f5,c5,d5,h5,v5];function Qn(e){return e?(e.nodeName||"").toLowerCase():null}function In(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function bs(e){var t=In(e).Element;return e instanceof t||e instanceof Element}function ln(e){var t=In(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Ry(e){if(typeof ShadowRoot>"u")return!1;var t=In(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function g5(e){var t=e.state;Object.keys(t.elements).forEach(function(r){var n=t.styles[r]||{},i=t.attributes[r]||{},a=t.elements[r];!ln(a)||!Qn(a)||(Object.assign(a.style,n),Object.keys(i).forEach(function(o){var s=i[o];s===!1?a.removeAttribute(o):a.setAttribute(o,s===!0?"":s)}))})}function m5(e){var t=e.state,r={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,r.popper),t.styles=r,t.elements.arrow&&Object.assign(t.elements.arrow.style,r.arrow),function(){Object.keys(t.elements).forEach(function(n){var i=t.elements[n],a=t.attributes[n]||{},o=Object.keys(t.styles.hasOwnProperty(n)?t.styles[n]:r[n]),s=o.reduce(function(l,u){return l[u]="",l},{});!ln(i)||!Qn(i)||(Object.assign(i.style,s),Object.keys(a).forEach(function(l){i.removeAttribute(l)}))})}}var HM={name:"applyStyles",enabled:!0,phase:"write",fn:g5,effect:m5,requires:["computeStyles"]};function jn(e){return e.split("-")[0]}var lo=Math.max,pd=Math.min,ws=Math.round;function Ss(e,t){t===void 0&&(t=!1);var r=e.getBoundingClientRect(),n=1,i=1;if(ln(e)&&t){var a=e.offsetHeight,o=e.offsetWidth;o>0&&(n=ws(r.width)/o||1),a>0&&(i=ws(r.height)/a||1)}return{width:r.width/n,height:r.height/i,top:r.top/i,right:r.right/n,bottom:r.bottom/i,left:r.left/n,x:r.left/n,y:r.top/i}}function ky(e){var t=Ss(e),r=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-r)<=1&&(r=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:r,height:n}}function zM(e,t){var r=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(r&&Ry(r)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Si(e){return In(e).getComputedStyle(e)}function y5(e){return["table","td","th"].indexOf(Qn(e))>=0}function ga(e){return((bs(e)?e.ownerDocument:e.document)||window.document).documentElement}function ch(e){return Qn(e)==="html"?e:e.assignedSlot||e.parentNode||(Ry(e)?e.host:null)||ga(e)}function Ub(e){return!ln(e)||Si(e).position==="fixed"?null:e.offsetParent}function _5(e){var t=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,r=navigator.userAgent.indexOf("Trident")!==-1;if(r&&ln(e)){var n=Si(e);if(n.position==="fixed")return null}var i=ch(e);for(Ry(i)&&(i=i.host);ln(i)&&["html","body"].indexOf(Qn(i))<0;){var a=Si(i);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||t&&a.willChange==="filter"||t&&a.filter&&a.filter!=="none")return i;i=i.parentNode}return null}function ef(e){for(var t=In(e),r=Ub(e);r&&y5(r)&&Si(r).position==="static";)r=Ub(r);return r&&(Qn(r)==="html"||Qn(r)==="body"&&Si(r).position==="static")?t:r||_5(e)||t}function Ny(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Fl(e,t,r){return lo(e,pd(t,r))}function b5(e,t,r){var n=Fl(e,t,r);return n>r?r:n}function VM(){return{top:0,right:0,bottom:0,left:0}}function WM(e){return Object.assign({},VM(),e)}function GM(e,t){return t.reduce(function(r,n){return r[n]=e,r},{})}var w5=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,WM(typeof e!="number"?e:GM(e,Ju))};function S5(e){var t,r=e.state,n=e.name,i=e.options,a=r.elements.arrow,o=r.modifiersData.popperOffsets,s=jn(r.placement),l=Ny(s),u=[Pr,dn].indexOf(s)>=0,f=u?"height":"width";if(!(!a||!o)){var c=w5(i.padding,r),h=ky(a),d=l==="y"?Ar:Pr,v=l==="y"?cn:dn,p=r.rects.reference[f]+r.rects.reference[l]-o[l]-r.rects.popper[f],m=o[l]-r.rects.reference[l],g=ef(a),y=g?l==="y"?g.clientHeight||0:g.clientWidth||0:0,_=p/2-m/2,b=c[d],x=y-h[f]-c[v],w=y/2-h[f]/2+_,S=Fl(b,w,x),C=l;r.modifiersData[n]=(t={},t[C]=S,t.centerOffset=S-w,t)}}function x5(e){var t=e.state,r=e.options,n=r.element,i=n===void 0?"[data-popper-arrow]":n;i!=null&&(typeof i=="string"&&(i=t.elements.popper.querySelector(i),!i)||!zM(t.elements.popper,i)||(t.elements.arrow=i))}var C5={name:"arrow",enabled:!0,phase:"main",fn:S5,effect:x5,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function xs(e){return e.split("-")[1]}var T5={top:"auto",right:"auto",bottom:"auto",left:"auto"};function M5(e){var t=e.x,r=e.y,n=window,i=n.devicePixelRatio||1;return{x:ws(t*i)/i||0,y:ws(r*i)/i||0}}function Yb(e){var t,r=e.popper,n=e.popperRect,i=e.placement,a=e.variation,o=e.offsets,s=e.position,l=e.gpuAcceleration,u=e.adaptive,f=e.roundOffsets,c=e.isFixed,h=o.x,d=h===void 0?0:h,v=o.y,p=v===void 0?0:v,m=typeof f=="function"?f({x:d,y:p}):{x:d,y:p};d=m.x,p=m.y;var g=o.hasOwnProperty("x"),y=o.hasOwnProperty("y"),_=Pr,b=Ar,x=window;if(u){var w=ef(r),S="clientHeight",C="clientWidth";if(w===In(r)&&(w=ga(r),Si(w).position!=="static"&&s==="absolute"&&(S="scrollHeight",C="scrollWidth")),w=w,i===Ar||(i===Pr||i===dn)&&a===wu){b=cn;var M=c&&w===x&&x.visualViewport?x.visualViewport.height:w[S];p-=M-n.height,p*=l?1:-1}if(i===Pr||(i===Ar||i===cn)&&a===wu){_=dn;var A=c&&w===x&&x.visualViewport?x.visualViewport.width:w[C];d-=A-n.width,d*=l?1:-1}}var P=Object.assign({position:s},u&&T5),E=f===!0?M5({x:d,y:p}):{x:d,y:p};if(d=E.x,p=E.y,l){var L;return Object.assign({},P,(L={},L[b]=y?"0":"",L[_]=g?"0":"",L.transform=(x.devicePixelRatio||1)<=1?"translate("+d+"px, "+p+"px)":"translate3d("+d+"px, "+p+"px, 0)",L))}return Object.assign({},P,(t={},t[b]=y?p+"px":"",t[_]=g?d+"px":"",t.transform="",t))}function A5(e){var t=e.state,r=e.options,n=r.gpuAcceleration,i=n===void 0?!0:n,a=r.adaptive,o=a===void 0?!0:a,s=r.roundOffsets,l=s===void 0?!0:s,u={placement:jn(t.placement),variation:xs(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Yb(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Yb(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var UM={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:A5,data:{}},Cf={passive:!0};function P5(e){var t=e.state,r=e.instance,n=e.options,i=n.scroll,a=i===void 0?!0:i,o=n.resize,s=o===void 0?!0:o,l=In(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&u.forEach(function(f){f.addEventListener("scroll",r.update,Cf)}),s&&l.addEventListener("resize",r.update,Cf),function(){a&&u.forEach(function(f){f.removeEventListener("scroll",r.update,Cf)}),s&&l.removeEventListener("resize",r.update,Cf)}}var YM={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:P5,data:{}},E5={left:"right",right:"left",bottom:"top",top:"bottom"};function Ic(e){return e.replace(/left|right|bottom|top/g,function(t){return E5[t]})}var L5={start:"end",end:"start"};function jb(e){return e.replace(/start|end/g,function(t){return L5[t]})}function By(e){var t=In(e),r=t.pageXOffset,n=t.pageYOffset;return{scrollLeft:r,scrollTop:n}}function Fy(e){return Ss(ga(e)).left+By(e).scrollLeft}function D5(e){var t=In(e),r=ga(e),n=t.visualViewport,i=r.clientWidth,a=r.clientHeight,o=0,s=0;return n&&(i=n.width,a=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(o=n.offsetLeft,s=n.offsetTop)),{width:i,height:a,x:o+Fy(e),y:s}}function I5(e){var t,r=ga(e),n=By(e),i=(t=e.ownerDocument)==null?void 0:t.body,a=lo(r.scrollWidth,r.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),o=lo(r.scrollHeight,r.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-n.scrollLeft+Fy(e),l=-n.scrollTop;return Si(i||r).direction==="rtl"&&(s+=lo(r.clientWidth,i?i.clientWidth:0)-a),{width:a,height:o,x:s,y:l}}function $y(e){var t=Si(e),r=t.overflow,n=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+n)}function jM(e){return["html","body","#document"].indexOf(Qn(e))>=0?e.ownerDocument.body:ln(e)&&$y(e)?e:jM(ch(e))}function $l(e,t){var r;t===void 0&&(t=[]);var n=jM(e),i=n===((r=e.ownerDocument)==null?void 0:r.body),a=In(n),o=i?[a].concat(a.visualViewport||[],$y(n)?n:[]):n,s=t.concat(o);return i?s:s.concat($l(ch(o)))}function ug(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function O5(e){var t=Ss(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}function qb(e,t){return t===$M?ug(D5(e)):bs(t)?O5(t):ug(I5(ga(e)))}function R5(e){var t=$l(ch(e)),r=["absolute","fixed"].indexOf(Si(e).position)>=0,n=r&&ln(e)?ef(e):e;return bs(n)?t.filter(function(i){return bs(i)&&zM(i,n)&&Qn(i)!=="body"}):[]}function k5(e,t,r){var n=t==="clippingParents"?R5(e):[].concat(t),i=[].concat(n,[r]),a=i[0],o=i.reduce(function(s,l){var u=qb(e,l);return s.top=lo(u.top,s.top),s.right=pd(u.right,s.right),s.bottom=pd(u.bottom,s.bottom),s.left=lo(u.left,s.left),s},qb(e,a));return o.width=o.right-o.left,o.height=o.bottom-o.top,o.x=o.left,o.y=o.top,o}function qM(e){var t=e.reference,r=e.element,n=e.placement,i=n?jn(n):null,a=n?xs(n):null,o=t.x+t.width/2-r.width/2,s=t.y+t.height/2-r.height/2,l;switch(i){case Ar:l={x:o,y:t.y-r.height};break;case cn:l={x:o,y:t.y+t.height};break;case dn:l={x:t.x+t.width,y:s};break;case Pr:l={x:t.x-r.width,y:s};break;default:l={x:t.x,y:t.y}}var u=i?Ny(i):null;if(u!=null){var f=u==="y"?"height":"width";switch(a){case _s:l[u]=l[u]-(t[f]/2-r[f]/2);break;case wu:l[u]=l[u]+(t[f]/2-r[f]/2);break}}return l}function Su(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=n===void 0?e.placement:n,a=r.boundary,o=a===void 0?i5:a,s=r.rootBoundary,l=s===void 0?$M:s,u=r.elementContext,f=u===void 0?Js:u,c=r.altBoundary,h=c===void 0?!1:c,d=r.padding,v=d===void 0?0:d,p=WM(typeof v!="number"?v:GM(v,Ju)),m=f===Js?a5:Js,g=e.rects.popper,y=e.elements[h?m:f],_=k5(bs(y)?y:y.contextElement||ga(e.elements.popper),o,l),b=Ss(e.elements.reference),x=qM({reference:b,element:g,strategy:"absolute",placement:i}),w=ug(Object.assign({},g,x)),S=f===Js?w:b,C={top:_.top-S.top+p.top,bottom:S.bottom-_.bottom+p.bottom,left:_.left-S.left+p.left,right:S.right-_.right+p.right},M=e.modifiersData.offset;if(f===Js&&M){var A=M[i];Object.keys(C).forEach(function(P){var E=[dn,cn].indexOf(P)>=0?1:-1,L=[Ar,cn].indexOf(P)>=0?"y":"x";C[P]+=A[L]*E})}return C}function N5(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=r.boundary,a=r.rootBoundary,o=r.padding,s=r.flipVariations,l=r.allowedAutoPlacements,u=l===void 0?Oy:l,f=xs(n),c=f?s?Gb:Gb.filter(function(v){return xs(v)===f}):Ju,h=c.filter(function(v){return u.indexOf(v)>=0});h.length===0&&(h=c);var d=h.reduce(function(v,p){return v[p]=Su(e,{placement:p,boundary:i,rootBoundary:a,padding:o})[jn(p)],v},{});return Object.keys(d).sort(function(v,p){return d[v]-d[p]})}function B5(e){if(jn(e)===Iy)return[];var t=Ic(e);return[jb(e),t,jb(t)]}function F5(e){var t=e.state,r=e.options,n=e.name;if(!t.modifiersData[n]._skip){for(var i=r.mainAxis,a=i===void 0?!0:i,o=r.altAxis,s=o===void 0?!0:o,l=r.fallbackPlacements,u=r.padding,f=r.boundary,c=r.rootBoundary,h=r.altBoundary,d=r.flipVariations,v=d===void 0?!0:d,p=r.allowedAutoPlacements,m=t.options.placement,g=jn(m),y=g===m,_=l||(y||!v?[Ic(m)]:B5(m)),b=[m].concat(_).reduce(function(Se,$e){return Se.concat(jn($e)===Iy?N5(t,{placement:$e,boundary:f,rootBoundary:c,padding:u,flipVariations:v,allowedAutoPlacements:p}):$e)},[]),x=t.rects.reference,w=t.rects.popper,S=new Map,C=!0,M=b[0],A=0;A=0,N=O?"width":"height",H=Su(t,{placement:P,boundary:f,rootBoundary:c,altBoundary:h,padding:u}),V=O?L?dn:Pr:L?cn:Ar;x[N]>w[N]&&(V=Ic(V));var U=Ic(V),F=[];if(a&&F.push(H[E]<=0),s&&F.push(H[V]<=0,H[U]<=0),F.every(function(Se){return Se})){M=P,C=!1;break}S.set(P,F)}if(C)for(var z=v?3:1,te=function(Se){var $e=b.find(function(Ie){var B=S.get(Ie);if(B)return B.slice(0,Se).every(function(Y){return Y})});if($e)return M=$e,"break"},J=z;J>0;J--){var me=te(J);if(me==="break")break}t.placement!==M&&(t.modifiersData[n]._skip=!0,t.placement=M,t.reset=!0)}}var $5={name:"flip",enabled:!0,phase:"main",fn:F5,requiresIfExists:["offset"],data:{_skip:!1}};function Kb(e,t,r){return r===void 0&&(r={x:0,y:0}),{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function Xb(e){return[Ar,dn,cn,Pr].some(function(t){return e[t]>=0})}function H5(e){var t=e.state,r=e.name,n=t.rects.reference,i=t.rects.popper,a=t.modifiersData.preventOverflow,o=Su(t,{elementContext:"reference"}),s=Su(t,{altBoundary:!0}),l=Kb(o,n),u=Kb(s,i,a),f=Xb(l),c=Xb(u);t.modifiersData[r]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:f,hasPopperEscaped:c},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":f,"data-popper-escaped":c})}var z5={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:H5};function V5(e,t,r){var n=jn(e),i=[Pr,Ar].indexOf(n)>=0?-1:1,a=typeof r=="function"?r(Object.assign({},t,{placement:e})):r,o=a[0],s=a[1];return o=o||0,s=(s||0)*i,[Pr,dn].indexOf(n)>=0?{x:s,y:o}:{x:o,y:s}}function W5(e){var t=e.state,r=e.options,n=e.name,i=r.offset,a=i===void 0?[0,0]:i,o=Oy.reduce(function(f,c){return f[c]=V5(c,t.rects,a),f},{}),s=o[t.placement],l=s.x,u=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[n]=o}var G5={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:W5};function U5(e){var t=e.state,r=e.name;t.modifiersData[r]=qM({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}var KM={name:"popperOffsets",enabled:!0,phase:"read",fn:U5,data:{}};function Y5(e){return e==="x"?"y":"x"}function j5(e){var t=e.state,r=e.options,n=e.name,i=r.mainAxis,a=i===void 0?!0:i,o=r.altAxis,s=o===void 0?!1:o,l=r.boundary,u=r.rootBoundary,f=r.altBoundary,c=r.padding,h=r.tether,d=h===void 0?!0:h,v=r.tetherOffset,p=v===void 0?0:v,m=Su(t,{boundary:l,rootBoundary:u,padding:c,altBoundary:f}),g=jn(t.placement),y=xs(t.placement),_=!y,b=Ny(g),x=Y5(b),w=t.modifiersData.popperOffsets,S=t.rects.reference,C=t.rects.popper,M=typeof p=="function"?p(Object.assign({},t.rects,{placement:t.placement})):p,A=typeof M=="number"?{mainAxis:M,altAxis:M}:Object.assign({mainAxis:0,altAxis:0},M),P=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,E={x:0,y:0};if(w){if(a){var L,O=b==="y"?Ar:Pr,N=b==="y"?cn:dn,H=b==="y"?"height":"width",V=w[b],U=V+m[O],F=V-m[N],z=d?-C[H]/2:0,te=y===_s?S[H]:C[H],J=y===_s?-C[H]:-S[H],me=t.elements.arrow,Se=d&&me?ky(me):{width:0,height:0},$e=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:VM(),Ie=$e[O],B=$e[N],Y=Fl(0,S[H],Se[H]),K=_?S[H]/2-z-Y-Ie-A.mainAxis:te-Y-Ie-A.mainAxis,Q=_?-S[H]/2+z+Y+B+A.mainAxis:J+Y+B+A.mainAxis,oe=t.elements.arrow&&ef(t.elements.arrow),pe=oe?b==="y"?oe.clientTop||0:oe.clientLeft||0:0,D=(L=P==null?void 0:P[b])!=null?L:0,I=V+K-D-pe,W=V+Q-D,X=Fl(d?pd(U,I):U,V,d?lo(F,W):F);w[b]=X,E[b]=X-V}if(s){var q,le=b==="x"?Ar:Pr,fe=b==="x"?cn:dn,ae=w[x],se=x==="y"?"height":"width",ne=ae+m[le],he=ae-m[fe],Me=[Ar,Pr].indexOf(g)!==-1,xe=(q=P==null?void 0:P[x])!=null?q:0,ke=Me?ne:ae-S[se]-C[se]-xe+A.altAxis,Ve=Me?ae+S[se]+C[se]-xe-A.altAxis:he,rt=d&&Me?b5(ke,ae,Ve):Fl(d?ke:ne,ae,d?Ve:he);w[x]=rt,E[x]=rt-ae}t.modifiersData[n]=E}}var q5={name:"preventOverflow",enabled:!0,phase:"main",fn:j5,requiresIfExists:["offset"]};function K5(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function X5(e){return e===In(e)||!ln(e)?By(e):K5(e)}function Z5(e){var t=e.getBoundingClientRect(),r=ws(t.width)/e.offsetWidth||1,n=ws(t.height)/e.offsetHeight||1;return r!==1||n!==1}function Q5(e,t,r){r===void 0&&(r=!1);var n=ln(t),i=ln(t)&&Z5(t),a=ga(t),o=Ss(e,i),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(n||!n&&!r)&&((Qn(t)!=="body"||$y(a))&&(s=X5(t)),ln(t)?(l=Ss(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):a&&(l.x=Fy(a))),{x:o.left+s.scrollLeft-l.x,y:o.top+s.scrollTop-l.y,width:o.width,height:o.height}}function J5(e){var t=new Map,r=new Set,n=[];e.forEach(function(a){t.set(a.name,a)});function i(a){r.add(a.name);var o=[].concat(a.requires||[],a.requiresIfExists||[]);o.forEach(function(s){if(!r.has(s)){var l=t.get(s);l&&i(l)}}),n.push(a)}return e.forEach(function(a){r.has(a.name)||i(a)}),n}function e4(e){var t=J5(e);return p5.reduce(function(r,n){return r.concat(t.filter(function(i){return i.phase===n}))},[])}function t4(e){var t;return function(){return t||(t=new Promise(function(r){Promise.resolve().then(function(){t=void 0,r(e())})})),t}}function r4(e){var t=e.reduce(function(r,n){var i=r[n.name];return r[n.name]=i?Object.assign({},i,n,{options:Object.assign({},i.options,n.options),data:Object.assign({},i.data,n.data)}):n,r},{});return Object.keys(t).map(function(r){return t[r]})}var Zb={placement:"bottom",modifiers:[],strategy:"absolute"};function Qb(){for(var e=arguments.length,t=new Array(e),r=0;r{const n={name:"updateState",enabled:!0,phase:"write",fn:({state:l})=>{const u=s4(l);Object.assign(o.value,u)},requires:["computeStyles"]},i=k(()=>{const{onFirstUpdate:l,placement:u,strategy:f,modifiers:c}=T(r);return{onFirstUpdate:l,placement:u||"bottom",strategy:f||"absolute",modifiers:[...c||[],n,{name:"applyStyles",enabled:!1}]}}),a=ty(),o=$({styles:{popper:{position:T(i).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),s=()=>{a.value&&(a.value.destroy(),a.value=void 0)};return we(i,l=>{const u=T(a);u&&u.setOptions(l)},{deep:!0}),we([e,t],([l,u])=>{s(),!(!l||!u)&&(a.value=a4(l,u,T(i)))}),tr(()=>{s()}),{state:k(()=>{var l;return{...((l=T(a))==null?void 0:l.state)||{}}}),styles:k(()=>T(o).styles),attributes:k(()=>T(o).attributes),update:()=>{var l;return(l=T(a))==null?void 0:l.update()},forceUpdate:()=>{var l;return(l=T(a))==null?void 0:l.forceUpdate()},instanceRef:k(()=>T(a))}};function s4(e){const t=Object.keys(e.elements),r=og(t.map(i=>[i,e.styles[i]||{}])),n=og(t.map(i=>[i,e.attributes[i]]));return{styles:r,attributes:n}}const XM=e=>{if(!e)return{onClick:Bt,onMousedown:Bt,onMouseup:Bt};let t=!1,r=!1;return{onClick:o=>{t&&r&&e(o),t=r=!1},onMousedown:o=>{t=o.target===o.currentTarget},onMouseup:o=>{r=o.target===o.currentTarget}}};function Jb(){let e;const t=(n,i)=>{r(),e=window.setTimeout(n,i)},r=()=>window.clearTimeout(e);return ju(()=>r()),{registerTimeout:t,cancelTimeout:r}}const e1={prefix:Math.floor(Math.random()*1e4),current:0},l4=Symbol("elIdInjection"),ZM=()=>it()?Le(l4,e1):e1,xu=e=>{const t=ZM(),r=Dy();return k(()=>T(e)||`${r.value}-id-${t.prefix}-${t.current++}`)};let qo=[];const t1=e=>{const t=e;t.key===hr.esc&&qo.forEach(r=>r(t))},u4=e=>{_t(()=>{qo.length===0&&document.addEventListener("keydown",t1),At&&qo.push(e)}),tr(()=>{qo=qo.filter(t=>t!==e),qo.length===0&&At&&document.removeEventListener("keydown",t1)})};let r1;const QM=()=>{const e=Dy(),t=ZM(),r=k(()=>`${e.value}-popper-container-${t.prefix}`),n=k(()=>`#${r.value}`);return{id:r,selector:n}},f4=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},c4=()=>{const{id:e,selector:t}=QM();return eh(()=>{At&&!r1&&!document.body.querySelector(t.value)&&(r1=f4(e.value))}),{id:e,selector:t}},d4=Je({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),h4=({showAfter:e,hideAfter:t,autoClose:r,open:n,close:i})=>{const{registerTimeout:a}=Jb(),{registerTimeout:o,cancelTimeout:s}=Jb();return{onOpen:f=>{a(()=>{n(f);const c=T(r);Rt(c)&&c>0&&o(()=>{i(f)},c)},T(e))},onClose:f=>{s(),a(()=>{i(f)},T(t))}}},JM=Symbol("elForwardRef"),v4=e=>{Dt(JM,{setForwardRef:r=>{e.value=r}})},p4=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),n1=$(0),eA=2e3,tA=Symbol("zIndexContextKey"),zy=e=>{const t=e||(it()?Le(tA,void 0):void 0),r=k(()=>{const a=T(t);return Rt(a)?a:eA}),n=k(()=>r.value+n1.value);return{initialZIndex:r,currentZIndex:n,nextZIndex:()=>(n1.value++,n.value)}},dh=fh({type:String,values:Bs,required:!1}),rA=Symbol("size"),g4=()=>{const e=Le(rA,{});return k(()=>T(e.size)||"")},nA=Symbol(),gd=$();function hh(e,t=void 0){const r=it()?Le(nA,gd):gd;return e?k(()=>{var n,i;return(i=(n=r.value)==null?void 0:n[e])!=null?i:t}):r}function m4(e,t){const r=hh(),n=Oe(e,k(()=>{var s;return((s=r.value)==null?void 0:s.namespace)||Bl})),i=Fs(k(()=>{var s;return(s=r.value)==null?void 0:s.locale})),a=zy(k(()=>{var s;return((s=r.value)==null?void 0:s.zIndex)||eA})),o=k(()=>{var s;return T(t)||((s=r.value)==null?void 0:s.size)||""});return y4(k(()=>T(r)||{})),{ns:n,locale:i,zIndex:a,size:o}}const y4=(e,t,r=!1)=>{var n;const i=!!it(),a=i?hh():void 0,o=(n=t==null?void 0:t.provide)!=null?n:i?Dt:void 0;if(!o)return;const s=k(()=>{const l=T(e);return a!=null&&a.value?_4(a.value,l):l});return o(nA,s),o(kM,k(()=>s.value.locale)),o(NM,k(()=>s.value.namespace)),o(tA,k(()=>s.value.zIndex)),o(rA,{size:k(()=>s.value.size||"")}),(r||!gd.value)&&(gd.value=s.value),s},_4=(e,t)=>{var r;const n=[...new Set([...Vb(e),...Vb(t)])],i={};for(const a of n)i[a]=(r=t[a])!=null?r:e[a];return i},i1={};var Ke=(e,t)=>{const r=e.__vccOpts||e;for(const[n,i]of t)r[n]=i;return r};const b4=Je({size:{type:Be([Number,String])},color:{type:String}}),w4=ie({name:"ElIcon",inheritAttrs:!1}),S4=ie({...w4,props:b4,setup(e){const t=e,r=Oe("icon"),n=k(()=>{const{size:i,color:a}=t;return!i&&!a?{}:{fontSize:ys(i)?void 0:Zn(i),"--color":a}});return(i,a)=>(G(),ce("i",ei({class:T(r).b(),style:T(n)},i.$attrs),[Ce(i.$slots,"default")],16))}});var x4=Ke(S4,[["__file","icon.vue"]]);const Nt=Yt(x4),$s=Symbol("formContextKey"),yo=Symbol("formItemContextKey"),xi=(e,t={})=>{const r=$(void 0),n=t.prop?r:FM("size"),i=t.global?r:g4(),a=t.form?{size:void 0}:Le($s,void 0),o=t.formItem?{size:void 0}:Le(yo,void 0);return k(()=>n.value||T(e)||(o==null?void 0:o.size)||(a==null?void 0:a.size)||i.value||"")},vh=e=>{const t=FM("disabled"),r=Le($s,void 0);return k(()=>t.value||T(e)||(r==null?void 0:r.disabled)||!1)},tf=()=>{const e=Le($s,void 0),t=Le(yo,void 0);return{form:e,formItem:t}},Vy=(e,{formItemContext:t,disableIdGeneration:r,disableIdManagement:n})=>{r||(r=$(!1)),n||(n=$(!1));const i=$();let a;const o=k(()=>{var s;return!!(!e.label&&t&&t.inputIds&&((s=t.inputIds)==null?void 0:s.length)<=1)});return _t(()=>{a=we([wn(e,"id"),r],([s,l])=>{const u=s??(l?void 0:xu().value);u!==i.value&&(t!=null&&t.removeInputId&&(i.value&&t.removeInputId(i.value),!(n!=null&&n.value)&&!l&&u&&t.addInputId(u)),i.value=u)},{immediate:!0})}),Os(()=>{a&&a(),t!=null&&t.removeInputId&&i.value&&t.removeInputId(i.value)}),{isLabeledByFormItem:o,inputId:i}},C4=Je({size:{type:String,values:Bs},disabled:Boolean}),T4=Je({...C4,model:Object,rules:{type:Be(Object)},labelPosition:{type:String,values:["left","right","top"],default:"right"},requireAsteriskPosition:{type:String,values:["left","right"],default:"left"},labelWidth:{type:[String,Number],default:""},labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:[Object,Boolean]}}),M4={validate:(e,t,r)=>(_e(e)||ze(e))&&zr(t)&&ze(r)};function A4(){const e=$([]),t=k(()=>{if(!e.value.length)return"0";const a=Math.max(...e.value);return a?`${a}px`:""});function r(a){const o=e.value.indexOf(a);return o===-1&&t.value,o}function n(a,o){if(a&&o){const s=r(o);e.value.splice(s,1,a)}else a&&e.value.push(a)}function i(a){const o=r(a);o>-1&&e.value.splice(o,1)}return{autoLabelWidth:t,registerLabelWidth:n,deregisterLabelWidth:i}}const Tf=(e,t)=>{const r=Jp(t);return r.length>0?e.filter(n=>n.prop&&r.includes(n.prop)):e},P4="ElForm",E4=ie({name:P4}),L4=ie({...E4,props:T4,emits:M4,setup(e,{expose:t,emit:r}){const n=e,i=[],a=xi(),o=Oe("form"),s=k(()=>{const{labelPosition:_,inline:b}=n;return[o.b(),o.m(a.value||"default"),{[o.m(`label-${_}`)]:_,[o.m("inline")]:b}]}),l=_=>i.find(b=>b.prop===_),u=_=>{i.push(_)},f=_=>{_.prop&&i.splice(i.indexOf(_),1)},c=(_=[])=>{n.model&&Tf(i,_).forEach(b=>b.resetField())},h=(_=[])=>{Tf(i,_).forEach(b=>b.clearValidate())},d=k(()=>!!n.model),v=_=>{if(i.length===0)return[];const b=Tf(i,_);return b.length?b:[]},p=async _=>g(void 0,_),m=async(_=[])=>{if(!d.value)return!1;const b=v(_);if(b.length===0)return!0;let x={};for(const w of b)try{await w.validate("")}catch(S){x={...x,...S}}return Object.keys(x).length===0?!0:Promise.reject(x)},g=async(_=[],b)=>{const x=!De(b);try{const w=await m(_);return w===!0&&(b==null||b(w)),w}catch(w){if(w instanceof Error)throw w;const S=w;return n.scrollToError&&y(Object.keys(S)[0]),b==null||b(!1,S),x&&Promise.reject(S)}},y=_=>{var b;const x=Tf(i,_)[0];x&&((b=x.$el)==null||b.scrollIntoView(n.scrollIntoViewOptions))};return we(()=>n.rules,()=>{n.validateOnRuleChange&&p().catch(_=>void 0)},{deep:!0}),Dt($s,Ln({...Kd(n),emit:r,resetFields:c,clearValidate:h,validateField:g,getField:l,addField:u,removeField:f,...A4()})),t({validate:p,validateField:g,resetFields:c,clearValidate:h,scrollToField:y}),(_,b)=>(G(),ce("form",{class:re(T(s))},[Ce(_.$slots,"default")],2))}});var D4=Ke(L4,[["__file","form.vue"]]);function Qa(){return Qa=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Oc(e,t,r){return O4()?Oc=Reflect.construct.bind():Oc=function(i,a,o){var s=[null];s.push.apply(s,a);var l=Function.bind.apply(i,s),u=new l;return o&&Cu(u,o.prototype),u},Oc.apply(null,arguments)}function R4(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function cg(e){var t=typeof Map=="function"?new Map:void 0;return cg=function(n){if(n===null||!R4(n))return n;if(typeof n!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(n))return t.get(n);t.set(n,i)}function i(){return Oc(n,arguments,fg(this).constructor)}return i.prototype=Object.create(n.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),Cu(i,n)},cg(e)}var k4=/%[sdj%]/g,N4=function(){};function dg(e){if(!e||!e.length)return null;var t={};return e.forEach(function(r){var n=r.field;t[n]=t[n]||[],t[n].push(r)}),t}function Fr(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=a)return s;switch(s){case"%s":return String(r[i++]);case"%d":return Number(r[i++]);case"%j":try{return JSON.stringify(r[i++])}catch{return"[Circular]"}break;default:return s}});return o}return e}function B4(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"}function Ut(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||B4(t)&&typeof e=="string"&&!e)}function F4(e,t,r){var n=[],i=0,a=e.length;function o(s){n.push.apply(n,s||[]),i++,i===a&&r(n)}e.forEach(function(s){t(s,o)})}function a1(e,t,r){var n=0,i=e.length;function a(o){if(o&&o.length){r(o);return}var s=n;n=n+1,s{t.insertBefore(e,r||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,r,n)=>{const i=t==="svg"?Ki.createElementNS(AO,e):t==="mathml"?Ki.createElementNS(PO,e):Ki.createElement(e,r?{is:r}:void 0);return e==="select"&&n&&n.multiple!=null&&i.setAttribute("multiple",n.multiple),i},createText:e=>Ki.createTextNode(e),createComment:e=>Ki.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ki.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,r,n,i,a){const o=r?r.previousSibling:t.lastChild;if(i&&(i===a||i.nextSibling))for(;t.insertBefore(i.cloneNode(!0),r),!(i===a||!(i=i.nextSibling)););else{k_.innerHTML=n==="svg"?`${e}`:n==="mathml"?`${e}`:e;const s=k_.content;if(n==="svg"||n==="mathml"){const l=s.firstChild;for(;l.firstChild;)s.appendChild(l.firstChild);s.removeChild(l)}t.insertBefore(s,r)}return[o?o.nextSibling:t.firstChild,r?r.previousSibling:t.lastChild]}},Ii="transition",Xs="animation",gs=Symbol("_vtc"),ti=(e,{slots:t})=>Te(BI,RT(e),t);ti.displayName="Transition";const OT={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},LO=ti.props=Ht({},hT,OT),_a=(e,t=[])=>{_e(e)?e.forEach(r=>r(...t)):e&&e(...t)},N_=e=>e?_e(e)?e.some(t=>t.length>1):e.length>1:!1;function RT(e){const t={};for(const E in e)E in OT||(t[E]=e[E]);if(e.css===!1)return t;const{name:r="v",type:n,duration:i,enterFromClass:a=`${r}-enter-from`,enterActiveClass:o=`${r}-enter-active`,enterToClass:s=`${r}-enter-to`,appearFromClass:l=a,appearActiveClass:u=o,appearToClass:f=s,leaveFromClass:c=`${r}-leave-from`,leaveActiveClass:h=`${r}-leave-active`,leaveToClass:d=`${r}-leave-to`}=e,v=DO(i),p=v&&v[0],m=v&&v[1],{onBeforeEnter:g,onEnter:y,onEnterCancelled:_,onLeave:b,onLeaveCancelled:x,onBeforeAppear:w=g,onAppear:S=y,onAppearCancelled:C=_}=t,M=(E,L,O)=>{zi(E,L?f:s),zi(E,L?u:o),O&&O()},A=(E,L)=>{E._isLeaving=!1,zi(E,c),zi(E,d),zi(E,h),L&&L()},P=E=>(L,O)=>{const N=E?S:y,H=()=>M(L,E,O);_a(N,[L,H]),B_(()=>{zi(L,E?l:a),ci(L,E?f:s),N_(N)||F_(L,n,p,H)})};return Ht(t,{onBeforeEnter(E){_a(g,[E]),ci(E,a),ci(E,o)},onBeforeAppear(E){_a(w,[E]),ci(E,l),ci(E,u)},onEnter:P(!1),onAppear:P(!0),onLeave(E,L){E._isLeaving=!0;const O=()=>A(E,L);ci(E,c),NT(),ci(E,h),B_(()=>{E._isLeaving&&(zi(E,c),ci(E,d),N_(b)||F_(E,n,m,O))}),_a(b,[E,O])},onEnterCancelled(E){M(E,!1),_a(_,[E])},onAppearCancelled(E){M(E,!0),_a(C,[E])},onLeaveCancelled(E){A(E),_a(x,[E])}})}function DO(e){if(e==null)return null;if(qe(e))return[Kh(e.enter),Kh(e.leave)];{const t=Kh(e);return[t,t]}}function Kh(e){return HD(e)}function ci(e,t){t.split(/\s+/).forEach(r=>r&&e.classList.add(r)),(e[gs]||(e[gs]=new Set)).add(t)}function zi(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.remove(n));const r=e[gs];r&&(r.delete(t),r.size||(e[gs]=void 0))}function B_(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let IO=0;function F_(e,t,r,n){const i=e._endId=++IO,a=()=>{i===e._endId&&n()};if(r)return setTimeout(a,r);const{type:o,timeout:s,propCount:l}=kT(e,t);if(!o)return n();const u=o+"end";let f=0;const c=()=>{e.removeEventListener(u,h),a()},h=d=>{d.target===e&&++f>=l&&c()};setTimeout(()=>{f(r[v]||"").split(", "),i=n(`${Ii}Delay`),a=n(`${Ii}Duration`),o=$_(i,a),s=n(`${Xs}Delay`),l=n(`${Xs}Duration`),u=$_(s,l);let f=null,c=0,h=0;t===Ii?o>0&&(f=Ii,c=o,h=a.length):t===Xs?u>0&&(f=Xs,c=u,h=l.length):(c=Math.max(o,u),f=c>0?o>u?Ii:Xs:null,h=f?f===Ii?a.length:l.length:0);const d=f===Ii&&/\b(transform|all)(,|$)/.test(n(`${Ii}Property`).toString());return{type:f,timeout:c,propCount:h,hasTransform:d}}function $_(e,t){for(;e.lengthH_(r)+H_(e[n])))}function H_(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function NT(){return document.body.offsetHeight}function OO(e,t,r){const n=e[gs];n&&(t=(t?[t,...n]:[...n]).join(" ")),t==null?e.removeAttribute("class"):r?e.setAttribute("class",t):e.className=t}const dy=Symbol("_vod"),Kn={beforeMount(e,{value:t},{transition:r}){e[dy]=e.style.display==="none"?"":e.style.display,r&&t?r.beforeEnter(e):Zs(e,t)},mounted(e,{value:t},{transition:r}){r&&t&&r.enter(e)},updated(e,{value:t,oldValue:r},{transition:n}){!t!=!r&&(n?t?(n.beforeEnter(e),Zs(e,!0),n.enter(e)):n.leave(e,()=>{Zs(e,!1)}):Zs(e,t))},beforeUnmount(e,{value:t}){Zs(e,t)}};function Zs(e,t){e.style.display=t?e[dy]:"none"}const RO=Symbol("");function kO(e,t,r){const n=e.style,i=n.display,a=ze(r);if(r&&!a){if(t&&!ze(t))for(const o in t)r[o]==null&&qp(n,o,"");for(const o in r)qp(n,o,r[o])}else if(a){if(t!==r){const o=n[RO];o&&(r+=";"+o),n.cssText=r}}else t&&e.removeAttribute("style");dy in e&&(n.display=i)}const z_=/\s*!important$/;function qp(e,t,r){if(_e(r))r.forEach(n=>qp(e,t,n));else if(r==null&&(r=""),t.startsWith("--"))e.setProperty(t,r);else{const n=NO(e,t);z_.test(r)?e.setProperty(xo(n),r.replace(z_,""),"important"):e[n]=r}}const V_=["Webkit","Moz","ms"],Xh={};function NO(e,t){const r=Xh[t];if(r)return r;let n=Pn(t);if(n!=="filter"&&n in e)return Xh[t]=n;n=Yd(n);for(let i=0;iZh||(VO.then(()=>Zh=0),Zh=Date.now());function GO(e,t){const r=n=>{if(!n._vts)n._vts=Date.now();else if(n._vts<=r.attached)return;sn(UO(n,r.value),t,5,[n])};return r.value=e,r.attached=WO(),r}function UO(e,t){if(_e(t)){const r=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{r.call(e),e._stopped=!0},t.map(n=>i=>!i._stopped&&n&&n(i))}else return t}const Y_=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,YO=(e,t,r,n,i,a,o,s,l)=>{const u=i==="svg";t==="class"?OO(e,n,u):t==="style"?kO(e,r,n):Wd(t)?Gm(t)||HO(e,t,r,n,o):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):jO(e,t,n,u))?FO(e,t,n,a,o,s,l):(t==="true-value"?e._trueValue=n:t==="false-value"&&(e._falseValue=n),BO(e,t,n,u))};function jO(e,t,r,n){if(n)return!!(t==="innerHTML"||t==="textContent"||t in e&&Y_(t)&&De(r));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const i=e.tagName;if(i==="IMG"||i==="VIDEO"||i==="CANVAS"||i==="SOURCE")return!1}return Y_(t)&&ze(r)?!1:t in e}const FT=new WeakMap,$T=new WeakMap,od=Symbol("_moveCb"),j_=Symbol("_enterCb"),HT={name:"TransitionGroup",props:Ht({},LO,{tag:String,moveClass:String}),setup(e,{slots:t}){const r=it(),n=dT();let i,a;return Uu(()=>{if(!i.length)return;const o=e.moveClass||`${e.name||"v"}-move`;if(!JO(i[0].el,r.vnode.el,o))return;i.forEach(XO),i.forEach(ZO);const s=i.filter(QO);NT(),s.forEach(l=>{const u=l.el,f=u.style;ci(u,o),f.transform=f.webkitTransform=f.transitionDuration="";const c=u[od]=h=>{h&&h.target!==u||(!h||/transform$/.test(h.propertyName))&&(u.removeEventListener("transitionend",c),u[od]=null,zi(u,o))};u.addEventListener("transitionend",c)})}),()=>{const o=Qe(e),s=RT(o);let l=o.tag||ft;i=a,a=t.default?sy(t.default()):[];for(let u=0;udelete e.mode;HT.props;const KO=HT;function XO(e){const t=e.el;t[od]&&t[od](),t[j_]&&t[j_]()}function ZO(e){$T.set(e,e.el.getBoundingClientRect())}function QO(e){const t=FT.get(e),r=$T.get(e),n=t.left-r.left,i=t.top-r.top;if(n||i){const a=e.el.style;return a.transform=a.webkitTransform=`translate(${n}px,${i}px)`,a.transitionDuration="0s",e}}function JO(e,t,r){const n=e.cloneNode(),i=e[gs];i&&i.forEach(s=>{s.split(/\s+/).forEach(l=>l&&n.classList.remove(l))}),r.split(/\s+/).forEach(s=>s&&n.classList.add(s)),n.style.display="none";const a=t.nodeType===1?t:t.parentNode;a.appendChild(n);const{hasTransform:o}=kT(n);return a.removeChild(n),o}const q_=e=>{const t=e.props["onUpdate:modelValue"]||!1;return _e(t)?r=>Cc(t,r):t},Qh=Symbol("_assign"),sd={deep:!0,created(e,t,r){e[Qh]=q_(r),BT(e,"change",()=>{const n=e._modelValue,i=eR(e),a=e.checked,o=e[Qh];if(_e(n)){const s=OC(n,i),l=s!==-1;if(a&&!l)o(n.concat(i));else if(!a&&l){const u=[...n];u.splice(s,1),o(u)}}else if(Gd(n)){const s=new Set(n);a?s.add(i):s.delete(i),o(s)}else o(zT(e,a))})},mounted:K_,beforeUpdate(e,t,r){e[Qh]=q_(r),K_(e,t,r)}};function K_(e,{value:t,oldValue:r},n){e._modelValue=t,_e(t)?e.checked=OC(t,n.props.value)>-1:Gd(t)?e.checked=t.has(n.props.value):t!==r&&(e.checked=jd(t,zT(e,!0)))}function eR(e){return"_value"in e?e._value:e.value}function zT(e,t){const r=t?"_trueValue":"_falseValue";return r in e?e[r]:t}const tR=["ctrl","shift","alt","meta"],rR={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>tR.some(r=>e[`${r}Key`]&&!t.includes(r))},ua=(e,t)=>{const r=e._withMods||(e._withMods={}),n=t.join(".");return r[n]||(r[n]=(i,...a)=>{for(let o=0;o{const r=e._withKeys||(e._withKeys={}),n=t.join(".");return r[n]||(r[n]=i=>{if(!("key"in i))return;const a=xo(i.key);if(t.some(o=>o===a||nR[o]===a))return e(i)})},aR=Ht({patchProp:YO},EO);let X_;function VT(){return X_||(X_=sO(aR))}const ld=(...e)=>{VT().render(...e)},oR=(...e)=>{const t=VT().createApp(...e),{mount:r}=t;return t.mount=n=>{const i=lR(n);if(!i)return;const a=t._component;!De(a)&&!a.render&&!a.template&&(a.template=i.innerHTML),i.innerHTML="";const o=r(i,!1,sR(i));return i instanceof Element&&(i.removeAttribute("v-cloak"),i.setAttribute("data-v-app","")),o},t};function sR(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function lR(e){return ze(e)?document.querySelector(e):e}const Ac=function(e,t,...r){let n;t.includes("mouse")||t.includes("click")?n="MouseEvents":t.includes("key")?n="KeyboardEvent":n="HTMLEvents";const i=document.createEvent(n);return i.initEvent(t,...r),e.dispatchEvent(i),e},di=(e,t,{checkForDefaultPrevented:r=!0}={})=>i=>{const a=e==null?void 0:e(i);if(r===!1||!a)return t==null?void 0:t(i)};var Z_;const At=typeof window<"u",uR=e=>typeof e=="function",fR=e=>typeof e=="string",Kp=()=>{};At&&((Z_=window==null?void 0:window.navigator)!=null&&Z_.userAgent)&&/iP(ad|hone|od)/.test(window.navigator.userAgent);function po(e){return typeof e=="function"?e():T(e)}function WT(e,t){function r(...n){return new Promise((i,a)=>{Promise.resolve(e(()=>t.apply(this,n),{fn:t,thisArg:this,args:n})).then(i).catch(a)})}return r}const GT=e=>e();function cR(e,t={}){let r,n,i=Kp;const a=s=>{clearTimeout(s),i(),i=Kp};return s=>{const l=po(e),u=po(t.maxWait);return r&&a(r),l<=0||u!==void 0&&u<=0?(n&&(a(n),n=null),Promise.resolve(s())):new Promise((f,c)=>{i=t.rejectOnCancel?c:f,u&&!n&&(n=setTimeout(()=>{r&&a(r),n=null,f(s())},u)),r=setTimeout(()=>{n&&a(n),n=null,f(s())},l)})}}function dR(e=GT){const t=$(!0);function r(){t.value=!1}function n(){t.value=!0}const i=(...a)=>{t.value&&e(...a)};return{isActive:Gu(t),pause:r,resume:n,eventFilter:i}}function hR(e){return e}function ju(e){return kC()?(NC(e),!0):!1}function vR(e,t=200,r={}){return WT(cR(t,r),e)}function pR(e,t=200,r={}){const n=$(e.value),i=vR(()=>{n.value=e.value},t,r);return be(e,()=>i()),n}function gR(e){return typeof e=="function"?k(e):$(e)}function UT(e,t=!0){it()?_t(e):t?e():Nt(e)}function hu(e,t,r={}){const{immediate:n=!0}=r,i=$(!1);let a=null;function o(){a&&(clearTimeout(a),a=null)}function s(){i.value=!1,o()}function l(...u){o(),i.value=!0,a=setTimeout(()=>{i.value=!1,a=null,e(...u)},po(t))}return n&&(i.value=!0,At&&l()),ju(s),{isPending:Gu(i),start:l,stop:s}}function mR(e=!1,t={}){const{truthyValue:r=!0,falsyValue:n=!1}=t,i=Pt(e),a=$(e);function o(s){if(arguments.length)return a.value=s,a.value;{const l=po(r);return a.value=a.value===l?po(n):l,a.value}}return i?o:[a,o]}var Q_=Object.getOwnPropertySymbols,yR=Object.prototype.hasOwnProperty,_R=Object.prototype.propertyIsEnumerable,bR=(e,t)=>{var r={};for(var n in e)yR.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&Q_)for(var n of Q_(e))t.indexOf(n)<0&&_R.call(e,n)&&(r[n]=e[n]);return r};function wR(e,t,r={}){const n=r,{eventFilter:i=GT}=n,a=bR(n,["eventFilter"]);return be(e,WT(i,t),a)}var SR=Object.defineProperty,xR=Object.defineProperties,CR=Object.getOwnPropertyDescriptors,ud=Object.getOwnPropertySymbols,YT=Object.prototype.hasOwnProperty,jT=Object.prototype.propertyIsEnumerable,J_=(e,t,r)=>t in e?SR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,TR=(e,t)=>{for(var r in t||(t={}))YT.call(t,r)&&J_(e,r,t[r]);if(ud)for(var r of ud(t))jT.call(t,r)&&J_(e,r,t[r]);return e},MR=(e,t)=>xR(e,CR(t)),AR=(e,t)=>{var r={};for(var n in e)YT.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&ud)for(var n of ud(e))t.indexOf(n)<0&&jT.call(e,n)&&(r[n]=e[n]);return r};function PR(e,t,r={}){const n=r,{eventFilter:i}=n,a=AR(n,["eventFilter"]),{eventFilter:o,pause:s,resume:l,isActive:u}=dR(i);return{stop:wR(e,t,MR(TR({},a),{eventFilter:o})),pause:s,resume:l,isActive:u}}function Zi(e){var t;const r=po(e);return(t=r==null?void 0:r.$el)!=null?t:r}const fa=At?window:void 0;function xn(...e){let t,r,n,i;if(fR(e[0])||Array.isArray(e[0])?([r,n,i]=e,t=fa):[t,r,n,i]=e,!t)return Kp;Array.isArray(r)||(r=[r]),Array.isArray(n)||(n=[n]);const a=[],o=()=>{a.forEach(f=>f()),a.length=0},s=(f,c,h)=>(f.addEventListener(c,h,i),()=>f.removeEventListener(c,h,i)),l=be(()=>Zi(t),f=>{o(),f&&a.push(...r.flatMap(c=>n.map(h=>s(f,c,h))))},{immediate:!0,flush:"post"}),u=()=>{l(),o()};return ju(u),u}function ER(e,t,r={}){const{window:n=fa,ignore:i=[],capture:a=!0,detectIframe:o=!1}=r;if(!n)return;let s=!0,l;const u=d=>i.some(v=>{if(typeof v=="string")return Array.from(n.document.querySelectorAll(v)).some(p=>p===d.target||d.composedPath().includes(p));{const p=Zi(v);return p&&(d.target===p||d.composedPath().includes(p))}}),f=d=>{n.clearTimeout(l);const v=Zi(e);if(!(!v||v===d.target||d.composedPath().includes(v))){if(d.detail===0&&(s=!u(d)),!s){s=!0;return}t(d)}},c=[xn(n,"click",f,{passive:!0,capture:a}),xn(n,"pointerdown",d=>{const v=Zi(e);v&&(s=!d.composedPath().includes(v)&&!u(d))},{passive:!0}),xn(n,"pointerup",d=>{if(d.button===0){const v=d.composedPath();d.composedPath=()=>v,l=n.setTimeout(()=>f(d),50)}},{passive:!0}),o&&xn(n,"blur",d=>{var v;const p=Zi(e);((v=n.document.activeElement)==null?void 0:v.tagName)==="IFRAME"&&!(p!=null&&p.contains(n.document.activeElement))&&t(d)})].filter(Boolean);return()=>c.forEach(d=>d())}function qT(e,t=!1){const r=$(),n=()=>r.value=!!e();return n(),UT(n,t),r}function LR(e,t={}){const{window:r=fa}=t,n=qT(()=>r&&"matchMedia"in r&&typeof r.matchMedia=="function");let i;const a=$(!1),o=()=>{i&&("removeEventListener"in i?i.removeEventListener("change",s):i.removeListener(s))},s=()=>{n.value&&(o(),i=r.matchMedia(gR(e).value),a.value=i.matches,"addEventListener"in i?i.addEventListener("change",s):i.addListener(s))};return na(s),ju(()=>o()),a}const Xp=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},Zp="__vueuse_ssr_handlers__";Xp[Zp]=Xp[Zp]||{};const DR=Xp[Zp];function KT(e,t){return DR[e]||t}function IR(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}var OR=Object.defineProperty,eb=Object.getOwnPropertySymbols,RR=Object.prototype.hasOwnProperty,kR=Object.prototype.propertyIsEnumerable,tb=(e,t,r)=>t in e?OR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,rb=(e,t)=>{for(var r in t||(t={}))RR.call(t,r)&&tb(e,r,t[r]);if(eb)for(var r of eb(t))kR.call(t,r)&&tb(e,r,t[r]);return e};const NR={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}};function BR(e,t,r,n={}){var i;const{flush:a="pre",deep:o=!0,listenToStorageChanges:s=!0,writeDefaults:l=!0,mergeDefaults:u=!1,shallow:f,window:c=fa,eventFilter:h,onError:d=S=>{console.error(S)}}=n,v=(f?ty:$)(t);if(!r)try{r=KT("getDefaultStorage",()=>{var S;return(S=fa)==null?void 0:S.localStorage})()}catch(S){d(S)}if(!r)return v;const p=po(t),m=IR(p),g=(i=n.serializer)!=null?i:NR[m],{pause:y,resume:_}=PR(v,()=>b(v.value),{flush:a,deep:o,eventFilter:h});return c&&s&&xn(c,"storage",w),w(),v;function b(S){try{if(S==null)r.removeItem(e);else{const C=g.write(S),M=r.getItem(e);M!==C&&(r.setItem(e,C),c&&(c==null||c.dispatchEvent(new StorageEvent("storage",{key:e,oldValue:M,newValue:C,storageArea:r}))))}}catch(C){d(C)}}function x(S){const C=S?S.newValue:r.getItem(e);if(C==null)return l&&p!==null&&r.setItem(e,g.write(p)),p;if(!S&&u){const M=g.read(C);return uR(u)?u(M,p):m==="object"&&!Array.isArray(M)?rb(rb({},p),M):M}else return typeof C!="string"?C:g.read(C)}function w(S){if(!(S&&S.storageArea!==r)){if(S&&S.key==null){v.value=p;return}if(!(S&&S.key!==e)){y();try{v.value=x(S)}catch(C){d(C)}finally{S?Nt(_):_()}}}}}function XT(e){return LR("(prefers-color-scheme: dark)",e)}var FR=Object.defineProperty,nb=Object.getOwnPropertySymbols,$R=Object.prototype.hasOwnProperty,HR=Object.prototype.propertyIsEnumerable,ib=(e,t,r)=>t in e?FR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,zR=(e,t)=>{for(var r in t||(t={}))$R.call(t,r)&&ib(e,r,t[r]);if(nb)for(var r of nb(t))HR.call(t,r)&&ib(e,r,t[r]);return e};function VR(e={}){const{selector:t="html",attribute:r="class",initialValue:n="auto",window:i=fa,storage:a,storageKey:o="vueuse-color-scheme",listenToStorageChanges:s=!0,storageRef:l,emitAuto:u}=e,f=zR({auto:"",light:"light",dark:"dark"},e.modes||{}),c=XT({window:i}),h=k(()=>c.value?"dark":"light"),d=l||(o==null?$(n):BR(o,n,a,{window:i,listenToStorageChanges:s})),v=k({get(){return d.value==="auto"&&!u?h.value:d.value},set(y){d.value=y}}),p=KT("updateHTMLAttrs",(y,_,b)=>{const x=i==null?void 0:i.document.querySelector(y);if(x)if(_==="class"){const w=b.split(/\s/g);Object.values(f).flatMap(S=>(S||"").split(/\s/g)).filter(Boolean).forEach(S=>{w.includes(S)?x.classList.add(S):x.classList.remove(S)})}else x.setAttribute(_,b)});function m(y){var _;const b=y==="auto"?h.value:y;p(t,r,(_=f[b])!=null?_:b)}function g(y){e.onChanged?e.onChanged(y,m):m(y)}return be(v,g,{flush:"post",immediate:!0}),u&&be(h,()=>g(v.value),{flush:"post"}),UT(()=>g(v.value)),v}var WR=Object.defineProperty,GR=Object.defineProperties,UR=Object.getOwnPropertyDescriptors,ab=Object.getOwnPropertySymbols,YR=Object.prototype.hasOwnProperty,jR=Object.prototype.propertyIsEnumerable,ob=(e,t,r)=>t in e?WR(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,qR=(e,t)=>{for(var r in t||(t={}))YR.call(t,r)&&ob(e,r,t[r]);if(ab)for(var r of ab(t))jR.call(t,r)&&ob(e,r,t[r]);return e},KR=(e,t)=>GR(e,UR(t));function XR(e={}){const{valueDark:t="dark",valueLight:r="",window:n=fa}=e,i=VR(KR(qR({},e),{onChanged:(s,l)=>{var u;e.onChanged?(u=e.onChanged)==null||u.call(e,s==="dark"):l(s)},modes:{dark:t,light:r}})),a=XT({window:n});return k({get(){return i.value==="dark"},set(s){s===a.value?i.value="auto":i.value=s?"dark":"light"}})}var sb=Object.getOwnPropertySymbols,ZR=Object.prototype.hasOwnProperty,QR=Object.prototype.propertyIsEnumerable,JR=(e,t)=>{var r={};for(var n in e)ZR.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&sb)for(var n of sb(e))t.indexOf(n)<0&&QR.call(e,n)&&(r[n]=e[n]);return r};function ms(e,t,r={}){const n=r,{window:i=fa}=n,a=JR(n,["window"]);let o;const s=qT(()=>i&&"ResizeObserver"in i),l=()=>{o&&(o.disconnect(),o=void 0)},u=be(()=>Zi(e),c=>{l(),s.value&&i&&c&&(o=new ResizeObserver(t),o.observe(c,a))},{immediate:!0,flush:"post"}),f=()=>{l(),u()};return ju(f),{isSupported:s,stop:f}}var lb;(function(e){e.UP="UP",e.RIGHT="RIGHT",e.DOWN="DOWN",e.LEFT="LEFT",e.NONE="NONE"})(lb||(lb={}));var ek=Object.defineProperty,ub=Object.getOwnPropertySymbols,tk=Object.prototype.hasOwnProperty,rk=Object.prototype.propertyIsEnumerable,fb=(e,t,r)=>t in e?ek(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r,nk=(e,t)=>{for(var r in t||(t={}))tk.call(t,r)&&fb(e,r,t[r]);if(ub)for(var r of ub(t))rk.call(t,r)&&fb(e,r,t[r]);return e};const ik={easeInSine:[.12,0,.39,0],easeOutSine:[.61,1,.88,1],easeInOutSine:[.37,0,.63,1],easeInQuad:[.11,0,.5,0],easeOutQuad:[.5,1,.89,1],easeInOutQuad:[.45,0,.55,1],easeInCubic:[.32,0,.67,0],easeOutCubic:[.33,1,.68,1],easeInOutCubic:[.65,0,.35,1],easeInQuart:[.5,0,.75,0],easeOutQuart:[.25,1,.5,1],easeInOutQuart:[.76,0,.24,1],easeInQuint:[.64,0,.78,0],easeOutQuint:[.22,1,.36,1],easeInOutQuint:[.83,0,.17,1],easeInExpo:[.7,0,.84,0],easeOutExpo:[.16,1,.3,1],easeInOutExpo:[.87,0,.13,1],easeInCirc:[.55,0,1,.45],easeOutCirc:[0,.55,.45,1],easeInOutCirc:[.85,0,.15,1],easeInBack:[.36,0,.66,-.56],easeOutBack:[.34,1.56,.64,1],easeInOutBack:[.68,-.6,.32,1.6]};nk({linear:hR},ik);var ZT=typeof global=="object"&&global&&global.Object===Object&&global,ak=typeof self=="object"&&self&&self.Object===Object&&self,Dn=ZT||ak||Function("return this")(),fn=Dn.Symbol,QT=Object.prototype,ok=QT.hasOwnProperty,sk=QT.toString,Qs=fn?fn.toStringTag:void 0;function lk(e){var t=ok.call(e,Qs),r=e[Qs];try{e[Qs]=void 0;var n=!0}catch{}var i=sk.call(e);return n&&(t?e[Qs]=r:delete e[Qs]),i}var uk=Object.prototype,fk=uk.toString;function ck(e){return fk.call(e)}var dk="[object Null]",hk="[object Undefined]",cb=fn?fn.toStringTag:void 0;function Mo(e){return e==null?e===void 0?hk:dk:cb&&cb in Object(e)?lk(e):ck(e)}function Xn(e){return e!=null&&typeof e=="object"}var vk="[object Symbol]";function ih(e){return typeof e=="symbol"||Xn(e)&&Mo(e)==vk}function JT(e,t){for(var r=-1,n=e==null?0:e.length,i=Array(n);++r0){if(++t>=Vk)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function Yk(e){return function(){return e}}var fd=function(){try{var e=Po(Object,"defineProperty");return e({},"",{}),e}catch{}}(),jk=fd?function(e,t){return fd(e,"toString",{configurable:!0,enumerable:!1,value:Yk(t),writable:!0})}:hy;const qk=jk;var rM=Uk(qk);function Kk(e,t){for(var r=-1,n=e==null?0:e.length;++r-1&&e%1==0&&e-1&&e%1==0&&e<=tN}function Fs(e){return e!=null&&my(e.length)&&!vy(e)}function rN(e,t,r){if(!Dr(r))return!1;var n=typeof t;return(n=="number"?Fs(r)&&ah(t,r.length):n=="string"&&t in r)?qu(r[t],e):!1}function nN(e){return eN(function(t,r){var n=-1,i=r.length,a=i>1?r[i-1]:void 0,o=i>2?r[2]:void 0;for(a=e.length>3&&typeof a=="function"?(i--,a):void 0,o&&rN(r[0],r[1],o)&&(a=i<3?void 0:a,i=1),t=Object(t);++n-1}function hB(e,t){var r=this.__data__,n=oh(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this}function Pi(e){var t=-1,r=e==null?0:e.length;for(this.clear();++t0&&r(s)?t>1?Ty(s,t-1,r,n,i):Cy(i,s):n||(i[i.length]=s)}return i}function EB(e){var t=e==null?0:e.length;return t?Ty(e,1):[]}function LB(e){return rM(nM(e,void 0,EB),e+"")}var DB=lM(Object.getPrototypeOf,Object);const My=DB;var IB="[object Object]",OB=Function.prototype,RB=Object.prototype,uM=OB.toString,kB=RB.hasOwnProperty,NB=uM.call(Object);function BB(e){if(!Xn(e)||Mo(e)!=IB)return!1;var t=My(e);if(t===null)return!0;var r=kB.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&uM.call(r)==NB}function Jp(){if(!arguments.length)return[];var e=arguments[0];return gr(e)?e:[e]}function FB(){this.__data__=new Pi,this.size=0}function $B(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r}function HB(e){return this.__data__.get(e)}function zB(e){return this.__data__.has(e)}var VB=200;function WB(e,t){var r=this.__data__;if(r instanceof Pi){var n=r.__data__;if(!mu||n.lengths))return!1;var u=a.get(e),f=a.get(t);if(u&&f)return u==t&&f==e;var c=-1,h=!0,d=r&y$?new dd:void 0;for(a.set(e,t),a.set(t,e);++c=t||S<0||c&&C>=a}function g(){var w=rv();if(m(w))return y(w);s=setTimeout(g,p(w))}function y(w){return s=void 0,h&&n?d(w):(n=i=void 0,o)}function _(){s!==void 0&&clearTimeout(s),u=0,n=l=i=s=void 0}function b(){return s===void 0?o:y(rv())}function x(){var w=rv(),S=m(w);if(n=arguments,i=this,l=w,S){if(s===void 0)return v(l);if(c)return clearTimeout(s),s=setTimeout(g,t),d(l)}return s===void 0&&(s=setTimeout(g,t)),o}return x.cancel=_,x.flush=b,x}function ig(e,t,r){(r!==void 0&&!qu(e[t],r)||r===void 0&&!(t in e))&&py(e,t,r)}function u3(e){return Xn(e)&&Fs(e)}function ag(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}function f3(e){return Ku(e,Zu(e))}function c3(e,t,r,n,i,a,o){var s=ag(e,r),l=ag(t,r),u=o.get(l);if(u){ig(e,r,u);return}var f=a?a(s,l,r+"",e,t,o):void 0,c=f===void 0;if(c){var h=gr(l),d=!h&&pu(l),v=!h&&!d&&by(l);f=l,h||d||v?gr(s)?f=s:u3(s)?f=tM(s):d?(c=!1,f=cM(l,!0)):v?(c=!1,f=pM(l,!0)):f=[]:BB(l)||vu(l)?(f=s,vu(s)?f=f3(s):(!Dr(s)||vy(s))&&(f=gM(l))):c=!1}c&&(o.set(l,f),i(f,l,n,a,o),o.delete(l)),ig(e,r,f)}function TM(e,t,r,n,i){e!==t&&CM(t,function(a,o){if(i||(i=new An),Dr(a))c3(e,t,o,r,TM,n,i);else{var s=n?n(ag(e,o),a,o+"",e,t,i):void 0;s===void 0&&(s=a),ig(e,o,s)}},Zu)}function d3(e,t){var r=-1,n=Fs(e)?Array(e.length):[];return a3(e,function(i,a,o){n[++r]=t(i,a,o)}),n}function h3(e,t){var r=gr(e)?JT:d3;return r(e,t3(t))}function v3(e,t){return Ty(h3(e,t),1)}function og(e){for(var t=-1,r=e==null?0:e.length,n={};++te===void 0,zr=e=>typeof e=="boolean",kt=e=>typeof e=="number",mo=e=>typeof Element>"u"?!1:e instanceof Element,S3=e=>ze(e)?!Number.isNaN(Number(e)):!1,Vb=e=>Object.keys(e),Ec=(e,t,r)=>({get value(){return yu(e,t,r)},set value(n){w3(e,t,n)}});class x3 extends Error{constructor(t){super(t),this.name="ElementPlusError"}}function bi(e,t){throw new x3(`[${e}] ${t}`)}const PM=(e="")=>e.split(" ").filter(t=>!!t.trim()),oo=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},Za=(e,t)=>{!e||!t.trim()||e.classList.add(...PM(t))},so=(e,t)=>{!e||!t.trim()||e.classList.remove(...PM(t))},C3=(e,t)=>{var r;if(!At||!e||!t)return"";let n=Pn(t);n==="float"&&(n="cssFloat");try{const i=e.style[n];if(i)return i;const a=(r=document.defaultView)==null?void 0:r.getComputedStyle(e,"");return a?a[n]:""}catch{return e.style[n]}};function Zn(e,t="px"){if(!e)return"";if(kt(e)||S3(e))return`${e}${t}`;if(ze(e))return e}let xf;const T3=e=>{var t;if(!At)return 0;if(xf!==void 0)return xf;const r=document.createElement("div");r.className=`${e}-scrollbar__wrap`,r.style.visibility="hidden",r.style.width="100px",r.style.position="absolute",r.style.top="-9999px",document.body.appendChild(r);const n=r.offsetWidth;r.style.overflow="scroll";const i=document.createElement("div");i.style.width="100%",r.appendChild(i);const a=i.offsetWidth;return(t=r.parentNode)==null||t.removeChild(r),xf=n-a,xf};/*! Element Plus Icons Vue v2.3.1 */var M3=ie({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}}),EM=M3,A3=ie({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}}),Ey=A3,P3=ie({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}}),E3=P3,L3=ie({name:"Back",__name:"back",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),te("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}}),D3=L3,I3=ie({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}}),LM=I3,O3=ie({name:"Close",__name:"close",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}}),vd=O3,R3=ie({name:"InfoFilled",__name:"info-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}}),DM=R3,k3=ie({name:"Loading",__name:"loading",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}}),Ly=k3,N3=ie({name:"More",__name:"more",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}}),B3=N3,F3=ie({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}}),$3=F3,H3=ie({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),IM=H3,z3=ie({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,r)=>(G(),ce("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[te("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}}),OM=z3;const RM="__epPropKey",Be=e=>e,V3=e=>qe(e)&&!!e[RM],fh=(e,t)=>{if(!qe(e)||V3(e))return e;const{values:r,required:n,default:i,type:a,validator:o}=e,l={type:a,required:!!n,validator:r||o?u=>{let f=!1,c=[];if(r&&(c=Array.from(r),Ue(e,"default")&&c.push(i),f||(f=c.includes(u))),o&&(f||(f=o(u))),!f&&c.length>0){const h=[...new Set(c)].map(d=>JSON.stringify(d)).join(", ");MO(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${h}], got value ${JSON.stringify(u)}.`)}return f}:void 0,[RM]:!0};return Ue(e,"default")&&(l.default=i),l},Je=e=>og(Object.entries(e).map(([t,r])=>[t,fh(r,t)])),vr=Be([String,Object,Function]),W3={Close:vd},G3={Close:vd,SuccessFilled:IM,InfoFilled:DM,WarningFilled:OM,CircleCloseFilled:LM},Wb={success:IM,warning:OM,error:LM,info:DM},Yt=(e,t)=>{if(e.install=r=>{for(const n of[e,...Object.values(t??{})])r.component(n.name,n)},t)for(const[r,n]of Object.entries(t))e[r]=n;return e},U3=(e,t)=>(e.install=r=>{e._context=r._context,r.config.globalProperties[t]=e},e),pa=e=>(e.install=Ft,e),Y3=(...e)=>t=>{e.forEach(r=>{De(r)?r(t):r.value=t})},hr={tab:"Tab",enter:"Enter",space:"Space",left:"ArrowLeft",up:"ArrowUp",right:"ArrowRight",down:"ArrowDown",esc:"Escape",delete:"Delete",backspace:"Backspace",numpadEnter:"NumpadEnter",pageUp:"PageUp",pageDown:"PageDown",home:"Home",end:"End"},wi="update:modelValue",sg="change",lg="input",$s=["","default","small","large"],j3=e=>["",...$s].includes(e);var Lc=(e=>(e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e))(Lc||{});const Dc=e=>{const t=_e(e)?e:[e],r=[];return t.forEach(n=>{var i;_e(n)?r.push(...Dc(n)):la(n)&&_e(n.children)?r.push(...Dc(n.children)):(r.push(n),la(n)&&((i=n.component)!=null&&i.subTree)&&r.push(...Dc(n.component.subTree)))}),r},q3=e=>At?window.requestAnimationFrame(e):setTimeout(e,16),ja=e=>e,bu=({from:e,replacement:t,scope:r,version:n,ref:i,type:a="API"},o)=>{be(()=>T(o),s=>{},{immediate:!0})},K3=(e,t,r)=>{let n={offsetX:0,offsetY:0};const i=s=>{const l=s.clientX,u=s.clientY,{offsetX:f,offsetY:c}=n,h=e.value.getBoundingClientRect(),d=h.left,v=h.top,p=h.width,m=h.height,g=document.documentElement.clientWidth,y=document.documentElement.clientHeight,_=-d+f,b=-v+c,x=g-d-p+f,w=y-v-m+c,S=M=>{const A=Math.min(Math.max(f+M.clientX-l,_),x),P=Math.min(Math.max(c+M.clientY-u,b),w);n={offsetX:A,offsetY:P},e.value&&(e.value.style.transform=`translate(${Zn(A)}, ${Zn(P)})`)},C=()=>{document.removeEventListener("mousemove",S),document.removeEventListener("mouseup",C)};document.addEventListener("mousemove",S),document.addEventListener("mouseup",C)},a=()=>{t.value&&e.value&&t.value.addEventListener("mousedown",i)},o=()=>{t.value&&e.value&&t.value.removeEventListener("mousedown",i)};_t(()=>{na(()=>{r.value?a():o()})}),tr(()=>{o()})};var X3={name:"en",el:{colorpicker:{confirm:"OK",clear:"Clear",defaultLabel:"color picker",description:"current color is {color}. press enter to select a new color."},datepicker:{now:"Now",today:"Today",cancel:"Cancel",clear:"Clear",confirm:"OK",dateTablePrompt:"Use the arrow keys and enter to select the day of the month",monthTablePrompt:"Use the arrow keys and enter to select the month",yearTablePrompt:"Use the arrow keys and enter to select the year",selectedDate:"Selected date",selectDate:"Select date",selectTime:"Select time",startDate:"Start Date",startTime:"Start Time",endDate:"End Date",endTime:"End Time",prevYear:"Previous Year",nextYear:"Next Year",prevMonth:"Previous Month",nextMonth:"Next Month",year:"",month1:"January",month2:"February",month3:"March",month4:"April",month5:"May",month6:"June",month7:"July",month8:"August",month9:"September",month10:"October",month11:"November",month12:"December",week:"week",weeks:{sun:"Sun",mon:"Mon",tue:"Tue",wed:"Wed",thu:"Thu",fri:"Fri",sat:"Sat"},weeksFull:{sun:"Sunday",mon:"Monday",tue:"Tuesday",wed:"Wednesday",thu:"Thursday",fri:"Friday",sat:"Saturday"},months:{jan:"Jan",feb:"Feb",mar:"Mar",apr:"Apr",may:"May",jun:"Jun",jul:"Jul",aug:"Aug",sep:"Sep",oct:"Oct",nov:"Nov",dec:"Dec"}},inputNumber:{decrease:"decrease number",increase:"increase number"},select:{loading:"Loading",noMatch:"No matching data",noData:"No data",placeholder:"Select"},dropdown:{toggleDropdown:"Toggle Dropdown"},cascader:{noMatch:"No matching data",loading:"Loading",placeholder:"Select",noData:"No data"},pagination:{goto:"Go to",pagesize:"/page",total:"Total {total}",pageClassifier:"",page:"Page",prev:"Go to previous page",next:"Go to next page",currentPage:"page {pager}",prevPages:"Previous {pager} pages",nextPages:"Next {pager} pages",deprecationWarning:"Deprecated usages detected, please refer to the el-pagination documentation for more details"},dialog:{close:"Close this dialog"},drawer:{close:"Close this dialog"},messagebox:{title:"Message",confirm:"OK",cancel:"Cancel",error:"Illegal input",close:"Close this dialog"},upload:{deleteTip:"press delete to remove",delete:"Delete",preview:"Preview",continue:"Continue"},slider:{defaultLabel:"slider between {min} and {max}",defaultRangeStartLabel:"pick start value",defaultRangeEndLabel:"pick end value"},table:{emptyText:"No Data",confirmFilter:"Confirm",resetFilter:"Reset",clearFilter:"All",sumText:"Sum"},tour:{next:"Next",previous:"Previous",finish:"Finish"},tree:{emptyText:"No Data"},transfer:{noMatch:"No matching data",noData:"No data",titles:["List 1","List 2"],filterPlaceholder:"Enter keyword",noCheckedFormat:"{total} items",hasCheckedFormat:"{checked}/{total} checked"},image:{error:"FAILED"},pageHeader:{title:"Back"},popconfirm:{confirmButtonText:"Yes",cancelButtonText:"No"}}};const Z3=e=>(t,r)=>Q3(t,r,T(e)),Q3=(e,t,r)=>yu(r,e,e).replace(/\{(\w+)\}/g,(n,i)=>{var a;return`${(a=t==null?void 0:t[i])!=null?a:`{${i}}`}`}),J3=e=>{const t=k(()=>T(e).name),r=Pt(e)?e:$(e);return{lang:t,locale:r,t:Z3(e)}},kM=Symbol("localeContextKey"),Hs=e=>{const t=e||Le(kM,$());return J3(k(()=>t.value||X3))},Bl="el",e5="is-",ba=(e,t,r,n,i)=>{let a=`${e}-${t}`;return r&&(a+=`-${r}`),n&&(a+=`__${n}`),i&&(a+=`--${i}`),a},NM=Symbol("namespaceContextKey"),Dy=e=>{const t=e||(it()?Le(NM,$(Bl)):$(Bl));return k(()=>T(t)||Bl)},Oe=(e,t)=>{const r=Dy(t);return{namespace:r,b:(p="")=>ba(r.value,e,p,"",""),e:p=>p?ba(r.value,e,"",p,""):"",m:p=>p?ba(r.value,e,"","",p):"",be:(p,m)=>p&&m?ba(r.value,e,p,m,""):"",em:(p,m)=>p&&m?ba(r.value,e,"",p,m):"",bm:(p,m)=>p&&m?ba(r.value,e,p,"",m):"",bem:(p,m,g)=>p&&m&&g?ba(r.value,e,p,m,g):"",is:(p,...m)=>{const g=m.length>=1?m[0]:!0;return p&&g?`${e5}${p}`:""},cssVar:p=>{const m={};for(const g in p)p[g]&&(m[`--${r.value}-${g}`]=p[g]);return m},cssVarName:p=>`--${r.value}-${p}`,cssVarBlock:p=>{const m={};for(const g in p)p[g]&&(m[`--${r.value}-${e}-${g}`]=p[g]);return m},cssVarBlockName:p=>`--${r.value}-${e}-${p}`}},t5=(e,t={})=>{Pt(e)||bi("[useLockscreen]","You need to pass a ref param to this function");const r=t.ns||Oe("popup"),n=QC(()=>r.bm("parent","hidden"));if(!At||oo(document.body,n.value))return;let i=0,a=!1,o="0";const s=()=>{setTimeout(()=>{so(document==null?void 0:document.body,n.value),a&&document&&(document.body.style.width=o)},200)};be(e,l=>{if(!l){s();return}a=!oo(document.body,n.value),a&&(o=document.body.style.width),i=T3(r.namespace.value);const u=document.documentElement.clientHeight0&&(u||f==="scroll")&&a&&(document.body.style.width=`calc(100% - ${i}px)`),Za(document.body,n.value)}),NC(()=>s())},r5=fh({type:Be(Boolean),default:null}),n5=fh({type:Be(Function)}),BM=e=>{const t=`update:${e}`,r=`onUpdate:${e}`,n=[t],i={[e]:r5,[r]:n5};return{useModelToggle:({indicator:o,toggleReason:s,shouldHideWhenRouteChanges:l,shouldProceed:u,onShow:f,onHide:c})=>{const h=it(),{emit:d}=h,v=h.props,p=k(()=>De(v[r])),m=k(()=>v[e]===null),g=S=>{o.value!==!0&&(o.value=!0,s&&(s.value=S),De(f)&&f(S))},y=S=>{o.value!==!1&&(o.value=!1,s&&(s.value=S),De(c)&&c(S))},_=S=>{if(v.disabled===!0||De(u)&&!u())return;const C=p.value&&At;C&&d(t,!0),(m.value||!C)&&g(S)},b=S=>{if(v.disabled===!0||!At)return;const C=p.value&&At;C&&d(t,!1),(m.value||!C)&&y(S)},x=S=>{zr(S)&&(v.disabled&&S?p.value&&d(t,!1):o.value!==S&&(S?g():y()))},w=()=>{o.value?b():_()};return be(()=>v[e],x),l&&h.appContext.config.globalProperties.$route!==void 0&&be(()=>({...h.proxy.$route}),()=>{l.value&&o.value&&b()}),_t(()=>{x(v[e])}),{hide:b,show:_,toggle:w,hasUpdateHandler:p}},useModelToggleProps:i,useModelToggleEmits:n}};BM("modelValue");const FM=e=>{const t=it();return k(()=>{var r,n;return(n=(r=t==null?void 0:t.proxy)==null?void 0:r.$props)==null?void 0:n[e]})};var Ar="top",cn="bottom",dn="right",Pr="left",Iy="auto",Ju=[Ar,cn,dn,Pr],ws="start",wu="end",i5="clippingParents",$M="viewport",Js="popper",a5="reference",Gb=Ju.reduce(function(e,t){return e.concat([t+"-"+ws,t+"-"+wu])},[]),Oy=[].concat(Ju,[Iy]).reduce(function(e,t){return e.concat([t,t+"-"+ws,t+"-"+wu])},[]),o5="beforeRead",s5="read",l5="afterRead",u5="beforeMain",f5="main",c5="afterMain",d5="beforeWrite",h5="write",v5="afterWrite",p5=[o5,s5,l5,u5,f5,c5,d5,h5,v5];function Qn(e){return e?(e.nodeName||"").toLowerCase():null}function In(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function Ss(e){var t=In(e).Element;return e instanceof t||e instanceof Element}function ln(e){var t=In(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Ry(e){if(typeof ShadowRoot>"u")return!1;var t=In(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function g5(e){var t=e.state;Object.keys(t.elements).forEach(function(r){var n=t.styles[r]||{},i=t.attributes[r]||{},a=t.elements[r];!ln(a)||!Qn(a)||(Object.assign(a.style,n),Object.keys(i).forEach(function(o){var s=i[o];s===!1?a.removeAttribute(o):a.setAttribute(o,s===!0?"":s)}))})}function m5(e){var t=e.state,r={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,r.popper),t.styles=r,t.elements.arrow&&Object.assign(t.elements.arrow.style,r.arrow),function(){Object.keys(t.elements).forEach(function(n){var i=t.elements[n],a=t.attributes[n]||{},o=Object.keys(t.styles.hasOwnProperty(n)?t.styles[n]:r[n]),s=o.reduce(function(l,u){return l[u]="",l},{});!ln(i)||!Qn(i)||(Object.assign(i.style,s),Object.keys(a).forEach(function(l){i.removeAttribute(l)}))})}}var HM={name:"applyStyles",enabled:!0,phase:"write",fn:g5,effect:m5,requires:["computeStyles"]};function jn(e){return e.split("-")[0]}var lo=Math.max,pd=Math.min,xs=Math.round;function Cs(e,t){t===void 0&&(t=!1);var r=e.getBoundingClientRect(),n=1,i=1;if(ln(e)&&t){var a=e.offsetHeight,o=e.offsetWidth;o>0&&(n=xs(r.width)/o||1),a>0&&(i=xs(r.height)/a||1)}return{width:r.width/n,height:r.height/i,top:r.top/i,right:r.right/n,bottom:r.bottom/i,left:r.left/n,x:r.left/n,y:r.top/i}}function ky(e){var t=Cs(e),r=e.offsetWidth,n=e.offsetHeight;return Math.abs(t.width-r)<=1&&(r=t.width),Math.abs(t.height-n)<=1&&(n=t.height),{x:e.offsetLeft,y:e.offsetTop,width:r,height:n}}function zM(e,t){var r=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(r&&Ry(r)){var n=t;do{if(n&&e.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Si(e){return In(e).getComputedStyle(e)}function y5(e){return["table","td","th"].indexOf(Qn(e))>=0}function ga(e){return((Ss(e)?e.ownerDocument:e.document)||window.document).documentElement}function ch(e){return Qn(e)==="html"?e:e.assignedSlot||e.parentNode||(Ry(e)?e.host:null)||ga(e)}function Ub(e){return!ln(e)||Si(e).position==="fixed"?null:e.offsetParent}function _5(e){var t=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,r=navigator.userAgent.indexOf("Trident")!==-1;if(r&&ln(e)){var n=Si(e);if(n.position==="fixed")return null}var i=ch(e);for(Ry(i)&&(i=i.host);ln(i)&&["html","body"].indexOf(Qn(i))<0;){var a=Si(i);if(a.transform!=="none"||a.perspective!=="none"||a.contain==="paint"||["transform","perspective"].indexOf(a.willChange)!==-1||t&&a.willChange==="filter"||t&&a.filter&&a.filter!=="none")return i;i=i.parentNode}return null}function ef(e){for(var t=In(e),r=Ub(e);r&&y5(r)&&Si(r).position==="static";)r=Ub(r);return r&&(Qn(r)==="html"||Qn(r)==="body"&&Si(r).position==="static")?t:r||_5(e)||t}function Ny(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function Fl(e,t,r){return lo(e,pd(t,r))}function b5(e,t,r){var n=Fl(e,t,r);return n>r?r:n}function VM(){return{top:0,right:0,bottom:0,left:0}}function WM(e){return Object.assign({},VM(),e)}function GM(e,t){return t.reduce(function(r,n){return r[n]=e,r},{})}var w5=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,WM(typeof e!="number"?e:GM(e,Ju))};function S5(e){var t,r=e.state,n=e.name,i=e.options,a=r.elements.arrow,o=r.modifiersData.popperOffsets,s=jn(r.placement),l=Ny(s),u=[Pr,dn].indexOf(s)>=0,f=u?"height":"width";if(!(!a||!o)){var c=w5(i.padding,r),h=ky(a),d=l==="y"?Ar:Pr,v=l==="y"?cn:dn,p=r.rects.reference[f]+r.rects.reference[l]-o[l]-r.rects.popper[f],m=o[l]-r.rects.reference[l],g=ef(a),y=g?l==="y"?g.clientHeight||0:g.clientWidth||0:0,_=p/2-m/2,b=c[d],x=y-h[f]-c[v],w=y/2-h[f]/2+_,S=Fl(b,w,x),C=l;r.modifiersData[n]=(t={},t[C]=S,t.centerOffset=S-w,t)}}function x5(e){var t=e.state,r=e.options,n=r.element,i=n===void 0?"[data-popper-arrow]":n;i!=null&&(typeof i=="string"&&(i=t.elements.popper.querySelector(i),!i)||!zM(t.elements.popper,i)||(t.elements.arrow=i))}var C5={name:"arrow",enabled:!0,phase:"main",fn:S5,effect:x5,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Ts(e){return e.split("-")[1]}var T5={top:"auto",right:"auto",bottom:"auto",left:"auto"};function M5(e){var t=e.x,r=e.y,n=window,i=n.devicePixelRatio||1;return{x:xs(t*i)/i||0,y:xs(r*i)/i||0}}function Yb(e){var t,r=e.popper,n=e.popperRect,i=e.placement,a=e.variation,o=e.offsets,s=e.position,l=e.gpuAcceleration,u=e.adaptive,f=e.roundOffsets,c=e.isFixed,h=o.x,d=h===void 0?0:h,v=o.y,p=v===void 0?0:v,m=typeof f=="function"?f({x:d,y:p}):{x:d,y:p};d=m.x,p=m.y;var g=o.hasOwnProperty("x"),y=o.hasOwnProperty("y"),_=Pr,b=Ar,x=window;if(u){var w=ef(r),S="clientHeight",C="clientWidth";if(w===In(r)&&(w=ga(r),Si(w).position!=="static"&&s==="absolute"&&(S="scrollHeight",C="scrollWidth")),w=w,i===Ar||(i===Pr||i===dn)&&a===wu){b=cn;var M=c&&w===x&&x.visualViewport?x.visualViewport.height:w[S];p-=M-n.height,p*=l?1:-1}if(i===Pr||(i===Ar||i===cn)&&a===wu){_=dn;var A=c&&w===x&&x.visualViewport?x.visualViewport.width:w[C];d-=A-n.width,d*=l?1:-1}}var P=Object.assign({position:s},u&&T5),E=f===!0?M5({x:d,y:p}):{x:d,y:p};if(d=E.x,p=E.y,l){var L;return Object.assign({},P,(L={},L[b]=y?"0":"",L[_]=g?"0":"",L.transform=(x.devicePixelRatio||1)<=1?"translate("+d+"px, "+p+"px)":"translate3d("+d+"px, "+p+"px, 0)",L))}return Object.assign({},P,(t={},t[b]=y?p+"px":"",t[_]=g?d+"px":"",t.transform="",t))}function A5(e){var t=e.state,r=e.options,n=r.gpuAcceleration,i=n===void 0?!0:n,a=r.adaptive,o=a===void 0?!0:a,s=r.roundOffsets,l=s===void 0?!0:s,u={placement:jn(t.placement),variation:Ts(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Yb(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:o,roundOffsets:l})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Yb(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var UM={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:A5,data:{}},Cf={passive:!0};function P5(e){var t=e.state,r=e.instance,n=e.options,i=n.scroll,a=i===void 0?!0:i,o=n.resize,s=o===void 0?!0:o,l=In(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return a&&u.forEach(function(f){f.addEventListener("scroll",r.update,Cf)}),s&&l.addEventListener("resize",r.update,Cf),function(){a&&u.forEach(function(f){f.removeEventListener("scroll",r.update,Cf)}),s&&l.removeEventListener("resize",r.update,Cf)}}var YM={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:P5,data:{}},E5={left:"right",right:"left",bottom:"top",top:"bottom"};function Ic(e){return e.replace(/left|right|bottom|top/g,function(t){return E5[t]})}var L5={start:"end",end:"start"};function jb(e){return e.replace(/start|end/g,function(t){return L5[t]})}function By(e){var t=In(e),r=t.pageXOffset,n=t.pageYOffset;return{scrollLeft:r,scrollTop:n}}function Fy(e){return Cs(ga(e)).left+By(e).scrollLeft}function D5(e){var t=In(e),r=ga(e),n=t.visualViewport,i=r.clientWidth,a=r.clientHeight,o=0,s=0;return n&&(i=n.width,a=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(o=n.offsetLeft,s=n.offsetTop)),{width:i,height:a,x:o+Fy(e),y:s}}function I5(e){var t,r=ga(e),n=By(e),i=(t=e.ownerDocument)==null?void 0:t.body,a=lo(r.scrollWidth,r.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),o=lo(r.scrollHeight,r.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),s=-n.scrollLeft+Fy(e),l=-n.scrollTop;return Si(i||r).direction==="rtl"&&(s+=lo(r.clientWidth,i?i.clientWidth:0)-a),{width:a,height:o,x:s,y:l}}function $y(e){var t=Si(e),r=t.overflow,n=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(r+i+n)}function jM(e){return["html","body","#document"].indexOf(Qn(e))>=0?e.ownerDocument.body:ln(e)&&$y(e)?e:jM(ch(e))}function $l(e,t){var r;t===void 0&&(t=[]);var n=jM(e),i=n===((r=e.ownerDocument)==null?void 0:r.body),a=In(n),o=i?[a].concat(a.visualViewport||[],$y(n)?n:[]):n,s=t.concat(o);return i?s:s.concat($l(ch(o)))}function ug(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function O5(e){var t=Cs(e);return t.top=t.top+e.clientTop,t.left=t.left+e.clientLeft,t.bottom=t.top+e.clientHeight,t.right=t.left+e.clientWidth,t.width=e.clientWidth,t.height=e.clientHeight,t.x=t.left,t.y=t.top,t}function qb(e,t){return t===$M?ug(D5(e)):Ss(t)?O5(t):ug(I5(ga(e)))}function R5(e){var t=$l(ch(e)),r=["absolute","fixed"].indexOf(Si(e).position)>=0,n=r&&ln(e)?ef(e):e;return Ss(n)?t.filter(function(i){return Ss(i)&&zM(i,n)&&Qn(i)!=="body"}):[]}function k5(e,t,r){var n=t==="clippingParents"?R5(e):[].concat(t),i=[].concat(n,[r]),a=i[0],o=i.reduce(function(s,l){var u=qb(e,l);return s.top=lo(u.top,s.top),s.right=pd(u.right,s.right),s.bottom=pd(u.bottom,s.bottom),s.left=lo(u.left,s.left),s},qb(e,a));return o.width=o.right-o.left,o.height=o.bottom-o.top,o.x=o.left,o.y=o.top,o}function qM(e){var t=e.reference,r=e.element,n=e.placement,i=n?jn(n):null,a=n?Ts(n):null,o=t.x+t.width/2-r.width/2,s=t.y+t.height/2-r.height/2,l;switch(i){case Ar:l={x:o,y:t.y-r.height};break;case cn:l={x:o,y:t.y+t.height};break;case dn:l={x:t.x+t.width,y:s};break;case Pr:l={x:t.x-r.width,y:s};break;default:l={x:t.x,y:t.y}}var u=i?Ny(i):null;if(u!=null){var f=u==="y"?"height":"width";switch(a){case ws:l[u]=l[u]-(t[f]/2-r[f]/2);break;case wu:l[u]=l[u]+(t[f]/2-r[f]/2);break}}return l}function Su(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=n===void 0?e.placement:n,a=r.boundary,o=a===void 0?i5:a,s=r.rootBoundary,l=s===void 0?$M:s,u=r.elementContext,f=u===void 0?Js:u,c=r.altBoundary,h=c===void 0?!1:c,d=r.padding,v=d===void 0?0:d,p=WM(typeof v!="number"?v:GM(v,Ju)),m=f===Js?a5:Js,g=e.rects.popper,y=e.elements[h?m:f],_=k5(Ss(y)?y:y.contextElement||ga(e.elements.popper),o,l),b=Cs(e.elements.reference),x=qM({reference:b,element:g,strategy:"absolute",placement:i}),w=ug(Object.assign({},g,x)),S=f===Js?w:b,C={top:_.top-S.top+p.top,bottom:S.bottom-_.bottom+p.bottom,left:_.left-S.left+p.left,right:S.right-_.right+p.right},M=e.modifiersData.offset;if(f===Js&&M){var A=M[i];Object.keys(C).forEach(function(P){var E=[dn,cn].indexOf(P)>=0?1:-1,L=[Ar,cn].indexOf(P)>=0?"y":"x";C[P]+=A[L]*E})}return C}function N5(e,t){t===void 0&&(t={});var r=t,n=r.placement,i=r.boundary,a=r.rootBoundary,o=r.padding,s=r.flipVariations,l=r.allowedAutoPlacements,u=l===void 0?Oy:l,f=Ts(n),c=f?s?Gb:Gb.filter(function(v){return Ts(v)===f}):Ju,h=c.filter(function(v){return u.indexOf(v)>=0});h.length===0&&(h=c);var d=h.reduce(function(v,p){return v[p]=Su(e,{placement:p,boundary:i,rootBoundary:a,padding:o})[jn(p)],v},{});return Object.keys(d).sort(function(v,p){return d[v]-d[p]})}function B5(e){if(jn(e)===Iy)return[];var t=Ic(e);return[jb(e),t,jb(t)]}function F5(e){var t=e.state,r=e.options,n=e.name;if(!t.modifiersData[n]._skip){for(var i=r.mainAxis,a=i===void 0?!0:i,o=r.altAxis,s=o===void 0?!0:o,l=r.fallbackPlacements,u=r.padding,f=r.boundary,c=r.rootBoundary,h=r.altBoundary,d=r.flipVariations,v=d===void 0?!0:d,p=r.allowedAutoPlacements,m=t.options.placement,g=jn(m),y=g===m,_=l||(y||!v?[Ic(m)]:B5(m)),b=[m].concat(_).reduce(function(we,$e){return we.concat(jn($e)===Iy?N5(t,{placement:$e,boundary:f,rootBoundary:c,padding:u,flipVariations:v,allowedAutoPlacements:p}):$e)},[]),x=t.rects.reference,w=t.rects.popper,S=new Map,C=!0,M=b[0],A=0;A=0,N=O?"width":"height",H=Su(t,{placement:P,boundary:f,rootBoundary:c,altBoundary:h,padding:u}),V=O?L?dn:Pr:L?cn:Ar;x[N]>w[N]&&(V=Ic(V));var U=Ic(V),F=[];if(a&&F.push(H[E]<=0),s&&F.push(H[V]<=0,H[U]<=0),F.every(function(we){return we})){M=P,C=!1;break}S.set(P,F)}if(C)for(var z=v?3:1,ee=function(we){var $e=b.find(function(Ie){var B=S.get(Ie);if(B)return B.slice(0,we).every(function(Y){return Y})});if($e)return M=$e,"break"},J=z;J>0;J--){var me=ee(J);if(me==="break")break}t.placement!==M&&(t.modifiersData[n]._skip=!0,t.placement=M,t.reset=!0)}}var $5={name:"flip",enabled:!0,phase:"main",fn:F5,requiresIfExists:["offset"],data:{_skip:!1}};function Kb(e,t,r){return r===void 0&&(r={x:0,y:0}),{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function Xb(e){return[Ar,dn,cn,Pr].some(function(t){return e[t]>=0})}function H5(e){var t=e.state,r=e.name,n=t.rects.reference,i=t.rects.popper,a=t.modifiersData.preventOverflow,o=Su(t,{elementContext:"reference"}),s=Su(t,{altBoundary:!0}),l=Kb(o,n),u=Kb(s,i,a),f=Xb(l),c=Xb(u);t.modifiersData[r]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:f,hasPopperEscaped:c},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":f,"data-popper-escaped":c})}var z5={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:H5};function V5(e,t,r){var n=jn(e),i=[Pr,Ar].indexOf(n)>=0?-1:1,a=typeof r=="function"?r(Object.assign({},t,{placement:e})):r,o=a[0],s=a[1];return o=o||0,s=(s||0)*i,[Pr,dn].indexOf(n)>=0?{x:s,y:o}:{x:o,y:s}}function W5(e){var t=e.state,r=e.options,n=e.name,i=r.offset,a=i===void 0?[0,0]:i,o=Oy.reduce(function(f,c){return f[c]=V5(c,t.rects,a),f},{}),s=o[t.placement],l=s.x,u=s.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=l,t.modifiersData.popperOffsets.y+=u),t.modifiersData[n]=o}var G5={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:W5};function U5(e){var t=e.state,r=e.name;t.modifiersData[r]=qM({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}var KM={name:"popperOffsets",enabled:!0,phase:"read",fn:U5,data:{}};function Y5(e){return e==="x"?"y":"x"}function j5(e){var t=e.state,r=e.options,n=e.name,i=r.mainAxis,a=i===void 0?!0:i,o=r.altAxis,s=o===void 0?!1:o,l=r.boundary,u=r.rootBoundary,f=r.altBoundary,c=r.padding,h=r.tether,d=h===void 0?!0:h,v=r.tetherOffset,p=v===void 0?0:v,m=Su(t,{boundary:l,rootBoundary:u,padding:c,altBoundary:f}),g=jn(t.placement),y=Ts(t.placement),_=!y,b=Ny(g),x=Y5(b),w=t.modifiersData.popperOffsets,S=t.rects.reference,C=t.rects.popper,M=typeof p=="function"?p(Object.assign({},t.rects,{placement:t.placement})):p,A=typeof M=="number"?{mainAxis:M,altAxis:M}:Object.assign({mainAxis:0,altAxis:0},M),P=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,E={x:0,y:0};if(w){if(a){var L,O=b==="y"?Ar:Pr,N=b==="y"?cn:dn,H=b==="y"?"height":"width",V=w[b],U=V+m[O],F=V-m[N],z=d?-C[H]/2:0,ee=y===ws?S[H]:C[H],J=y===ws?-C[H]:-S[H],me=t.elements.arrow,we=d&&me?ky(me):{width:0,height:0},$e=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:VM(),Ie=$e[O],B=$e[N],Y=Fl(0,S[H],we[H]),K=_?S[H]/2-z-Y-Ie-A.mainAxis:ee-Y-Ie-A.mainAxis,Q=_?-S[H]/2+z+Y+B+A.mainAxis:J+Y+B+A.mainAxis,oe=t.elements.arrow&&ef(t.elements.arrow),pe=oe?b==="y"?oe.clientTop||0:oe.clientLeft||0:0,D=(L=P==null?void 0:P[b])!=null?L:0,I=V+K-D-pe,W=V+Q-D,X=Fl(d?pd(U,I):U,V,d?lo(F,W):F);w[b]=X,E[b]=X-V}if(s){var j,le=b==="x"?Ar:Pr,fe=b==="x"?cn:dn,ae=w[x],se=x==="y"?"height":"width",ne=ae+m[le],de=ae-m[fe],Me=[Ar,Pr].indexOf(g)!==-1,Se=(j=P==null?void 0:P[x])!=null?j:0,ke=Me?ne:ae-S[se]-C[se]-Se+A.altAxis,Ve=Me?ae+S[se]+C[se]-Se-A.altAxis:de,rt=d&&Me?b5(ke,ae,Ve):Fl(d?ke:ne,ae,d?Ve:de);w[x]=rt,E[x]=rt-ae}t.modifiersData[n]=E}}var q5={name:"preventOverflow",enabled:!0,phase:"main",fn:j5,requiresIfExists:["offset"]};function K5(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function X5(e){return e===In(e)||!ln(e)?By(e):K5(e)}function Z5(e){var t=e.getBoundingClientRect(),r=xs(t.width)/e.offsetWidth||1,n=xs(t.height)/e.offsetHeight||1;return r!==1||n!==1}function Q5(e,t,r){r===void 0&&(r=!1);var n=ln(t),i=ln(t)&&Z5(t),a=ga(t),o=Cs(e,i),s={scrollLeft:0,scrollTop:0},l={x:0,y:0};return(n||!n&&!r)&&((Qn(t)!=="body"||$y(a))&&(s=X5(t)),ln(t)?(l=Cs(t,!0),l.x+=t.clientLeft,l.y+=t.clientTop):a&&(l.x=Fy(a))),{x:o.left+s.scrollLeft-l.x,y:o.top+s.scrollTop-l.y,width:o.width,height:o.height}}function J5(e){var t=new Map,r=new Set,n=[];e.forEach(function(a){t.set(a.name,a)});function i(a){r.add(a.name);var o=[].concat(a.requires||[],a.requiresIfExists||[]);o.forEach(function(s){if(!r.has(s)){var l=t.get(s);l&&i(l)}}),n.push(a)}return e.forEach(function(a){r.has(a.name)||i(a)}),n}function e4(e){var t=J5(e);return p5.reduce(function(r,n){return r.concat(t.filter(function(i){return i.phase===n}))},[])}function t4(e){var t;return function(){return t||(t=new Promise(function(r){Promise.resolve().then(function(){t=void 0,r(e())})})),t}}function r4(e){var t=e.reduce(function(r,n){var i=r[n.name];return r[n.name]=i?Object.assign({},i,n,{options:Object.assign({},i.options,n.options),data:Object.assign({},i.data,n.data)}):n,r},{});return Object.keys(t).map(function(r){return t[r]})}var Zb={placement:"bottom",modifiers:[],strategy:"absolute"};function Qb(){for(var e=arguments.length,t=new Array(e),r=0;r{const n={name:"updateState",enabled:!0,phase:"write",fn:({state:l})=>{const u=s4(l);Object.assign(o.value,u)},requires:["computeStyles"]},i=k(()=>{const{onFirstUpdate:l,placement:u,strategy:f,modifiers:c}=T(r);return{onFirstUpdate:l,placement:u||"bottom",strategy:f||"absolute",modifiers:[...c||[],n,{name:"applyStyles",enabled:!1}]}}),a=ty(),o=$({styles:{popper:{position:T(i).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),s=()=>{a.value&&(a.value.destroy(),a.value=void 0)};return be(i,l=>{const u=T(a);u&&u.setOptions(l)},{deep:!0}),be([e,t],([l,u])=>{s(),!(!l||!u)&&(a.value=a4(l,u,T(i)))}),tr(()=>{s()}),{state:k(()=>{var l;return{...((l=T(a))==null?void 0:l.state)||{}}}),styles:k(()=>T(o).styles),attributes:k(()=>T(o).attributes),update:()=>{var l;return(l=T(a))==null?void 0:l.update()},forceUpdate:()=>{var l;return(l=T(a))==null?void 0:l.forceUpdate()},instanceRef:k(()=>T(a))}};function s4(e){const t=Object.keys(e.elements),r=og(t.map(i=>[i,e.styles[i]||{}])),n=og(t.map(i=>[i,e.attributes[i]]));return{styles:r,attributes:n}}const XM=e=>{if(!e)return{onClick:Ft,onMousedown:Ft,onMouseup:Ft};let t=!1,r=!1;return{onClick:o=>{t&&r&&e(o),t=r=!1},onMousedown:o=>{t=o.target===o.currentTarget},onMouseup:o=>{r=o.target===o.currentTarget}}};function Jb(){let e;const t=(n,i)=>{r(),e=window.setTimeout(n,i)},r=()=>window.clearTimeout(e);return ju(()=>r()),{registerTimeout:t,cancelTimeout:r}}const e1={prefix:Math.floor(Math.random()*1e4),current:0},l4=Symbol("elIdInjection"),ZM=()=>it()?Le(l4,e1):e1,xu=e=>{const t=ZM(),r=Dy();return k(()=>T(e)||`${r.value}-id-${t.prefix}-${t.current++}`)};let Xo=[];const t1=e=>{const t=e;t.key===hr.esc&&Xo.forEach(r=>r(t))},u4=e=>{_t(()=>{Xo.length===0&&document.addEventListener("keydown",t1),At&&Xo.push(e)}),tr(()=>{Xo=Xo.filter(t=>t!==e),Xo.length===0&&At&&document.removeEventListener("keydown",t1)})};let r1;const QM=()=>{const e=Dy(),t=ZM(),r=k(()=>`${e.value}-popper-container-${t.prefix}`),n=k(()=>`#${r.value}`);return{id:r,selector:n}},f4=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},c4=()=>{const{id:e,selector:t}=QM();return eh(()=>{At&&!r1&&!document.body.querySelector(t.value)&&(r1=f4(e.value))}),{id:e,selector:t}},d4=Je({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),h4=({showAfter:e,hideAfter:t,autoClose:r,open:n,close:i})=>{const{registerTimeout:a}=Jb(),{registerTimeout:o,cancelTimeout:s}=Jb();return{onOpen:f=>{a(()=>{n(f);const c=T(r);kt(c)&&c>0&&o(()=>{i(f)},c)},T(e))},onClose:f=>{s(),a(()=>{i(f)},T(t))}}},JM=Symbol("elForwardRef"),v4=e=>{Dt(JM,{setForwardRef:r=>{e.value=r}})},p4=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),n1=$(0),eA=2e3,tA=Symbol("zIndexContextKey"),zy=e=>{const t=e||(it()?Le(tA,void 0):void 0),r=k(()=>{const a=T(t);return kt(a)?a:eA}),n=k(()=>r.value+n1.value);return{initialZIndex:r,currentZIndex:n,nextZIndex:()=>(n1.value++,n.value)}},dh=fh({type:String,values:$s,required:!1}),rA=Symbol("size"),g4=()=>{const e=Le(rA,{});return k(()=>T(e.size)||"")},nA=Symbol(),gd=$();function hh(e,t=void 0){const r=it()?Le(nA,gd):gd;return e?k(()=>{var n,i;return(i=(n=r.value)==null?void 0:n[e])!=null?i:t}):r}function m4(e,t){const r=hh(),n=Oe(e,k(()=>{var s;return((s=r.value)==null?void 0:s.namespace)||Bl})),i=Hs(k(()=>{var s;return(s=r.value)==null?void 0:s.locale})),a=zy(k(()=>{var s;return((s=r.value)==null?void 0:s.zIndex)||eA})),o=k(()=>{var s;return T(t)||((s=r.value)==null?void 0:s.size)||""});return y4(k(()=>T(r)||{})),{ns:n,locale:i,zIndex:a,size:o}}const y4=(e,t,r=!1)=>{var n;const i=!!it(),a=i?hh():void 0,o=(n=t==null?void 0:t.provide)!=null?n:i?Dt:void 0;if(!o)return;const s=k(()=>{const l=T(e);return a!=null&&a.value?_4(a.value,l):l});return o(nA,s),o(kM,k(()=>s.value.locale)),o(NM,k(()=>s.value.namespace)),o(tA,k(()=>s.value.zIndex)),o(rA,{size:k(()=>s.value.size||"")}),(r||!gd.value)&&(gd.value=s.value),s},_4=(e,t)=>{var r;const n=[...new Set([...Vb(e),...Vb(t)])],i={};for(const a of n)i[a]=(r=t[a])!=null?r:e[a];return i},i1={};var Ke=(e,t)=>{const r=e.__vccOpts||e;for(const[n,i]of t)r[n]=i;return r};const b4=Je({size:{type:Be([Number,String])},color:{type:String}}),w4=ie({name:"ElIcon",inheritAttrs:!1}),S4=ie({...w4,props:b4,setup(e){const t=e,r=Oe("icon"),n=k(()=>{const{size:i,color:a}=t;return!i&&!a?{}:{fontSize:bs(i)?void 0:Zn(i),"--color":a}});return(i,a)=>(G(),ce("i",ei({class:T(r).b(),style:T(n)},i.$attrs),[Ce(i.$slots,"default")],16))}});var x4=Ke(S4,[["__file","icon.vue"]]);const Bt=Yt(x4),zs=Symbol("formContextKey"),yo=Symbol("formItemContextKey"),xi=(e,t={})=>{const r=$(void 0),n=t.prop?r:FM("size"),i=t.global?r:g4(),a=t.form?{size:void 0}:Le(zs,void 0),o=t.formItem?{size:void 0}:Le(yo,void 0);return k(()=>n.value||T(e)||(o==null?void 0:o.size)||(a==null?void 0:a.size)||i.value||"")},vh=e=>{const t=FM("disabled"),r=Le(zs,void 0);return k(()=>t.value||T(e)||(r==null?void 0:r.disabled)||!1)},tf=()=>{const e=Le(zs,void 0),t=Le(yo,void 0);return{form:e,formItem:t}},Vy=(e,{formItemContext:t,disableIdGeneration:r,disableIdManagement:n})=>{r||(r=$(!1)),n||(n=$(!1));const i=$();let a;const o=k(()=>{var s;return!!(!e.label&&t&&t.inputIds&&((s=t.inputIds)==null?void 0:s.length)<=1)});return _t(()=>{a=be([wn(e,"id"),r],([s,l])=>{const u=s??(l?void 0:xu().value);u!==i.value&&(t!=null&&t.removeInputId&&(i.value&&t.removeInputId(i.value),!(n!=null&&n.value)&&!l&&u&&t.addInputId(u)),i.value=u)},{immediate:!0})}),ks(()=>{a&&a(),t!=null&&t.removeInputId&&i.value&&t.removeInputId(i.value)}),{isLabeledByFormItem:o,inputId:i}},C4=Je({size:{type:String,values:$s},disabled:Boolean}),T4=Je({...C4,model:Object,rules:{type:Be(Object)},labelPosition:{type:String,values:["left","right","top"],default:"right"},requireAsteriskPosition:{type:String,values:["left","right"],default:"left"},labelWidth:{type:[String,Number],default:""},labelSuffix:{type:String,default:""},inline:Boolean,inlineMessage:Boolean,statusIcon:Boolean,showMessage:{type:Boolean,default:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:[Object,Boolean]}}),M4={validate:(e,t,r)=>(_e(e)||ze(e))&&zr(t)&&ze(r)};function A4(){const e=$([]),t=k(()=>{if(!e.value.length)return"0";const a=Math.max(...e.value);return a?`${a}px`:""});function r(a){const o=e.value.indexOf(a);return o===-1&&t.value,o}function n(a,o){if(a&&o){const s=r(o);e.value.splice(s,1,a)}else a&&e.value.push(a)}function i(a){const o=r(a);o>-1&&e.value.splice(o,1)}return{autoLabelWidth:t,registerLabelWidth:n,deregisterLabelWidth:i}}const Tf=(e,t)=>{const r=Jp(t);return r.length>0?e.filter(n=>n.prop&&r.includes(n.prop)):e},P4="ElForm",E4=ie({name:P4}),L4=ie({...E4,props:T4,emits:M4,setup(e,{expose:t,emit:r}){const n=e,i=[],a=xi(),o=Oe("form"),s=k(()=>{const{labelPosition:_,inline:b}=n;return[o.b(),o.m(a.value||"default"),{[o.m(`label-${_}`)]:_,[o.m("inline")]:b}]}),l=_=>i.find(b=>b.prop===_),u=_=>{i.push(_)},f=_=>{_.prop&&i.splice(i.indexOf(_),1)},c=(_=[])=>{n.model&&Tf(i,_).forEach(b=>b.resetField())},h=(_=[])=>{Tf(i,_).forEach(b=>b.clearValidate())},d=k(()=>!!n.model),v=_=>{if(i.length===0)return[];const b=Tf(i,_);return b.length?b:[]},p=async _=>g(void 0,_),m=async(_=[])=>{if(!d.value)return!1;const b=v(_);if(b.length===0)return!0;let x={};for(const w of b)try{await w.validate("")}catch(S){x={...x,...S}}return Object.keys(x).length===0?!0:Promise.reject(x)},g=async(_=[],b)=>{const x=!De(b);try{const w=await m(_);return w===!0&&(b==null||b(w)),w}catch(w){if(w instanceof Error)throw w;const S=w;return n.scrollToError&&y(Object.keys(S)[0]),b==null||b(!1,S),x&&Promise.reject(S)}},y=_=>{var b;const x=Tf(i,_)[0];x&&((b=x.$el)==null||b.scrollIntoView(n.scrollIntoViewOptions))};return be(()=>n.rules,()=>{n.validateOnRuleChange&&p().catch(_=>void 0)},{deep:!0}),Dt(zs,Ln({...Kd(n),emit:r,resetFields:c,clearValidate:h,validateField:g,getField:l,addField:u,removeField:f,...A4()})),t({validate:p,validateField:g,resetFields:c,clearValidate:h,scrollToField:y}),(_,b)=>(G(),ce("form",{class:re(T(s))},[Ce(_.$slots,"default")],2))}});var D4=Ke(L4,[["__file","form.vue"]]);function Qa(){return Qa=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Oc(e,t,r){return O4()?Oc=Reflect.construct.bind():Oc=function(i,a,o){var s=[null];s.push.apply(s,a);var l=Function.bind.apply(i,s),u=new l;return o&&Cu(u,o.prototype),u},Oc.apply(null,arguments)}function R4(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function cg(e){var t=typeof Map=="function"?new Map:void 0;return cg=function(n){if(n===null||!R4(n))return n;if(typeof n!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(n))return t.get(n);t.set(n,i)}function i(){return Oc(n,arguments,fg(this).constructor)}return i.prototype=Object.create(n.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),Cu(i,n)},cg(e)}var k4=/%[sdj%]/g,N4=function(){};function dg(e){if(!e||!e.length)return null;var t={};return e.forEach(function(r){var n=r.field;t[n]=t[n]||[],t[n].push(r)}),t}function Fr(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n=a)return s;switch(s){case"%s":return String(r[i++]);case"%d":return Number(r[i++]);case"%j":try{return JSON.stringify(r[i++])}catch{return"[Circular]"}break;default:return s}});return o}return e}function B4(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"}function Ut(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||B4(t)&&typeof e=="string"&&!e)}function F4(e,t,r){var n=[],i=0,a=e.length;function o(s){n.push.apply(n,s||[]),i++,i===a&&r(n)}e.forEach(function(s){t(s,o)})}function a1(e,t,r){var n=0,i=e.length;function a(o){if(o&&o.length){r(o);return}var s=n;n=n+1,st in e?DD(e,t,{enumerable:!0,config (?:`+n+":){1}(?:(?::"+n+"){0,4}:"+r+"|(?::"+n+`){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4 (?::(?:(?::`+n+"){0,5}:"+r+"|(?::"+n+`){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4 )(?:%[0-9a-zA-Z]{1,})? // %eth0 %1 -`).replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),a=new RegExp("(?:^"+r+"$)|(?:^"+i+"$)"),o=new RegExp("^"+r+"$"),s=new RegExp("^"+i+"$"),l=function(b){return b&&b.exact?a:new RegExp("(?:"+t(b)+r+t(b)+")|(?:"+t(b)+i+t(b)+")","g")};l.v4=function(_){return _&&_.exact?o:new RegExp(""+t(_)+r+t(_),"g")},l.v6=function(_){return _&&_.exact?s:new RegExp(""+t(_)+i+t(_),"g")};var u="(?:(?:[a-z]+:)?//)",f="(?:\\S+(?::\\S*)?@)?",c=l.v4().source,h=l.v6().source,d="(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)",v="(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*",p="(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))",m="(?::\\d{2,5})?",g='(?:[/?#][^\\s"]*)?',y="(?:"+u+"|www\\.)"+f+"(?:localhost|"+c+"|"+h+"|"+d+v+p+")"+m+g;return Mf=new RegExp("(?:^"+y+"$)","i"),Mf},u1={email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},xl={integer:function(t){return xl.number(t)&&parseInt(t,10)===t},float:function(t){return xl.number(t)&&!xl.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return typeof t=="object"&&!xl.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(u1.email)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(G4())},hex:function(t){return typeof t=="string"&&!!t.match(u1.hex)}},U4=function(t,r,n,i,a){if(t.required&&r===void 0){iA(t,r,n,i,a);return}var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=t.type;o.indexOf(s)>-1?xl[s](r)||i.push(Fr(a.messages.types[s],t.fullField,t.type)):s&&typeof r!==t.type&&i.push(Fr(a.messages.types[s],t.fullField,t.type))},Y4=function(t,r,n,i,a){var o=typeof t.len=="number",s=typeof t.min=="number",l=typeof t.max=="number",u=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=r,c=null,h=typeof r=="number",d=typeof r=="string",v=Array.isArray(r);if(h?c="number":d?c="string":v&&(c="array"),!c)return!1;v&&(f=r.length),d&&(f=r.replace(u,"_").length),o?f!==t.len&&i.push(Fr(a.messages[c].len,t.fullField,t.len)):s&&!l&&ft.max?i.push(Fr(a.messages[c].max,t.fullField,t.max)):s&&l&&(ft.max)&&i.push(Fr(a.messages[c].range,t.fullField,t.min,t.max))},Io="enum",j4=function(t,r,n,i,a){t[Io]=Array.isArray(t[Io])?t[Io]:[],t[Io].indexOf(r)===-1&&i.push(Fr(a.messages[Io],t.fullField,t[Io].join(", ")))},q4=function(t,r,n,i,a){if(t.pattern){if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(r)||i.push(Fr(a.messages.pattern.mismatch,t.fullField,r,t.pattern));else if(typeof t.pattern=="string"){var o=new RegExp(t.pattern);o.test(r)||i.push(Fr(a.messages.pattern.mismatch,t.fullField,r,t.pattern))}}},Xe={required:iA,whitespace:W4,type:U4,range:Y4,enum:j4,pattern:q4},K4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r,"string")&&!t.required)return n();Xe.required(t,r,i,o,a,"string"),Ut(r,"string")||(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a),Xe.pattern(t,r,i,o,a),t.whitespace===!0&&Xe.whitespace(t,r,i,o,a))}n(o)},X4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe.type(t,r,i,o,a)}n(o)},Z4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(r===""&&(r=void 0),Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},Q4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe.type(t,r,i,o,a)}n(o)},J4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),Ut(r)||Xe.type(t,r,i,o,a)}n(o)},eH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},tH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},rH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(r==null&&!t.required)return n();Xe.required(t,r,i,o,a,"array"),r!=null&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},nH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe.type(t,r,i,o,a)}n(o)},iH="enum",aH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe[iH](t,r,i,o,a)}n(o)},oH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r,"string")&&!t.required)return n();Xe.required(t,r,i,o,a),Ut(r,"string")||Xe.pattern(t,r,i,o,a)}n(o)},sH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r,"date")&&!t.required)return n();if(Xe.required(t,r,i,o,a),!Ut(r,"date")){var l;r instanceof Date?l=r:l=new Date(r),Xe.type(t,l,i,o,a),l&&Xe.range(t,l.getTime(),i,o,a)}}n(o)},lH=function(t,r,n,i,a){var o=[],s=Array.isArray(r)?"array":typeof r;Xe.required(t,r,i,o,a,s),n(o)},nv=function(t,r,n,i,a){var o=t.type,s=[],l=t.required||!t.required&&i.hasOwnProperty(t.field);if(l){if(Ut(r,o)&&!t.required)return n();Xe.required(t,r,i,s,a,o),Ut(r,o)||Xe.type(t,r,i,s,a)}n(s)},uH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a)}n(o)},Hl={string:K4,method:X4,number:Z4,boolean:Q4,regexp:J4,integer:eH,float:tH,array:rH,object:nH,enum:aH,pattern:oH,date:sH,url:nv,hex:nv,email:nv,required:lH,any:uH};function hg(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var vg=hg(),rf=function(){function e(r){this.rules=null,this._messages=vg,this.define(r)}var t=e.prototype;return t.define=function(n){var i=this;if(!n)throw new Error("Cannot configure a schema with no rules");if(typeof n!="object"||Array.isArray(n))throw new Error("Rules must be an object");this.rules={},Object.keys(n).forEach(function(a){var o=n[a];i.rules[a]=Array.isArray(o)?o:[o]})},t.messages=function(n){return n&&(this._messages=l1(hg(),n)),this._messages},t.validate=function(n,i,a){var o=this;i===void 0&&(i={}),a===void 0&&(a=function(){});var s=n,l=i,u=a;if(typeof l=="function"&&(u=l,l={}),!this.rules||Object.keys(this.rules).length===0)return u&&u(null,s),Promise.resolve(s);function f(p){var m=[],g={};function y(b){if(Array.isArray(b)){var x;m=(x=m).concat.apply(x,b)}else m.push(b)}for(var _=0;_");const i=Oe("form"),a=$(),o=$(0),s=()=>{var f;if((f=a.value)!=null&&f.firstElementChild){const c=window.getComputedStyle(a.value.firstElementChild).width;return Math.ceil(Number.parseFloat(c))}else return 0},l=(f="update")=>{kt(()=>{t.default&&e.isAutoWidth&&(f==="update"?o.value=s():f==="remove"&&(r==null||r.deregisterLabelWidth(o.value)))})},u=()=>l("update");return _t(()=>{u()}),tr(()=>{l("remove")}),Uu(()=>u()),we(o,(f,c)=>{e.updateAll&&(r==null||r.registerLabelWidth(f,c))}),ps(k(()=>{var f,c;return(c=(f=a.value)==null?void 0:f.firstElementChild)!=null?c:null}),u),()=>{var f,c;if(!t)return null;const{isAutoWidth:h}=e;if(h){const d=r==null?void 0:r.autoLabelWidth,v=n==null?void 0:n.hasLabel,p={};if(v&&d&&d!=="auto"){const m=Math.max(0,Number.parseInt(d,10)-o.value),g=r.labelPosition==="left"?"marginRight":"marginLeft";m&&(p[g]=`${m}px`)}return Z("div",{ref:a,class:[i.be("item","label-wrap")],style:p},[(f=t.default)==null?void 0:f.call(t)])}else return Z(ft,{ref:a},[(c=t.default)==null?void 0:c.call(t)])}}});const hH=["role","aria-labelledby"],vH=ie({name:"ElFormItem"}),pH=ie({...vH,props:cH,setup(e,{expose:t}){const r=e,n=Rs(),i=Le($s,void 0),a=Le(yo,void 0),o=xi(void 0,{formItem:!1}),s=Oe("form-item"),l=xu().value,u=$([]),f=$(""),c=pR(f,100),h=$(""),d=$();let v,p=!1;const m=k(()=>{if((i==null?void 0:i.labelPosition)==="top")return{};const B=Zn(r.labelWidth||(i==null?void 0:i.labelWidth)||"");return B?{width:B}:{}}),g=k(()=>{if((i==null?void 0:i.labelPosition)==="top"||i!=null&&i.inline)return{};if(!r.label&&!r.labelWidth&&M)return{};const B=Zn(r.labelWidth||(i==null?void 0:i.labelWidth)||"");return!r.label&&!n.label?{marginLeft:B}:{}}),y=k(()=>[s.b(),s.m(o.value),s.is("error",f.value==="error"),s.is("validating",f.value==="validating"),s.is("success",f.value==="success"),s.is("required",O.value||r.required),s.is("no-asterisk",i==null?void 0:i.hideRequiredAsterisk),(i==null?void 0:i.requireAsteriskPosition)==="right"?"asterisk-right":"asterisk-left",{[s.m("feedback")]:i==null?void 0:i.statusIcon}]),_=k(()=>zr(r.inlineMessage)?r.inlineMessage:(i==null?void 0:i.inlineMessage)||!1),b=k(()=>[s.e("error"),{[s.em("error","inline")]:_.value}]),x=k(()=>r.prop?ze(r.prop)?r.prop:r.prop.join("."):""),w=k(()=>!!(r.label||n.label)),S=k(()=>r.for||(u.value.length===1?u.value[0]:void 0)),C=k(()=>!S.value&&w.value),M=!!a,A=k(()=>{const B=i==null?void 0:i.model;if(!(!B||!r.prop))return Ec(B,r.prop).value}),P=k(()=>{const{required:B}=r,Y=[];r.rules&&Y.push(...Jp(r.rules));const K=i==null?void 0:i.rules;if(K&&r.prop){const Q=Ec(K,r.prop).value;Q&&Y.push(...Jp(Q))}if(B!==void 0){const Q=Y.map((oe,pe)=>[oe,pe]).filter(([oe])=>Object.keys(oe).includes("required"));if(Q.length>0)for(const[oe,pe]of Q)oe.required!==B&&(Y[pe]={...oe,required:B});else Y.push({required:B})}return Y}),E=k(()=>P.value.length>0),L=B=>P.value.filter(K=>!K.trigger||!B?!0:Array.isArray(K.trigger)?K.trigger.includes(B):K.trigger===B).map(({trigger:K,...Q})=>Q),O=k(()=>P.value.some(B=>B.required)),N=k(()=>{var B;return c.value==="error"&&r.showMessage&&((B=i==null?void 0:i.showMessage)!=null?B:!0)}),H=k(()=>`${r.label||""}${(i==null?void 0:i.labelSuffix)||""}`),V=B=>{f.value=B},U=B=>{var Y,K;const{errors:Q,fields:oe}=B;(!Q||!oe)&&console.error(B),V("error"),h.value=Q?(K=(Y=Q==null?void 0:Q[0])==null?void 0:Y.message)!=null?K:`${r.prop} is required`:"",i==null||i.emit("validate",r.prop,!1,h.value)},F=()=>{V("success"),i==null||i.emit("validate",r.prop,!0,"")},z=async B=>{const Y=x.value;return new rf({[Y]:B}).validate({[Y]:A.value},{firstFields:!0}).then(()=>(F(),!0)).catch(Q=>(U(Q),Promise.reject(Q)))},te=async(B,Y)=>{if(p||!r.prop)return!1;const K=De(Y);if(!E.value)return Y==null||Y(!1),!1;const Q=L(B);return Q.length===0?(Y==null||Y(!0),!0):(V("validating"),z(Q).then(()=>(Y==null||Y(!0),!0)).catch(oe=>{const{fields:pe}=oe;return Y==null||Y(!1,pe),K?!1:Promise.reject(pe)}))},J=()=>{V(""),h.value="",p=!1},me=async()=>{const B=i==null?void 0:i.model;if(!B||!r.prop)return;const Y=Ec(B,r.prop);p=!0,Y.value=Bb(v),await kt(),J(),p=!1},Se=B=>{u.value.includes(B)||u.value.push(B)},$e=B=>{u.value=u.value.filter(Y=>Y!==B)};we(()=>r.error,B=>{h.value=B||"",V(B?"error":"")},{immediate:!0}),we(()=>r.validateStatus,B=>V(B||""));const Ie=Ln({...Kd(r),$el:d,size:o,validateState:f,labelId:l,inputIds:u,isGroup:C,hasLabel:w,fieldValue:A,addInputId:Se,removeInputId:$e,resetField:me,clearValidate:J,validate:te});return Dt(yo,Ie),_t(()=>{r.prop&&(i==null||i.addField(Ie),v=Bb(A.value))}),tr(()=>{i==null||i.removeField(Ie)}),t({size:o,validateMessage:h,validateState:f,validate:te,clearValidate:J,resetField:me}),(B,Y)=>{var K;return G(),ce("div",{ref_key:"formItemRef",ref:d,class:re(T(y)),role:T(C)?"group":void 0,"aria-labelledby":T(C)?T(l):void 0},[Z(T(dH),{"is-auto-width":T(m).width==="auto","update-all":((K=T(i))==null?void 0:K.labelWidth)==="auto"},{default:j(()=>[T(w)?(G(),de(Vt(T(S)?"label":"div"),{key:0,id:T(l),for:T(S),class:re(T(s).e("label")),style:ct(T(m))},{default:j(()=>[Ce(B.$slots,"label",{label:T(H)},()=>[mt(be(T(H)),1)])]),_:3},8,["id","for","class","style"])):Ae("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),ee("div",{class:re(T(s).e("content")),style:ct(T(g))},[Ce(B.$slots,"default"),Z(KO,{name:`${T(s).namespace.value}-zoom-in-top`},{default:j(()=>[T(N)?Ce(B.$slots,"error",{key:0,error:h.value},()=>[ee("div",{class:re(T(b))},be(h.value),3)]):Ae("v-if",!0)]),_:3},8,["name"])],6)],10,hH)}}});var aA=Ke(pH,[["__file","form-item.vue"]]);const oA=Yt(D4,{FormItem:aA}),sA=pa(aA),Qo=4,gH={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},mH=({move:e,size:t,bar:r})=>({[r.size]:t,transform:`translate${r.axis}(${e}%)`}),lA=Symbol("scrollbarContextKey"),yH=Je({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),_H="Thumb",bH=ie({__name:"thumb",props:yH,setup(e){const t=e,r=Le(lA),n=Oe("scrollbar");r||bi(_H,"can not inject scrollbar context");const i=$(),a=$(),o=$({}),s=$(!1);let l=!1,u=!1,f=At?document.onselectstart:null;const c=k(()=>gH[t.vertical?"vertical":"horizontal"]),h=k(()=>mH({size:t.size,move:t.move,bar:c.value})),d=k(()=>i.value[c.value.offset]**2/r.wrapElement[c.value.scrollSize]/t.ratio/a.value[c.value.offset]),v=w=>{var S;if(w.stopPropagation(),w.ctrlKey||[1,2].includes(w.button))return;(S=window.getSelection())==null||S.removeAllRanges(),m(w);const C=w.currentTarget;C&&(o.value[c.value.axis]=C[c.value.offset]-(w[c.value.client]-C.getBoundingClientRect()[c.value.direction]))},p=w=>{if(!a.value||!i.value||!r.wrapElement)return;const S=Math.abs(w.target.getBoundingClientRect()[c.value.direction]-w[c.value.client]),C=a.value[c.value.offset]/2,M=(S-C)*100*d.value/i.value[c.value.offset];r.wrapElement[c.value.scroll]=M*r.wrapElement[c.value.scrollSize]/100},m=w=>{w.stopImmediatePropagation(),l=!0,document.addEventListener("mousemove",g),document.addEventListener("mouseup",y),f=document.onselectstart,document.onselectstart=()=>!1},g=w=>{if(!i.value||!a.value||l===!1)return;const S=o.value[c.value.axis];if(!S)return;const C=(i.value.getBoundingClientRect()[c.value.direction]-w[c.value.client])*-1,M=a.value[c.value.offset]-S,A=(C-M)*100*d.value/i.value[c.value.offset];r.wrapElement[c.value.scroll]=A*r.wrapElement[c.value.scrollSize]/100},y=()=>{l=!1,o.value[c.value.axis]=0,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",y),x(),u&&(s.value=!1)},_=()=>{u=!1,s.value=!!t.size},b=()=>{u=!0,s.value=l};tr(()=>{x(),document.removeEventListener("mouseup",y)});const x=()=>{document.onselectstart!==f&&(document.onselectstart=f)};return xn(wn(r,"scrollbarElement"),"mousemove",_),xn(wn(r,"scrollbarElement"),"mouseleave",b),(w,S)=>(G(),de(ti,{name:T(n).b("fade"),persisted:""},{default:j(()=>[qt(ee("div",{ref_key:"instance",ref:i,class:re([T(n).e("bar"),T(n).is(T(c).key)]),onMousedown:p},[ee("div",{ref_key:"thumb",ref:a,class:re(T(n).e("thumb")),style:ct(T(h)),onMousedown:v},null,38)],34),[[Kn,w.always||s.value]])]),_:1},8,["name"]))}});var c1=Ke(bH,[["__file","thumb.vue"]]);const wH=Je({always:{type:Boolean,default:!0},width:String,height:String,ratioX:{type:Number,default:1},ratioY:{type:Number,default:1}}),SH=ie({__name:"bar",props:wH,setup(e,{expose:t}){const r=e,n=$(0),i=$(0);return t({handleScroll:o=>{if(o){const s=o.offsetHeight-Qo,l=o.offsetWidth-Qo;i.value=o.scrollTop*100/s*r.ratioY,n.value=o.scrollLeft*100/l*r.ratioX}}}),(o,s)=>(G(),ce(ft,null,[Z(c1,{move:n.value,ratio:o.ratioX,size:o.width,always:o.always},null,8,["move","ratio","size","always"]),Z(c1,{move:i.value,ratio:o.ratioY,size:o.height,vertical:"",always:o.always},null,8,["move","ratio","size","always"])],64))}});var xH=Ke(SH,[["__file","bar.vue"]]);const CH=Je({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:Be([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},id:String,role:String,ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical"]}}),TH={scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(Rt)},MH="ElScrollbar",AH=ie({name:MH}),PH=ie({...AH,props:CH,emits:TH,setup(e,{expose:t,emit:r}){const n=e,i=Oe("scrollbar");let a,o;const s=$(),l=$(),u=$(),f=$("0"),c=$("0"),h=$(),d=$(1),v=$(1),p=k(()=>{const S={};return n.height&&(S.height=Zn(n.height)),n.maxHeight&&(S.maxHeight=Zn(n.maxHeight)),[n.wrapStyle,S]}),m=k(()=>[n.wrapClass,i.e("wrap"),{[i.em("wrap","hidden-default")]:!n.native}]),g=k(()=>[i.e("view"),n.viewClass]),y=()=>{var S;l.value&&((S=h.value)==null||S.handleScroll(l.value),r("scroll",{scrollTop:l.value.scrollTop,scrollLeft:l.value.scrollLeft}))};function _(S,C){qe(S)?l.value.scrollTo(S):Rt(S)&&Rt(C)&&l.value.scrollTo(S,C)}const b=S=>{Rt(S)&&(l.value.scrollTop=S)},x=S=>{Rt(S)&&(l.value.scrollLeft=S)},w=()=>{if(!l.value)return;const S=l.value.offsetHeight-Qo,C=l.value.offsetWidth-Qo,M=S**2/l.value.scrollHeight,A=C**2/l.value.scrollWidth,P=Math.max(M,n.minSize),E=Math.max(A,n.minSize);d.value=M/(S-M)/(P/(S-P)),v.value=A/(C-A)/(E/(C-E)),c.value=P+Qon.noresize,S=>{S?(a==null||a(),o==null||o()):({stop:a}=ps(u,w),o=xn("resize",w))},{immediate:!0}),we(()=>[n.maxHeight,n.height],()=>{n.native||kt(()=>{var S;w(),l.value&&((S=h.value)==null||S.handleScroll(l.value))})}),Dt(lA,Ln({scrollbarElement:s,wrapElement:l})),_t(()=>{n.native||kt(()=>{w()})}),Uu(()=>w()),t({wrapRef:l,update:w,scrollTo:_,setScrollTop:b,setScrollLeft:x,handleScroll:y}),(S,C)=>(G(),ce("div",{ref_key:"scrollbarRef",ref:s,class:re(T(i).b())},[ee("div",{ref_key:"wrapRef",ref:l,class:re(T(m)),style:ct(T(p)),onScroll:y},[(G(),de(Vt(S.tag),{id:S.id,ref_key:"resizeRef",ref:u,class:re(T(g)),style:ct(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:j(()=>[Ce(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],38),S.native?Ae("v-if",!0):(G(),de(xH,{key:0,ref_key:"barRef",ref:h,height:c.value,width:f.value,always:S.always,"ratio-x":v.value,"ratio-y":d.value},null,8,["height","width","always","ratio-x","ratio-y"]))],2))}});var EH=Ke(PH,[["__file","scrollbar.vue"]]);const uA=Yt(EH),Wy=Symbol("popper"),fA=Symbol("popperContent"),LH=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],cA=Je({role:{type:String,values:LH,default:"tooltip"}}),DH=ie({name:"ElPopper",inheritAttrs:!1}),IH=ie({...DH,props:cA,setup(e,{expose:t}){const r=e,n=$(),i=$(),a=$(),o=$(),s=k(()=>r.role),l={triggerRef:n,popperInstanceRef:i,contentRef:a,referenceRef:o,role:s};return t(l),Dt(Wy,l),(u,f)=>Ce(u.$slots,"default")}});var OH=Ke(IH,[["__file","popper.vue"]]);const dA=Je({arrowOffset:{type:Number,default:5}}),RH=ie({name:"ElPopperArrow",inheritAttrs:!1}),kH=ie({...RH,props:dA,setup(e,{expose:t}){const r=e,n=Oe("popper"),{arrowOffset:i,arrowRef:a,arrowStyle:o}=Le(fA,void 0);return we(()=>r.arrowOffset,s=>{i.value=s}),tr(()=>{a.value=void 0}),t({arrowRef:a}),(s,l)=>(G(),ce("span",{ref_key:"arrowRef",ref:a,class:re(T(n).e("arrow")),style:ct(T(o)),"data-popper-arrow":""},null,6))}});var NH=Ke(kH,[["__file","arrow.vue"]]);const BH="ElOnlyChild",FH=ie({name:BH,setup(e,{slots:t,attrs:r}){var n;const i=Le(JM),a=p4((n=i==null?void 0:i.setForwardRef)!=null?n:Bt);return()=>{var o;const s=(o=t.default)==null?void 0:o.call(t,r);if(!s||s.length>1)return null;const l=hA(s);return l?qt(_i(l,r),[[a]]):null}}});function hA(e){if(!e)return null;const t=e;for(const r of t){if(qe(r))switch(r.type){case Mr:continue;case ks:case"svg":return d1(r);case ft:return hA(r.children);default:return r}return d1(r)}return null}function d1(e){const t=Oe("only-child");return Z("span",{class:t.e("content")},[e])}const vA=Je({virtualRef:{type:Be(Object)},virtualTriggering:Boolean,onMouseenter:{type:Be(Function)},onMouseleave:{type:Be(Function)},onClick:{type:Be(Function)},onKeydown:{type:Be(Function)},onFocus:{type:Be(Function)},onBlur:{type:Be(Function)},onContextmenu:{type:Be(Function)},id:String,open:Boolean}),$H=ie({name:"ElPopperTrigger",inheritAttrs:!1}),HH=ie({...$H,props:vA,setup(e,{expose:t}){const r=e,{role:n,triggerRef:i}=Le(Wy,void 0);v4(i);const a=k(()=>s.value?r.id:void 0),o=k(()=>{if(n&&n.value==="tooltip")return r.open&&r.id?r.id:void 0}),s=k(()=>{if(n&&n.value!=="tooltip")return n.value}),l=k(()=>s.value?`${r.open}`:void 0);let u;return _t(()=>{we(()=>r.virtualRef,f=>{f&&(i.value=Zi(f))},{immediate:!0}),we(i,(f,c)=>{u==null||u(),u=void 0,mo(f)&&(["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"].forEach(h=>{var d;const v=r[h];v&&(f.addEventListener(h.slice(2).toLowerCase(),v),(d=c==null?void 0:c.removeEventListener)==null||d.call(c,h.slice(2).toLowerCase(),v))}),u=we([a,o,s,l],h=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((d,v)=>{ms(h[v])?f.removeAttribute(d):f.setAttribute(d,h[v])})},{immediate:!0})),mo(c)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(h=>c.removeAttribute(h))},{immediate:!0})}),tr(()=>{u==null||u(),u=void 0}),t({triggerRef:i}),(f,c)=>f.virtualTriggering?Ae("v-if",!0):(G(),de(T(FH),ei({key:0},f.$attrs,{"aria-controls":T(a),"aria-describedby":T(o),"aria-expanded":T(l),"aria-haspopup":T(s)}),{default:j(()=>[Ce(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var zH=Ke(HH,[["__file","trigger.vue"]]);const iv="focus-trap.focus-after-trapped",av="focus-trap.focus-after-released",VH="focus-trap.focusout-prevented",h1={cancelable:!0,bubbles:!1},WH={cancelable:!0,bubbles:!1},v1="focusAfterTrapped",p1="focusAfterReleased",pA=Symbol("elFocusTrap"),Gy=$(),ph=$(0),Uy=$(0);let Af=0;const gA=e=>{const t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const i=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||i?NodeFilter.FILTER_SKIP:n.tabIndex>=0||n===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;r.nextNode();)t.push(r.currentNode);return t},g1=(e,t)=>{for(const r of e)if(!GH(r,t))return r},GH=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},UH=e=>{const t=gA(e),r=g1(t,e),n=g1(t.reverse(),e);return[r,n]},YH=e=>e instanceof HTMLInputElement&&"select"in e,Vi=(e,t)=>{if(e&&e.focus){const r=document.activeElement;e.focus({preventScroll:!0}),Uy.value=window.performance.now(),e!==r&&YH(e)&&t&&e.select()}};function m1(e,t){const r=[...e],n=e.indexOf(t);return n!==-1&&r.splice(n,1),r}const jH=()=>{let e=[];return{push:n=>{const i=e[0];i&&n!==i&&i.pause(),e=m1(e,n),e.unshift(n)},remove:n=>{var i,a;e=m1(e,n),(a=(i=e[0])==null?void 0:i.resume)==null||a.call(i)}}},qH=(e,t=!1)=>{const r=document.activeElement;for(const n of e)if(Vi(n,t),document.activeElement!==r)return},y1=jH(),KH=()=>ph.value>Uy.value,Pf=()=>{Gy.value="pointer",ph.value=window.performance.now()},_1=()=>{Gy.value="keyboard",ph.value=window.performance.now()},XH=()=>(_t(()=>{Af===0&&(document.addEventListener("mousedown",Pf),document.addEventListener("touchstart",Pf),document.addEventListener("keydown",_1)),Af++}),tr(()=>{Af--,Af<=0&&(document.removeEventListener("mousedown",Pf),document.removeEventListener("touchstart",Pf),document.removeEventListener("keydown",_1))}),{focusReason:Gy,lastUserFocusTimestamp:ph,lastAutomatedFocusTimestamp:Uy}),Ef=e=>new CustomEvent(VH,{...WH,detail:e}),ZH=ie({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[v1,p1,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const r=$();let n,i;const{focusReason:a}=XH();u4(v=>{e.trapped&&!o.paused&&t("release-requested",v)});const o={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},s=v=>{if(!e.loop&&!e.trapped||o.paused)return;const{key:p,altKey:m,ctrlKey:g,metaKey:y,currentTarget:_,shiftKey:b}=v,{loop:x}=e,w=p===hr.tab&&!m&&!g&&!y,S=document.activeElement;if(w&&S){const C=_,[M,A]=UH(C);if(M&&A){if(!b&&S===A){const E=Ef({focusReason:a.value});t("focusout-prevented",E),E.defaultPrevented||(v.preventDefault(),x&&Vi(M,!0))}else if(b&&[M,C].includes(S)){const E=Ef({focusReason:a.value});t("focusout-prevented",E),E.defaultPrevented||(v.preventDefault(),x&&Vi(A,!0))}}else if(S===C){const E=Ef({focusReason:a.value});t("focusout-prevented",E),E.defaultPrevented||v.preventDefault()}}};Dt(pA,{focusTrapRef:r,onKeydown:s}),we(()=>e.focusTrapEl,v=>{v&&(r.value=v)},{immediate:!0}),we([r],([v],[p])=>{v&&(v.addEventListener("keydown",s),v.addEventListener("focusin",f),v.addEventListener("focusout",c)),p&&(p.removeEventListener("keydown",s),p.removeEventListener("focusin",f),p.removeEventListener("focusout",c))});const l=v=>{t(v1,v)},u=v=>t(p1,v),f=v=>{const p=T(r);if(!p)return;const m=v.target,g=v.relatedTarget,y=m&&p.contains(m);e.trapped||g&&p.contains(g)||(n=g),y&&t("focusin",v),!o.paused&&e.trapped&&(y?i=m:Vi(i,!0))},c=v=>{const p=T(r);if(!(o.paused||!p))if(e.trapped){const m=v.relatedTarget;!ms(m)&&!p.contains(m)&&setTimeout(()=>{if(!o.paused&&e.trapped){const g=Ef({focusReason:a.value});t("focusout-prevented",g),g.defaultPrevented||Vi(i,!0)}},0)}else{const m=v.target;m&&p.contains(m)||t("focusout",v)}};async function h(){await kt();const v=T(r);if(v){y1.push(o);const p=v.contains(document.activeElement)?n:document.activeElement;if(n=p,!v.contains(p)){const g=new Event(iv,h1);v.addEventListener(iv,l),v.dispatchEvent(g),g.defaultPrevented||kt(()=>{let y=e.focusStartEl;ze(y)||(Vi(y),document.activeElement!==y&&(y="first")),y==="first"&&qH(gA(v),!0),(document.activeElement===p||y==="container")&&Vi(v)})}}}function d(){const v=T(r);if(v){v.removeEventListener(iv,l);const p=new CustomEvent(av,{...h1,detail:{focusReason:a.value}});v.addEventListener(av,u),v.dispatchEvent(p),!p.defaultPrevented&&(a.value=="keyboard"||!KH()||v.contains(document.activeElement))&&Vi(n??document.body),v.removeEventListener(av,u),y1.remove(o)}}return _t(()=>{e.trapped&&h(),we(()=>e.trapped,v=>{v?h():d()})}),tr(()=>{e.trapped&&d()}),{onKeydown:s}}});function QH(e,t,r,n,i,a){return Ce(e.$slots,"default",{handleKeydown:e.onKeydown})}var mA=Ke(ZH,[["render",QH],["__file","focus-trap.vue"]]);const JH=["fixed","absolute"],ez=Je({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Be(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Oy,default:"bottom"},popperOptions:{type:Be(Object),default:()=>({})},strategy:{type:String,values:JH,default:"absolute"}}),yA=Je({...ez,id:String,style:{type:Be([String,Array,Object])},className:{type:Be([String,Array,Object])},effect:{type:String,default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:{type:Boolean,default:!1},trapping:{type:Boolean,default:!1},popperClass:{type:Be([String,Array,Object])},popperStyle:{type:Be([String,Array,Object])},referenceEl:{type:Be(Object)},triggerTargetEl:{type:Be(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},ariaLabel:{type:String,default:void 0},virtualTriggering:Boolean,zIndex:Number}),tz={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},rz=(e,t=[])=>{const{placement:r,strategy:n,popperOptions:i}=e,a={placement:r,strategy:n,...i,modifiers:[...iz(e),...t]};return az(a,i==null?void 0:i.modifiers),a},nz=e=>{if(At)return Zi(e)};function iz(e){const{offset:t,gpuAcceleration:r,fallbackPlacements:n}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:n}},{name:"computeStyles",options:{gpuAcceleration:r}}]}function az(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const oz=0,sz=e=>{const{popperInstanceRef:t,contentRef:r,triggerRef:n,role:i}=Le(Wy,void 0),a=$(),o=$(),s=k(()=>({name:"eventListeners",enabled:!!e.visible})),l=k(()=>{var g;const y=T(a),_=(g=T(o))!=null?g:oz;return{name:"arrow",enabled:!MM(y),options:{element:y,padding:_}}}),u=k(()=>({onFirstUpdate:()=>{v()},...rz(e,[T(l),T(s)])})),f=k(()=>nz(e.referenceEl)||T(n)),{attributes:c,state:h,styles:d,update:v,forceUpdate:p,instanceRef:m}=o4(f,r,u);return we(m,g=>t.value=g),_t(()=>{we(()=>{var g;return(g=T(f))==null?void 0:g.getBoundingClientRect()},()=>{v()})}),{attributes:c,arrowRef:a,contentRef:r,instanceRef:m,state:h,styles:d,role:i,forceUpdate:p,update:v}},lz=(e,{attributes:t,styles:r,role:n})=>{const{nextZIndex:i}=zy(),a=Oe("popper"),o=k(()=>T(t).popper),s=$(Rt(e.zIndex)?e.zIndex:i()),l=k(()=>[a.b(),a.is("pure",e.pure),a.is(e.effect),e.popperClass]),u=k(()=>[{zIndex:T(s)},T(r).popper,e.popperStyle||{}]),f=k(()=>n.value==="dialog"?"false":void 0),c=k(()=>T(r).arrow||{});return{ariaModal:f,arrowStyle:c,contentAttrs:o,contentClass:l,contentStyle:u,contentZIndex:s,updateZIndex:()=>{s.value=Rt(e.zIndex)?e.zIndex:i()}}},uz=(e,t)=>{const r=$(!1),n=$();return{focusStartRef:n,trapped:r,onFocusAfterReleased:u=>{var f;((f=u.detail)==null?void 0:f.focusReason)!=="pointer"&&(n.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:u=>{e.visible&&!r.value&&(u.target&&(n.value=u.target),r.value=!0)},onFocusoutPrevented:u=>{e.trapping||(u.detail.focusReason==="pointer"&&u.preventDefault(),r.value=!1)},onReleaseRequested:()=>{r.value=!1,t("close")}}},fz=ie({name:"ElPopperContent"}),cz=ie({...fz,props:yA,emits:tz,setup(e,{expose:t,emit:r}){const n=e,{focusStartRef:i,trapped:a,onFocusAfterReleased:o,onFocusAfterTrapped:s,onFocusInTrap:l,onFocusoutPrevented:u,onReleaseRequested:f}=uz(n,r),{attributes:c,arrowRef:h,contentRef:d,styles:v,instanceRef:p,role:m,update:g}=sz(n),{ariaModal:y,arrowStyle:_,contentAttrs:b,contentClass:x,contentStyle:w,updateZIndex:S}=lz(n,{styles:v,attributes:c,role:m}),C=Le(yo,void 0),M=$();Dt(fA,{arrowStyle:_,arrowRef:h,arrowOffset:M}),C&&(C.addInputId||C.removeInputId)&&Dt(yo,{...C,addInputId:Bt,removeInputId:Bt});let A;const P=(L=!0)=>{g(),L&&S()},E=()=>{P(!1),n.visible&&n.focusOnShow?a.value=!0:n.visible===!1&&(a.value=!1)};return _t(()=>{we(()=>n.triggerTargetEl,(L,O)=>{A==null||A(),A=void 0;const N=T(L||d.value),H=T(O||d.value);mo(N)&&(A=we([m,()=>n.ariaLabel,y,()=>n.id],V=>{["role","aria-label","aria-modal","id"].forEach((U,F)=>{ms(V[F])?N.removeAttribute(U):N.setAttribute(U,V[F])})},{immediate:!0})),H!==N&&mo(H)&&["role","aria-label","aria-modal","id"].forEach(V=>{H.removeAttribute(V)})},{immediate:!0}),we(()=>n.visible,E,{immediate:!0})}),tr(()=>{A==null||A(),A=void 0}),t({popperContentRef:d,popperInstanceRef:p,updatePopper:P,contentStyle:w}),(L,O)=>(G(),ce("div",ei({ref_key:"contentRef",ref:d},T(b),{style:T(w),class:T(x),tabindex:"-1",onMouseenter:O[0]||(O[0]=N=>L.$emit("mouseenter",N)),onMouseleave:O[1]||(O[1]=N=>L.$emit("mouseleave",N))}),[Z(T(mA),{trapped:T(a),"trap-on-focus-in":!0,"focus-trap-el":T(d),"focus-start-el":T(i),onFocusAfterTrapped:T(s),onFocusAfterReleased:T(o),onFocusin:T(l),onFocusoutPrevented:T(u),onReleaseRequested:T(f)},{default:j(()=>[Ce(L.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16))}});var dz=Ke(cz,[["__file","content.vue"]]);const hz=Yt(OH),Yy=Symbol("elTooltip"),md=Je({...d4,...yA,appendTo:{type:Be([String,Object])},content:{type:String,default:""},rawContent:{type:Boolean,default:!1},persistent:Boolean,ariaLabel:String,visible:{type:Be(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean}),_A=Je({...vA,disabled:Boolean,trigger:{type:Be([String,Array]),default:"hover"},triggerKeys:{type:Be(Array),default:()=>[hr.enter,hr.space]}}),{useModelToggleProps:vz,useModelToggleEmits:pz,useModelToggle:gz}=BM("visible"),mz=Je({...cA,...vz,...md,..._A,...dA,showArrow:{type:Boolean,default:!0}}),yz=[...pz,"before-show","before-hide","show","hide","open","close"],_z=(e,t)=>_e(e)?e.includes(t):e===t,Oo=(e,t,r)=>n=>{_z(T(e),t)&&r(n)},bz=ie({name:"ElTooltipTrigger"}),wz=ie({...bz,props:_A,setup(e,{expose:t}){const r=e,n=Oe("tooltip"),{controlled:i,id:a,open:o,onOpen:s,onClose:l,onToggle:u}=Le(Yy,void 0),f=$(null),c=()=>{if(T(i)||r.disabled)return!0},h=wn(r,"trigger"),d=di(c,Oo(h,"hover",s)),v=di(c,Oo(h,"hover",l)),p=di(c,Oo(h,"click",b=>{b.button===0&&u(b)})),m=di(c,Oo(h,"focus",s)),g=di(c,Oo(h,"focus",l)),y=di(c,Oo(h,"contextmenu",b=>{b.preventDefault(),u(b)})),_=di(c,b=>{const{code:x}=b;r.triggerKeys.includes(x)&&(b.preventDefault(),u(b))});return t({triggerRef:f}),(b,x)=>(G(),de(T(zH),{id:T(a),"virtual-ref":b.virtualRef,open:T(o),"virtual-triggering":b.virtualTriggering,class:re(T(n).e("trigger")),onBlur:T(g),onClick:T(p),onContextmenu:T(y),onFocus:T(m),onMouseenter:T(d),onMouseleave:T(v),onKeydown:T(_)},{default:j(()=>[Ce(b.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Sz=Ke(wz,[["__file","trigger.vue"]]);const xz=ie({name:"ElTooltipContent",inheritAttrs:!1}),Cz=ie({...xz,props:md,setup(e,{expose:t}){const r=e,{selector:n}=QM(),i=Oe("tooltip"),a=$(null),o=$(!1),{controlled:s,id:l,open:u,trigger:f,onClose:c,onOpen:h,onShow:d,onHide:v,onBeforeShow:p,onBeforeHide:m}=Le(Yy,void 0),g=k(()=>r.transition||`${i.namespace.value}-fade-in-linear`),y=k(()=>r.persistent);tr(()=>{o.value=!0});const _=k(()=>T(y)?!0:T(u)),b=k(()=>r.disabled?!1:T(u)),x=k(()=>r.appendTo||n.value),w=k(()=>{var V;return(V=r.style)!=null?V:{}}),S=k(()=>!T(u)),C=()=>{v()},M=()=>{if(T(s))return!0},A=di(M,()=>{r.enterable&&T(f)==="hover"&&h()}),P=di(M,()=>{T(f)==="hover"&&c()}),E=()=>{var V,U;(U=(V=a.value)==null?void 0:V.updatePopper)==null||U.call(V),p==null||p()},L=()=>{m==null||m()},O=()=>{d(),H=ER(k(()=>{var V;return(V=a.value)==null?void 0:V.popperContentRef}),()=>{if(T(s))return;T(f)!=="hover"&&c()})},N=()=>{r.virtualTriggering||c()};let H;return we(()=>T(u),V=>{V||H==null||H()},{flush:"post"}),we(()=>r.content,()=>{var V,U;(U=(V=a.value)==null?void 0:V.updatePopper)==null||U.call(V)}),t({contentRef:a}),(V,U)=>(G(),de(MT,{disabled:!V.teleported,to:T(x)},[Z(ti,{name:T(g),onAfterLeave:C,onBeforeEnter:E,onAfterEnter:O,onBeforeLeave:L},{default:j(()=>[T(_)?qt((G(),de(T(dz),ei({key:0,id:T(l),ref_key:"contentRef",ref:a},V.$attrs,{"aria-label":V.ariaLabel,"aria-hidden":T(S),"boundaries-padding":V.boundariesPadding,"fallback-placements":V.fallbackPlacements,"gpu-acceleration":V.gpuAcceleration,offset:V.offset,placement:V.placement,"popper-options":V.popperOptions,strategy:V.strategy,effect:V.effect,enterable:V.enterable,pure:V.pure,"popper-class":V.popperClass,"popper-style":[V.popperStyle,T(w)],"reference-el":V.referenceEl,"trigger-target-el":V.triggerTargetEl,visible:T(b),"z-index":V.zIndex,onMouseenter:T(A),onMouseleave:T(P),onBlur:N,onClose:T(c)}),{default:j(()=>[o.value?Ae("v-if",!0):Ce(V.$slots,"default",{key:0})]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[Kn,T(b)]]):Ae("v-if",!0)]),_:3},8,["name"])],8,["disabled","to"]))}});var Tz=Ke(Cz,[["__file","content.vue"]]);const Mz=["innerHTML"],Az={key:1},Pz=ie({name:"ElTooltip"}),Ez=ie({...Pz,props:mz,emits:yz,setup(e,{expose:t,emit:r}){const n=e;c4();const i=xu(),a=$(),o=$(),s=()=>{var g;const y=T(a);y&&((g=y.popperInstanceRef)==null||g.update())},l=$(!1),u=$(),{show:f,hide:c,hasUpdateHandler:h}=gz({indicator:l,toggleReason:u}),{onOpen:d,onClose:v}=h4({showAfter:wn(n,"showAfter"),hideAfter:wn(n,"hideAfter"),autoClose:wn(n,"autoClose"),open:f,close:c}),p=k(()=>zr(n.visible)&&!h.value);Dt(Yy,{controlled:p,id:i,open:Gu(l),trigger:wn(n,"trigger"),onOpen:g=>{d(g)},onClose:g=>{v(g)},onToggle:g=>{T(l)?v(g):d(g)},onShow:()=>{r("show",u.value)},onHide:()=>{r("hide",u.value)},onBeforeShow:()=>{r("before-show",u.value)},onBeforeHide:()=>{r("before-hide",u.value)},updatePopper:s}),we(()=>n.disabled,g=>{g&&l.value&&(l.value=!1)});const m=g=>{var y,_;const b=(_=(y=o.value)==null?void 0:y.contentRef)==null?void 0:_.popperContentRef,x=(g==null?void 0:g.relatedTarget)||document.activeElement;return b&&b.contains(x)};return pT(()=>l.value&&c()),t({popperRef:a,contentRef:o,isFocusInsideContent:m,updatePopper:s,onOpen:d,onClose:v,hide:c}),(g,y)=>(G(),de(T(hz),{ref_key:"popperRef",ref:a,role:g.role},{default:j(()=>[Z(Sz,{disabled:g.disabled,trigger:g.trigger,"trigger-keys":g.triggerKeys,"virtual-ref":g.virtualRef,"virtual-triggering":g.virtualTriggering},{default:j(()=>[g.$slots.default?Ce(g.$slots,"default",{key:0}):Ae("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),Z(Tz,{ref_key:"contentRef",ref:o,"aria-label":g.ariaLabel,"boundaries-padding":g.boundariesPadding,content:g.content,disabled:g.disabled,effect:g.effect,enterable:g.enterable,"fallback-placements":g.fallbackPlacements,"hide-after":g.hideAfter,"gpu-acceleration":g.gpuAcceleration,offset:g.offset,persistent:g.persistent,"popper-class":g.popperClass,"popper-style":g.popperStyle,placement:g.placement,"popper-options":g.popperOptions,pure:g.pure,"raw-content":g.rawContent,"reference-el":g.referenceEl,"trigger-target-el":g.triggerTargetEl,"show-after":g.showAfter,strategy:g.strategy,teleported:g.teleported,transition:g.transition,"virtual-triggering":g.virtualTriggering,"z-index":g.zIndex,"append-to":g.appendTo},{default:j(()=>[Ce(g.$slots,"content",{},()=>[g.rawContent?(G(),ce("span",{key:0,innerHTML:g.content},null,8,Mz)):(G(),ce("span",Az,be(g.content),1))]),g.showArrow?(G(),de(T(NH),{key:0,"arrow-offset":g.arrowOffset},null,8,["arrow-offset"])):Ae("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lz=Ke(Ez,[["__file","tooltip.vue"]]);const Hs=Yt(Lz),Dz=Je({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"}}),Iz=["textContent"],Oz=ie({name:"ElBadge"}),Rz=ie({...Oz,props:Dz,setup(e,{expose:t}){const r=e,n=Oe("badge"),i=k(()=>r.isDot?"":Rt(r.value)&&Rt(r.max)?r.max(G(),ce("div",{class:re(T(n).b())},[Ce(a.$slots,"default"),Z(ti,{name:`${T(n).namespace.value}-zoom-in-center`,persisted:""},{default:j(()=>[qt(ee("sup",{class:re([T(n).e("content"),T(n).em("content",a.type),T(n).is("fixed",!!a.$slots.default),T(n).is("dot",a.isDot)]),textContent:be(T(i))},null,10,Iz),[[Kn,!a.hidden&&(T(i)||a.isDot)]])]),_:1},8,["name"])],2))}});var kz=Ke(Rz,[["__file","badge.vue"]]);const Nz=Yt(kz),bA=Symbol("buttonGroupContextKey"),Bz=(e,t)=>{bu({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},k(()=>e.type==="text"));const r=Le(bA,void 0),n=hh("button"),{form:i}=tf(),a=xi(k(()=>r==null?void 0:r.size)),o=vh(),s=$(),l=Rs(),u=k(()=>e.type||(r==null?void 0:r.type)||""),f=k(()=>{var v,p,m;return(m=(p=e.autoInsertSpace)!=null?p:(v=n.value)==null?void 0:v.autoInsertSpace)!=null?m:!1}),c=k(()=>e.tag==="button"?{ariaDisabled:o.value||e.loading,disabled:o.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=k(()=>{var v;const p=(v=l.default)==null?void 0:v.call(l);if(f.value&&(p==null?void 0:p.length)===1){const m=p[0];if((m==null?void 0:m.type)===ks){const g=m.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(g.trim())}}return!1});return{_disabled:o,_size:a,_type:u,_ref:s,_props:c,shouldAddSpace:h,handleClick:v=>{e.nativeType==="reset"&&(i==null||i.resetFields()),t("click",v)}}},pg=["default","primary","success","warning","info","danger","text",""],Fz=["button","submit","reset"],gg=Je({size:dh,disabled:Boolean,type:{type:String,values:pg,default:""},icon:{type:vr},nativeType:{type:String,values:Fz,default:"button"},loading:Boolean,loadingIcon:{type:vr,default:()=>Ly},plain:Boolean,text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Be([String,Object]),default:"button"}}),$z={click:e=>e instanceof MouseEvent};function er(e,t){Hz(e)&&(e="100%");var r=zz(e);return e=t===360?e:Math.min(t,Math.max(0,parseFloat(e))),r&&(e=parseInt(String(e*t),10)/100),Math.abs(e-t)<1e-6?1:(t===360?e=(e<0?e%t+t:e%t)/parseFloat(String(t)):e=e%t/parseFloat(String(t)),e)}function Lf(e){return Math.min(1,Math.max(0,e))}function Hz(e){return typeof e=="string"&&e.indexOf(".")!==-1&&parseFloat(e)===1}function zz(e){return typeof e=="string"&&e.indexOf("%")!==-1}function wA(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function Df(e){return e<=1?"".concat(Number(e)*100,"%"):e}function Ja(e){return e.length===1?"0"+e:String(e)}function Vz(e,t,r){return{r:er(e,255)*255,g:er(t,255)*255,b:er(r,255)*255}}function b1(e,t,r){e=er(e,255),t=er(t,255),r=er(r,255);var n=Math.max(e,t,r),i=Math.min(e,t,r),a=0,o=0,s=(n+i)/2;if(n===i)o=0,a=0;else{var l=n-i;switch(o=s>.5?l/(2-n-i):l/(n+i),n){case e:a=(t-r)/l+(t1&&(r-=1),r<1/6?e+(t-e)*(6*r):r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function Wz(e,t,r){var n,i,a;if(e=er(e,360),t=er(t,100),r=er(r,100),t===0)i=r,a=r,n=r;else{var o=r<.5?r*(1+t):r+t-r*t,s=2*r-o;n=ov(s,o,e+1/3),i=ov(s,o,e),a=ov(s,o,e-1/3)}return{r:n*255,g:i*255,b:a*255}}function w1(e,t,r){e=er(e,255),t=er(t,255),r=er(r,255);var n=Math.max(e,t,r),i=Math.min(e,t,r),a=0,o=n,s=n-i,l=n===0?0:s/n;if(n===i)a=0;else{switch(n){case e:a=(t-r)/s+(t>16,g:(e&65280)>>8,b:e&255}}var mg={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function qz(e){var t={r:0,g:0,b:0},r=1,n=null,i=null,a=null,o=!1,s=!1;return typeof e=="string"&&(e=Zz(e)),typeof e=="object"&&(si(e.r)&&si(e.g)&&si(e.b)?(t=Vz(e.r,e.g,e.b),o=!0,s=String(e.r).substr(-1)==="%"?"prgb":"rgb"):si(e.h)&&si(e.s)&&si(e.v)?(n=Df(e.s),i=Df(e.v),t=Gz(e.h,n,i),o=!0,s="hsv"):si(e.h)&&si(e.s)&&si(e.l)&&(n=Df(e.s),a=Df(e.l),t=Wz(e.h,n,a),o=!0,s="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(r=e.a)),r=wA(r),{ok:o,format:e.format||s,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}var Kz="[-\\+]?\\d+%?",Xz="[-\\+]?\\d*\\.\\d+%?",Qi="(?:".concat(Xz,")|(?:").concat(Kz,")"),sv="[\\s|\\(]+(".concat(Qi,")[,|\\s]+(").concat(Qi,")[,|\\s]+(").concat(Qi,")\\s*\\)?"),lv="[\\s|\\(]+(".concat(Qi,")[,|\\s]+(").concat(Qi,")[,|\\s]+(").concat(Qi,")[,|\\s]+(").concat(Qi,")\\s*\\)?"),gn={CSS_UNIT:new RegExp(Qi),rgb:new RegExp("rgb"+sv),rgba:new RegExp("rgba"+lv),hsl:new RegExp("hsl"+sv),hsla:new RegExp("hsla"+lv),hsv:new RegExp("hsv"+sv),hsva:new RegExp("hsva"+lv),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function Zz(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;var t=!1;if(mg[e])e=mg[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r=gn.rgb.exec(e);return r?{r:r[1],g:r[2],b:r[3]}:(r=gn.rgba.exec(e),r?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=gn.hsl.exec(e),r?{h:r[1],s:r[2],l:r[3]}:(r=gn.hsla.exec(e),r?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=gn.hsv.exec(e),r?{h:r[1],s:r[2],v:r[3]}:(r=gn.hsva.exec(e),r?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=gn.hex8.exec(e),r?{r:kr(r[1]),g:kr(r[2]),b:kr(r[3]),a:x1(r[4]),format:t?"name":"hex8"}:(r=gn.hex6.exec(e),r?{r:kr(r[1]),g:kr(r[2]),b:kr(r[3]),format:t?"name":"hex"}:(r=gn.hex4.exec(e),r?{r:kr(r[1]+r[1]),g:kr(r[2]+r[2]),b:kr(r[3]+r[3]),a:x1(r[4]+r[4]),format:t?"name":"hex8"}:(r=gn.hex3.exec(e),r?{r:kr(r[1]+r[1]),g:kr(r[2]+r[2]),b:kr(r[3]+r[3]),format:t?"name":"hex"}:!1)))))))))}function si(e){return!!gn.CSS_UNIT.exec(String(e))}var SA=function(){function e(t,r){t===void 0&&(t=""),r===void 0&&(r={});var n;if(t instanceof e)return t;typeof t=="number"&&(t=jz(t)),this.originalInput=t;var i=qz(t);this.originalInput=t,this.r=i.r,this.g=i.g,this.b=i.b,this.a=i.a,this.roundA=Math.round(100*this.a)/100,this.format=(n=r.format)!==null&&n!==void 0?n:i.format,this.gradientType=r.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=i.ok}return e.prototype.isDark=function(){return this.getBrightness()<128},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},e.prototype.getLuminance=function(){var t=this.toRgb(),r,n,i,a=t.r/255,o=t.g/255,s=t.b/255;return a<=.03928?r=a/12.92:r=Math.pow((a+.055)/1.055,2.4),o<=.03928?n=o/12.92:n=Math.pow((o+.055)/1.055,2.4),s<=.03928?i=s/12.92:i=Math.pow((s+.055)/1.055,2.4),.2126*r+.7152*n+.0722*i},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(t){return this.a=wA(t),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){var t=this.toHsl().s;return t===0},e.prototype.toHsv=function(){var t=w1(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}},e.prototype.toHsvString=function(){var t=w1(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),i=Math.round(t.v*100);return this.a===1?"hsv(".concat(r,", ").concat(n,"%, ").concat(i,"%)"):"hsva(".concat(r,", ").concat(n,"%, ").concat(i,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var t=b1(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}},e.prototype.toHslString=function(){var t=b1(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),i=Math.round(t.l*100);return this.a===1?"hsl(".concat(r,", ").concat(n,"%, ").concat(i,"%)"):"hsla(".concat(r,", ").concat(n,"%, ").concat(i,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(t){return t===void 0&&(t=!1),S1(this.r,this.g,this.b,t)},e.prototype.toHexString=function(t){return t===void 0&&(t=!1),"#"+this.toHex(t)},e.prototype.toHex8=function(t){return t===void 0&&(t=!1),Uz(this.r,this.g,this.b,this.a,t)},e.prototype.toHex8String=function(t){return t===void 0&&(t=!1),"#"+this.toHex8(t)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var t=Math.round(this.r),r=Math.round(this.g),n=Math.round(this.b);return this.a===1?"rgb(".concat(t,", ").concat(r,", ").concat(n,")"):"rgba(".concat(t,", ").concat(r,", ").concat(n,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var t=function(r){return"".concat(Math.round(er(r,255)*100),"%")};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var t=function(r){return Math.round(er(r,255)*100)};return this.a===1?"rgb(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%)"):"rgba(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var t="#"+S1(this.r,this.g,this.b,!1),r=0,n=Object.entries(mg);r=0,a=!r&&i&&(t.startsWith("hex")||t==="name");return a?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(n=this.toRgbString()),t==="prgb"&&(n=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(n=this.toHexString()),t==="hex3"&&(n=this.toHexString(!0)),t==="hex4"&&(n=this.toHex8String(!0)),t==="hex8"&&(n=this.toHex8String()),t==="name"&&(n=this.toName()),t==="hsl"&&(n=this.toHslString()),t==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l+=t/100,r.l=Lf(r.l),new e(r)},e.prototype.brighten=function(t){t===void 0&&(t=10);var r=this.toRgb();return r.r=Math.max(0,Math.min(255,r.r-Math.round(255*-(t/100)))),r.g=Math.max(0,Math.min(255,r.g-Math.round(255*-(t/100)))),r.b=Math.max(0,Math.min(255,r.b-Math.round(255*-(t/100)))),new e(r)},e.prototype.darken=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l-=t/100,r.l=Lf(r.l),new e(r)},e.prototype.tint=function(t){return t===void 0&&(t=10),this.mix("white",t)},e.prototype.shade=function(t){return t===void 0&&(t=10),this.mix("black",t)},e.prototype.desaturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s-=t/100,r.s=Lf(r.s),new e(r)},e.prototype.saturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s+=t/100,r.s=Lf(r.s),new e(r)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var r=this.toHsl(),n=(r.h+t)%360;return r.h=n<0?360+n:n,new e(r)},e.prototype.mix=function(t,r){r===void 0&&(r=50);var n=this.toRgb(),i=new e(t).toRgb(),a=r/100,o={r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a};return new e(o)},e.prototype.analogous=function(t,r){t===void 0&&(t=6),r===void 0&&(r=30);var n=this.toHsl(),i=360/r,a=[this];for(n.h=(n.h-(i*t>>1)+720)%360;--t;)n.h=(n.h+i)%360,a.push(new e(n));return a},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){t===void 0&&(t=6);for(var r=this.toHsv(),n=r.h,i=r.s,a=r.v,o=[],s=1/t;t--;)o.push(new e({h:n,s:i,v:a})),a=(a+s)%1;return o},e.prototype.splitcomplement=function(){var t=this.toHsl(),r=t.h;return[this,new e({h:(r+72)%360,s:t.s,l:t.l}),new e({h:(r+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var r=this.toRgb(),n=new e(t).toRgb();return new e({r:n.r+(r.r-n.r)*r.a,g:n.g+(r.g-n.g)*r.a,b:n.b+(r.b-n.b)*r.a})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var r=this.toHsl(),n=r.h,i=[this],a=360/t,o=1;o{let n={};const i=e.color;if(i){const a=new SA(i),o=e.dark?a.tint(20).toString():Oi(a,20);if(e.plain)n=r.cssVarBlock({"bg-color":e.dark?Oi(a,90):a.tint(90).toString(),"text-color":i,"border-color":e.dark?Oi(a,50):a.tint(50).toString(),"hover-text-color":`var(${r.cssVarName("color-white")})`,"hover-bg-color":i,"hover-border-color":i,"active-bg-color":o,"active-text-color":`var(${r.cssVarName("color-white")})`,"active-border-color":o}),t.value&&(n[r.cssVarBlockName("disabled-bg-color")]=e.dark?Oi(a,90):a.tint(90).toString(),n[r.cssVarBlockName("disabled-text-color")]=e.dark?Oi(a,50):a.tint(50).toString(),n[r.cssVarBlockName("disabled-border-color")]=e.dark?Oi(a,80):a.tint(80).toString());else{const s=e.dark?Oi(a,30):a.tint(30).toString(),l=a.isDark()?`var(${r.cssVarName("color-white")})`:`var(${r.cssVarName("color-black")})`;if(n=r.cssVarBlock({"bg-color":i,"text-color":l,"border-color":i,"hover-bg-color":s,"hover-text-color":l,"hover-border-color":s,"active-bg-color":o,"active-border-color":o}),t.value){const u=e.dark?Oi(a,50):a.tint(50).toString();n[r.cssVarBlockName("disabled-bg-color")]=u,n[r.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${r.cssVarName("color-white")})`,n[r.cssVarBlockName("disabled-border-color")]=u}}}return n})}const Jz=ie({name:"ElButton"}),e8=ie({...Jz,props:gg,emits:$z,setup(e,{expose:t,emit:r}){const n=e,i=Qz(n),a=Oe("button"),{_ref:o,_size:s,_type:l,_disabled:u,_props:f,shouldAddSpace:c,handleClick:h}=Bz(n,r);return t({ref:o,size:s,type:l,disabled:u,shouldAddSpace:c}),(d,v)=>(G(),de(Vt(d.tag),ei({ref_key:"_ref",ref:o},T(f),{class:[T(a).b(),T(a).m(T(l)),T(a).m(T(s)),T(a).is("disabled",T(u)),T(a).is("loading",d.loading),T(a).is("plain",d.plain),T(a).is("round",d.round),T(a).is("circle",d.circle),T(a).is("text",d.text),T(a).is("link",d.link),T(a).is("has-bg",d.bg)],style:T(i),onClick:T(h)}),{default:j(()=>[d.loading?(G(),ce(ft,{key:0},[d.$slots.loading?Ce(d.$slots,"loading",{key:0}):(G(),de(T(Nt),{key:1,class:re(T(a).is("loading"))},{default:j(()=>[(G(),de(Vt(d.loadingIcon)))]),_:1},8,["class"]))],64)):d.icon||d.$slots.icon?(G(),de(T(Nt),{key:1},{default:j(()=>[d.icon?(G(),de(Vt(d.icon),{key:0})):Ce(d.$slots,"icon",{key:1})]),_:3})):Ae("v-if",!0),d.$slots.default?(G(),ce("span",{key:2,class:re({[T(a).em("text","expand")]:T(c)})},[Ce(d.$slots,"default")],2)):Ae("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var t8=Ke(e8,[["__file","button.vue"]]);const r8={size:gg.size,type:gg.type},n8=ie({name:"ElButtonGroup"}),i8=ie({...n8,props:r8,setup(e){const t=e;Dt(bA,Ln({size:wn(t,"size"),type:wn(t,"type")}));const r=Oe("button");return(n,i)=>(G(),ce("div",{class:re(`${T(r).b("group")}`)},[Ce(n.$slots,"default")],2))}});var xA=Ke(i8,[["__file","button-group.vue"]]);const yg=Yt(t8,{ButtonGroup:xA});pa(xA);var a8=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};const Wi=new Map;let C1;At&&(document.addEventListener("mousedown",e=>C1=e),document.addEventListener("mouseup",e=>{for(const t of Wi.values())for(const{documentHandler:r}of t)r(e,C1)}));function T1(e,t){let r=[];return Array.isArray(t.arg)?r=t.arg:mo(t.arg)&&r.push(t.arg),function(n,i){const a=t.instance.popperRef,o=n.target,s=i==null?void 0:i.target,l=!t||!t.instance,u=!o||!s,f=e.contains(o)||e.contains(s),c=e===o,h=r.length&&r.some(v=>v==null?void 0:v.contains(o))||r.length&&r.includes(s),d=a&&(a.contains(o)||a.contains(s));l||u||f||c||h||d||t.value(n,i)}}const CA={beforeMount(e,t){Wi.has(e)||Wi.set(e,[]),Wi.get(e).push({documentHandler:T1(e,t),bindingFn:t.value})},updated(e,t){Wi.has(e)||Wi.set(e,[]);const r=Wi.get(e),n=r.findIndex(a=>a.bindingFn===t.oldValue),i={documentHandler:T1(e,t),bindingFn:t.value};n>=0?r.splice(n,1,i):r.push(i)},unmounted(e){Wi.delete(e)}};var M1=!1,qa,_g,bg,Rc,kc,TA,Nc,wg,Sg,xg,MA,Cg,Tg,AA,PA;function yr(){if(!M1){M1=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),r=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(Cg=/\b(iPhone|iP[ao]d)/.exec(e),Tg=/\b(iP[ao]d)/.exec(e),xg=/Android/i.exec(e),AA=/FBAN\/\w+;/i.exec(e),PA=/Mobile/i.exec(e),MA=!!/Win64/.exec(e),t){qa=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,qa&&document&&document.documentMode&&(qa=document.documentMode);var n=/(?:Trident\/(\d+.\d+))/.exec(e);TA=n?parseFloat(n[1])+4:qa,_g=t[2]?parseFloat(t[2]):NaN,bg=t[3]?parseFloat(t[3]):NaN,Rc=t[4]?parseFloat(t[4]):NaN,Rc?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),kc=t&&t[1]?parseFloat(t[1]):NaN):kc=NaN}else qa=_g=bg=kc=Rc=NaN;if(r){if(r[1]){var i=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);Nc=i?parseFloat(i[1].replace("_",".")):!0}else Nc=!1;wg=!!r[2],Sg=!!r[3]}else Nc=wg=Sg=!1}}var Mg={ie:function(){return yr()||qa},ieCompatibilityMode:function(){return yr()||TA>qa},ie64:function(){return Mg.ie()&&MA},firefox:function(){return yr()||_g},opera:function(){return yr()||bg},webkit:function(){return yr()||Rc},safari:function(){return Mg.webkit()},chrome:function(){return yr()||kc},windows:function(){return yr()||wg},osx:function(){return yr()||Nc},linux:function(){return yr()||Sg},iphone:function(){return yr()||Cg},mobile:function(){return yr()||Cg||Tg||xg||PA},nativeApp:function(){return yr()||AA},android:function(){return yr()||xg},ipad:function(){return yr()||Tg}},o8=Mg,If=!!(typeof window<"u"&&window.document&&window.document.createElement),s8={canUseDOM:If,canUseWorkers:typeof Worker<"u",canUseEventListeners:If&&!!(window.addEventListener||window.attachEvent),canUseViewport:If&&!!window.screen,isInWorker:!If},EA=s8,LA;EA.canUseDOM&&(LA=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function l8(e,t){if(!EA.canUseDOM||t&&!("addEventListener"in document))return!1;var r="on"+e,n=r in document;if(!n){var i=document.createElement("div");i.setAttribute(r,"return;"),n=typeof i[r]=="function"}return!n&&LA&&e==="wheel"&&(n=document.implementation.hasFeature("Events.wheel","3.0")),n}var u8=l8,A1=10,P1=40,E1=800;function DA(e){var t=0,r=0,n=0,i=0;return"detail"in e&&(r=e.detail),"wheelDelta"in e&&(r=-e.wheelDelta/120),"wheelDeltaY"in e&&(r=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=r,r=0),n=t*A1,i=r*A1,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(n=e.deltaX),(n||i)&&e.deltaMode&&(e.deltaMode==1?(n*=P1,i*=P1):(n*=E1,i*=E1)),n&&!t&&(t=n<1?-1:1),i&&!r&&(r=i<1?-1:1),{spinX:t,spinY:r,pixelX:n,pixelY:i}}DA.getEventType=function(){return o8.firefox()?"DOMMouseScroll":u8("wheel")?"wheel":"mousewheel"};var f8=DA;/** +`).replace(/\s*\/\/.*$/gm,"").replace(/\n/g,"").trim(),a=new RegExp("(?:^"+r+"$)|(?:^"+i+"$)"),o=new RegExp("^"+r+"$"),s=new RegExp("^"+i+"$"),l=function(b){return b&&b.exact?a:new RegExp("(?:"+t(b)+r+t(b)+")|(?:"+t(b)+i+t(b)+")","g")};l.v4=function(_){return _&&_.exact?o:new RegExp(""+t(_)+r+t(_),"g")},l.v6=function(_){return _&&_.exact?s:new RegExp(""+t(_)+i+t(_),"g")};var u="(?:(?:[a-z]+:)?//)",f="(?:\\S+(?::\\S*)?@)?",c=l.v4().source,h=l.v6().source,d="(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)",v="(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*",p="(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))",m="(?::\\d{2,5})?",g='(?:[/?#][^\\s"]*)?',y="(?:"+u+"|www\\.)"+f+"(?:localhost|"+c+"|"+h+"|"+d+v+p+")"+m+g;return Mf=new RegExp("(?:^"+y+"$)","i"),Mf},u1={email:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},xl={integer:function(t){return xl.number(t)&&parseInt(t,10)===t},float:function(t){return xl.number(t)&&!xl.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return typeof t=="object"&&!xl.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(u1.email)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(G4())},hex:function(t){return typeof t=="string"&&!!t.match(u1.hex)}},U4=function(t,r,n,i,a){if(t.required&&r===void 0){iA(t,r,n,i,a);return}var o=["integer","float","array","regexp","object","method","email","number","date","url","hex"],s=t.type;o.indexOf(s)>-1?xl[s](r)||i.push(Fr(a.messages.types[s],t.fullField,t.type)):s&&typeof r!==t.type&&i.push(Fr(a.messages.types[s],t.fullField,t.type))},Y4=function(t,r,n,i,a){var o=typeof t.len=="number",s=typeof t.min=="number",l=typeof t.max=="number",u=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,f=r,c=null,h=typeof r=="number",d=typeof r=="string",v=Array.isArray(r);if(h?c="number":d?c="string":v&&(c="array"),!c)return!1;v&&(f=r.length),d&&(f=r.replace(u,"_").length),o?f!==t.len&&i.push(Fr(a.messages[c].len,t.fullField,t.len)):s&&!l&&ft.max?i.push(Fr(a.messages[c].max,t.fullField,t.max)):s&&l&&(ft.max)&&i.push(Fr(a.messages[c].range,t.fullField,t.min,t.max))},Ro="enum",j4=function(t,r,n,i,a){t[Ro]=Array.isArray(t[Ro])?t[Ro]:[],t[Ro].indexOf(r)===-1&&i.push(Fr(a.messages[Ro],t.fullField,t[Ro].join(", ")))},q4=function(t,r,n,i,a){if(t.pattern){if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(r)||i.push(Fr(a.messages.pattern.mismatch,t.fullField,r,t.pattern));else if(typeof t.pattern=="string"){var o=new RegExp(t.pattern);o.test(r)||i.push(Fr(a.messages.pattern.mismatch,t.fullField,r,t.pattern))}}},Xe={required:iA,whitespace:W4,type:U4,range:Y4,enum:j4,pattern:q4},K4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r,"string")&&!t.required)return n();Xe.required(t,r,i,o,a,"string"),Ut(r,"string")||(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a),Xe.pattern(t,r,i,o,a),t.whitespace===!0&&Xe.whitespace(t,r,i,o,a))}n(o)},X4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe.type(t,r,i,o,a)}n(o)},Z4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(r===""&&(r=void 0),Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},Q4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe.type(t,r,i,o,a)}n(o)},J4=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),Ut(r)||Xe.type(t,r,i,o,a)}n(o)},eH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},tH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},rH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(r==null&&!t.required)return n();Xe.required(t,r,i,o,a,"array"),r!=null&&(Xe.type(t,r,i,o,a),Xe.range(t,r,i,o,a))}n(o)},nH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe.type(t,r,i,o,a)}n(o)},iH="enum",aH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a),r!==void 0&&Xe[iH](t,r,i,o,a)}n(o)},oH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r,"string")&&!t.required)return n();Xe.required(t,r,i,o,a),Ut(r,"string")||Xe.pattern(t,r,i,o,a)}n(o)},sH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r,"date")&&!t.required)return n();if(Xe.required(t,r,i,o,a),!Ut(r,"date")){var l;r instanceof Date?l=r:l=new Date(r),Xe.type(t,l,i,o,a),l&&Xe.range(t,l.getTime(),i,o,a)}}n(o)},lH=function(t,r,n,i,a){var o=[],s=Array.isArray(r)?"array":typeof r;Xe.required(t,r,i,o,a,s),n(o)},nv=function(t,r,n,i,a){var o=t.type,s=[],l=t.required||!t.required&&i.hasOwnProperty(t.field);if(l){if(Ut(r,o)&&!t.required)return n();Xe.required(t,r,i,s,a,o),Ut(r,o)||Xe.type(t,r,i,s,a)}n(s)},uH=function(t,r,n,i,a){var o=[],s=t.required||!t.required&&i.hasOwnProperty(t.field);if(s){if(Ut(r)&&!t.required)return n();Xe.required(t,r,i,o,a)}n(o)},Hl={string:K4,method:X4,number:Z4,boolean:Q4,regexp:J4,integer:eH,float:tH,array:rH,object:nH,enum:aH,pattern:oH,date:sH,url:nv,hex:nv,email:nv,required:lH,any:uH};function hg(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var vg=hg(),rf=function(){function e(r){this.rules=null,this._messages=vg,this.define(r)}var t=e.prototype;return t.define=function(n){var i=this;if(!n)throw new Error("Cannot configure a schema with no rules");if(typeof n!="object"||Array.isArray(n))throw new Error("Rules must be an object");this.rules={},Object.keys(n).forEach(function(a){var o=n[a];i.rules[a]=Array.isArray(o)?o:[o]})},t.messages=function(n){return n&&(this._messages=l1(hg(),n)),this._messages},t.validate=function(n,i,a){var o=this;i===void 0&&(i={}),a===void 0&&(a=function(){});var s=n,l=i,u=a;if(typeof l=="function"&&(u=l,l={}),!this.rules||Object.keys(this.rules).length===0)return u&&u(null,s),Promise.resolve(s);function f(p){var m=[],g={};function y(b){if(Array.isArray(b)){var x;m=(x=m).concat.apply(x,b)}else m.push(b)}for(var _=0;_");const i=Oe("form"),a=$(),o=$(0),s=()=>{var f;if((f=a.value)!=null&&f.firstElementChild){const c=window.getComputedStyle(a.value.firstElementChild).width;return Math.ceil(Number.parseFloat(c))}else return 0},l=(f="update")=>{Nt(()=>{t.default&&e.isAutoWidth&&(f==="update"?o.value=s():f==="remove"&&(r==null||r.deregisterLabelWidth(o.value)))})},u=()=>l("update");return _t(()=>{u()}),tr(()=>{l("remove")}),Uu(()=>u()),be(o,(f,c)=>{e.updateAll&&(r==null||r.registerLabelWidth(f,c))}),ms(k(()=>{var f,c;return(c=(f=a.value)==null?void 0:f.firstElementChild)!=null?c:null}),u),()=>{var f,c;if(!t)return null;const{isAutoWidth:h}=e;if(h){const d=r==null?void 0:r.autoLabelWidth,v=n==null?void 0:n.hasLabel,p={};if(v&&d&&d!=="auto"){const m=Math.max(0,Number.parseInt(d,10)-o.value),g=r.labelPosition==="left"?"marginRight":"marginLeft";m&&(p[g]=`${m}px`)}return Z("div",{ref:a,class:[i.be("item","label-wrap")],style:p},[(f=t.default)==null?void 0:f.call(t)])}else return Z(ft,{ref:a},[(c=t.default)==null?void 0:c.call(t)])}}});const hH=["role","aria-labelledby"],vH=ie({name:"ElFormItem"}),pH=ie({...vH,props:cH,setup(e,{expose:t}){const r=e,n=Ns(),i=Le(zs,void 0),a=Le(yo,void 0),o=xi(void 0,{formItem:!1}),s=Oe("form-item"),l=xu().value,u=$([]),f=$(""),c=pR(f,100),h=$(""),d=$();let v,p=!1;const m=k(()=>{if((i==null?void 0:i.labelPosition)==="top")return{};const B=Zn(r.labelWidth||(i==null?void 0:i.labelWidth)||"");return B?{width:B}:{}}),g=k(()=>{if((i==null?void 0:i.labelPosition)==="top"||i!=null&&i.inline)return{};if(!r.label&&!r.labelWidth&&M)return{};const B=Zn(r.labelWidth||(i==null?void 0:i.labelWidth)||"");return!r.label&&!n.label?{marginLeft:B}:{}}),y=k(()=>[s.b(),s.m(o.value),s.is("error",f.value==="error"),s.is("validating",f.value==="validating"),s.is("success",f.value==="success"),s.is("required",O.value||r.required),s.is("no-asterisk",i==null?void 0:i.hideRequiredAsterisk),(i==null?void 0:i.requireAsteriskPosition)==="right"?"asterisk-right":"asterisk-left",{[s.m("feedback")]:i==null?void 0:i.statusIcon}]),_=k(()=>zr(r.inlineMessage)?r.inlineMessage:(i==null?void 0:i.inlineMessage)||!1),b=k(()=>[s.e("error"),{[s.em("error","inline")]:_.value}]),x=k(()=>r.prop?ze(r.prop)?r.prop:r.prop.join("."):""),w=k(()=>!!(r.label||n.label)),S=k(()=>r.for||(u.value.length===1?u.value[0]:void 0)),C=k(()=>!S.value&&w.value),M=!!a,A=k(()=>{const B=i==null?void 0:i.model;if(!(!B||!r.prop))return Ec(B,r.prop).value}),P=k(()=>{const{required:B}=r,Y=[];r.rules&&Y.push(...Jp(r.rules));const K=i==null?void 0:i.rules;if(K&&r.prop){const Q=Ec(K,r.prop).value;Q&&Y.push(...Jp(Q))}if(B!==void 0){const Q=Y.map((oe,pe)=>[oe,pe]).filter(([oe])=>Object.keys(oe).includes("required"));if(Q.length>0)for(const[oe,pe]of Q)oe.required!==B&&(Y[pe]={...oe,required:B});else Y.push({required:B})}return Y}),E=k(()=>P.value.length>0),L=B=>P.value.filter(K=>!K.trigger||!B?!0:Array.isArray(K.trigger)?K.trigger.includes(B):K.trigger===B).map(({trigger:K,...Q})=>Q),O=k(()=>P.value.some(B=>B.required)),N=k(()=>{var B;return c.value==="error"&&r.showMessage&&((B=i==null?void 0:i.showMessage)!=null?B:!0)}),H=k(()=>`${r.label||""}${(i==null?void 0:i.labelSuffix)||""}`),V=B=>{f.value=B},U=B=>{var Y,K;const{errors:Q,fields:oe}=B;(!Q||!oe)&&console.error(B),V("error"),h.value=Q?(K=(Y=Q==null?void 0:Q[0])==null?void 0:Y.message)!=null?K:`${r.prop} is required`:"",i==null||i.emit("validate",r.prop,!1,h.value)},F=()=>{V("success"),i==null||i.emit("validate",r.prop,!0,"")},z=async B=>{const Y=x.value;return new rf({[Y]:B}).validate({[Y]:A.value},{firstFields:!0}).then(()=>(F(),!0)).catch(Q=>(U(Q),Promise.reject(Q)))},ee=async(B,Y)=>{if(p||!r.prop)return!1;const K=De(Y);if(!E.value)return Y==null||Y(!1),!1;const Q=L(B);return Q.length===0?(Y==null||Y(!0),!0):(V("validating"),z(Q).then(()=>(Y==null||Y(!0),!0)).catch(oe=>{const{fields:pe}=oe;return Y==null||Y(!1,pe),K?!1:Promise.reject(pe)}))},J=()=>{V(""),h.value="",p=!1},me=async()=>{const B=i==null?void 0:i.model;if(!B||!r.prop)return;const Y=Ec(B,r.prop);p=!0,Y.value=Bb(v),await Nt(),J(),p=!1},we=B=>{u.value.includes(B)||u.value.push(B)},$e=B=>{u.value=u.value.filter(Y=>Y!==B)};be(()=>r.error,B=>{h.value=B||"",V(B?"error":"")},{immediate:!0}),be(()=>r.validateStatus,B=>V(B||""));const Ie=Ln({...Kd(r),$el:d,size:o,validateState:f,labelId:l,inputIds:u,isGroup:C,hasLabel:w,fieldValue:A,addInputId:we,removeInputId:$e,resetField:me,clearValidate:J,validate:ee});return Dt(yo,Ie),_t(()=>{r.prop&&(i==null||i.addField(Ie),v=Bb(A.value))}),tr(()=>{i==null||i.removeField(Ie)}),t({size:o,validateMessage:h,validateState:f,validate:ee,clearValidate:J,resetField:me}),(B,Y)=>{var K;return G(),ce("div",{ref_key:"formItemRef",ref:d,class:re(T(y)),role:T(C)?"group":void 0,"aria-labelledby":T(C)?T(l):void 0},[Z(T(dH),{"is-auto-width":T(m).width==="auto","update-all":((K=T(i))==null?void 0:K.labelWidth)==="auto"},{default:q(()=>[T(w)?(G(),ve(Vt(T(S)?"label":"div"),{key:0,id:T(l),for:T(S),class:re(T(s).e("label")),style:ct(T(m))},{default:q(()=>[Ce(B.$slots,"label",{label:T(H)},()=>[pt(xe(T(H)),1)])]),_:3},8,["id","for","class","style"])):Ae("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),te("div",{class:re(T(s).e("content")),style:ct(T(g))},[Ce(B.$slots,"default"),Z(KO,{name:`${T(s).namespace.value}-zoom-in-top`},{default:q(()=>[T(N)?Ce(B.$slots,"error",{key:0,error:h.value},()=>[te("div",{class:re(T(b))},xe(h.value),3)]):Ae("v-if",!0)]),_:3},8,["name"])],6)],10,hH)}}});var aA=Ke(pH,[["__file","form-item.vue"]]);const oA=Yt(D4,{FormItem:aA}),sA=pa(aA),es=4,gH={vertical:{offset:"offsetHeight",scroll:"scrollTop",scrollSize:"scrollHeight",size:"height",key:"vertical",axis:"Y",client:"clientY",direction:"top"},horizontal:{offset:"offsetWidth",scroll:"scrollLeft",scrollSize:"scrollWidth",size:"width",key:"horizontal",axis:"X",client:"clientX",direction:"left"}},mH=({move:e,size:t,bar:r})=>({[r.size]:t,transform:`translate${r.axis}(${e}%)`}),lA=Symbol("scrollbarContextKey"),yH=Je({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),_H="Thumb",bH=ie({__name:"thumb",props:yH,setup(e){const t=e,r=Le(lA),n=Oe("scrollbar");r||bi(_H,"can not inject scrollbar context");const i=$(),a=$(),o=$({}),s=$(!1);let l=!1,u=!1,f=At?document.onselectstart:null;const c=k(()=>gH[t.vertical?"vertical":"horizontal"]),h=k(()=>mH({size:t.size,move:t.move,bar:c.value})),d=k(()=>i.value[c.value.offset]**2/r.wrapElement[c.value.scrollSize]/t.ratio/a.value[c.value.offset]),v=w=>{var S;if(w.stopPropagation(),w.ctrlKey||[1,2].includes(w.button))return;(S=window.getSelection())==null||S.removeAllRanges(),m(w);const C=w.currentTarget;C&&(o.value[c.value.axis]=C[c.value.offset]-(w[c.value.client]-C.getBoundingClientRect()[c.value.direction]))},p=w=>{if(!a.value||!i.value||!r.wrapElement)return;const S=Math.abs(w.target.getBoundingClientRect()[c.value.direction]-w[c.value.client]),C=a.value[c.value.offset]/2,M=(S-C)*100*d.value/i.value[c.value.offset];r.wrapElement[c.value.scroll]=M*r.wrapElement[c.value.scrollSize]/100},m=w=>{w.stopImmediatePropagation(),l=!0,document.addEventListener("mousemove",g),document.addEventListener("mouseup",y),f=document.onselectstart,document.onselectstart=()=>!1},g=w=>{if(!i.value||!a.value||l===!1)return;const S=o.value[c.value.axis];if(!S)return;const C=(i.value.getBoundingClientRect()[c.value.direction]-w[c.value.client])*-1,M=a.value[c.value.offset]-S,A=(C-M)*100*d.value/i.value[c.value.offset];r.wrapElement[c.value.scroll]=A*r.wrapElement[c.value.scrollSize]/100},y=()=>{l=!1,o.value[c.value.axis]=0,document.removeEventListener("mousemove",g),document.removeEventListener("mouseup",y),x(),u&&(s.value=!1)},_=()=>{u=!1,s.value=!!t.size},b=()=>{u=!0,s.value=l};tr(()=>{x(),document.removeEventListener("mouseup",y)});const x=()=>{document.onselectstart!==f&&(document.onselectstart=f)};return xn(wn(r,"scrollbarElement"),"mousemove",_),xn(wn(r,"scrollbarElement"),"mouseleave",b),(w,S)=>(G(),ve(ti,{name:T(n).b("fade"),persisted:""},{default:q(()=>[qt(te("div",{ref_key:"instance",ref:i,class:re([T(n).e("bar"),T(n).is(T(c).key)]),onMousedown:p},[te("div",{ref_key:"thumb",ref:a,class:re(T(n).e("thumb")),style:ct(T(h)),onMousedown:v},null,38)],34),[[Kn,w.always||s.value]])]),_:1},8,["name"]))}});var c1=Ke(bH,[["__file","thumb.vue"]]);const wH=Je({always:{type:Boolean,default:!0},width:String,height:String,ratioX:{type:Number,default:1},ratioY:{type:Number,default:1}}),SH=ie({__name:"bar",props:wH,setup(e,{expose:t}){const r=e,n=$(0),i=$(0);return t({handleScroll:o=>{if(o){const s=o.offsetHeight-es,l=o.offsetWidth-es;i.value=o.scrollTop*100/s*r.ratioY,n.value=o.scrollLeft*100/l*r.ratioX}}}),(o,s)=>(G(),ce(ft,null,[Z(c1,{move:n.value,ratio:o.ratioX,size:o.width,always:o.always},null,8,["move","ratio","size","always"]),Z(c1,{move:i.value,ratio:o.ratioY,size:o.height,vertical:"",always:o.always},null,8,["move","ratio","size","always"])],64))}});var xH=Ke(SH,[["__file","bar.vue"]]);const CH=Je({height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:{type:Boolean,default:!1},wrapStyle:{type:Be([String,Object,Array]),default:""},wrapClass:{type:[String,Array],default:""},viewClass:{type:[String,Array],default:""},viewStyle:{type:[String,Array,Object],default:""},noresize:Boolean,tag:{type:String,default:"div"},always:Boolean,minSize:{type:Number,default:20},id:String,role:String,ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical"]}}),TH={scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(kt)},MH="ElScrollbar",AH=ie({name:MH}),PH=ie({...AH,props:CH,emits:TH,setup(e,{expose:t,emit:r}){const n=e,i=Oe("scrollbar");let a,o;const s=$(),l=$(),u=$(),f=$("0"),c=$("0"),h=$(),d=$(1),v=$(1),p=k(()=>{const S={};return n.height&&(S.height=Zn(n.height)),n.maxHeight&&(S.maxHeight=Zn(n.maxHeight)),[n.wrapStyle,S]}),m=k(()=>[n.wrapClass,i.e("wrap"),{[i.em("wrap","hidden-default")]:!n.native}]),g=k(()=>[i.e("view"),n.viewClass]),y=()=>{var S;l.value&&((S=h.value)==null||S.handleScroll(l.value),r("scroll",{scrollTop:l.value.scrollTop,scrollLeft:l.value.scrollLeft}))};function _(S,C){qe(S)?l.value.scrollTo(S):kt(S)&&kt(C)&&l.value.scrollTo(S,C)}const b=S=>{kt(S)&&(l.value.scrollTop=S)},x=S=>{kt(S)&&(l.value.scrollLeft=S)},w=()=>{if(!l.value)return;const S=l.value.offsetHeight-es,C=l.value.offsetWidth-es,M=S**2/l.value.scrollHeight,A=C**2/l.value.scrollWidth,P=Math.max(M,n.minSize),E=Math.max(A,n.minSize);d.value=M/(S-M)/(P/(S-P)),v.value=A/(C-A)/(E/(C-E)),c.value=P+esn.noresize,S=>{S?(a==null||a(),o==null||o()):({stop:a}=ms(u,w),o=xn("resize",w))},{immediate:!0}),be(()=>[n.maxHeight,n.height],()=>{n.native||Nt(()=>{var S;w(),l.value&&((S=h.value)==null||S.handleScroll(l.value))})}),Dt(lA,Ln({scrollbarElement:s,wrapElement:l})),_t(()=>{n.native||Nt(()=>{w()})}),Uu(()=>w()),t({wrapRef:l,update:w,scrollTo:_,setScrollTop:b,setScrollLeft:x,handleScroll:y}),(S,C)=>(G(),ce("div",{ref_key:"scrollbarRef",ref:s,class:re(T(i).b())},[te("div",{ref_key:"wrapRef",ref:l,class:re(T(m)),style:ct(T(p)),onScroll:y},[(G(),ve(Vt(S.tag),{id:S.id,ref_key:"resizeRef",ref:u,class:re(T(g)),style:ct(S.viewStyle),role:S.role,"aria-label":S.ariaLabel,"aria-orientation":S.ariaOrientation},{default:q(()=>[Ce(S.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],38),S.native?Ae("v-if",!0):(G(),ve(xH,{key:0,ref_key:"barRef",ref:h,height:c.value,width:f.value,always:S.always,"ratio-x":v.value,"ratio-y":d.value},null,8,["height","width","always","ratio-x","ratio-y"]))],2))}});var EH=Ke(PH,[["__file","scrollbar.vue"]]);const uA=Yt(EH),Wy=Symbol("popper"),fA=Symbol("popperContent"),LH=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],cA=Je({role:{type:String,values:LH,default:"tooltip"}}),DH=ie({name:"ElPopper",inheritAttrs:!1}),IH=ie({...DH,props:cA,setup(e,{expose:t}){const r=e,n=$(),i=$(),a=$(),o=$(),s=k(()=>r.role),l={triggerRef:n,popperInstanceRef:i,contentRef:a,referenceRef:o,role:s};return t(l),Dt(Wy,l),(u,f)=>Ce(u.$slots,"default")}});var OH=Ke(IH,[["__file","popper.vue"]]);const dA=Je({arrowOffset:{type:Number,default:5}}),RH=ie({name:"ElPopperArrow",inheritAttrs:!1}),kH=ie({...RH,props:dA,setup(e,{expose:t}){const r=e,n=Oe("popper"),{arrowOffset:i,arrowRef:a,arrowStyle:o}=Le(fA,void 0);return be(()=>r.arrowOffset,s=>{i.value=s}),tr(()=>{a.value=void 0}),t({arrowRef:a}),(s,l)=>(G(),ce("span",{ref_key:"arrowRef",ref:a,class:re(T(n).e("arrow")),style:ct(T(o)),"data-popper-arrow":""},null,6))}});var NH=Ke(kH,[["__file","arrow.vue"]]);const BH="ElOnlyChild",FH=ie({name:BH,setup(e,{slots:t,attrs:r}){var n;const i=Le(JM),a=p4((n=i==null?void 0:i.setForwardRef)!=null?n:Ft);return()=>{var o;const s=(o=t.default)==null?void 0:o.call(t,r);if(!s||s.length>1)return null;const l=hA(s);return l?qt(_i(l,r),[[a]]):null}}});function hA(e){if(!e)return null;const t=e;for(const r of t){if(qe(r))switch(r.type){case Mr:continue;case Bs:case"svg":return d1(r);case ft:return hA(r.children);default:return r}return d1(r)}return null}function d1(e){const t=Oe("only-child");return Z("span",{class:t.e("content")},[e])}const vA=Je({virtualRef:{type:Be(Object)},virtualTriggering:Boolean,onMouseenter:{type:Be(Function)},onMouseleave:{type:Be(Function)},onClick:{type:Be(Function)},onKeydown:{type:Be(Function)},onFocus:{type:Be(Function)},onBlur:{type:Be(Function)},onContextmenu:{type:Be(Function)},id:String,open:Boolean}),$H=ie({name:"ElPopperTrigger",inheritAttrs:!1}),HH=ie({...$H,props:vA,setup(e,{expose:t}){const r=e,{role:n,triggerRef:i}=Le(Wy,void 0);v4(i);const a=k(()=>s.value?r.id:void 0),o=k(()=>{if(n&&n.value==="tooltip")return r.open&&r.id?r.id:void 0}),s=k(()=>{if(n&&n.value!=="tooltip")return n.value}),l=k(()=>s.value?`${r.open}`:void 0);let u;return _t(()=>{be(()=>r.virtualRef,f=>{f&&(i.value=Zi(f))},{immediate:!0}),be(i,(f,c)=>{u==null||u(),u=void 0,mo(f)&&(["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"].forEach(h=>{var d;const v=r[h];v&&(f.addEventListener(h.slice(2).toLowerCase(),v),(d=c==null?void 0:c.removeEventListener)==null||d.call(c,h.slice(2).toLowerCase(),v))}),u=be([a,o,s,l],h=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((d,v)=>{_s(h[v])?f.removeAttribute(d):f.setAttribute(d,h[v])})},{immediate:!0})),mo(c)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(h=>c.removeAttribute(h))},{immediate:!0})}),tr(()=>{u==null||u(),u=void 0}),t({triggerRef:i}),(f,c)=>f.virtualTriggering?Ae("v-if",!0):(G(),ve(T(FH),ei({key:0},f.$attrs,{"aria-controls":T(a),"aria-describedby":T(o),"aria-expanded":T(l),"aria-haspopup":T(s)}),{default:q(()=>[Ce(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}});var zH=Ke(HH,[["__file","trigger.vue"]]);const iv="focus-trap.focus-after-trapped",av="focus-trap.focus-after-released",VH="focus-trap.focusout-prevented",h1={cancelable:!0,bubbles:!1},WH={cancelable:!0,bubbles:!1},v1="focusAfterTrapped",p1="focusAfterReleased",pA=Symbol("elFocusTrap"),Gy=$(),ph=$(0),Uy=$(0);let Af=0;const gA=e=>{const t=[],r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:n=>{const i=n.tagName==="INPUT"&&n.type==="hidden";return n.disabled||n.hidden||i?NodeFilter.FILTER_SKIP:n.tabIndex>=0||n===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;r.nextNode();)t.push(r.currentNode);return t},g1=(e,t)=>{for(const r of e)if(!GH(r,t))return r},GH=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},UH=e=>{const t=gA(e),r=g1(t,e),n=g1(t.reverse(),e);return[r,n]},YH=e=>e instanceof HTMLInputElement&&"select"in e,Vi=(e,t)=>{if(e&&e.focus){const r=document.activeElement;e.focus({preventScroll:!0}),Uy.value=window.performance.now(),e!==r&&YH(e)&&t&&e.select()}};function m1(e,t){const r=[...e],n=e.indexOf(t);return n!==-1&&r.splice(n,1),r}const jH=()=>{let e=[];return{push:n=>{const i=e[0];i&&n!==i&&i.pause(),e=m1(e,n),e.unshift(n)},remove:n=>{var i,a;e=m1(e,n),(a=(i=e[0])==null?void 0:i.resume)==null||a.call(i)}}},qH=(e,t=!1)=>{const r=document.activeElement;for(const n of e)if(Vi(n,t),document.activeElement!==r)return},y1=jH(),KH=()=>ph.value>Uy.value,Pf=()=>{Gy.value="pointer",ph.value=window.performance.now()},_1=()=>{Gy.value="keyboard",ph.value=window.performance.now()},XH=()=>(_t(()=>{Af===0&&(document.addEventListener("mousedown",Pf),document.addEventListener("touchstart",Pf),document.addEventListener("keydown",_1)),Af++}),tr(()=>{Af--,Af<=0&&(document.removeEventListener("mousedown",Pf),document.removeEventListener("touchstart",Pf),document.removeEventListener("keydown",_1))}),{focusReason:Gy,lastUserFocusTimestamp:ph,lastAutomatedFocusTimestamp:Uy}),Ef=e=>new CustomEvent(VH,{...WH,detail:e}),ZH=ie({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[v1,p1,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const r=$();let n,i;const{focusReason:a}=XH();u4(v=>{e.trapped&&!o.paused&&t("release-requested",v)});const o={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},s=v=>{if(!e.loop&&!e.trapped||o.paused)return;const{key:p,altKey:m,ctrlKey:g,metaKey:y,currentTarget:_,shiftKey:b}=v,{loop:x}=e,w=p===hr.tab&&!m&&!g&&!y,S=document.activeElement;if(w&&S){const C=_,[M,A]=UH(C);if(M&&A){if(!b&&S===A){const E=Ef({focusReason:a.value});t("focusout-prevented",E),E.defaultPrevented||(v.preventDefault(),x&&Vi(M,!0))}else if(b&&[M,C].includes(S)){const E=Ef({focusReason:a.value});t("focusout-prevented",E),E.defaultPrevented||(v.preventDefault(),x&&Vi(A,!0))}}else if(S===C){const E=Ef({focusReason:a.value});t("focusout-prevented",E),E.defaultPrevented||v.preventDefault()}}};Dt(pA,{focusTrapRef:r,onKeydown:s}),be(()=>e.focusTrapEl,v=>{v&&(r.value=v)},{immediate:!0}),be([r],([v],[p])=>{v&&(v.addEventListener("keydown",s),v.addEventListener("focusin",f),v.addEventListener("focusout",c)),p&&(p.removeEventListener("keydown",s),p.removeEventListener("focusin",f),p.removeEventListener("focusout",c))});const l=v=>{t(v1,v)},u=v=>t(p1,v),f=v=>{const p=T(r);if(!p)return;const m=v.target,g=v.relatedTarget,y=m&&p.contains(m);e.trapped||g&&p.contains(g)||(n=g),y&&t("focusin",v),!o.paused&&e.trapped&&(y?i=m:Vi(i,!0))},c=v=>{const p=T(r);if(!(o.paused||!p))if(e.trapped){const m=v.relatedTarget;!_s(m)&&!p.contains(m)&&setTimeout(()=>{if(!o.paused&&e.trapped){const g=Ef({focusReason:a.value});t("focusout-prevented",g),g.defaultPrevented||Vi(i,!0)}},0)}else{const m=v.target;m&&p.contains(m)||t("focusout",v)}};async function h(){await Nt();const v=T(r);if(v){y1.push(o);const p=v.contains(document.activeElement)?n:document.activeElement;if(n=p,!v.contains(p)){const g=new Event(iv,h1);v.addEventListener(iv,l),v.dispatchEvent(g),g.defaultPrevented||Nt(()=>{let y=e.focusStartEl;ze(y)||(Vi(y),document.activeElement!==y&&(y="first")),y==="first"&&qH(gA(v),!0),(document.activeElement===p||y==="container")&&Vi(v)})}}}function d(){const v=T(r);if(v){v.removeEventListener(iv,l);const p=new CustomEvent(av,{...h1,detail:{focusReason:a.value}});v.addEventListener(av,u),v.dispatchEvent(p),!p.defaultPrevented&&(a.value=="keyboard"||!KH()||v.contains(document.activeElement))&&Vi(n??document.body),v.removeEventListener(av,u),y1.remove(o)}}return _t(()=>{e.trapped&&h(),be(()=>e.trapped,v=>{v?h():d()})}),tr(()=>{e.trapped&&d()}),{onKeydown:s}}});function QH(e,t,r,n,i,a){return Ce(e.$slots,"default",{handleKeydown:e.onKeydown})}var mA=Ke(ZH,[["render",QH],["__file","focus-trap.vue"]]);const JH=["fixed","absolute"],ez=Je({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:Be(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Oy,default:"bottom"},popperOptions:{type:Be(Object),default:()=>({})},strategy:{type:String,values:JH,default:"absolute"}}),yA=Je({...ez,id:String,style:{type:Be([String,Array,Object])},className:{type:Be([String,Array,Object])},effect:{type:String,default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:{type:Boolean,default:!1},trapping:{type:Boolean,default:!1},popperClass:{type:Be([String,Array,Object])},popperStyle:{type:Be([String,Array,Object])},referenceEl:{type:Be(Object)},triggerTargetEl:{type:Be(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},ariaLabel:{type:String,default:void 0},virtualTriggering:Boolean,zIndex:Number}),tz={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},rz=(e,t=[])=>{const{placement:r,strategy:n,popperOptions:i}=e,a={placement:r,strategy:n,...i,modifiers:[...iz(e),...t]};return az(a,i==null?void 0:i.modifiers),a},nz=e=>{if(At)return Zi(e)};function iz(e){const{offset:t,gpuAcceleration:r,fallbackPlacements:n}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5,fallbackPlacements:n}},{name:"computeStyles",options:{gpuAcceleration:r}}]}function az(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const oz=0,sz=e=>{const{popperInstanceRef:t,contentRef:r,triggerRef:n,role:i}=Le(Wy,void 0),a=$(),o=$(),s=k(()=>({name:"eventListeners",enabled:!!e.visible})),l=k(()=>{var g;const y=T(a),_=(g=T(o))!=null?g:oz;return{name:"arrow",enabled:!MM(y),options:{element:y,padding:_}}}),u=k(()=>({onFirstUpdate:()=>{v()},...rz(e,[T(l),T(s)])})),f=k(()=>nz(e.referenceEl)||T(n)),{attributes:c,state:h,styles:d,update:v,forceUpdate:p,instanceRef:m}=o4(f,r,u);return be(m,g=>t.value=g),_t(()=>{be(()=>{var g;return(g=T(f))==null?void 0:g.getBoundingClientRect()},()=>{v()})}),{attributes:c,arrowRef:a,contentRef:r,instanceRef:m,state:h,styles:d,role:i,forceUpdate:p,update:v}},lz=(e,{attributes:t,styles:r,role:n})=>{const{nextZIndex:i}=zy(),a=Oe("popper"),o=k(()=>T(t).popper),s=$(kt(e.zIndex)?e.zIndex:i()),l=k(()=>[a.b(),a.is("pure",e.pure),a.is(e.effect),e.popperClass]),u=k(()=>[{zIndex:T(s)},T(r).popper,e.popperStyle||{}]),f=k(()=>n.value==="dialog"?"false":void 0),c=k(()=>T(r).arrow||{});return{ariaModal:f,arrowStyle:c,contentAttrs:o,contentClass:l,contentStyle:u,contentZIndex:s,updateZIndex:()=>{s.value=kt(e.zIndex)?e.zIndex:i()}}},uz=(e,t)=>{const r=$(!1),n=$();return{focusStartRef:n,trapped:r,onFocusAfterReleased:u=>{var f;((f=u.detail)==null?void 0:f.focusReason)!=="pointer"&&(n.value="first",t("blur"))},onFocusAfterTrapped:()=>{t("focus")},onFocusInTrap:u=>{e.visible&&!r.value&&(u.target&&(n.value=u.target),r.value=!0)},onFocusoutPrevented:u=>{e.trapping||(u.detail.focusReason==="pointer"&&u.preventDefault(),r.value=!1)},onReleaseRequested:()=>{r.value=!1,t("close")}}},fz=ie({name:"ElPopperContent"}),cz=ie({...fz,props:yA,emits:tz,setup(e,{expose:t,emit:r}){const n=e,{focusStartRef:i,trapped:a,onFocusAfterReleased:o,onFocusAfterTrapped:s,onFocusInTrap:l,onFocusoutPrevented:u,onReleaseRequested:f}=uz(n,r),{attributes:c,arrowRef:h,contentRef:d,styles:v,instanceRef:p,role:m,update:g}=sz(n),{ariaModal:y,arrowStyle:_,contentAttrs:b,contentClass:x,contentStyle:w,updateZIndex:S}=lz(n,{styles:v,attributes:c,role:m}),C=Le(yo,void 0),M=$();Dt(fA,{arrowStyle:_,arrowRef:h,arrowOffset:M}),C&&(C.addInputId||C.removeInputId)&&Dt(yo,{...C,addInputId:Ft,removeInputId:Ft});let A;const P=(L=!0)=>{g(),L&&S()},E=()=>{P(!1),n.visible&&n.focusOnShow?a.value=!0:n.visible===!1&&(a.value=!1)};return _t(()=>{be(()=>n.triggerTargetEl,(L,O)=>{A==null||A(),A=void 0;const N=T(L||d.value),H=T(O||d.value);mo(N)&&(A=be([m,()=>n.ariaLabel,y,()=>n.id],V=>{["role","aria-label","aria-modal","id"].forEach((U,F)=>{_s(V[F])?N.removeAttribute(U):N.setAttribute(U,V[F])})},{immediate:!0})),H!==N&&mo(H)&&["role","aria-label","aria-modal","id"].forEach(V=>{H.removeAttribute(V)})},{immediate:!0}),be(()=>n.visible,E,{immediate:!0})}),tr(()=>{A==null||A(),A=void 0}),t({popperContentRef:d,popperInstanceRef:p,updatePopper:P,contentStyle:w}),(L,O)=>(G(),ce("div",ei({ref_key:"contentRef",ref:d},T(b),{style:T(w),class:T(x),tabindex:"-1",onMouseenter:O[0]||(O[0]=N=>L.$emit("mouseenter",N)),onMouseleave:O[1]||(O[1]=N=>L.$emit("mouseleave",N))}),[Z(T(mA),{trapped:T(a),"trap-on-focus-in":!0,"focus-trap-el":T(d),"focus-start-el":T(i),onFocusAfterTrapped:T(s),onFocusAfterReleased:T(o),onFocusin:T(l),onFocusoutPrevented:T(u),onReleaseRequested:T(f)},{default:q(()=>[Ce(L.$slots,"default")]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16))}});var dz=Ke(cz,[["__file","content.vue"]]);const hz=Yt(OH),Yy=Symbol("elTooltip"),md=Je({...d4,...yA,appendTo:{type:Be([String,Object])},content:{type:String,default:""},rawContent:{type:Boolean,default:!1},persistent:Boolean,ariaLabel:String,visible:{type:Be(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean}),_A=Je({...vA,disabled:Boolean,trigger:{type:Be([String,Array]),default:"hover"},triggerKeys:{type:Be(Array),default:()=>[hr.enter,hr.space]}}),{useModelToggleProps:vz,useModelToggleEmits:pz,useModelToggle:gz}=BM("visible"),mz=Je({...cA,...vz,...md,..._A,...dA,showArrow:{type:Boolean,default:!0}}),yz=[...pz,"before-show","before-hide","show","hide","open","close"],_z=(e,t)=>_e(e)?e.includes(t):e===t,ko=(e,t,r)=>n=>{_z(T(e),t)&&r(n)},bz=ie({name:"ElTooltipTrigger"}),wz=ie({...bz,props:_A,setup(e,{expose:t}){const r=e,n=Oe("tooltip"),{controlled:i,id:a,open:o,onOpen:s,onClose:l,onToggle:u}=Le(Yy,void 0),f=$(null),c=()=>{if(T(i)||r.disabled)return!0},h=wn(r,"trigger"),d=di(c,ko(h,"hover",s)),v=di(c,ko(h,"hover",l)),p=di(c,ko(h,"click",b=>{b.button===0&&u(b)})),m=di(c,ko(h,"focus",s)),g=di(c,ko(h,"focus",l)),y=di(c,ko(h,"contextmenu",b=>{b.preventDefault(),u(b)})),_=di(c,b=>{const{code:x}=b;r.triggerKeys.includes(x)&&(b.preventDefault(),u(b))});return t({triggerRef:f}),(b,x)=>(G(),ve(T(zH),{id:T(a),"virtual-ref":b.virtualRef,open:T(o),"virtual-triggering":b.virtualTriggering,class:re(T(n).e("trigger")),onBlur:T(g),onClick:T(p),onContextmenu:T(y),onFocus:T(m),onMouseenter:T(d),onMouseleave:T(v),onKeydown:T(_)},{default:q(()=>[Ce(b.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}});var Sz=Ke(wz,[["__file","trigger.vue"]]);const xz=ie({name:"ElTooltipContent",inheritAttrs:!1}),Cz=ie({...xz,props:md,setup(e,{expose:t}){const r=e,{selector:n}=QM(),i=Oe("tooltip"),a=$(null),o=$(!1),{controlled:s,id:l,open:u,trigger:f,onClose:c,onOpen:h,onShow:d,onHide:v,onBeforeShow:p,onBeforeHide:m}=Le(Yy,void 0),g=k(()=>r.transition||`${i.namespace.value}-fade-in-linear`),y=k(()=>r.persistent);tr(()=>{o.value=!0});const _=k(()=>T(y)?!0:T(u)),b=k(()=>r.disabled?!1:T(u)),x=k(()=>r.appendTo||n.value),w=k(()=>{var V;return(V=r.style)!=null?V:{}}),S=k(()=>!T(u)),C=()=>{v()},M=()=>{if(T(s))return!0},A=di(M,()=>{r.enterable&&T(f)==="hover"&&h()}),P=di(M,()=>{T(f)==="hover"&&c()}),E=()=>{var V,U;(U=(V=a.value)==null?void 0:V.updatePopper)==null||U.call(V),p==null||p()},L=()=>{m==null||m()},O=()=>{d(),H=ER(k(()=>{var V;return(V=a.value)==null?void 0:V.popperContentRef}),()=>{if(T(s))return;T(f)!=="hover"&&c()})},N=()=>{r.virtualTriggering||c()};let H;return be(()=>T(u),V=>{V||H==null||H()},{flush:"post"}),be(()=>r.content,()=>{var V,U;(U=(V=a.value)==null?void 0:V.updatePopper)==null||U.call(V)}),t({contentRef:a}),(V,U)=>(G(),ve(MT,{disabled:!V.teleported,to:T(x)},[Z(ti,{name:T(g),onAfterLeave:C,onBeforeEnter:E,onAfterEnter:O,onBeforeLeave:L},{default:q(()=>[T(_)?qt((G(),ve(T(dz),ei({key:0,id:T(l),ref_key:"contentRef",ref:a},V.$attrs,{"aria-label":V.ariaLabel,"aria-hidden":T(S),"boundaries-padding":V.boundariesPadding,"fallback-placements":V.fallbackPlacements,"gpu-acceleration":V.gpuAcceleration,offset:V.offset,placement:V.placement,"popper-options":V.popperOptions,strategy:V.strategy,effect:V.effect,enterable:V.enterable,pure:V.pure,"popper-class":V.popperClass,"popper-style":[V.popperStyle,T(w)],"reference-el":V.referenceEl,"trigger-target-el":V.triggerTargetEl,visible:T(b),"z-index":V.zIndex,onMouseenter:T(A),onMouseleave:T(P),onBlur:N,onClose:T(c)}),{default:q(()=>[o.value?Ae("v-if",!0):Ce(V.$slots,"default",{key:0})]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","onMouseenter","onMouseleave","onClose"])),[[Kn,T(b)]]):Ae("v-if",!0)]),_:3},8,["name"])],8,["disabled","to"]))}});var Tz=Ke(Cz,[["__file","content.vue"]]);const Mz=["innerHTML"],Az={key:1},Pz=ie({name:"ElTooltip"}),Ez=ie({...Pz,props:mz,emits:yz,setup(e,{expose:t,emit:r}){const n=e;c4();const i=xu(),a=$(),o=$(),s=()=>{var g;const y=T(a);y&&((g=y.popperInstanceRef)==null||g.update())},l=$(!1),u=$(),{show:f,hide:c,hasUpdateHandler:h}=gz({indicator:l,toggleReason:u}),{onOpen:d,onClose:v}=h4({showAfter:wn(n,"showAfter"),hideAfter:wn(n,"hideAfter"),autoClose:wn(n,"autoClose"),open:f,close:c}),p=k(()=>zr(n.visible)&&!h.value);Dt(Yy,{controlled:p,id:i,open:Gu(l),trigger:wn(n,"trigger"),onOpen:g=>{d(g)},onClose:g=>{v(g)},onToggle:g=>{T(l)?v(g):d(g)},onShow:()=>{r("show",u.value)},onHide:()=>{r("hide",u.value)},onBeforeShow:()=>{r("before-show",u.value)},onBeforeHide:()=>{r("before-hide",u.value)},updatePopper:s}),be(()=>n.disabled,g=>{g&&l.value&&(l.value=!1)});const m=g=>{var y,_;const b=(_=(y=o.value)==null?void 0:y.contentRef)==null?void 0:_.popperContentRef,x=(g==null?void 0:g.relatedTarget)||document.activeElement;return b&&b.contains(x)};return pT(()=>l.value&&c()),t({popperRef:a,contentRef:o,isFocusInsideContent:m,updatePopper:s,onOpen:d,onClose:v,hide:c}),(g,y)=>(G(),ve(T(hz),{ref_key:"popperRef",ref:a,role:g.role},{default:q(()=>[Z(Sz,{disabled:g.disabled,trigger:g.trigger,"trigger-keys":g.triggerKeys,"virtual-ref":g.virtualRef,"virtual-triggering":g.virtualTriggering},{default:q(()=>[g.$slots.default?Ce(g.$slots,"default",{key:0}):Ae("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering"]),Z(Tz,{ref_key:"contentRef",ref:o,"aria-label":g.ariaLabel,"boundaries-padding":g.boundariesPadding,content:g.content,disabled:g.disabled,effect:g.effect,enterable:g.enterable,"fallback-placements":g.fallbackPlacements,"hide-after":g.hideAfter,"gpu-acceleration":g.gpuAcceleration,offset:g.offset,persistent:g.persistent,"popper-class":g.popperClass,"popper-style":g.popperStyle,placement:g.placement,"popper-options":g.popperOptions,pure:g.pure,"raw-content":g.rawContent,"reference-el":g.referenceEl,"trigger-target-el":g.triggerTargetEl,"show-after":g.showAfter,strategy:g.strategy,teleported:g.teleported,transition:g.transition,"virtual-triggering":g.virtualTriggering,"z-index":g.zIndex,"append-to":g.appendTo},{default:q(()=>[Ce(g.$slots,"content",{},()=>[g.rawContent?(G(),ce("span",{key:0,innerHTML:g.content},null,8,Mz)):(G(),ce("span",Az,xe(g.content),1))]),g.showArrow?(G(),ve(T(NH),{key:0,"arrow-offset":g.arrowOffset},null,8,["arrow-offset"])):Ae("v-if",!0)]),_:3},8,["aria-label","boundaries-padding","content","disabled","effect","enterable","fallback-placements","hide-after","gpu-acceleration","offset","persistent","popper-class","popper-style","placement","popper-options","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to"])]),_:3},8,["role"]))}});var Lz=Ke(Ez,[["__file","tooltip.vue"]]);const Vs=Yt(Lz),Dz=Je({value:{type:[String,Number],default:""},max:{type:Number,default:99},isDot:Boolean,hidden:Boolean,type:{type:String,values:["primary","success","warning","info","danger"],default:"danger"}}),Iz=["textContent"],Oz=ie({name:"ElBadge"}),Rz=ie({...Oz,props:Dz,setup(e,{expose:t}){const r=e,n=Oe("badge"),i=k(()=>r.isDot?"":kt(r.value)&&kt(r.max)?r.max(G(),ce("div",{class:re(T(n).b())},[Ce(a.$slots,"default"),Z(ti,{name:`${T(n).namespace.value}-zoom-in-center`,persisted:""},{default:q(()=>[qt(te("sup",{class:re([T(n).e("content"),T(n).em("content",a.type),T(n).is("fixed",!!a.$slots.default),T(n).is("dot",a.isDot)]),textContent:xe(T(i))},null,10,Iz),[[Kn,!a.hidden&&(T(i)||a.isDot)]])]),_:1},8,["name"])],2))}});var kz=Ke(Rz,[["__file","badge.vue"]]);const Nz=Yt(kz),bA=Symbol("buttonGroupContextKey"),Bz=(e,t)=>{bu({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},k(()=>e.type==="text"));const r=Le(bA,void 0),n=hh("button"),{form:i}=tf(),a=xi(k(()=>r==null?void 0:r.size)),o=vh(),s=$(),l=Ns(),u=k(()=>e.type||(r==null?void 0:r.type)||""),f=k(()=>{var v,p,m;return(m=(p=e.autoInsertSpace)!=null?p:(v=n.value)==null?void 0:v.autoInsertSpace)!=null?m:!1}),c=k(()=>e.tag==="button"?{ariaDisabled:o.value||e.loading,disabled:o.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),h=k(()=>{var v;const p=(v=l.default)==null?void 0:v.call(l);if(f.value&&(p==null?void 0:p.length)===1){const m=p[0];if((m==null?void 0:m.type)===Bs){const g=m.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(g.trim())}}return!1});return{_disabled:o,_size:a,_type:u,_ref:s,_props:c,shouldAddSpace:h,handleClick:v=>{e.nativeType==="reset"&&(i==null||i.resetFields()),t("click",v)}}},pg=["default","primary","success","warning","info","danger","text",""],Fz=["button","submit","reset"],gg=Je({size:dh,disabled:Boolean,type:{type:String,values:pg,default:""},icon:{type:vr},nativeType:{type:String,values:Fz,default:"button"},loading:Boolean,loadingIcon:{type:vr,default:()=>Ly},plain:Boolean,text:Boolean,link:Boolean,bg:Boolean,autofocus:Boolean,round:Boolean,circle:Boolean,color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:Be([String,Object]),default:"button"}}),$z={click:e=>e instanceof MouseEvent};function er(e,t){Hz(e)&&(e="100%");var r=zz(e);return e=t===360?e:Math.min(t,Math.max(0,parseFloat(e))),r&&(e=parseInt(String(e*t),10)/100),Math.abs(e-t)<1e-6?1:(t===360?e=(e<0?e%t+t:e%t)/parseFloat(String(t)):e=e%t/parseFloat(String(t)),e)}function Lf(e){return Math.min(1,Math.max(0,e))}function Hz(e){return typeof e=="string"&&e.indexOf(".")!==-1&&parseFloat(e)===1}function zz(e){return typeof e=="string"&&e.indexOf("%")!==-1}function wA(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function Df(e){return e<=1?"".concat(Number(e)*100,"%"):e}function Ja(e){return e.length===1?"0"+e:String(e)}function Vz(e,t,r){return{r:er(e,255)*255,g:er(t,255)*255,b:er(r,255)*255}}function b1(e,t,r){e=er(e,255),t=er(t,255),r=er(r,255);var n=Math.max(e,t,r),i=Math.min(e,t,r),a=0,o=0,s=(n+i)/2;if(n===i)o=0,a=0;else{var l=n-i;switch(o=s>.5?l/(2-n-i):l/(n+i),n){case e:a=(t-r)/l+(t1&&(r-=1),r<1/6?e+(t-e)*(6*r):r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function Wz(e,t,r){var n,i,a;if(e=er(e,360),t=er(t,100),r=er(r,100),t===0)i=r,a=r,n=r;else{var o=r<.5?r*(1+t):r+t-r*t,s=2*r-o;n=ov(s,o,e+1/3),i=ov(s,o,e),a=ov(s,o,e-1/3)}return{r:n*255,g:i*255,b:a*255}}function w1(e,t,r){e=er(e,255),t=er(t,255),r=er(r,255);var n=Math.max(e,t,r),i=Math.min(e,t,r),a=0,o=n,s=n-i,l=n===0?0:s/n;if(n===i)a=0;else{switch(n){case e:a=(t-r)/s+(t>16,g:(e&65280)>>8,b:e&255}}var mg={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function qz(e){var t={r:0,g:0,b:0},r=1,n=null,i=null,a=null,o=!1,s=!1;return typeof e=="string"&&(e=Zz(e)),typeof e=="object"&&(si(e.r)&&si(e.g)&&si(e.b)?(t=Vz(e.r,e.g,e.b),o=!0,s=String(e.r).substr(-1)==="%"?"prgb":"rgb"):si(e.h)&&si(e.s)&&si(e.v)?(n=Df(e.s),i=Df(e.v),t=Gz(e.h,n,i),o=!0,s="hsv"):si(e.h)&&si(e.s)&&si(e.l)&&(n=Df(e.s),a=Df(e.l),t=Wz(e.h,n,a),o=!0,s="hsl"),Object.prototype.hasOwnProperty.call(e,"a")&&(r=e.a)),r=wA(r),{ok:o,format:e.format||s,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:r}}var Kz="[-\\+]?\\d+%?",Xz="[-\\+]?\\d*\\.\\d+%?",Qi="(?:".concat(Xz,")|(?:").concat(Kz,")"),sv="[\\s|\\(]+(".concat(Qi,")[,|\\s]+(").concat(Qi,")[,|\\s]+(").concat(Qi,")\\s*\\)?"),lv="[\\s|\\(]+(".concat(Qi,")[,|\\s]+(").concat(Qi,")[,|\\s]+(").concat(Qi,")[,|\\s]+(").concat(Qi,")\\s*\\)?"),gn={CSS_UNIT:new RegExp(Qi),rgb:new RegExp("rgb"+sv),rgba:new RegExp("rgba"+lv),hsl:new RegExp("hsl"+sv),hsla:new RegExp("hsla"+lv),hsv:new RegExp("hsv"+sv),hsva:new RegExp("hsva"+lv),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function Zz(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;var t=!1;if(mg[e])e=mg[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r=gn.rgb.exec(e);return r?{r:r[1],g:r[2],b:r[3]}:(r=gn.rgba.exec(e),r?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=gn.hsl.exec(e),r?{h:r[1],s:r[2],l:r[3]}:(r=gn.hsla.exec(e),r?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=gn.hsv.exec(e),r?{h:r[1],s:r[2],v:r[3]}:(r=gn.hsva.exec(e),r?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=gn.hex8.exec(e),r?{r:kr(r[1]),g:kr(r[2]),b:kr(r[3]),a:x1(r[4]),format:t?"name":"hex8"}:(r=gn.hex6.exec(e),r?{r:kr(r[1]),g:kr(r[2]),b:kr(r[3]),format:t?"name":"hex"}:(r=gn.hex4.exec(e),r?{r:kr(r[1]+r[1]),g:kr(r[2]+r[2]),b:kr(r[3]+r[3]),a:x1(r[4]+r[4]),format:t?"name":"hex8"}:(r=gn.hex3.exec(e),r?{r:kr(r[1]+r[1]),g:kr(r[2]+r[2]),b:kr(r[3]+r[3]),format:t?"name":"hex"}:!1)))))))))}function si(e){return!!gn.CSS_UNIT.exec(String(e))}var SA=function(){function e(t,r){t===void 0&&(t=""),r===void 0&&(r={});var n;if(t instanceof e)return t;typeof t=="number"&&(t=jz(t)),this.originalInput=t;var i=qz(t);this.originalInput=t,this.r=i.r,this.g=i.g,this.b=i.b,this.a=i.a,this.roundA=Math.round(100*this.a)/100,this.format=(n=r.format)!==null&&n!==void 0?n:i.format,this.gradientType=r.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=i.ok}return e.prototype.isDark=function(){return this.getBrightness()<128},e.prototype.isLight=function(){return!this.isDark()},e.prototype.getBrightness=function(){var t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3},e.prototype.getLuminance=function(){var t=this.toRgb(),r,n,i,a=t.r/255,o=t.g/255,s=t.b/255;return a<=.03928?r=a/12.92:r=Math.pow((a+.055)/1.055,2.4),o<=.03928?n=o/12.92:n=Math.pow((o+.055)/1.055,2.4),s<=.03928?i=s/12.92:i=Math.pow((s+.055)/1.055,2.4),.2126*r+.7152*n+.0722*i},e.prototype.getAlpha=function(){return this.a},e.prototype.setAlpha=function(t){return this.a=wA(t),this.roundA=Math.round(100*this.a)/100,this},e.prototype.isMonochrome=function(){var t=this.toHsl().s;return t===0},e.prototype.toHsv=function(){var t=w1(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}},e.prototype.toHsvString=function(){var t=w1(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),i=Math.round(t.v*100);return this.a===1?"hsv(".concat(r,", ").concat(n,"%, ").concat(i,"%)"):"hsva(".concat(r,", ").concat(n,"%, ").concat(i,"%, ").concat(this.roundA,")")},e.prototype.toHsl=function(){var t=b1(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}},e.prototype.toHslString=function(){var t=b1(this.r,this.g,this.b),r=Math.round(t.h*360),n=Math.round(t.s*100),i=Math.round(t.l*100);return this.a===1?"hsl(".concat(r,", ").concat(n,"%, ").concat(i,"%)"):"hsla(".concat(r,", ").concat(n,"%, ").concat(i,"%, ").concat(this.roundA,")")},e.prototype.toHex=function(t){return t===void 0&&(t=!1),S1(this.r,this.g,this.b,t)},e.prototype.toHexString=function(t){return t===void 0&&(t=!1),"#"+this.toHex(t)},e.prototype.toHex8=function(t){return t===void 0&&(t=!1),Uz(this.r,this.g,this.b,this.a,t)},e.prototype.toHex8String=function(t){return t===void 0&&(t=!1),"#"+this.toHex8(t)},e.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},e.prototype.toRgbString=function(){var t=Math.round(this.r),r=Math.round(this.g),n=Math.round(this.b);return this.a===1?"rgb(".concat(t,", ").concat(r,", ").concat(n,")"):"rgba(".concat(t,", ").concat(r,", ").concat(n,", ").concat(this.roundA,")")},e.prototype.toPercentageRgb=function(){var t=function(r){return"".concat(Math.round(er(r,255)*100),"%")};return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}},e.prototype.toPercentageRgbString=function(){var t=function(r){return Math.round(er(r,255)*100)};return this.a===1?"rgb(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%)"):"rgba(".concat(t(this.r),"%, ").concat(t(this.g),"%, ").concat(t(this.b),"%, ").concat(this.roundA,")")},e.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var t="#"+S1(this.r,this.g,this.b,!1),r=0,n=Object.entries(mg);r=0,a=!r&&i&&(t.startsWith("hex")||t==="name");return a?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(n=this.toRgbString()),t==="prgb"&&(n=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(n=this.toHexString()),t==="hex3"&&(n=this.toHexString(!0)),t==="hex4"&&(n=this.toHex8String(!0)),t==="hex8"&&(n=this.toHex8String()),t==="name"&&(n=this.toName()),t==="hsl"&&(n=this.toHslString()),t==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},e.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},e.prototype.clone=function(){return new e(this.toString())},e.prototype.lighten=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l+=t/100,r.l=Lf(r.l),new e(r)},e.prototype.brighten=function(t){t===void 0&&(t=10);var r=this.toRgb();return r.r=Math.max(0,Math.min(255,r.r-Math.round(255*-(t/100)))),r.g=Math.max(0,Math.min(255,r.g-Math.round(255*-(t/100)))),r.b=Math.max(0,Math.min(255,r.b-Math.round(255*-(t/100)))),new e(r)},e.prototype.darken=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.l-=t/100,r.l=Lf(r.l),new e(r)},e.prototype.tint=function(t){return t===void 0&&(t=10),this.mix("white",t)},e.prototype.shade=function(t){return t===void 0&&(t=10),this.mix("black",t)},e.prototype.desaturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s-=t/100,r.s=Lf(r.s),new e(r)},e.prototype.saturate=function(t){t===void 0&&(t=10);var r=this.toHsl();return r.s+=t/100,r.s=Lf(r.s),new e(r)},e.prototype.greyscale=function(){return this.desaturate(100)},e.prototype.spin=function(t){var r=this.toHsl(),n=(r.h+t)%360;return r.h=n<0?360+n:n,new e(r)},e.prototype.mix=function(t,r){r===void 0&&(r=50);var n=this.toRgb(),i=new e(t).toRgb(),a=r/100,o={r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a};return new e(o)},e.prototype.analogous=function(t,r){t===void 0&&(t=6),r===void 0&&(r=30);var n=this.toHsl(),i=360/r,a=[this];for(n.h=(n.h-(i*t>>1)+720)%360;--t;)n.h=(n.h+i)%360,a.push(new e(n));return a},e.prototype.complement=function(){var t=this.toHsl();return t.h=(t.h+180)%360,new e(t)},e.prototype.monochromatic=function(t){t===void 0&&(t=6);for(var r=this.toHsv(),n=r.h,i=r.s,a=r.v,o=[],s=1/t;t--;)o.push(new e({h:n,s:i,v:a})),a=(a+s)%1;return o},e.prototype.splitcomplement=function(){var t=this.toHsl(),r=t.h;return[this,new e({h:(r+72)%360,s:t.s,l:t.l}),new e({h:(r+216)%360,s:t.s,l:t.l})]},e.prototype.onBackground=function(t){var r=this.toRgb(),n=new e(t).toRgb();return new e({r:n.r+(r.r-n.r)*r.a,g:n.g+(r.g-n.g)*r.a,b:n.b+(r.b-n.b)*r.a})},e.prototype.triad=function(){return this.polyad(3)},e.prototype.tetrad=function(){return this.polyad(4)},e.prototype.polyad=function(t){for(var r=this.toHsl(),n=r.h,i=[this],a=360/t,o=1;o{let n={};const i=e.color;if(i){const a=new SA(i),o=e.dark?a.tint(20).toString():Oi(a,20);if(e.plain)n=r.cssVarBlock({"bg-color":e.dark?Oi(a,90):a.tint(90).toString(),"text-color":i,"border-color":e.dark?Oi(a,50):a.tint(50).toString(),"hover-text-color":`var(${r.cssVarName("color-white")})`,"hover-bg-color":i,"hover-border-color":i,"active-bg-color":o,"active-text-color":`var(${r.cssVarName("color-white")})`,"active-border-color":o}),t.value&&(n[r.cssVarBlockName("disabled-bg-color")]=e.dark?Oi(a,90):a.tint(90).toString(),n[r.cssVarBlockName("disabled-text-color")]=e.dark?Oi(a,50):a.tint(50).toString(),n[r.cssVarBlockName("disabled-border-color")]=e.dark?Oi(a,80):a.tint(80).toString());else{const s=e.dark?Oi(a,30):a.tint(30).toString(),l=a.isDark()?`var(${r.cssVarName("color-white")})`:`var(${r.cssVarName("color-black")})`;if(n=r.cssVarBlock({"bg-color":i,"text-color":l,"border-color":i,"hover-bg-color":s,"hover-text-color":l,"hover-border-color":s,"active-bg-color":o,"active-border-color":o}),t.value){const u=e.dark?Oi(a,50):a.tint(50).toString();n[r.cssVarBlockName("disabled-bg-color")]=u,n[r.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${r.cssVarName("color-white")})`,n[r.cssVarBlockName("disabled-border-color")]=u}}}return n})}const Jz=ie({name:"ElButton"}),e8=ie({...Jz,props:gg,emits:$z,setup(e,{expose:t,emit:r}){const n=e,i=Qz(n),a=Oe("button"),{_ref:o,_size:s,_type:l,_disabled:u,_props:f,shouldAddSpace:c,handleClick:h}=Bz(n,r);return t({ref:o,size:s,type:l,disabled:u,shouldAddSpace:c}),(d,v)=>(G(),ve(Vt(d.tag),ei({ref_key:"_ref",ref:o},T(f),{class:[T(a).b(),T(a).m(T(l)),T(a).m(T(s)),T(a).is("disabled",T(u)),T(a).is("loading",d.loading),T(a).is("plain",d.plain),T(a).is("round",d.round),T(a).is("circle",d.circle),T(a).is("text",d.text),T(a).is("link",d.link),T(a).is("has-bg",d.bg)],style:T(i),onClick:T(h)}),{default:q(()=>[d.loading?(G(),ce(ft,{key:0},[d.$slots.loading?Ce(d.$slots,"loading",{key:0}):(G(),ve(T(Bt),{key:1,class:re(T(a).is("loading"))},{default:q(()=>[(G(),ve(Vt(d.loadingIcon)))]),_:1},8,["class"]))],64)):d.icon||d.$slots.icon?(G(),ve(T(Bt),{key:1},{default:q(()=>[d.icon?(G(),ve(Vt(d.icon),{key:0})):Ce(d.$slots,"icon",{key:1})]),_:3})):Ae("v-if",!0),d.$slots.default?(G(),ce("span",{key:2,class:re({[T(a).em("text","expand")]:T(c)})},[Ce(d.$slots,"default")],2)):Ae("v-if",!0)]),_:3},16,["class","style","onClick"]))}});var t8=Ke(e8,[["__file","button.vue"]]);const r8={size:gg.size,type:gg.type},n8=ie({name:"ElButtonGroup"}),i8=ie({...n8,props:r8,setup(e){const t=e;Dt(bA,Ln({size:wn(t,"size"),type:wn(t,"type")}));const r=Oe("button");return(n,i)=>(G(),ce("div",{class:re(`${T(r).b("group")}`)},[Ce(n.$slots,"default")],2))}});var xA=Ke(i8,[["__file","button-group.vue"]]);const yg=Yt(t8,{ButtonGroup:xA});pa(xA);var a8=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};const Wi=new Map;let C1;At&&(document.addEventListener("mousedown",e=>C1=e),document.addEventListener("mouseup",e=>{for(const t of Wi.values())for(const{documentHandler:r}of t)r(e,C1)}));function T1(e,t){let r=[];return Array.isArray(t.arg)?r=t.arg:mo(t.arg)&&r.push(t.arg),function(n,i){const a=t.instance.popperRef,o=n.target,s=i==null?void 0:i.target,l=!t||!t.instance,u=!o||!s,f=e.contains(o)||e.contains(s),c=e===o,h=r.length&&r.some(v=>v==null?void 0:v.contains(o))||r.length&&r.includes(s),d=a&&(a.contains(o)||a.contains(s));l||u||f||c||h||d||t.value(n,i)}}const CA={beforeMount(e,t){Wi.has(e)||Wi.set(e,[]),Wi.get(e).push({documentHandler:T1(e,t),bindingFn:t.value})},updated(e,t){Wi.has(e)||Wi.set(e,[]);const r=Wi.get(e),n=r.findIndex(a=>a.bindingFn===t.oldValue),i={documentHandler:T1(e,t),bindingFn:t.value};n>=0?r.splice(n,1,i):r.push(i)},unmounted(e){Wi.delete(e)}};var M1=!1,qa,_g,bg,Rc,kc,TA,Nc,wg,Sg,xg,MA,Cg,Tg,AA,PA;function yr(){if(!M1){M1=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),r=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(Cg=/\b(iPhone|iP[ao]d)/.exec(e),Tg=/\b(iP[ao]d)/.exec(e),xg=/Android/i.exec(e),AA=/FBAN\/\w+;/i.exec(e),PA=/Mobile/i.exec(e),MA=!!/Win64/.exec(e),t){qa=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,qa&&document&&document.documentMode&&(qa=document.documentMode);var n=/(?:Trident\/(\d+.\d+))/.exec(e);TA=n?parseFloat(n[1])+4:qa,_g=t[2]?parseFloat(t[2]):NaN,bg=t[3]?parseFloat(t[3]):NaN,Rc=t[4]?parseFloat(t[4]):NaN,Rc?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),kc=t&&t[1]?parseFloat(t[1]):NaN):kc=NaN}else qa=_g=bg=kc=Rc=NaN;if(r){if(r[1]){var i=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);Nc=i?parseFloat(i[1].replace("_",".")):!0}else Nc=!1;wg=!!r[2],Sg=!!r[3]}else Nc=wg=Sg=!1}}var Mg={ie:function(){return yr()||qa},ieCompatibilityMode:function(){return yr()||TA>qa},ie64:function(){return Mg.ie()&&MA},firefox:function(){return yr()||_g},opera:function(){return yr()||bg},webkit:function(){return yr()||Rc},safari:function(){return Mg.webkit()},chrome:function(){return yr()||kc},windows:function(){return yr()||wg},osx:function(){return yr()||Nc},linux:function(){return yr()||Sg},iphone:function(){return yr()||Cg},mobile:function(){return yr()||Cg||Tg||xg||PA},nativeApp:function(){return yr()||AA},android:function(){return yr()||xg},ipad:function(){return yr()||Tg}},o8=Mg,If=!!(typeof window<"u"&&window.document&&window.document.createElement),s8={canUseDOM:If,canUseWorkers:typeof Worker<"u",canUseEventListeners:If&&!!(window.addEventListener||window.attachEvent),canUseViewport:If&&!!window.screen,isInWorker:!If},EA=s8,LA;EA.canUseDOM&&(LA=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function l8(e,t){if(!EA.canUseDOM||t&&!("addEventListener"in document))return!1;var r="on"+e,n=r in document;if(!n){var i=document.createElement("div");i.setAttribute(r,"return;"),n=typeof i[r]=="function"}return!n&&LA&&e==="wheel"&&(n=document.implementation.hasFeature("Events.wheel","3.0")),n}var u8=l8,A1=10,P1=40,E1=800;function DA(e){var t=0,r=0,n=0,i=0;return"detail"in e&&(r=e.detail),"wheelDelta"in e&&(r=-e.wheelDelta/120),"wheelDeltaY"in e&&(r=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=r,r=0),n=t*A1,i=r*A1,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(n=e.deltaX),(n||i)&&e.deltaMode&&(e.deltaMode==1?(n*=P1,i*=P1):(n*=E1,i*=E1)),n&&!t&&(t=n<1?-1:1),i&&!r&&(r=i<1?-1:1),{spinX:t,spinY:r,pixelX:n,pixelY:i}}DA.getEventType=function(){return o8.firefox()?"DOMMouseScroll":u8("wheel")?"wheel":"mousewheel"};var f8=DA;/** * Checks if an event is supported in the current execution environment. * * NOTE: This will not work correctly for non-generic events such as `change`, @@ -38,11 +38,11 @@ var DD=Object.defineProperty;var ID=(e,t,r)=>t in e?DD(e,t,{enumerable:!0,config * @return {boolean} True if the event is supported. * @internal * @license Modernizr 3.0.0pre (Custom Build) | MIT -*/const c8=function(e,t){if(e&&e.addEventListener){const r=function(n){const i=f8(n);t&&Reflect.apply(t,this,[n,i])};e.addEventListener("wheel",r,{passive:!0})}},d8={beforeMount(e,t){c8(e,t.value)}},IA={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},controls:{type:String,default:void 0},border:Boolean,size:dh,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0}},OA={[wi]:e=>ze(e)||Rt(e)||zr(e),change:e=>ze(e)||Rt(e)||zr(e)},zs=Symbol("checkboxGroupContextKey"),h8=({model:e,isChecked:t})=>{const r=Le(zs,void 0),n=k(()=>{var a,o;const s=(a=r==null?void 0:r.max)==null?void 0:a.value,l=(o=r==null?void 0:r.min)==null?void 0:o.value;return!ys(s)&&e.value.length>=s&&!t.value||!ys(l)&&e.value.length<=l&&t.value});return{isDisabled:vh(k(()=>(r==null?void 0:r.disabled.value)||n.value)),isLimitDisabled:n}},v8=(e,{model:t,isLimitExceeded:r,hasOwnLabel:n,isDisabled:i,isLabeledByFormItem:a})=>{const o=Le(zs,void 0),{formItem:s}=tf(),{emit:l}=it();function u(v){var p,m;return v===e.trueLabel||v===!0?(p=e.trueLabel)!=null?p:!0:(m=e.falseLabel)!=null?m:!1}function f(v,p){l("change",u(v),p)}function c(v){if(r.value)return;const p=v.target;l("change",u(p.checked),v)}async function h(v){r.value||!n.value&&!i.value&&a.value&&(v.composedPath().some(g=>g.tagName==="LABEL")||(t.value=u([!1,e.falseLabel].includes(t.value)),await kt(),f(t.value,v)))}const d=k(()=>(o==null?void 0:o.validateEvent)||e.validateEvent);return we(()=>e.modelValue,()=>{d.value&&(s==null||s.validate("change").catch(v=>void 0))}),{handleChange:c,onClickRoot:h}},p8=e=>{const t=$(!1),{emit:r}=it(),n=Le(zs,void 0),i=k(()=>ys(n)===!1),a=$(!1),o=k({get(){var s,l;return i.value?(s=n==null?void 0:n.modelValue)==null?void 0:s.value:(l=e.modelValue)!=null?l:t.value},set(s){var l,u;i.value&&_e(s)?(a.value=((l=n==null?void 0:n.max)==null?void 0:l.value)!==void 0&&s.length>(n==null?void 0:n.max.value)&&s.length>o.value.length,a.value===!1&&((u=n==null?void 0:n.changeEvent)==null||u.call(n,s))):(r(wi,s),t.value=s)}});return{model:o,isGroup:i,isLimitExceeded:a}},g8=(e,t,{model:r})=>{const n=Le(zs,void 0),i=$(!1),a=k(()=>{const u=r.value;return zr(u)?u:_e(u)?qe(e.label)?u.map(Qe).some(f=>p3(f,e.label)):u.map(Qe).includes(e.label):u!=null?u===e.trueLabel:!!u}),o=xi(k(()=>{var u;return(u=n==null?void 0:n.size)==null?void 0:u.value}),{prop:!0}),s=xi(k(()=>{var u;return(u=n==null?void 0:n.size)==null?void 0:u.value})),l=k(()=>!!t.default||!ms(e.label));return{checkboxButtonSize:o,isChecked:a,isFocused:i,checkboxSize:s,hasOwnLabel:l}},m8=(e,{model:t})=>{function r(){_e(t.value)&&!t.value.includes(e.label)?t.value.push(e.label):t.value=e.trueLabel||!0}e.checked&&r()},RA=(e,t)=>{const{formItem:r}=tf(),{model:n,isGroup:i,isLimitExceeded:a}=p8(e),{isFocused:o,isChecked:s,checkboxButtonSize:l,checkboxSize:u,hasOwnLabel:f}=g8(e,t,{model:n}),{isDisabled:c}=h8({model:n,isChecked:s}),{inputId:h,isLabeledByFormItem:d}=Vy(e,{formItemContext:r,disableIdGeneration:f,disableIdManagement:i}),{handleChange:v,onClickRoot:p}=v8(e,{model:n,isLimitExceeded:a,hasOwnLabel:f,isDisabled:c,isLabeledByFormItem:d});return m8(e,{model:n}),{inputId:h,isLabeledByFormItem:d,isChecked:s,isDisabled:c,isFocused:o,checkboxButtonSize:l,checkboxSize:u,hasOwnLabel:f,model:n,handleChange:v,onClickRoot:p}},y8=["id","indeterminate","name","tabindex","disabled","true-value","false-value"],_8=["id","indeterminate","disabled","value","name","tabindex"],b8=ie({name:"ElCheckbox"}),w8=ie({...b8,props:IA,emits:OA,setup(e){const t=e,r=Rs(),{inputId:n,isLabeledByFormItem:i,isChecked:a,isDisabled:o,isFocused:s,checkboxSize:l,hasOwnLabel:u,model:f,handleChange:c,onClickRoot:h}=RA(t,r),d=Oe("checkbox"),v=k(()=>[d.b(),d.m(l.value),d.is("disabled",o.value),d.is("bordered",t.border),d.is("checked",a.value)]),p=k(()=>[d.e("input"),d.is("disabled",o.value),d.is("checked",a.value),d.is("indeterminate",t.indeterminate),d.is("focus",s.value)]);return(m,g)=>(G(),de(Vt(!T(u)&&T(i)?"span":"label"),{class:re(T(v)),"aria-controls":m.indeterminate?m.controls:null,onClick:T(h)},{default:j(()=>[ee("span",{class:re(T(p))},[m.trueLabel||m.falseLabel?qt((G(),ce("input",{key:0,id:T(n),"onUpdate:modelValue":g[0]||(g[0]=y=>Pt(f)?f.value=y:null),class:re(T(d).e("original")),type:"checkbox",indeterminate:m.indeterminate,name:m.name,tabindex:m.tabindex,disabled:T(o),"true-value":m.trueLabel,"false-value":m.falseLabel,onChange:g[1]||(g[1]=(...y)=>T(c)&&T(c)(...y)),onFocus:g[2]||(g[2]=y=>s.value=!0),onBlur:g[3]||(g[3]=y=>s.value=!1),onClick:g[4]||(g[4]=ua(()=>{},["stop"]))},null,42,y8)),[[sd,T(f)]]):qt((G(),ce("input",{key:1,id:T(n),"onUpdate:modelValue":g[5]||(g[5]=y=>Pt(f)?f.value=y:null),class:re(T(d).e("original")),type:"checkbox",indeterminate:m.indeterminate,disabled:T(o),value:m.label,name:m.name,tabindex:m.tabindex,onChange:g[6]||(g[6]=(...y)=>T(c)&&T(c)(...y)),onFocus:g[7]||(g[7]=y=>s.value=!0),onBlur:g[8]||(g[8]=y=>s.value=!1),onClick:g[9]||(g[9]=ua(()=>{},["stop"]))},null,42,_8)),[[sd,T(f)]]),ee("span",{class:re(T(d).e("inner"))},null,2)],2),T(u)?(G(),ce("span",{key:0,class:re(T(d).e("label"))},[Ce(m.$slots,"default"),m.$slots.default?Ae("v-if",!0):(G(),ce(ft,{key:0},[mt(be(m.label),1)],64))],2)):Ae("v-if",!0)]),_:3},8,["class","aria-controls","onClick"]))}});var S8=Ke(w8,[["__file","checkbox.vue"]]);const x8=["name","tabindex","disabled","true-value","false-value"],C8=["name","tabindex","disabled","value"],T8=ie({name:"ElCheckboxButton"}),M8=ie({...T8,props:IA,emits:OA,setup(e){const t=e,r=Rs(),{isFocused:n,isChecked:i,isDisabled:a,checkboxButtonSize:o,model:s,handleChange:l}=RA(t,r),u=Le(zs,void 0),f=Oe("checkbox"),c=k(()=>{var d,v,p,m;const g=(v=(d=u==null?void 0:u.fill)==null?void 0:d.value)!=null?v:"";return{backgroundColor:g,borderColor:g,color:(m=(p=u==null?void 0:u.textColor)==null?void 0:p.value)!=null?m:"",boxShadow:g?`-1px 0 0 0 ${g}`:void 0}}),h=k(()=>[f.b("button"),f.bm("button",o.value),f.is("disabled",a.value),f.is("checked",i.value),f.is("focus",n.value)]);return(d,v)=>(G(),ce("label",{class:re(T(h))},[d.trueLabel||d.falseLabel?qt((G(),ce("input",{key:0,"onUpdate:modelValue":v[0]||(v[0]=p=>Pt(s)?s.value=p:null),class:re(T(f).be("button","original")),type:"checkbox",name:d.name,tabindex:d.tabindex,disabled:T(a),"true-value":d.trueLabel,"false-value":d.falseLabel,onChange:v[1]||(v[1]=(...p)=>T(l)&&T(l)(...p)),onFocus:v[2]||(v[2]=p=>n.value=!0),onBlur:v[3]||(v[3]=p=>n.value=!1),onClick:v[4]||(v[4]=ua(()=>{},["stop"]))},null,42,x8)),[[sd,T(s)]]):qt((G(),ce("input",{key:1,"onUpdate:modelValue":v[5]||(v[5]=p=>Pt(s)?s.value=p:null),class:re(T(f).be("button","original")),type:"checkbox",name:d.name,tabindex:d.tabindex,disabled:T(a),value:d.label,onChange:v[6]||(v[6]=(...p)=>T(l)&&T(l)(...p)),onFocus:v[7]||(v[7]=p=>n.value=!0),onBlur:v[8]||(v[8]=p=>n.value=!1),onClick:v[9]||(v[9]=ua(()=>{},["stop"]))},null,42,C8)),[[sd,T(s)]]),d.$slots.default||d.label?(G(),ce("span",{key:2,class:re(T(f).be("button","inner")),style:ct(T(i)?T(c):void 0)},[Ce(d.$slots,"default",{},()=>[mt(be(d.label),1)])],6)):Ae("v-if",!0)],2))}});var kA=Ke(M8,[["__file","checkbox-button.vue"]]);const A8=Je({modelValue:{type:Be(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:dh,label:String,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0}}),P8={[wi]:e=>_e(e),change:e=>_e(e)},E8=ie({name:"ElCheckboxGroup"}),L8=ie({...E8,props:A8,emits:P8,setup(e,{emit:t}){const r=e,n=Oe("checkbox"),{formItem:i}=tf(),{inputId:a,isLabeledByFormItem:o}=Vy(r,{formItemContext:i}),s=async u=>{t(wi,u),await kt(),t("change",u)},l=k({get(){return r.modelValue},set(u){s(u)}});return Dt(zs,{...b3(Kd(r),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:l,changeEvent:s}),we(()=>r.modelValue,()=>{r.validateEvent&&(i==null||i.validate("change").catch(u=>void 0))}),(u,f)=>{var c;return G(),de(Vt(u.tag),{id:T(a),class:re(T(n).b("group")),role:"group","aria-label":T(o)?void 0:u.label||"checkbox-group","aria-labelledby":T(o)?(c=T(i))==null?void 0:c.labelId:void 0},{default:j(()=>[Ce(u.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var NA=Ke(L8,[["__file","checkbox-group.vue"]]);const Cs=Yt(S8,{CheckboxButton:kA,CheckboxGroup:NA});pa(kA);pa(NA);const D8=Je({type:{type:String,values:["success","info","warning","danger",""],default:""},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:{type:String,default:""},size:{type:String,values:Bs,default:""},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),I8={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},O8=ie({name:"ElTag"}),R8=ie({...O8,props:D8,emits:I8,setup(e,{emit:t}){const r=e,n=xi(),i=Oe("tag"),a=k(()=>{const{type:l,hit:u,effect:f,closable:c,round:h}=r;return[i.b(),i.is("closable",c),i.m(l),i.m(n.value),i.m(f),i.is("hit",u),i.is("round",h)]}),o=l=>{t("close",l)},s=l=>{t("click",l)};return(l,u)=>l.disableTransitions?(G(),ce("span",{key:0,class:re(T(a)),style:ct({backgroundColor:l.color}),onClick:s},[ee("span",{class:re(T(i).e("content"))},[Ce(l.$slots,"default")],2),l.closable?(G(),de(T(Nt),{key:0,class:re(T(i).e("close")),onClick:ua(o,["stop"])},{default:j(()=>[Z(T(vd))]),_:1},8,["class","onClick"])):Ae("v-if",!0)],6)):(G(),de(ti,{key:1,name:`${T(i).namespace.value}-zoom-in-center`,appear:""},{default:j(()=>[ee("span",{class:re(T(a)),style:ct({backgroundColor:l.color}),onClick:s},[ee("span",{class:re(T(i).e("content"))},[Ce(l.$slots,"default")],2),l.closable?(G(),de(T(Nt),{key:0,class:re(T(i).e("close")),onClick:ua(o,["stop"])},{default:j(()=>[Z(T(vd))]),_:1},8,["class","onClick"])):Ae("v-if",!0)],6)]),_:3},8,["name"]))}});var k8=Ke(R8,[["__file","tag.vue"]]);const N8=Yt(k8),BA=Symbol("rowContextKey"),B8=["start","center","end","space-around","space-between","space-evenly"],F8=["top","middle","bottom"],$8=Je({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:B8,default:"start"},align:{type:String,values:F8}}),H8=ie({name:"ElRow"}),z8=ie({...H8,props:$8,setup(e){const t=e,r=Oe("row"),n=k(()=>t.gutter);Dt(BA,{gutter:n});const i=k(()=>{const o={};return t.gutter&&(o.marginRight=o.marginLeft=`-${t.gutter/2}px`),o}),a=k(()=>[r.b(),r.is(`justify-${t.justify}`,t.justify!=="start"),r.is(`align-${t.align}`,!!t.align)]);return(o,s)=>(G(),de(Vt(o.tag),{class:re(T(a)),style:ct(T(i))},{default:j(()=>[Ce(o.$slots,"default")]),_:3},8,["class","style"]))}});var V8=Ke(z8,[["__file","row.vue"]]);const FA=Yt(V8),W8=Je({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:Be([Number,Object]),default:()=>ja({})},sm:{type:Be([Number,Object]),default:()=>ja({})},md:{type:Be([Number,Object]),default:()=>ja({})},lg:{type:Be([Number,Object]),default:()=>ja({})},xl:{type:Be([Number,Object]),default:()=>ja({})}}),G8=ie({name:"ElCol"}),U8=ie({...G8,props:W8,setup(e){const t=e,{gutter:r}=Le(BA,{gutter:k(()=>0)}),n=Oe("col"),i=k(()=>{const o={};return r.value&&(o.paddingLeft=o.paddingRight=`${r.value/2}px`),o}),a=k(()=>{const o=[];return["span","offset","pull","push"].forEach(u=>{const f=t[u];Rt(f)&&(u==="span"?o.push(n.b(`${t[u]}`)):f>0&&o.push(n.b(`${u}-${t[u]}`)))}),["xs","sm","md","lg","xl"].forEach(u=>{Rt(t[u])?o.push(n.b(`${u}-${t[u]}`)):qe(t[u])&&Object.entries(t[u]).forEach(([f,c])=>{o.push(f!=="span"?n.b(`${u}-${f}-${c}`):n.b(`${u}-${c}`))})}),r.value&&o.push(n.is("guttered")),[n.b(),o]});return(o,s)=>(G(),de(Vt(o.tag),{class:re(T(a)),style:ct(T(i))},{default:j(()=>[Ce(o.$slots,"default")]),_:3},8,["class","style"]))}});var Y8=Ke(U8,[["__file","col.vue"]]);const $A=Yt(Y8),j8=ie({name:"ElCollapseTransition"}),q8=ie({...j8,setup(e){const t=Oe("collapse-transition"),r=i=>{i.style.maxHeight="",i.style.overflow=i.dataset.oldOverflow,i.style.paddingTop=i.dataset.oldPaddingTop,i.style.paddingBottom=i.dataset.oldPaddingBottom},n={beforeEnter(i){i.dataset||(i.dataset={}),i.dataset.oldPaddingTop=i.style.paddingTop,i.dataset.oldPaddingBottom=i.style.paddingBottom,i.style.height&&(i.dataset.elExistsHeight=i.style.height),i.style.maxHeight=0,i.style.paddingTop=0,i.style.paddingBottom=0},enter(i){requestAnimationFrame(()=>{i.dataset.oldOverflow=i.style.overflow,i.dataset.elExistsHeight?i.style.maxHeight=i.dataset.elExistsHeight:i.scrollHeight!==0?i.style.maxHeight=`${i.scrollHeight}px`:i.style.maxHeight=0,i.style.paddingTop=i.dataset.oldPaddingTop,i.style.paddingBottom=i.dataset.oldPaddingBottom,i.style.overflow="hidden"})},afterEnter(i){i.style.maxHeight="",i.style.overflow=i.dataset.oldOverflow},enterCancelled(i){r(i)},beforeLeave(i){i.dataset||(i.dataset={}),i.dataset.oldPaddingTop=i.style.paddingTop,i.dataset.oldPaddingBottom=i.style.paddingBottom,i.dataset.oldOverflow=i.style.overflow,i.style.maxHeight=`${i.scrollHeight}px`,i.style.overflow="hidden"},leave(i){i.scrollHeight!==0&&(i.style.maxHeight=0,i.style.paddingTop=0,i.style.paddingBottom=0)},afterLeave(i){r(i)},leaveCancelled(i){r(i)}};return(i,a)=>(G(),de(ti,ei({name:T(t).b()},YI(n)),{default:j(()=>[Ce(i.$slots,"default")]),_:3},16,["name"]))}});var Bc=Ke(q8,[["__file","collapse-transition.vue"]]);Bc.install=e=>{e.component(Bc.name,Bc)};const K8=Bc,X8=Je({mask:{type:Boolean,default:!0},customMaskEvent:{type:Boolean,default:!1},overlayClass:{type:Be([String,Array,Object])},zIndex:{type:Be([String,Number])}}),Z8={click:e=>e instanceof MouseEvent},Q8="overlay";var J8=ie({name:"ElOverlay",props:X8,emits:Z8,setup(e,{slots:t,emit:r}){const n=Oe(Q8),i=l=>{r("click",l)},{onClick:a,onMousedown:o,onMouseup:s}=XM(e.customMaskEvent?void 0:i);return()=>e.mask?Z("div",{class:[n.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:a,onMousedown:o,onMouseup:s},[Ce(t,"default")],Lc.STYLE|Lc.CLASS|Lc.PROPS,["onClick","onMouseup","onMousedown"]):Te("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[Ce(t,"default")])}});const e6=J8,HA=Symbol("dialogInjectionKey"),zA=Je({center:Boolean,alignCenter:Boolean,closeIcon:{type:vr},customClass:{type:String,default:""},draggable:Boolean,fullscreen:Boolean,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),t6={close:()=>!0},r6=["aria-level"],n6=["aria-label"],i6=["id"],a6=ie({name:"ElDialogContent"}),o6=ie({...a6,props:zA,emits:t6,setup(e){const t=e,{t:r}=Fs(),{Close:n}=W3,{dialogRef:i,headerRef:a,bodyId:o,ns:s,style:l}=Le(HA),{focusTrapRef:u}=Le(pA),f=k(()=>[s.b(),s.is("fullscreen",t.fullscreen),s.is("draggable",t.draggable),s.is("align-center",t.alignCenter),{[s.m("center")]:t.center},t.customClass]),c=Y3(u,i),h=k(()=>t.draggable);return K3(i,a,h),(d,v)=>(G(),ce("div",{ref:T(c),class:re(T(f)),style:ct(T(l)),tabindex:"-1"},[ee("header",{ref_key:"headerRef",ref:a,class:re(T(s).e("header"))},[Ce(d.$slots,"header",{},()=>[ee("span",{role:"heading","aria-level":d.ariaLevel,class:re(T(s).e("title"))},be(d.title),11,r6)]),d.showClose?(G(),ce("button",{key:0,"aria-label":T(r)("el.dialog.close"),class:re(T(s).e("headerbtn")),type:"button",onClick:v[0]||(v[0]=p=>d.$emit("close"))},[Z(T(Nt),{class:re(T(s).e("close"))},{default:j(()=>[(G(),de(Vt(d.closeIcon||T(n))))]),_:1},8,["class"])],10,n6)):Ae("v-if",!0)],2),ee("div",{id:T(o),class:re(T(s).e("body"))},[Ce(d.$slots,"default")],10,i6),d.$slots.footer?(G(),ce("footer",{key:0,class:re(T(s).e("footer"))},[Ce(d.$slots,"footer")],2)):Ae("v-if",!0)],6))}});var s6=Ke(o6,[["__file","dialog-content.vue"]]);const l6=Je({...zA,appendToBody:Boolean,appendTo:{type:Be(String),default:"body"},beforeClose:{type:Be(Function)},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:0},top:{type:String},modelValue:Boolean,modalClass:String,width:{type:[String,Number]},zIndex:{type:Number},trapFocus:{type:Boolean,default:!1},headerAriaLevel:{type:String,default:"2"}}),u6={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[wi]:e=>zr(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},f6=(e,t)=>{var r;const i=it().emit,{nextZIndex:a}=zy();let o="";const s=xu(),l=xu(),u=$(!1),f=$(!1),c=$(!1),h=$((r=e.zIndex)!=null?r:a());let d,v;const p=hh("namespace",Bl),m=k(()=>{const N={},H=`--${p.value}-dialog`;return e.fullscreen||(e.top&&(N[`${H}-margin-top`]=e.top),e.width&&(N[`${H}-width`]=Zn(e.width))),N}),g=k(()=>e.alignCenter?{display:"flex"}:{});function y(){i("opened")}function _(){i("closed"),i(wi,!1),e.destroyOnClose&&(c.value=!1)}function b(){i("close")}function x(){v==null||v(),d==null||d(),e.openDelay&&e.openDelay>0?{stop:d}=hu(()=>M(),e.openDelay):M()}function w(){d==null||d(),v==null||v(),e.closeDelay&&e.closeDelay>0?{stop:v}=hu(()=>A(),e.closeDelay):A()}function S(){function N(H){H||(f.value=!0,u.value=!1)}e.beforeClose?e.beforeClose(N):w()}function C(){e.closeOnClickModal&&S()}function M(){At&&(u.value=!0)}function A(){u.value=!1}function P(){i("openAutoFocus")}function E(){i("closeAutoFocus")}function L(N){var H;((H=N.detail)==null?void 0:H.focusReason)==="pointer"&&N.preventDefault()}e.lockScroll&&t5(u);function O(){e.closeOnPressEscape&&S()}return we(()=>e.modelValue,N=>{N?(f.value=!1,x(),c.value=!0,h.value=MM(e.zIndex)?a():h.value++,kt(()=>{i("open"),t.value&&(t.value.scrollTop=0)})):u.value&&w()}),we(()=>e.fullscreen,N=>{t.value&&(N?(o=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=o)}),_t(()=>{e.modelValue&&(u.value=!0,c.value=!0,x())}),{afterEnter:y,afterLeave:_,beforeLeave:b,handleClose:S,onModalClick:C,close:w,doClose:A,onOpenAutoFocus:P,onCloseAutoFocus:E,onCloseRequested:O,onFocusoutPrevented:L,titleId:s,bodyId:l,closed:f,style:m,overlayDialogStyle:g,rendered:c,visible:u,zIndex:h}},c6=["aria-label","aria-labelledby","aria-describedby"],d6=ie({name:"ElDialog",inheritAttrs:!1}),h6=ie({...d6,props:l6,emits:u6,setup(e,{expose:t}){const r=e,n=Rs();bu({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},k(()=>!!n.title)),bu({scope:"el-dialog",from:"custom-class",replacement:"class",version:"2.3.0",ref:"https://element-plus.org/en-US/component/dialog.html#attributes",type:"Attribute"},k(()=>!!r.customClass));const i=Oe("dialog"),a=$(),o=$(),s=$(),{visible:l,titleId:u,bodyId:f,style:c,overlayDialogStyle:h,rendered:d,zIndex:v,afterEnter:p,afterLeave:m,beforeLeave:g,handleClose:y,onModalClick:_,onOpenAutoFocus:b,onCloseAutoFocus:x,onCloseRequested:w,onFocusoutPrevented:S}=f6(r,a);Dt(HA,{dialogRef:a,headerRef:o,bodyId:f,ns:i,rendered:d,style:c});const C=XM(_),M=k(()=>r.draggable&&!r.fullscreen);return t({visible:l,dialogContentRef:s}),(A,P)=>(G(),de(MT,{to:A.appendTo,disabled:A.appendTo!=="body"?!1:!A.appendToBody},[Z(ti,{name:"dialog-fade",onAfterEnter:T(p),onAfterLeave:T(m),onBeforeLeave:T(g),persisted:""},{default:j(()=>[qt(Z(T(e6),{"custom-mask-event":"",mask:A.modal,"overlay-class":A.modalClass,"z-index":T(v)},{default:j(()=>[ee("div",{role:"dialog","aria-modal":"true","aria-label":A.title||void 0,"aria-labelledby":A.title?void 0:T(u),"aria-describedby":T(f),class:re(`${T(i).namespace.value}-overlay-dialog`),style:ct(T(h)),onClick:P[0]||(P[0]=(...E)=>T(C).onClick&&T(C).onClick(...E)),onMousedown:P[1]||(P[1]=(...E)=>T(C).onMousedown&&T(C).onMousedown(...E)),onMouseup:P[2]||(P[2]=(...E)=>T(C).onMouseup&&T(C).onMouseup(...E))},[Z(T(mA),{loop:"",trapped:T(l),"focus-start-el":"container",onFocusAfterTrapped:T(b),onFocusAfterReleased:T(x),onFocusoutPrevented:T(S),onReleaseRequested:T(w)},{default:j(()=>[T(d)?(G(),de(s6,ei({key:0,ref_key:"dialogContentRef",ref:s},A.$attrs,{"custom-class":A.customClass,center:A.center,"align-center":A.alignCenter,"close-icon":A.closeIcon,draggable:T(M),fullscreen:A.fullscreen,"show-close":A.showClose,title:A.title,"aria-level":A.headerAriaLevel,onClose:T(y)}),UI({header:j(()=>[A.$slots.title?Ce(A.$slots,"title",{key:1}):Ce(A.$slots,"header",{key:0,close:T(y),titleId:T(u),titleClass:T(i).e("title")})]),default:j(()=>[Ce(A.$slots,"default")]),_:2},[A.$slots.footer?{name:"footer",fn:j(()=>[Ce(A.$slots,"footer")])}:void 0]),1040,["custom-class","center","align-center","close-icon","draggable","fullscreen","show-close","title","aria-level","onClose"])):Ae("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,c6)]),_:3},8,["mask","overlay-class","z-index"]),[[Kn,T(l)]])]),_:3},8,["onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["to","disabled"]))}});var v6=Ke(h6,[["__file","dialog.vue"]]);const p6=Yt(v6),g6=Je({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:Be(String),default:"solid"}}),m6=ie({name:"ElDivider"}),y6=ie({...m6,props:g6,setup(e){const t=e,r=Oe("divider"),n=k(()=>r.cssVar({"border-style":t.borderStyle}));return(i,a)=>(G(),ce("div",{class:re([T(r).b(),T(r).m(i.direction)]),style:ct(T(n)),role:"separator"},[i.$slots.default&&i.direction!=="vertical"?(G(),ce("div",{key:0,class:re([T(r).e("text"),T(r).is(i.contentPosition)])},[Ce(i.$slots,"default")],2)):Ae("v-if",!0)],6))}});var _6=Ke(y6,[["__file","divider.vue"]]);const VA=Yt(_6);let b6=class{constructor(t,r){this.parent=t,this.domNode=r,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(t){t===this.subMenuItems.length?t=0:t<0&&(t=this.subMenuItems.length-1),this.subMenuItems[t].focus(),this.subIndex=t}addListeners(){const t=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,r=>{r.addEventListener("keydown",n=>{let i=!1;switch(n.code){case hr.down:{this.gotoSubIndex(this.subIndex+1),i=!0;break}case hr.up:{this.gotoSubIndex(this.subIndex-1),i=!0;break}case hr.tab:{Ac(t,"mouseleave");break}case hr.enter:case hr.space:{i=!0,n.currentTarget.click();break}}return i&&(n.preventDefault(),n.stopPropagation()),!1})})}},w6=class{constructor(t,r){this.domNode=t,this.submenu=null,this.submenu=null,this.init(r)}init(t){this.domNode.setAttribute("tabindex","0");const r=this.domNode.querySelector(`.${t}-menu`);r&&(this.submenu=new b6(this,r)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",t=>{let r=!1;switch(t.code){case hr.down:{Ac(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),r=!0;break}case hr.up:{Ac(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),r=!0;break}case hr.tab:{Ac(t.currentTarget,"mouseleave");break}case hr.enter:case hr.space:{r=!0,t.currentTarget.click();break}}r&&t.preventDefault()})}},S6=class{constructor(t,r){this.domNode=t,this.init(r)}init(t){const r=this.domNode.childNodes;Array.from(r).forEach(n=>{n.nodeType===1&&new w6(n,t)})}};const x6=ie({name:"ElMenuCollapseTransition",setup(){const e=Oe("menu");return{listeners:{onBeforeEnter:r=>r.style.opacity="0.2",onEnter(r,n){Za(r,`${e.namespace.value}-opacity-transition`),r.style.opacity="1",n()},onAfterEnter(r){so(r,`${e.namespace.value}-opacity-transition`),r.style.opacity=""},onBeforeLeave(r){r.dataset||(r.dataset={}),oo(r,e.m("collapse"))?(so(r,e.m("collapse")),r.dataset.oldOverflow=r.style.overflow,r.dataset.scrollWidth=r.clientWidth.toString(),Za(r,e.m("collapse"))):(Za(r,e.m("collapse")),r.dataset.oldOverflow=r.style.overflow,r.dataset.scrollWidth=r.clientWidth.toString(),so(r,e.m("collapse"))),r.style.width=`${r.scrollWidth}px`,r.style.overflow="hidden"},onLeave(r){Za(r,"horizontal-collapse-transition"),r.style.width=`${r.dataset.scrollWidth}px`}}}}});function C6(e,t,r,n,i,a){return G(),de(ti,ei({mode:"out-in"},e.listeners),{default:j(()=>[Ce(e.$slots,"default")]),_:3},16)}var T6=Ke(x6,[["render",C6],["__file","menu-collapse-transition.vue"]]);function WA(e,t){const r=k(()=>{let i=e.parent;const a=[t.value];for(;i.type.name!=="ElMenu";)i.props.index&&a.unshift(i.props.index),i=i.parent;return a});return{parentMenu:k(()=>{let i=e.parent;for(;i&&!["ElMenu","ElSubMenu"].includes(i.type.name);)i=i.parent;return i}),indexPath:r}}function M6(e){return k(()=>{const r=e.backgroundColor;return r?new SA(r).shade(20).toString():""})}const GA=(e,t)=>{const r=Oe("menu");return k(()=>r.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":M6(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},A6=Je({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,disabled:Boolean,popperAppendToBody:{type:Boolean,default:void 0},teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:vr},expandOpenIcon:{type:vr},collapseCloseIcon:{type:vr},collapseOpenIcon:{type:vr}}),Of="ElSubMenu";var jy=ie({name:Of,props:A6,setup(e,{slots:t,expose:r}){bu({from:"popper-append-to-body",replacement:"teleported",scope:Of,version:"2.3.0",ref:"https://element-plus.org/en-US/component/menu.html#submenu-attributes"},k(()=>e.popperAppendToBody!==void 0));const n=it(),{indexPath:i,parentMenu:a}=WA(n,k(()=>e.index)),o=Oe("menu"),s=Oe("sub-menu"),l=Le("rootMenu");l||bi(Of,"can not inject root menu");const u=Le(`subMenu:${a.value.uid}`);u||bi(Of,"can not inject sub menu");const f=$({}),c=$({});let h;const d=$(!1),v=$(),p=$(null),m=k(()=>C.value==="horizontal"&&y.value?"bottom-start":"right-start"),g=k(()=>C.value==="horizontal"&&y.value||C.value==="vertical"&&!l.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?w.value?e.expandOpenIcon:e.expandCloseIcon:EM:e.collapseCloseIcon&&e.collapseOpenIcon?w.value?e.collapseOpenIcon:e.collapseCloseIcon:Ey),y=k(()=>u.level===0),_=k(()=>{var z;const te=(z=e.teleported)!=null?z:e.popperAppendToBody;return te===void 0?y.value:te}),b=k(()=>l.props.collapse?`${o.namespace.value}-zoom-in-left`:`${o.namespace.value}-zoom-in-top`),x=k(()=>C.value==="horizontal"&&y.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),w=k(()=>l.openedMenus.includes(e.index)),S=k(()=>{let z=!1;return Object.values(f.value).forEach(te=>{te.active&&(z=!0)}),Object.values(c.value).forEach(te=>{te.active&&(z=!0)}),z}),C=k(()=>l.props.mode),M=Ln({index:e.index,indexPath:i,active:S}),A=GA(l.props,u.level+1),P=k(()=>{var z;return(z=e.popperOffset)!=null?z:l.props.popperOffset}),E=k(()=>{var z;return(z=e.popperClass)!=null?z:l.props.popperClass}),L=k(()=>{var z;return(z=e.showTimeout)!=null?z:l.props.showTimeout}),O=k(()=>{var z;return(z=e.hideTimeout)!=null?z:l.props.hideTimeout}),N=()=>{var z,te,J;return(J=(te=(z=p.value)==null?void 0:z.popperRef)==null?void 0:te.popperInstanceRef)==null?void 0:J.destroy()},H=z=>{z||N()},V=()=>{l.props.menuTrigger==="hover"&&l.props.mode==="horizontal"||l.props.collapse&&l.props.mode==="vertical"||e.disabled||l.handleSubMenuClick({index:e.index,indexPath:i.value,active:S.value})},U=(z,te=L.value)=>{var J;if(z.type!=="focus"){if(l.props.menuTrigger==="click"&&l.props.mode==="horizontal"||!l.props.collapse&&l.props.mode==="vertical"||e.disabled){u.mouseInChild.value=!0;return}u.mouseInChild.value=!0,h==null||h(),{stop:h}=hu(()=>{l.openMenu(e.index,i.value)},te),_.value&&((J=a.value.vnode.el)==null||J.dispatchEvent(new MouseEvent("mouseenter")))}},F=(z=!1)=>{var te;if(l.props.menuTrigger==="click"&&l.props.mode==="horizontal"||!l.props.collapse&&l.props.mode==="vertical"){u.mouseInChild.value=!1;return}h==null||h(),u.mouseInChild.value=!1,{stop:h}=hu(()=>!d.value&&l.closeMenu(e.index,i.value),O.value),_.value&&z&&((te=u.handleMouseleave)==null||te.call(u,!0))};we(()=>l.props.collapse,z=>H(!!z));{const z=J=>{c.value[J.index]=J},te=J=>{delete c.value[J.index]};Dt(`subMenu:${n.uid}`,{addSubMenu:z,removeSubMenu:te,handleMouseleave:F,mouseInChild:d,level:u.level+1})}return r({opened:w}),_t(()=>{l.addSubMenu(M),u.addSubMenu(M)}),tr(()=>{u.removeSubMenu(M),l.removeSubMenu(M)}),()=>{var z;const te=[(z=t.title)==null?void 0:z.call(t),Te(Nt,{class:s.e("icon-arrow"),style:{transform:w.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&l.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>ze(g.value)?Te(n.appContext.components[g.value]):Te(g.value)})],J=l.isMenuPopup?Te(Hs,{ref:p,visible:w.value,effect:"light",pure:!0,offset:P.value,showArrow:!1,persistent:!0,popperClass:E.value,placement:m.value,teleported:_.value,fallbackPlacements:x.value,transition:b.value,gpuAcceleration:!1},{content:()=>{var me;return Te("div",{class:[o.m(C.value),o.m("popup-container"),E.value],onMouseenter:Se=>U(Se,100),onMouseleave:()=>F(!0),onFocus:Se=>U(Se,100)},[Te("ul",{class:[o.b(),o.m("popup"),o.m(`popup-${m.value}`)],style:A.value},[(me=t.default)==null?void 0:me.call(t)])])},default:()=>Te("div",{class:s.e("title"),onClick:V},te)}):Te(ft,{},[Te("div",{class:s.e("title"),ref:v,onClick:V},te),Te(K8,{},{default:()=>{var me;return qt(Te("ul",{role:"menu",class:[o.b(),o.m("inline")],style:A.value},[(me=t.default)==null?void 0:me.call(t)]),[[Kn,w.value]])}})]);return Te("li",{class:[s.b(),s.is("active",S.value),s.is("opened",w.value),s.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:w.value,onMouseenter:U,onMouseleave:()=>F(),onFocus:U},[J])}}});const P6=Je({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:Be(Array),default:()=>ja([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:vr,default:()=>B3},popperEffect:{type:String,values:["dark","light"],default:"dark"},popperClass:String,showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300}}),uv=e=>Array.isArray(e)&&e.every(t=>ze(t)),E6={close:(e,t)=>ze(e)&&uv(t),open:(e,t)=>ze(e)&&uv(t),select:(e,t,r,n)=>ze(e)&&uv(t)&&qe(r)&&(n===void 0||n instanceof Promise)};var L6=ie({name:"ElMenu",props:P6,emits:E6,setup(e,{emit:t,slots:r,expose:n}){const i=it(),a=i.appContext.config.globalProperties.$router,o=$(),s=Oe("menu"),l=Oe("sub-menu"),u=$(-1),f=$(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),c=$(e.defaultActive),h=$({}),d=$({}),v=k(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),p=()=>{const L=c.value&&h.value[c.value];if(!L||e.mode==="horizontal"||e.collapse)return;L.indexPath.forEach(N=>{const H=d.value[N];H&&m(N,H.indexPath)})},m=(L,O)=>{f.value.includes(L)||(e.uniqueOpened&&(f.value=f.value.filter(N=>O.includes(N))),f.value.push(L),t("open",L,O))},g=L=>{const O=f.value.indexOf(L);O!==-1&&f.value.splice(O,1)},y=(L,O)=>{g(L),t("close",L,O)},_=({index:L,indexPath:O})=>{f.value.includes(L)?y(L,O):m(L,O)},b=L=>{(e.mode==="horizontal"||e.collapse)&&(f.value=[]);const{index:O,indexPath:N}=L;if(!(ms(O)||ms(N)))if(e.router&&a){const H=L.route||O,V=a.push(H).then(U=>(U||(c.value=O),U));t("select",O,N,{index:O,indexPath:N,route:H},V)}else c.value=O,t("select",O,N,{index:O,indexPath:N})},x=L=>{const O=h.value,N=O[L]||c.value&&O[c.value]||O[e.defaultActive];N?c.value=N.index:c.value=L},w=()=>{var L,O;if(!o.value)return-1;const N=Array.from((O=(L=o.value)==null?void 0:L.childNodes)!=null?O:[]).filter(J=>J.nodeName!=="#comment"&&(J.nodeName!=="#text"||J.nodeValue)),H=64,V=Number.parseInt(getComputedStyle(o.value).paddingLeft,10),U=Number.parseInt(getComputedStyle(o.value).paddingRight,10),F=o.value.clientWidth-V-U;let z=0,te=0;return N.forEach((J,me)=>{z+=J.offsetWidth||0,z<=F-H&&(te=me+1)}),te===N.length?-1:te},S=L=>d.value[L].indexPath,C=(L,O=33.34)=>{let N;return()=>{N&&clearTimeout(N),N=setTimeout(()=>{L()},O)}};let M=!0;const A=()=>{const L=()=>{u.value=-1,kt(()=>{u.value=w()})};M?L():C(L)(),M=!1};we(()=>e.defaultActive,L=>{h.value[L]||(c.value=""),x(L)}),we(()=>e.collapse,L=>{L&&(f.value=[])}),we(h.value,p);let P;na(()=>{e.mode==="horizontal"&&e.ellipsis?P=ps(o,A).stop:P==null||P()});const E=$(!1);{const L=V=>{d.value[V.index]=V},O=V=>{delete d.value[V.index]};Dt("rootMenu",Ln({props:e,openedMenus:f,items:h,subMenus:d,activeIndex:c,isMenuPopup:v,addMenuItem:V=>{h.value[V.index]=V},removeMenuItem:V=>{delete h.value[V.index]},addSubMenu:L,removeSubMenu:O,openMenu:m,closeMenu:y,handleMenuItemClick:b,handleSubMenuClick:_})),Dt(`subMenu:${i.uid}`,{addSubMenu:L,removeSubMenu:O,mouseInChild:E,level:0})}return _t(()=>{e.mode==="horizontal"&&new S6(i.vnode.el,s.namespace.value)}),n({open:O=>{const{indexPath:N}=d.value[O];N.forEach(H=>m(H,N))},close:g,handleResize:A}),()=>{var L,O;let N=(O=(L=r.default)==null?void 0:L.call(r))!=null?O:[];const H=[];if(e.mode==="horizontal"&&o.value){const z=Dc(N),te=u.value===-1?z:z.slice(0,u.value),J=u.value===-1?[]:z.slice(u.value);J!=null&&J.length&&e.ellipsis&&(N=te,H.push(Te(jy,{index:"sub-menu-more",class:l.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>Te(Nt,{class:l.e("icon-more")},{default:()=>Te(e.ellipsisIcon)}),default:()=>J})))}const V=GA(e,0),U=e.closeOnClickOutside?[[CA,()=>{f.value.length&&(E.value||(f.value.forEach(z=>t("close",z,S(z))),f.value=[]))}]]:[],F=qt(Te("ul",{key:String(e.collapse),role:"menubar",ref:o,style:V.value,class:{[s.b()]:!0,[s.m(e.mode)]:!0,[s.m("collapse")]:e.collapse}},[...N,...H]),U);return e.collapseTransition&&e.mode==="vertical"?Te(T6,()=>F):F}}});const D6=Je({index:{type:Be([String,null]),default:null},route:{type:Be([String,Object])},disabled:Boolean}),I6={click:e=>ze(e.index)&&Array.isArray(e.indexPath)},fv="ElMenuItem",O6=ie({name:fv,components:{ElTooltip:Hs},props:D6,emits:I6,setup(e,{emit:t}){const r=it(),n=Le("rootMenu"),i=Oe("menu"),a=Oe("menu-item");n||bi(fv,"can not inject root menu");const{parentMenu:o,indexPath:s}=WA(r,wn(e,"index")),l=Le(`subMenu:${o.value.uid}`);l||bi(fv,"can not inject sub menu");const u=k(()=>e.index===n.activeIndex),f=Ln({index:e.index,indexPath:s,active:u}),c=()=>{e.disabled||(n.handleMenuItemClick({index:e.index,indexPath:s.value,route:e.route}),t("click",f))};return _t(()=>{l.addSubMenu(f),n.addMenuItem(f)}),tr(()=>{l.removeSubMenu(f),n.removeMenuItem(f)}),{parentMenu:o,rootMenu:n,active:u,nsMenu:i,nsMenuItem:a,handleClick:c}}});function R6(e,t,r,n,i,a){const o=xr("el-tooltip");return G(),ce("li",{class:re([e.nsMenuItem.b(),e.nsMenuItem.is("active",e.active),e.nsMenuItem.is("disabled",e.disabled)]),role:"menuitem",tabindex:"-1",onClick:t[0]||(t[0]=(...s)=>e.handleClick&&e.handleClick(...s))},[e.parentMenu.type.name==="ElMenu"&&e.rootMenu.props.collapse&&e.$slots.title?(G(),de(o,{key:0,effect:e.rootMenu.props.popperEffect,placement:"right","fallback-placements":["left"],persistent:""},{content:j(()=>[Ce(e.$slots,"title")]),default:j(()=>[ee("div",{class:re(e.nsMenu.be("tooltip","trigger"))},[Ce(e.$slots,"default")],2)]),_:3},8,["effect"])):(G(),ce(ft,{key:1},[Ce(e.$slots,"default"),Ce(e.$slots,"title")],64))],2)}var UA=Ke(O6,[["render",R6],["__file","menu-item.vue"]]);const k6={title:String},N6="ElMenuItemGroup",B6=ie({name:N6,props:k6,setup(){return{ns:Oe("menu-item-group")}}});function F6(e,t,r,n,i,a){return G(),ce("li",{class:re(e.ns.b())},[ee("div",{class:re(e.ns.e("title"))},[e.$slots.title?Ce(e.$slots,"title",{key:1}):(G(),ce(ft,{key:0},[mt(be(e.title),1)],64))],2),ee("ul",null,[Ce(e.$slots,"default")])],2)}var YA=Ke(B6,[["render",F6],["__file","menu-item-group.vue"]]);const $6=Yt(L6,{MenuItem:UA,MenuItemGroup:YA,SubMenu:jy}),H6=pa(UA);pa(YA);const z6=pa(jy),V6=Je({icon:{type:vr,default:()=>D3},title:String,content:{type:String,default:""}}),W6={back:()=>!0},G6=["aria-label"],U6=ie({name:"ElPageHeader"}),Y6=ie({...U6,props:V6,emits:W6,setup(e,{emit:t}){const r=Rs(),{t:n}=Fs(),i=Oe("page-header"),a=k(()=>[i.b(),{[i.m("has-breadcrumb")]:!!r.breadcrumb,[i.m("has-extra")]:!!r.extra,[i.is("contentful")]:!!r.default}]);function o(){t("back")}return(s,l)=>(G(),ce("div",{class:re(T(a))},[s.$slots.breadcrumb?(G(),ce("div",{key:0,class:re(T(i).e("breadcrumb"))},[Ce(s.$slots,"breadcrumb")],2)):Ae("v-if",!0),ee("div",{class:re(T(i).e("header"))},[ee("div",{class:re(T(i).e("left"))},[ee("div",{class:re(T(i).e("back")),role:"button",tabindex:"0",onClick:o},[s.icon||s.$slots.icon?(G(),ce("div",{key:0,"aria-label":s.title||T(n)("el.pageHeader.title"),class:re(T(i).e("icon"))},[Ce(s.$slots,"icon",{},()=>[s.icon?(G(),de(T(Nt),{key:0},{default:j(()=>[(G(),de(Vt(s.icon)))]),_:1})):Ae("v-if",!0)])],10,G6)):Ae("v-if",!0),ee("div",{class:re(T(i).e("title"))},[Ce(s.$slots,"title",{},()=>[mt(be(s.title||T(n)("el.pageHeader.title")),1)])],2)],2),Z(T(VA),{direction:"vertical"}),ee("div",{class:re(T(i).e("content"))},[Ce(s.$slots,"content",{},()=>[mt(be(s.content),1)])],2)],2),s.$slots.extra?(G(),ce("div",{key:0,class:re(T(i).e("extra"))},[Ce(s.$slots,"extra")],2)):Ae("v-if",!0)],2),s.$slots.default?(G(),ce("div",{key:1,class:re(T(i).e("main"))},[Ce(s.$slots,"default")],2)):Ae("v-if",!0)],2))}});var j6=Ke(Y6,[["__file","page-header.vue"]]);const q6=Yt(j6),K6=Je({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:pg,default:"primary"},cancelButtonType:{type:String,values:pg,default:"text"},icon:{type:vr,default:()=>$3},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1},hideAfter:{type:Number,default:200},teleported:md.teleported,persistent:md.persistent,width:{type:[String,Number],default:150}}),X6={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent},Z6=ie({name:"ElPopconfirm"}),Q6=ie({...Z6,props:K6,emits:X6,setup(e,{emit:t}){const r=e,{t:n}=Fs(),i=Oe("popconfirm"),a=$(),o=()=>{var h,d;(d=(h=a.value)==null?void 0:h.onClose)==null||d.call(h)},s=k(()=>({width:Zn(r.width)})),l=h=>{t("confirm",h),o()},u=h=>{t("cancel",h),o()},f=k(()=>r.confirmButtonText||n("el.popconfirm.confirmButtonText")),c=k(()=>r.cancelButtonText||n("el.popconfirm.cancelButtonText"));return(h,d)=>(G(),de(T(Hs),ei({ref_key:"tooltipRef",ref:a,trigger:"click",effect:"light"},h.$attrs,{"popper-class":`${T(i).namespace.value}-popover`,"popper-style":T(s),teleported:h.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":h.hideAfter,persistent:h.persistent}),{content:j(()=>[ee("div",{class:re(T(i).b())},[ee("div",{class:re(T(i).e("main"))},[!h.hideIcon&&h.icon?(G(),de(T(Nt),{key:0,class:re(T(i).e("icon")),style:ct({color:h.iconColor})},{default:j(()=>[(G(),de(Vt(h.icon)))]),_:1},8,["class","style"])):Ae("v-if",!0),mt(" "+be(h.title),1)],2),ee("div",{class:re(T(i).e("action"))},[Z(T(yg),{size:"small",type:h.cancelButtonType==="text"?"":h.cancelButtonType,text:h.cancelButtonType==="text",onClick:u},{default:j(()=>[mt(be(T(c)),1)]),_:1},8,["type","text"]),Z(T(yg),{size:"small",type:h.confirmButtonType==="text"?"":h.confirmButtonType,text:h.confirmButtonType==="text",onClick:l},{default:j(()=>[mt(be(T(f)),1)]),_:1},8,["type","text"])],2)],2)]),default:j(()=>[h.$slots.reference?Ce(h.$slots,"reference",{key:0}):Ae("v-if",!0)]),_:3},16,["popper-class","popper-style","teleported","hide-after","persistent"]))}});var J6=Ke(Q6,[["__file","popconfirm.vue"]]);const eV=Yt(J6),tV=Je({modelValue:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},size:{type:String,validator:j3},width:{type:[String,Number],default:""},inlinePrompt:{type:Boolean,default:!1},inactiveActionIcon:{type:vr},activeActionIcon:{type:vr},activeIcon:{type:vr},inactiveIcon:{type:vr},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},activeColor:{type:String,default:""},inactiveColor:{type:String,default:""},borderColor:{type:String,default:""},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:Be(Function)},id:String,tabindex:{type:[String,Number]},value:{type:[Boolean,String,Number],default:!1},label:{type:String,default:void 0}}),rV={[wi]:e=>zr(e)||ze(e)||Rt(e),[sg]:e=>zr(e)||ze(e)||Rt(e),[lg]:e=>zr(e)||ze(e)||Rt(e)},nV=["onClick"],iV=["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex","onKeydown"],aV=["aria-hidden"],oV=["aria-hidden"],sV=["aria-hidden"],Ag="ElSwitch",lV=ie({name:Ag}),uV=ie({...lV,props:tV,emits:rV,setup(e,{expose:t,emit:r}){const n=e,i=it(),{formItem:a}=tf(),o=xi(),s=Oe("switch");(C=>{C.forEach(M=>{bu({from:M[0],replacement:M[1],scope:Ag,version:"2.3.0",ref:"https://element-plus.org/en-US/component/switch.html#attributes",type:"Attribute"},k(()=>{var A;return!!((A=i.vnode.props)!=null&&A[M[2]])}))})})([['"value"','"model-value" or "v-model"',"value"],['"active-color"',"CSS var `--el-switch-on-color`","activeColor"],['"inactive-color"',"CSS var `--el-switch-off-color`","inactiveColor"],['"border-color"',"CSS var `--el-switch-border-color`","borderColor"]]);const{inputId:u}=Vy(n,{formItemContext:a}),f=vh(k(()=>n.loading)),c=$(n.modelValue!==!1),h=$(),d=$(),v=k(()=>[s.b(),s.m(o.value),s.is("disabled",f.value),s.is("checked",_.value)]),p=k(()=>[s.e("label"),s.em("label","left"),s.is("active",!_.value)]),m=k(()=>[s.e("label"),s.em("label","right"),s.is("active",_.value)]),g=k(()=>({width:Zn(n.width)}));we(()=>n.modelValue,()=>{c.value=!0}),we(()=>n.value,()=>{c.value=!1});const y=k(()=>c.value?n.modelValue:n.value),_=k(()=>y.value===n.activeValue);[n.activeValue,n.inactiveValue].includes(y.value)||(r(wi,n.inactiveValue),r(sg,n.inactiveValue),r(lg,n.inactiveValue)),we(_,C=>{var M;h.value.checked=C,n.validateEvent&&((M=a==null?void 0:a.validate)==null||M.call(a,"change").catch(A=>void 0))});const b=()=>{const C=_.value?n.inactiveValue:n.activeValue;r(wi,C),r(sg,C),r(lg,C),kt(()=>{h.value.checked=_.value})},x=()=>{if(f.value)return;const{beforeChange:C}=n;if(!C){b();return}const M=C();[Qc(M),zr(M)].includes(!0)||bi(Ag,"beforeChange must return type `Promise` or `boolean`"),Qc(M)?M.then(P=>{P&&b()}).catch(P=>{}):M&&b()},w=k(()=>s.cssVarBlock({...n.activeColor?{"on-color":n.activeColor}:null,...n.inactiveColor?{"off-color":n.inactiveColor}:null,...n.borderColor?{"border-color":n.borderColor}:null})),S=()=>{var C,M;(M=(C=h.value)==null?void 0:C.focus)==null||M.call(C)};return _t(()=>{h.value.checked=_.value}),t({focus:S,checked:_}),(C,M)=>(G(),ce("div",{class:re(T(v)),style:ct(T(w)),onClick:ua(x,["prevent"])},[ee("input",{id:T(u),ref_key:"input",ref:h,class:re(T(s).e("input")),type:"checkbox",role:"switch","aria-checked":T(_),"aria-disabled":T(f),"aria-label":C.label,name:C.name,"true-value":C.activeValue,"false-value":C.inactiveValue,disabled:T(f),tabindex:C.tabindex,onChange:b,onKeydown:iR(x,["enter"])},null,42,iV),!C.inlinePrompt&&(C.inactiveIcon||C.inactiveText)?(G(),ce("span",{key:0,class:re(T(p))},[C.inactiveIcon?(G(),de(T(Nt),{key:0},{default:j(()=>[(G(),de(Vt(C.inactiveIcon)))]),_:1})):Ae("v-if",!0),!C.inactiveIcon&&C.inactiveText?(G(),ce("span",{key:1,"aria-hidden":T(_)},be(C.inactiveText),9,aV)):Ae("v-if",!0)],2)):Ae("v-if",!0),ee("span",{ref_key:"core",ref:d,class:re(T(s).e("core")),style:ct(T(g))},[C.inlinePrompt?(G(),ce("div",{key:0,class:re(T(s).e("inner"))},[C.activeIcon||C.inactiveIcon?(G(),de(T(Nt),{key:0,class:re(T(s).is("icon"))},{default:j(()=>[(G(),de(Vt(T(_)?C.activeIcon:C.inactiveIcon)))]),_:1},8,["class"])):C.activeText||C.inactiveText?(G(),ce("span",{key:1,class:re(T(s).is("text")),"aria-hidden":!T(_)},be(T(_)?C.activeText:C.inactiveText),11,oV)):Ae("v-if",!0)],2)):Ae("v-if",!0),ee("div",{class:re(T(s).e("action"))},[C.loading?(G(),de(T(Nt),{key:0,class:re(T(s).is("loading"))},{default:j(()=>[Z(T(Ly))]),_:1},8,["class"])):T(_)?Ce(C.$slots,"active-action",{key:1},()=>[C.activeActionIcon?(G(),de(T(Nt),{key:0},{default:j(()=>[(G(),de(Vt(C.activeActionIcon)))]),_:1})):Ae("v-if",!0)]):T(_)?Ae("v-if",!0):Ce(C.$slots,"inactive-action",{key:2},()=>[C.inactiveActionIcon?(G(),de(T(Nt),{key:0},{default:j(()=>[(G(),de(Vt(C.inactiveActionIcon)))]),_:1})):Ae("v-if",!0)])],2)],6),!C.inlinePrompt&&(C.activeIcon||C.activeText)?(G(),ce("span",{key:1,class:re(T(m))},[C.activeIcon?(G(),de(T(Nt),{key:0},{default:j(()=>[(G(),de(Vt(C.activeIcon)))]),_:1})):Ae("v-if",!0),!C.activeIcon&&C.activeText?(G(),ce("span",{key:1,"aria-hidden":!T(_)},be(C.activeText),9,sV)):Ae("v-if",!0)],2)):Ae("v-if",!0)],14,nV))}});var fV=Ke(uV,[["__file","switch.vue"]]);const cV=Yt(fV),cv=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},dV=function(e,t,r,n,i){if(!t&&!n&&(!i||Array.isArray(i)&&!i.length))return e;typeof r=="string"?r=r==="descending"?-1:1:r=r&&r<0?-1:1;const a=n?null:function(s,l){return i?(Array.isArray(i)||(i=[i]),i.map(u=>typeof u=="string"?yu(s,u):u(s,l,e))):(t!=="$key"&&qe(s)&&"$value"in s&&(s=s.$value),[qe(s)?yu(s,t):s])},o=function(s,l){if(n)return n(s.value,l.value);for(let u=0,f=s.key.length;ul.key[u])return 1}return 0};return e.map((s,l)=>({value:s,index:l,key:a?a(s,l):null})).sort((s,l)=>{let u=o(s,l);return u||(u=s.index-l.index),u*+r}).map(s=>s.value)},jA=function(e,t){let r=null;return e.columns.forEach(n=>{n.id===t&&(r=n)}),r},hV=function(e,t){let r=null;for(let n=0;n{if(!e)throw new Error("Row is required when get row identity");if(typeof t=="string"){if(!t.includes("."))return`${e[t]}`;const r=t.split(".");let n=e;for(const i of r)n=n[i];return`${n}`}else if(typeof t=="function")return t.call(null,e)},eo=function(e,t){const r={};return(e||[]).forEach((n,i)=>{r[Jt(n,t)]={row:n,index:i}}),r};function vV(e,t){const r={};let n;for(n in e)r[n]=e[n];for(n in t)if(Ue(t,n)){const i=t[n];typeof i<"u"&&(r[n]=i)}return r}function qy(e){return e===""||e!==void 0&&(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function qA(e){return e===""||e!==void 0&&(e=qy(e),Number.isNaN(e)&&(e=80)),e}function pV(e){return typeof e=="number"?e:typeof e=="string"?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function gV(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function zl(e,t,r){let n=!1;const i=e.indexOf(t),a=i!==-1,o=s=>{s==="add"?e.push(t):e.splice(i,1),n=!0,_e(t.children)&&t.children.forEach(l=>{zl(e,l,r??!a)})};return zr(r)?r&&!a?o("add"):!r&&a&&o("remove"):o(a?"remove":"add"),n}function mV(e,t,r="children",n="hasChildren"){const i=o=>!(Array.isArray(o)&&o.length);function a(o,s,l){t(o,s,l),s.forEach(u=>{if(u[n]){t(u,null,l+1);return}const f=u[r];i(f)||a(u,f,l+1)})}e.forEach(o=>{if(o[n]){t(o,null,0);return}const s=o[r];i(s)||a(o,s,0)})}let Xr=null;function yV(e,t,r,n){if((Xr==null?void 0:Xr.trigger)===r)return;Xr==null||Xr();const i=n==null?void 0:n.refs.tableWrapper,a=i==null?void 0:i.dataset.prefix,o={strategy:"fixed",...e.popperOptions},s=Z(Hs,{content:t,virtualTriggering:!0,virtualRef:r,appendTo:i,placement:"top",transition:"none",offset:0,hideAfter:0,...e,popperOptions:o,onHide:()=>{Xr==null||Xr()}});s.appContext=n.appContext;const l=document.createElement("div");ld(s,l),s.component.exposed.onOpen();const u=i==null?void 0:i.querySelector(`.${a}-scrollbar__wrap`);Xr=()=>{ld(null,l),u==null||u.removeEventListener("scroll",Xr),Xr=null},Xr.trigger=r,u==null||u.addEventListener("scroll",Xr)}function KA(e){return e.children?v3(e.children,KA):[e]}function D1(e,t){return e+t.colSpan}const XA=(e,t,r,n)=>{let i=0,a=e;const o=r.states.columns.value;if(n){const l=KA(n[e]);i=o.slice(0,o.indexOf(l[0])).reduce(D1,0),a=i+l.reduce(D1,0)-1}else i=e;let s;switch(t){case"left":a=o.length-r.states.rightFixedLeafColumnsLength.value&&(s="right");break;default:a=o.length-r.states.rightFixedLeafColumnsLength.value&&(s="right")}return s?{direction:s,start:i,after:a}:{}},Ky=(e,t,r,n,i,a=0)=>{const o=[],{direction:s,start:l,after:u}=XA(t,r,n,i);if(s){const f=s==="left";o.push(`${e}-fixed-column--${s}`),f&&u+a===n.states.fixedLeafColumnsLength.value-1?o.push("is-last-column"):!f&&l-a===n.states.columns.value.length-n.states.rightFixedLeafColumnsLength.value&&o.push("is-first-column")}return o};function I1(e,t){return e+(t.realWidth===null||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Xy=(e,t,r,n)=>{const{direction:i,start:a=0,after:o=0}=XA(e,t,r,n);if(!i)return;const s={},l=i==="left",u=r.states.columns.value;return l?s.left=u.slice(0,a).reduce(I1,0):s.right=u.slice(o+1).reverse().reduce(I1,0),s},Ts=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function _V(e){const t=it(),r=$(!1),n=$([]);return{updateExpandRows:()=>{const l=e.data.value||[],u=e.rowKey.value;if(r.value)n.value=l.slice();else if(u){const f=eo(n.value,u);n.value=l.reduce((c,h)=>{const d=Jt(h,u);return f[d]&&c.push(h),c},[])}else n.value=[]},toggleRowExpansion:(l,u)=>{zl(n.value,l,u)&&t.emit("expand-change",l,n.value.slice())},setExpandRowKeys:l=>{t.store.assertRowKey();const u=e.data.value||[],f=e.rowKey.value,c=eo(u,f);n.value=l.reduce((h,d)=>{const v=c[d];return v&&h.push(v.row),h},[])},isRowExpanded:l=>{const u=e.rowKey.value;return u?!!eo(n.value,u)[Jt(l,u)]:n.value.includes(l)},states:{expandRows:n,defaultExpandAll:r}}}function bV(e){const t=it(),r=$(null),n=$(null),i=u=>{t.store.assertRowKey(),r.value=u,o(u)},a=()=>{r.value=null},o=u=>{const{data:f,rowKey:c}=e;let h=null;c.value&&(h=(T(f)||[]).find(d=>Jt(d,c.value)===u)),n.value=h,t.emit("current-change",n.value,null)};return{setCurrentRowKey:i,restoreCurrentRowKey:a,setCurrentRowByKey:o,updateCurrentRow:u=>{const f=n.value;if(u&&u!==f){n.value=u,t.emit("current-change",n.value,f);return}!u&&f&&(n.value=null,t.emit("current-change",null,f))},updateCurrentRowData:()=>{const u=e.rowKey.value,f=e.data.value||[],c=n.value;if(!f.includes(c)&&c){if(u){const h=Jt(c,u);o(h)}else n.value=null;n.value===null&&t.emit("current-change",null,c)}else r.value&&(o(r.value),a())},states:{_currentRowKey:r,currentRow:n}}}function wV(e){const t=$([]),r=$({}),n=$(16),i=$(!1),a=$({}),o=$("hasChildren"),s=$("children"),l=it(),u=k(()=>{if(!e.rowKey.value)return{};const g=e.data.value||[];return c(g)}),f=k(()=>{const g=e.rowKey.value,y=Object.keys(a.value),_={};return y.length&&y.forEach(b=>{if(a.value[b].length){const x={children:[]};a.value[b].forEach(w=>{const S=Jt(w,g);x.children.push(S),w[o.value]&&!_[S]&&(_[S]={children:[]})}),_[b]=x}}),_}),c=g=>{const y=e.rowKey.value,_={};return mV(g,(b,x,w)=>{const S=Jt(b,y);Array.isArray(x)?_[S]={children:x.map(C=>Jt(C,y)),level:w}:i.value&&(_[S]={children:[],lazy:!0,level:w})},s.value,o.value),_},h=(g=!1,y=(_=>(_=l.store)==null?void 0:_.states.defaultExpandAll.value)())=>{var _;const b=u.value,x=f.value,w=Object.keys(b),S={};if(w.length){const C=T(r),M=[],A=(E,L)=>{if(g)return t.value?y||t.value.includes(L):!!(y||E!=null&&E.expanded);{const O=y||t.value&&t.value.includes(L);return!!(E!=null&&E.expanded||O)}};w.forEach(E=>{const L=C[E],O={...b[E]};if(O.expanded=A(L,E),O.lazy){const{loaded:N=!1,loading:H=!1}=L||{};O.loaded=!!N,O.loading=!!H,M.push(E)}S[E]=O});const P=Object.keys(x);i.value&&P.length&&M.length&&P.forEach(E=>{const L=C[E],O=x[E].children;if(M.includes(E)){if(S[E].children.length!==0)throw new Error("[ElTable]children must be an empty array.");S[E].children=O}else{const{loaded:N=!1,loading:H=!1}=L||{};S[E]={lazy:!0,loaded:!!N,loading:!!H,expanded:A(L,E),children:O,level:""}}})}r.value=S,(_=l.store)==null||_.updateTableScrollY()};we(()=>t.value,()=>{h(!0)}),we(()=>u.value,()=>{h()}),we(()=>f.value,()=>{h()});const d=g=>{t.value=g,h()},v=(g,y)=>{l.store.assertRowKey();const _=e.rowKey.value,b=Jt(g,_),x=b&&r.value[b];if(b&&x&&"expanded"in x){const w=x.expanded;y=typeof y>"u"?!x.expanded:y,r.value[b].expanded=y,w!==y&&l.emit("expand-change",g,y),l.store.updateTableScrollY()}},p=g=>{l.store.assertRowKey();const y=e.rowKey.value,_=Jt(g,y),b=r.value[_];i.value&&b&&"loaded"in b&&!b.loaded?m(g,_,b):v(g,void 0)},m=(g,y,_)=>{const{load:b}=l.props;b&&!r.value[y].loaded&&(r.value[y].loading=!0,b(g,_,x=>{if(!Array.isArray(x))throw new TypeError("[ElTable] data must be an array");r.value[y].loading=!1,r.value[y].loaded=!0,r.value[y].expanded=!0,x.length&&(a.value[y]=x),l.emit("expand-change",g,!0)}))};return{loadData:m,loadOrToggle:p,toggleTreeExpansion:v,updateTreeExpandKeys:d,updateTreeData:h,normalize:c,states:{expandRowKeys:t,treeData:r,indent:n,lazy:i,lazyTreeNodeMap:a,lazyColumnIdentifier:o,childrenColumnName:s}}}const SV=(e,t)=>{const r=t.sortingColumn;return!r||typeof r.sortable=="string"?e:dV(e,t.sortProp,t.sortOrder,r.sortMethod,r.sortBy)},Fc=e=>{const t=[];return e.forEach(r=>{r.children&&r.children.length>0?t.push.apply(t,Fc(r.children)):t.push(r)}),t};function xV(){var e;const t=it(),{size:r}=Kd((e=t.proxy)==null?void 0:e.$props),n=$(null),i=$([]),a=$([]),o=$(!1),s=$([]),l=$([]),u=$([]),f=$([]),c=$([]),h=$([]),d=$([]),v=$([]),p=[],m=$(0),g=$(0),y=$(0),_=$(!1),b=$([]),x=$(!1),w=$(!1),S=$(null),C=$({}),M=$(null),A=$(null),P=$(null),E=$(null),L=$(null);we(i,()=>t.state&&V(!1),{deep:!0});const O=()=>{if(!n.value)throw new Error("[ElTable] prop row-key is required")},N=ve=>{var Pe;(Pe=ve.children)==null||Pe.forEach(We=>{We.fixed=ve.fixed,N(We)})},H=()=>{s.value.forEach(et=>{N(et)}),f.value=s.value.filter(et=>et.fixed===!0||et.fixed==="left"),c.value=s.value.filter(et=>et.fixed==="right"),f.value.length>0&&s.value[0]&&s.value[0].type==="selection"&&!s.value[0].fixed&&(s.value[0].fixed=!0,f.value.unshift(s.value[0]));const ve=s.value.filter(et=>!et.fixed);l.value=[].concat(f.value).concat(ve).concat(c.value);const Pe=Fc(ve),We=Fc(f.value),Ge=Fc(c.value);m.value=Pe.length,g.value=We.length,y.value=Ge.length,u.value=[].concat(We).concat(Pe).concat(Ge),o.value=f.value.length>0||c.value.length>0},V=(ve,Pe=!1)=>{ve&&H(),Pe?t.state.doLayout():t.state.debouncedUpdateLayout()},U=ve=>b.value.includes(ve),F=()=>{_.value=!1,b.value.length&&(b.value=[],t.emit("selection-change",[]))},z=()=>{let ve;if(n.value){ve=[];const Pe=eo(b.value,n.value),We=eo(i.value,n.value);for(const Ge in Pe)Ue(Pe,Ge)&&!We[Ge]&&ve.push(Pe[Ge].row)}else ve=b.value.filter(Pe=>!i.value.includes(Pe));if(ve.length){const Pe=b.value.filter(We=>!ve.includes(We));b.value=Pe,t.emit("selection-change",Pe.slice())}},te=()=>(b.value||[]).slice(),J=(ve,Pe=void 0,We=!0)=>{if(zl(b.value,ve,Pe)){const et=(b.value||[]).slice();We&&t.emit("select",et,ve),t.emit("selection-change",et)}},me=()=>{var ve,Pe;const We=w.value?!_.value:!(_.value||b.value.length);_.value=We;let Ge=!1,et=0;const Ht=(Pe=(ve=t==null?void 0:t.store)==null?void 0:ve.states)==null?void 0:Pe.rowKey.value;i.value.forEach((pt,Kt)=>{const Yr=Kt+et;S.value?S.value.call(null,pt,Yr)&&zl(b.value,pt,We)&&(Ge=!0):zl(b.value,pt,We)&&(Ge=!0),et+=Ie(Jt(pt,Ht))}),Ge&&t.emit("selection-change",b.value?b.value.slice():[]),t.emit("select-all",b.value)},Se=()=>{const ve=eo(b.value,n.value);i.value.forEach(Pe=>{const We=Jt(Pe,n.value),Ge=ve[We];Ge&&(b.value[Ge.index]=Pe)})},$e=()=>{var ve,Pe,We;if(((ve=i.value)==null?void 0:ve.length)===0){_.value=!1;return}let Ge;n.value&&(Ge=eo(b.value,n.value));const et=function(Yr){return Ge?!!Ge[Jt(Yr,n.value)]:b.value.includes(Yr)};let Ht=!0,pt=0,Kt=0;for(let Yr=0,AD=(i.value||[]).length;Yr{var Pe;if(!t||!t.store)return 0;const{treeData:We}=t.store.states;let Ge=0;const et=(Pe=We.value[ve])==null?void 0:Pe.children;return et&&(Ge+=et.length,et.forEach(Ht=>{Ge+=Ie(Ht)})),Ge},B=(ve,Pe)=>{Array.isArray(ve)||(ve=[ve]);const We={};return ve.forEach(Ge=>{C.value[Ge.id]=Pe,We[Ge.columnKey||Ge.id]=Pe}),We},Y=(ve,Pe,We)=>{A.value&&A.value!==ve&&(A.value.order=null),A.value=ve,P.value=Pe,E.value=We},K=()=>{let ve=T(a);Object.keys(C.value).forEach(Pe=>{const We=C.value[Pe];if(!We||We.length===0)return;const Ge=jA({columns:u.value},Pe);Ge&&Ge.filterMethod&&(ve=ve.filter(et=>We.some(Ht=>Ge.filterMethod.call(null,Ht,et,Ge))))}),M.value=ve},Q=()=>{i.value=SV(M.value,{sortingColumn:A.value,sortProp:P.value,sortOrder:E.value})},oe=(ve=void 0)=>{ve&&ve.filter||K(),Q()},pe=ve=>{const{tableHeaderRef:Pe}=t.refs;if(!Pe)return;const We=Object.assign({},Pe.filterPanels),Ge=Object.keys(We);if(Ge.length)if(typeof ve=="string"&&(ve=[ve]),Array.isArray(ve)){const et=ve.map(Ht=>hV({columns:u.value},Ht));Ge.forEach(Ht=>{const pt=et.find(Kt=>Kt.id===Ht);pt&&(pt.filteredValue=[])}),t.store.commit("filterChange",{column:et,values:[],silent:!0,multi:!0})}else Ge.forEach(et=>{const Ht=u.value.find(pt=>pt.id===et);Ht&&(Ht.filteredValue=[])}),C.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},D=()=>{A.value&&(Y(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:I,toggleRowExpansion:W,updateExpandRows:X,states:q,isRowExpanded:le}=_V({data:i,rowKey:n}),{updateTreeExpandKeys:fe,toggleTreeExpansion:ae,updateTreeData:se,loadOrToggle:ne,states:he}=wV({data:i,rowKey:n}),{updateCurrentRowData:Me,updateCurrentRow:xe,setCurrentRowKey:ke,states:Ve}=bV({data:i,rowKey:n});return{assertRowKey:O,updateColumns:H,scheduleLayout:V,isSelected:U,clearSelection:F,cleanSelection:z,getSelectionRows:te,toggleRowSelection:J,_toggleAllSelection:me,toggleAllSelection:null,updateSelectionByRowKey:Se,updateAllSelected:$e,updateFilters:B,updateCurrentRow:xe,updateSort:Y,execFilter:K,execSort:Q,execQuery:oe,clearFilter:pe,clearSort:D,toggleRowExpansion:W,setExpandRowKeysAdapter:ve=>{I(ve),fe(ve)},setCurrentRowKey:ke,toggleRowExpansionAdapter:(ve,Pe)=>{u.value.some(({type:Ge})=>Ge==="expand")?W(ve,Pe):ae(ve,Pe)},isRowExpanded:le,updateExpandRows:X,updateCurrentRowData:Me,loadOrToggle:ne,updateTreeData:se,states:{tableSize:r,rowKey:n,data:i,_data:a,isComplex:o,_columns:s,originColumns:l,columns:u,fixedColumns:f,rightFixedColumns:c,leafColumns:h,fixedLeafColumns:d,rightFixedLeafColumns:v,updateOrderFns:p,leafColumnsLength:m,fixedLeafColumnsLength:g,rightFixedLeafColumnsLength:y,isAllSelected:_,selection:b,reserveSelection:x,selectOnIndeterminate:w,selectable:S,filters:C,filteredData:M,sortingColumn:A,sortProp:P,sortOrder:E,hoverRow:L,...q,...he,...Ve}}}function Pg(e,t){return e.map(r=>{var n;return r.id===t.id?t:((n=r.children)!=null&&n.length&&(r.children=Pg(r.children,t)),r)})}function Eg(e){e.forEach(t=>{var r,n;t.no=(r=t.getColumnIndex)==null?void 0:r.call(t),(n=t.children)!=null&&n.length&&Eg(t.children)}),e.sort((t,r)=>t.no-r.no)}function CV(){const e=it(),t=xV();return{ns:Oe("table"),...t,mutations:{setData(o,s){const l=T(o._data)!==s;o.data.value=s,o._data.value=s,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),T(o.reserveSelection)?(e.store.assertRowKey(),e.store.updateSelectionByRowKey()):l?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(o,s,l,u){const f=T(o._columns);let c=[];l?(l&&!l.children&&(l.children=[]),l.children.push(s),c=Pg(f,l)):(f.push(s),c=f),Eg(c),o._columns.value=c,o.updateOrderFns.push(u),s.type==="selection"&&(o.selectable.value=s.selectable,o.reserveSelection.value=s.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(o,s){var l;((l=s.getColumnIndex)==null?void 0:l.call(s))!==s.no&&(Eg(o._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(o,s,l,u){const f=T(o._columns)||[];if(l)l.children.splice(l.children.findIndex(h=>h.id===s.id),1),kt(()=>{var h;((h=l.children)==null?void 0:h.length)===0&&delete l.children}),o._columns.value=Pg(f,l);else{const h=f.indexOf(s);h>-1&&(f.splice(h,1),o._columns.value=f)}const c=o.updateOrderFns.indexOf(u);c>-1&&o.updateOrderFns.splice(c,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(o,s){const{prop:l,order:u,init:f}=s;if(l){const c=T(o.columns).find(h=>h.property===l);c&&(c.order=u,e.store.updateSort(c,l,u),e.store.commit("changeSortCondition",{init:f}))}},changeSortCondition(o,s){const{sortingColumn:l,sortProp:u,sortOrder:f}=o,c=T(l),h=T(u),d=T(f);d===null&&(o.sortingColumn.value=null,o.sortProp.value=null);const v={filter:!0};e.store.execQuery(v),(!s||!(s.silent||s.init))&&e.emit("sort-change",{column:c,prop:h,order:d}),e.store.updateTableScrollY()},filterChange(o,s){const{column:l,values:u,silent:f}=s,c=e.store.updateFilters(l,u);e.store.execQuery(),f||e.emit("filter-change",c),e.store.updateTableScrollY()},toggleAllSelection(){e.store.toggleAllSelection()},rowSelectedChanged(o,s){e.store.toggleRowSelection(s),e.store.updateAllSelected()},setHoverRow(o,s){o.hoverRow.value=s},setCurrentRow(o,s){e.store.updateCurrentRow(s)}},commit:function(o,...s){const l=e.store.mutations;if(l[o])l[o].apply(e,[e.store.states].concat(s));else throw new Error(`Action not found: ${o}`)},updateTableScrollY:function(){kt(()=>e.layout.updateScrollY.apply(e.layout))}}}const Vl={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"}};function TV(e,t){if(!e)throw new Error("Table is required.");const r=CV();return r.toggleAllSelection=hd(r._toggleAllSelection,10),Object.keys(Vl).forEach(n=>{ZA(QA(t,n),n,r)}),MV(r,t),r}function MV(e,t){Object.keys(Vl).forEach(r=>{we(()=>QA(t,r),n=>{ZA(n,r,e)})})}function ZA(e,t,r){let n=e,i=Vl[t];typeof Vl[t]=="object"&&(i=i.key,n=n||Vl[t].default),r.states[i].value=n}function QA(e,t){if(t.includes(".")){const r=t.split(".");let n=e;return r.forEach(i=>{n=n[i]}),n}else return e[t]}class AV{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=$(null),this.scrollX=$(!1),this.scrollY=$(!1),this.bodyWidth=$(null),this.fixedWidth=$(null),this.rightFixedWidth=$(null),this.gutterWidth=0;for(const r in t)Ue(t,r)&&(Pt(this[r])?this[r].value=t[r]:this[r]=t[r]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){if(this.height.value===null)return!1;const r=this.table.refs.scrollBarRef;if(this.table.vnode.el&&(r!=null&&r.wrapRef)){let n=!0;const i=this.scrollY.value;return n=r.wrapRef.scrollHeight>r.wrapRef.clientHeight,this.scrollY.value=n,i!==n}return!1}setHeight(t,r="height"){if(!At)return;const n=this.table.vnode.el;if(t=pV(t),this.height.value=Number(t),!n&&(t||t===0))return kt(()=>this.setHeight(t,r));typeof t=="number"?(n.style[r]=`${t}px`,this.updateElsHeight()):typeof t=="string"&&(n.style[r]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(n=>{n.isColumnGroup?t.push.apply(t,n.columns):t.push(n)}),t}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let r=t;for(;r.tagName!=="DIV";){if(getComputedStyle(r).display==="none")return!0;r=r.parentElement}return!1}updateColumnsWidth(){if(!At)return;const t=this.fit,r=this.table.vnode.el.clientWidth;let n=0;const i=this.getFlattenColumns(),a=i.filter(l=>typeof l.width!="number");if(i.forEach(l=>{typeof l.width=="number"&&l.realWidth&&(l.realWidth=null)}),a.length>0&&t){if(i.forEach(l=>{n+=Number(l.width||l.minWidth||80)}),n<=r){this.scrollX.value=!1;const l=r-n;if(a.length===1)a[0].realWidth=Number(a[0].minWidth||80)+l;else{const u=a.reduce((h,d)=>h+Number(d.minWidth||80),0),f=l/u;let c=0;a.forEach((h,d)=>{if(d===0)return;const v=Math.floor(Number(h.minWidth||80)*f);c+=v,h.realWidth=Number(h.minWidth||80)+v}),a[0].realWidth=Number(a[0].minWidth||80)+l-c}}else this.scrollX.value=!0,a.forEach(l=>{l.realWidth=Number(l.minWidth)});this.bodyWidth.value=Math.max(n,r),this.table.state.resizeState.value.width=this.bodyWidth.value}else i.forEach(l=>{!l.width&&!l.minWidth?l.realWidth=80:l.realWidth=Number(l.width||l.minWidth),n+=l.realWidth}),this.scrollX.value=n>r,this.bodyWidth.value=n;const o=this.store.states.fixedColumns.value;if(o.length>0){let l=0;o.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.fixedWidth.value=l}const s=this.store.states.rightFixedColumns.value;if(s.length>0){let l=0;s.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.rightFixedWidth.value=l}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const r=this.observers.indexOf(t);r!==-1&&this.observers.splice(r,1)}notifyObservers(t){this.observers.forEach(n=>{var i,a;switch(t){case"columns":(i=n.state)==null||i.onColumnsChange(this);break;case"scrollable":(a=n.state)==null||a.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const{CheckboxGroup:PV}=Cs,EV=ie({name:"ElTableFilterPanel",components:{ElCheckbox:Cs,ElCheckboxGroup:PV,ElScrollbar:uA,ElTooltip:Hs,ElIcon:Nt,ArrowDown:EM,ArrowUp:E3},directives:{ClickOutside:CA},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function}},setup(e){const t=it(),{t:r}=Fs(),n=Oe("table-filter"),i=t==null?void 0:t.parent;i.filterPanels.value[e.column.id]||(i.filterPanels.value[e.column.id]=t);const a=$(!1),o=$(null),s=k(()=>e.column&&e.column.filters),l=k(()=>e.column.filterClassName?`${n.b()} ${e.column.filterClassName}`:n.b()),u=k({get:()=>{var x;return(((x=e.column)==null?void 0:x.filteredValue)||[])[0]},set:x=>{f.value&&(typeof x<"u"&&x!==null?f.value.splice(0,1,x):f.value.splice(0,1))}}),f=k({get(){return e.column?e.column.filteredValue||[]:[]},set(x){e.column&&e.upDataColumn("filteredValue",x)}}),c=k(()=>e.column?e.column.filterMultiple:!0),h=x=>x.value===u.value,d=()=>{a.value=!1},v=x=>{x.stopPropagation(),a.value=!a.value},p=()=>{a.value=!1},m=()=>{_(f.value),d()},g=()=>{f.value=[],_(f.value),d()},y=x=>{u.value=x,_(typeof x<"u"&&x!==null?f.value:[]),d()},_=x=>{e.store.commit("filterChange",{column:e.column,values:x}),e.store.updateAllSelected()};we(a,x=>{e.column&&e.upDataColumn("filterOpened",x)},{immediate:!0});const b=k(()=>{var x,w;return(w=(x=o.value)==null?void 0:x.popperRef)==null?void 0:w.contentRef});return{tooltipVisible:a,multiple:c,filterClassName:l,filteredValue:f,filterValue:u,filters:s,handleConfirm:m,handleReset:g,handleSelect:y,isActive:h,t:r,ns:n,showFilterPanel:v,hideFilterPanel:p,popperPaneRef:b,tooltip:o}}}),LV={key:0},DV=["disabled"],IV=["label","onClick"];function OV(e,t,r,n,i,a){const o=xr("el-checkbox"),s=xr("el-checkbox-group"),l=xr("el-scrollbar"),u=xr("arrow-up"),f=xr("arrow-down"),c=xr("el-icon"),h=xr("el-tooltip"),d=fT("click-outside");return G(),de(h,{ref:"tooltip",visible:e.tooltipVisible,offset:0,placement:e.placement,"show-arrow":!1,"stop-popper-mouse-event":!1,teleported:"",effect:"light",pure:"","popper-class":e.filterClassName,persistent:""},{content:j(()=>[e.multiple?(G(),ce("div",LV,[ee("div",{class:re(e.ns.e("content"))},[Z(l,{"wrap-class":e.ns.e("wrap")},{default:j(()=>[Z(s,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=v=>e.filteredValue=v),class:re(e.ns.e("checkbox-group"))},{default:j(()=>[(G(!0),ce(ft,null,Hp(e.filters,v=>(G(),de(o,{key:v.value,label:v.value},{default:j(()=>[mt(be(v.text),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),ee("div",{class:re(e.ns.e("bottom"))},[ee("button",{class:re({[e.ns.is("disabled")]:e.filteredValue.length===0}),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...v)=>e.handleConfirm&&e.handleConfirm(...v))},be(e.t("el.table.confirmFilter")),11,DV),ee("button",{type:"button",onClick:t[2]||(t[2]=(...v)=>e.handleReset&&e.handleReset(...v))},be(e.t("el.table.resetFilter")),1)],2)])):(G(),ce("ul",{key:1,class:re(e.ns.e("list"))},[ee("li",{class:re([e.ns.e("list-item"),{[e.ns.is("active")]:e.filterValue===void 0||e.filterValue===null}]),onClick:t[3]||(t[3]=v=>e.handleSelect(null))},be(e.t("el.table.clearFilter")),3),(G(!0),ce(ft,null,Hp(e.filters,v=>(G(),ce("li",{key:v.value,class:re([e.ns.e("list-item"),e.ns.is("active",e.isActive(v))]),label:v.value,onClick:p=>e.handleSelect(v.value)},be(v.text),11,IV))),128))],2))]),default:j(()=>[qt((G(),ce("span",{class:re([`${e.ns.namespace.value}-table__column-filter-trigger`,`${e.ns.namespace.value}-none-outline`]),onClick:t[4]||(t[4]=(...v)=>e.showFilterPanel&&e.showFilterPanel(...v))},[Z(c,null,{default:j(()=>[e.column.filterOpened?(G(),de(u,{key:0})):(G(),de(f,{key:1}))]),_:1})],2)),[[d,e.hideFilterPanel,e.popperPaneRef]])]),_:1},8,["visible","placement","popper-class"])}var RV=Ke(EV,[["render",OV],["__file","filter-panel.vue"]]);function JA(e){const t=it();eh(()=>{r.value.addObserver(t)}),_t(()=>{n(r.value),i(r.value)}),Uu(()=>{n(r.value),i(r.value)}),Os(()=>{r.value.removeObserver(t)});const r=k(()=>{const a=e.layout;if(!a)throw new Error("Can not find table layout.");return a}),n=a=>{var o;const s=((o=e.vnode.el)==null?void 0:o.querySelectorAll("colgroup > col"))||[];if(!s.length)return;const l=a.getFlattenColumns(),u={};l.forEach(f=>{u[f.id]=f});for(let f=0,c=s.length;f{var o,s;const l=((o=e.vnode.el)==null?void 0:o.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let f=0,c=l.length;f{p.stopPropagation()},a=(p,m)=>{!m.filters&&m.sortable?v(p,m,!1):m.filterable&&!m.sortable&&i(p),n==null||n.emit("header-click",m,p)},o=(p,m)=>{n==null||n.emit("header-contextmenu",m,p)},s=$(null),l=$(!1),u=$({}),f=(p,m)=>{if(At&&!(m.children&&m.children.length>0)&&s.value&&e.border){l.value=!0;const g=n;t("set-drag-visible",!0);const _=(g==null?void 0:g.vnode.el).getBoundingClientRect().left,b=r.vnode.el.querySelector(`th.${m.id}`),x=b.getBoundingClientRect(),w=x.left-_+30;Za(b,"noclick"),u.value={startMouseLeft:p.clientX,startLeft:x.right-_,startColumnLeft:x.left-_,tableLeft:_};const S=g==null?void 0:g.refs.resizeProxy;S.style.left=`${u.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const C=A=>{const P=A.clientX-u.value.startMouseLeft,E=u.value.startLeft+P;S.style.left=`${Math.max(w,E)}px`},M=()=>{if(l.value){const{startColumnLeft:A,startLeft:P}=u.value,L=Number.parseInt(S.style.left,10)-A;m.width=m.realWidth=L,g==null||g.emit("header-dragend",m.width,P-A,m,p),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",l.value=!1,s.value=null,u.value={},t("set-drag-visible",!1)}document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",M),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{so(b,"noclick")},0)};document.addEventListener("mousemove",C),document.addEventListener("mouseup",M)}},c=(p,m)=>{if(m.children&&m.children.length>0)return;const g=p.target;if(!mo(g))return;const y=g==null?void 0:g.closest("th");if(!(!m||!m.resizable)&&!l.value&&e.border){const _=y.getBoundingClientRect(),b=document.body.style;_.width>12&&_.right-p.pageX<8?(b.cursor="col-resize",oo(y,"is-sortable")&&(y.style.cursor="col-resize"),s.value=m):l.value||(b.cursor="",oo(y,"is-sortable")&&(y.style.cursor="pointer"),s.value=null)}},h=()=>{At&&(document.body.style.cursor="")},d=({order:p,sortOrders:m})=>{if(p==="")return m[0];const g=m.indexOf(p||null);return m[g>m.length-2?0:g+1]},v=(p,m,g)=>{var y;p.stopPropagation();const _=m.order===g?null:g||d(m),b=(y=p.target)==null?void 0:y.closest("th");if(b&&oo(b,"noclick")){so(b,"noclick");return}if(!m.sortable)return;const x=e.store.states;let w=x.sortProp.value,S;const C=x.sortingColumn.value;(C!==m||C===m&&C.order===null)&&(C&&(C.order=null),x.sortingColumn.value=m,w=m.property),_?S=m.order=_:S=m.order=null,x.sortProp.value=w,x.sortOrder.value=S,n==null||n.store.commit("changeSortCondition")};return{handleHeaderClick:a,handleHeaderContextMenu:o,handleMouseDown:f,handleMouseMove:c,handleMouseOut:h,handleSortClick:v,handleFilterClick:i}}function NV(e){const t=Le(ri),r=Oe("table");return{getHeaderRowStyle:s=>{const l=t==null?void 0:t.props.headerRowStyle;return typeof l=="function"?l.call(null,{rowIndex:s}):l},getHeaderRowClass:s=>{const l=[],u=t==null?void 0:t.props.headerRowClassName;return typeof u=="string"?l.push(u):typeof u=="function"&&l.push(u.call(null,{rowIndex:s})),l.join(" ")},getHeaderCellStyle:(s,l,u,f)=>{var c;let h=(c=t==null?void 0:t.props.headerCellStyle)!=null?c:{};typeof h=="function"&&(h=h.call(null,{rowIndex:s,columnIndex:l,row:u,column:f}));const d=Xy(l,f.fixed,e.store,u);return Ts(d,"left"),Ts(d,"right"),Object.assign({},h,d)},getHeaderCellClass:(s,l,u,f)=>{const c=Ky(r.b(),l,f.fixed,e.store,u),h=[f.id,f.order,f.headerAlign,f.className,f.labelClassName,...c];f.children||h.push("is-leaf"),f.sortable&&h.push("is-sortable");const d=t==null?void 0:t.props.headerCellClassName;return typeof d=="string"?h.push(d):typeof d=="function"&&h.push(d.call(null,{rowIndex:s,columnIndex:l,row:u,column:f})),h.push(r.e("cell")),h.filter(v=>!!v).join(" ")}}}const e2=e=>{const t=[];return e.forEach(r=>{r.children?(t.push(r),t.push.apply(t,e2(r.children))):t.push(r)}),t},BV=e=>{let t=1;const r=(a,o)=>{if(o&&(a.level=o.level+1,t{r(l,a),s+=l.colSpan}),a.colSpan=s}else a.colSpan=1};e.forEach(a=>{a.level=1,r(a,void 0)});const n=[];for(let a=0;a{a.children?(a.rowSpan=1,a.children.forEach(o=>o.isSubColumn=!0)):a.rowSpan=t-a.level+1,n[a.level-1].push(a)}),n};function FV(e){const t=Le(ri),r=k(()=>BV(e.store.states.originColumns.value));return{isGroup:k(()=>{const a=r.value.length>1;return a&&t&&(t.state.isGroup.value=!0),a}),toggleAllSelection:a=>{a.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:r}}var $V=ie({name:"ElTableHeader",components:{ElCheckbox:Cs},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e,{emit:t}){const r=it(),n=Le(ri),i=Oe("table"),a=$({}),{onColumnsChange:o,onScrollableChange:s}=JA(n);_t(async()=>{await kt(),await kt();const{prop:w,order:S}=e.defaultSort;n==null||n.store.commit("sort",{prop:w,order:S,init:!0})});const{handleHeaderClick:l,handleHeaderContextMenu:u,handleMouseDown:f,handleMouseMove:c,handleMouseOut:h,handleSortClick:d,handleFilterClick:v}=kV(e,t),{getHeaderRowStyle:p,getHeaderRowClass:m,getHeaderCellStyle:g,getHeaderCellClass:y}=NV(e),{isGroup:_,toggleAllSelection:b,columnRows:x}=FV(e);return r.state={onColumnsChange:o,onScrollableChange:s},r.filterPanels=a,{ns:i,filterPanels:a,onColumnsChange:o,onScrollableChange:s,columnRows:x,getHeaderRowClass:m,getHeaderRowStyle:p,getHeaderCellClass:y,getHeaderCellStyle:g,handleHeaderClick:l,handleHeaderContextMenu:u,handleMouseDown:f,handleMouseMove:c,handleMouseOut:h,handleSortClick:d,handleFilterClick:v,isGroup:_,toggleAllSelection:b}},render(){const{ns:e,isGroup:t,columnRows:r,getHeaderCellStyle:n,getHeaderCellClass:i,getHeaderRowClass:a,getHeaderRowStyle:o,handleHeaderClick:s,handleHeaderContextMenu:l,handleMouseDown:u,handleMouseMove:f,handleSortClick:c,handleMouseOut:h,store:d,$parent:v}=this;let p=1;return Te("thead",{class:{[e.is("group")]:t}},r.map((m,g)=>Te("tr",{class:a(g),key:g,style:o(g)},m.map((y,_)=>(y.rowSpan>p&&(p=y.rowSpan),Te("th",{class:i(g,_,m,y),colspan:y.colSpan,key:`${y.id}-thead`,rowspan:y.rowSpan,style:n(g,_,m,y),onClick:b=>s(b,y),onContextmenu:b=>l(b,y),onMousedown:b=>u(b,y),onMousemove:b=>f(b,y),onMouseout:h},[Te("div",{class:["cell",y.filteredValue&&y.filteredValue.length>0?"highlight":""]},[y.renderHeader?y.renderHeader({column:y,$index:_,store:d,_self:v}):y.label,y.sortable&&Te("span",{onClick:b=>c(b,y),class:"caret-wrapper"},[Te("i",{onClick:b=>c(b,y,"ascending"),class:"sort-caret ascending"}),Te("i",{onClick:b=>c(b,y,"descending"),class:"sort-caret descending"})]),y.filterable&&Te(RV,{store:d,placement:y.filterPlacement||"bottom-start",column:y,upDataColumn:(b,x)=>{y[b]=x}})])]))))))}});function HV(e){const t=Le(ri),r=$(""),n=$(Te("div")),i=(d,v,p)=>{var m;const g=t,y=cv(d);let _;const b=(m=g==null?void 0:g.vnode.el)==null?void 0:m.dataset.prefix;y&&(_=L1({columns:e.store.states.columns.value},y,b),_&&(g==null||g.emit(`cell-${p}`,v,_,y,d))),g==null||g.emit(`row-${p}`,v,_,d)},a=(d,v)=>{i(d,v,"dblclick")},o=(d,v)=>{e.store.commit("setCurrentRow",v),i(d,v,"click")},s=(d,v)=>{i(d,v,"contextmenu")},l=hd(d=>{e.store.commit("setHoverRow",d)},30),u=hd(()=>{e.store.commit("setHoverRow",null)},30),f=d=>{const v=window.getComputedStyle(d,null),p=Number.parseInt(v.paddingLeft,10)||0,m=Number.parseInt(v.paddingRight,10)||0,g=Number.parseInt(v.paddingTop,10)||0,y=Number.parseInt(v.paddingBottom,10)||0;return{left:p,right:m,top:g,bottom:y}};return{handleDoubleClick:a,handleClick:o,handleContextMenu:s,handleMouseEnter:l,handleMouseLeave:u,handleCellMouseEnter:(d,v,p)=>{var m;const g=t,y=cv(d),_=(m=g==null?void 0:g.vnode.el)==null?void 0:m.dataset.prefix;if(y){const H=L1({columns:e.store.states.columns.value},y,_),V=g.hoverState={cell:y,column:H,row:v};g==null||g.emit("cell-mouse-enter",V.row,V.column,V.cell,d)}if(!p)return;const b=d.target.querySelector(".cell");if(!(oo(b,`${_}-tooltip`)&&b.childNodes.length))return;const x=document.createRange();x.setStart(b,0),x.setEnd(b,b.childNodes.length);let w=x.getBoundingClientRect().width,S=x.getBoundingClientRect().height;w-Math.floor(w)<.001&&(w=Math.floor(w)),S-Math.floor(S)<.001&&(S=Math.floor(S));const{top:A,left:P,right:E,bottom:L}=f(b),O=P+E,N=A+L;(w+O>b.offsetWidth||S+N>b.offsetHeight||b.scrollWidth>b.offsetWidth)&&yV(p,y.innerText||y.textContent,y,g)},handleCellMouseLeave:d=>{if(!cv(d))return;const p=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",p==null?void 0:p.row,p==null?void 0:p.column,p==null?void 0:p.cell,d)},tooltipContent:r,tooltipTrigger:n}}function zV(e){const t=Le(ri),r=Oe("table");return{getRowStyle:(u,f)=>{const c=t==null?void 0:t.props.rowStyle;return typeof c=="function"?c.call(null,{row:u,rowIndex:f}):c||null},getRowClass:(u,f)=>{const c=[r.e("row")];t!=null&&t.props.highlightCurrentRow&&u===e.store.states.currentRow.value&&c.push("current-row"),e.stripe&&f%2===1&&c.push(r.em("row","striped"));const h=t==null?void 0:t.props.rowClassName;return typeof h=="string"?c.push(h):typeof h=="function"&&c.push(h.call(null,{row:u,rowIndex:f})),c},getCellStyle:(u,f,c,h)=>{const d=t==null?void 0:t.props.cellStyle;let v=d??{};typeof d=="function"&&(v=d.call(null,{rowIndex:u,columnIndex:f,row:c,column:h}));const p=Xy(f,e==null?void 0:e.fixed,e.store);return Ts(p,"left"),Ts(p,"right"),Object.assign({},v,p)},getCellClass:(u,f,c,h,d)=>{const v=Ky(r.b(),f,e==null?void 0:e.fixed,e.store,void 0,d),p=[h.id,h.align,h.className,...v],m=t==null?void 0:t.props.cellClassName;return typeof m=="string"?p.push(m):typeof m=="function"&&p.push(m.call(null,{rowIndex:u,columnIndex:f,row:c,column:h})),p.push(r.e("cell")),p.filter(g=>!!g).join(" ")},getSpan:(u,f,c,h)=>{let d=1,v=1;const p=t==null?void 0:t.props.spanMethod;if(typeof p=="function"){const m=p({row:u,column:f,rowIndex:c,columnIndex:h});Array.isArray(m)?(d=m[0],v=m[1]):typeof m=="object"&&(d=m.rowspan,v=m.colspan)}return{rowspan:d,colspan:v}},getColspanRealWidth:(u,f,c)=>{if(f<1)return u[c].realWidth;const h=u.map(({realWidth:d,width:v})=>d||v).slice(c,c+f);return Number(h.reduce((d,v)=>Number(d)+Number(v),-1))}}}function VV(e){const t=Le(ri),r=Oe("table"),{handleDoubleClick:n,handleClick:i,handleContextMenu:a,handleMouseEnter:o,handleMouseLeave:s,handleCellMouseEnter:l,handleCellMouseLeave:u,tooltipContent:f,tooltipTrigger:c}=HV(e),{getRowStyle:h,getRowClass:d,getCellStyle:v,getCellClass:p,getSpan:m,getColspanRealWidth:g}=zV(e),y=k(()=>e.store.states.columns.value.findIndex(({type:S})=>S==="default")),_=(S,C)=>{const M=t.props.rowKey;return M?Jt(S,M):C},b=(S,C,M,A=!1)=>{const{tooltipEffect:P,tooltipOptions:E,store:L}=e,{indent:O,columns:N}=L.states,H=d(S,C);let V=!0;return M&&(H.push(r.em("row",`level-${M.level}`)),V=M.display),Te("tr",{style:[V?null:{display:"none"},h(S,C)],class:H,key:_(S,C),onDblclick:F=>n(F,S),onClick:F=>i(F,S),onContextmenu:F=>a(F,S),onMouseenter:()=>o(C),onMouseleave:s},N.value.map((F,z)=>{const{rowspan:te,colspan:J}=m(S,F,C,z);if(!te||!J)return null;const me=Object.assign({},F);me.realWidth=g(N.value,J,z);const Se={store:e.store,_self:e.context||t,column:me,row:S,$index:C,cellIndex:z,expanded:A};z===y.value&&M&&(Se.treeNode={indent:M.level*O.value,level:M.level},typeof M.expanded=="boolean"&&(Se.treeNode.expanded=M.expanded,"loading"in M&&(Se.treeNode.loading=M.loading),"noLazyChildren"in M&&(Se.treeNode.noLazyChildren=M.noLazyChildren)));const $e=`${C},${z}`,Ie=me.columnKey||me.rawColumnKey||"",B=x(z,F,Se),Y=F.showOverflowTooltip&&m3({effect:P},E,F.showOverflowTooltip);return Te("td",{style:v(C,z,S,F),class:p(C,z,S,F,J-1),key:`${Ie}${$e}`,rowspan:te,colspan:J,onMouseenter:K=>l(K,S,Y),onMouseleave:u},[B])}))},x=(S,C,M)=>C.renderCell(M);return{wrappedRowRender:(S,C)=>{const M=e.store,{isRowExpanded:A,assertRowKey:P}=M,{treeData:E,lazyTreeNodeMap:L,childrenColumnName:O,rowKey:N}=M.states,H=M.states.columns.value;if(H.some(({type:U})=>U==="expand")){const U=A(S),F=b(S,C,void 0,U),z=t.renderExpanded;return U?z?[[F,Te("tr",{key:`expanded-row__${F.key}`},[Te("td",{colspan:H.length,class:`${r.e("cell")} ${r.e("expanded-cell")}`},[z({row:S,$index:C,store:M,expanded:U})])])]]:(console.error("[Element Error]renderExpanded is required."),F):[[F]]}else if(Object.keys(E.value).length){P();const U=Jt(S,N.value);let F=E.value[U],z=null;F&&(z={expanded:F.expanded,level:F.level,display:!0},typeof F.lazy=="boolean"&&(typeof F.loaded=="boolean"&&F.loaded&&(z.noLazyChildren=!(F.children&&F.children.length)),z.loading=F.loading));const te=[b(S,C,z)];if(F){let J=0;const me=($e,Ie)=>{$e&&$e.length&&Ie&&$e.forEach(B=>{const Y={display:Ie.display&&Ie.expanded,level:Ie.level+1,expanded:!1,noLazyChildren:!1,loading:!1},K=Jt(B,N.value);if(K==null)throw new Error("For nested data item, row-key is required.");if(F={...E.value[K]},F&&(Y.expanded=F.expanded,F.level=F.level||Y.level,F.display=!!(F.expanded&&Y.display),typeof F.lazy=="boolean"&&(typeof F.loaded=="boolean"&&F.loaded&&(Y.noLazyChildren=!(F.children&&F.children.length)),Y.loading=F.loading)),J++,te.push(b(B,C+J,Y)),F){const Q=L.value[K]||B[O.value];me(Q,F)}})};F.display=!0;const Se=L.value[U]||S[O.value];me(Se,F)}return te}else return b(S,C,void 0)},tooltipContent:f,tooltipTrigger:c}}const WV={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var GV=ie({name:"ElTableBody",props:WV,setup(e){const t=it(),r=Le(ri),n=Oe("table"),{wrappedRowRender:i,tooltipContent:a,tooltipTrigger:o}=VV(e),{onColumnsChange:s,onScrollableChange:l}=JA(r);return we(e.store.states.hoverRow,(u,f)=>{!e.store.states.isComplex.value||!At||q3(()=>{const c=t==null?void 0:t.vnode.el,h=Array.from((c==null?void 0:c.children)||[]).filter(p=>p==null?void 0:p.classList.contains(`${n.e("row")}`)),d=h[f],v=h[u];d&&so(d,"hover-row"),v&&Za(v,"hover-row")})}),Os(()=>{var u;(u=Xr)==null||u()}),{ns:n,onColumnsChange:s,onScrollableChange:l,wrappedRowRender:i,tooltipContent:a,tooltipTrigger:o}},render(){const{wrappedRowRender:e,store:t}=this,r=t.states.data.value||[];return Te("tbody",{tabIndex:-1},[r.reduce((n,i)=>n.concat(e(i,n.length)),[])])}});function UV(){const e=Le(ri),t=e==null?void 0:e.store,r=k(()=>t.states.fixedLeafColumnsLength.value),n=k(()=>t.states.rightFixedColumns.value.length),i=k(()=>t.states.columns.value.length),a=k(()=>t.states.fixedColumns.value.length),o=k(()=>t.states.rightFixedColumns.value.length);return{leftFixedLeafCount:r,rightFixedLeafCount:n,columnsCount:i,leftFixedCount:a,rightFixedCount:o,columns:t.states.columns}}function YV(e){const{columns:t}=UV(),r=Oe("table");return{getCellClasses:(a,o)=>{const s=a[o],l=[r.e("cell"),s.id,s.align,s.labelClassName,...Ky(r.b(),o,s.fixed,e.store)];return s.className&&l.push(s.className),s.children||l.push(r.is("leaf")),l},getCellStyles:(a,o)=>{const s=Xy(o,a.fixed,e.store);return Ts(s,"left"),Ts(s,"right"),s},columns:t}}var jV=ie({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const{getCellClasses:t,getCellStyles:r,columns:n}=YV(e);return{ns:Oe("table"),getCellClasses:t,getCellStyles:r,columns:n}},render(){const{columns:e,getCellStyles:t,getCellClasses:r,summaryMethod:n,sumText:i}=this,a=this.store.states.data.value;let o=[];return n?o=n({columns:e,data:a}):e.forEach((s,l)=>{if(l===0){o[l]=i;return}const u=a.map(d=>Number(d[s.property])),f=[];let c=!0;u.forEach(d=>{if(!Number.isNaN(+d)){c=!1;const v=`${d}`.split(".")[1];f.push(v?v.length:0)}});const h=Math.max.apply(null,f);c?o[l]="":o[l]=u.reduce((d,v)=>{const p=Number(v);return Number.isNaN(+p)?d:Number.parseFloat((d+v).toFixed(Math.min(h,20)))},0)}),Te(Te("tfoot",[Te("tr",{},[...e.map((s,l)=>Te("td",{key:l,colspan:s.colSpan,rowspan:s.rowSpan,class:r(e,l),style:t(s,l)},[Te("div",{class:["cell",s.labelClassName]},[o[l]])]))])]))}});function qV(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(f,c)=>{e.toggleRowSelection(f,c,!1),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,c)=>{e.toggleRowExpansionAdapter(f,c)},clearSort:()=>{e.clearSort()},sort:(f,c)=>{e.commit("sort",{prop:f,order:c})}}}function KV(e,t,r,n){const i=$(!1),a=$(null),o=$(!1),s=F=>{o.value=F},l=$({width:null,height:null,headerHeight:null}),u=$(!1),f={display:"inline-block",verticalAlign:"middle"},c=$(),h=$(0),d=$(0),v=$(0),p=$(0),m=$(0);na(()=>{t.setHeight(e.height)}),na(()=>{t.setMaxHeight(e.maxHeight)}),we(()=>[e.currentRowKey,r.states.rowKey],([F,z])=>{!T(z)||!T(F)||r.setCurrentRowKey(`${F}`)},{immediate:!0}),we(()=>e.data,F=>{n.store.commit("setData",F)},{immediate:!0,deep:!0}),na(()=>{e.expandRowKeys&&r.setExpandRowKeysAdapter(e.expandRowKeys)});const g=()=>{n.store.commit("setHoverRow",null),n.hoverState&&(n.hoverState=null)},y=(F,z)=>{const{pixelX:te,pixelY:J}=z;Math.abs(te)>=Math.abs(J)&&(n.refs.bodyWrapper.scrollLeft+=z.pixelX/5)},_=k(()=>e.height||e.maxHeight||r.states.fixedColumns.value.length>0||r.states.rightFixedColumns.value.length>0),b=k(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),x=()=>{_.value&&t.updateElsHeight(),t.updateColumnsWidth(),requestAnimationFrame(M)};_t(async()=>{await kt(),r.updateColumns(),A(),requestAnimationFrame(x);const F=n.vnode.el,z=n.refs.headerWrapper;e.flexible&&F&&F.parentElement&&(F.parentElement.style.minWidth="0"),l.value={width:c.value=F.offsetWidth,height:F.offsetHeight,headerHeight:e.showHeader&&z?z.offsetHeight:null},r.states.columns.value.forEach(te=>{te.filteredValue&&te.filteredValue.length&&n.store.commit("filterChange",{column:te,values:te.filteredValue,silent:!0})}),n.$ready=!0});const w=(F,z)=>{if(!F)return;const te=Array.from(F.classList).filter(J=>!J.startsWith("is-scrolling-"));te.push(t.scrollX.value?z:"is-scrolling-none"),F.className=te.join(" ")},S=F=>{const{tableWrapper:z}=n.refs;w(z,F)},C=F=>{const{tableWrapper:z}=n.refs;return!!(z&&z.classList.contains(F))},M=function(){if(!n.refs.scrollBarRef)return;if(!t.scrollX.value){const Ie="is-scrolling-none";C(Ie)||S(Ie);return}const F=n.refs.scrollBarRef.wrapRef;if(!F)return;const{scrollLeft:z,offsetWidth:te,scrollWidth:J}=F,{headerWrapper:me,footerWrapper:Se}=n.refs;me&&(me.scrollLeft=z),Se&&(Se.scrollLeft=z);const $e=J-te-1;z>=$e?S("is-scrolling-right"):S(z===0?"is-scrolling-left":"is-scrolling-middle")},A=()=>{n.refs.scrollBarRef&&(n.refs.scrollBarRef.wrapRef&&xn(n.refs.scrollBarRef.wrapRef,"scroll",M,{passive:!0}),e.fit?ps(n.vnode.el,P):xn(window,"resize",P),ps(n.refs.bodyWrapper,()=>{var F,z;P(),(z=(F=n.refs)==null?void 0:F.scrollBarRef)==null||z.update()}))},P=()=>{var F,z,te,J;const me=n.vnode.el;if(!n.$ready||!me)return;let Se=!1;const{width:$e,height:Ie,headerHeight:B}=l.value,Y=c.value=me.offsetWidth;$e!==Y&&(Se=!0);const K=me.offsetHeight;(e.height||_.value)&&Ie!==K&&(Se=!0);const Q=e.tableLayout==="fixed"?n.refs.headerWrapper:(F=n.refs.tableHeaderRef)==null?void 0:F.$el;e.showHeader&&(Q==null?void 0:Q.offsetHeight)!==B&&(Se=!0),h.value=((z=n.refs.tableWrapper)==null?void 0:z.scrollHeight)||0,v.value=(Q==null?void 0:Q.scrollHeight)||0,p.value=((te=n.refs.footerWrapper)==null?void 0:te.offsetHeight)||0,m.value=((J=n.refs.appendWrapper)==null?void 0:J.offsetHeight)||0,d.value=h.value-v.value-p.value-m.value,Se&&(l.value={width:Y,height:K,headerHeight:e.showHeader&&(Q==null?void 0:Q.offsetHeight)||0},x())},E=xi(),L=k(()=>{const{bodyWidth:F,scrollY:z,gutterWidth:te}=t;return F.value?`${F.value-(z.value?te:0)}px`:""}),O=k(()=>e.maxHeight?"fixed":e.tableLayout),N=k(()=>{if(e.data&&e.data.length)return null;let F="100%";e.height&&d.value&&(F=`${d.value}px`);const z=c.value;return{width:z?`${z}px`:"",height:F}}),H=k(()=>e.height?{height:Number.isNaN(Number(e.height))?e.height:`${e.height}px`}:e.maxHeight?{maxHeight:Number.isNaN(Number(e.maxHeight))?e.maxHeight:`${e.maxHeight}px`}:{}),V=k(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${v.value+p.value}px)`}:{maxHeight:`${e.maxHeight-v.value-p.value}px`}:{});return{isHidden:i,renderExpanded:a,setDragVisible:s,isGroup:u,handleMouseLeave:g,handleHeaderFooterMousewheel:y,tableSize:E,emptyBlockStyle:N,handleFixedMousewheel:(F,z)=>{const te=n.refs.bodyWrapper;if(Math.abs(z.spinY)>0){const J=te.scrollTop;z.pixelY<0&&J!==0&&F.preventDefault(),z.pixelY>0&&te.scrollHeight-te.clientHeight>J&&F.preventDefault(),te.scrollTop+=Math.ceil(z.pixelY/5)}else te.scrollLeft+=Math.ceil(z.pixelX/5)},resizeProxyVisible:o,bodyWidth:L,resizeState:l,doLayout:x,tableBodyStyles:b,tableLayout:O,scrollbarViewStyle:f,tableInnerStyle:H,scrollbarStyle:V}}function XV(e){const t=$(),r=()=>{const i=e.vnode.el.querySelector(".hidden-columns"),a={childList:!0,subtree:!0},o=e.store.states.updateOrderFns;t.value=new MutationObserver(()=>{o.forEach(s=>s())}),t.value.observe(i,a)};_t(()=>{r()}),Os(()=>{var n;(n=t.value)==null||n.disconnect()})}var ZV={data:{type:Array,default:()=>[]},size:dh,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children"})},lazy:Boolean,load:Function,style:{type:Object,default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:{type:Boolean,default:!1},flexible:Boolean,showOverflowTooltip:[Boolean,Object]};function t2(e){const t=e.tableLayout==="auto";let r=e.columns||[];t&&r.every(i=>i.width===void 0)&&(r=[]);const n=i=>{const a={key:`${e.tableLayout}_${i.id}`,style:{},name:void 0};return t?a.style={width:`${i.width}px`}:a.name=i.id,a};return Te("colgroup",{},r.map(i=>Te("col",n(i))))}t2.props=["columns","tableLayout"];const QV=()=>{const e=$(),t=(a,o)=>{const s=e.value;s&&s.scrollTo(a,o)},r=(a,o)=>{const s=e.value;s&&Rt(o)&&["Top","Left"].includes(a)&&s[`setScroll${a}`](o)};return{scrollBarRef:e,scrollTo:t,setScrollTop:a=>r("Top",a),setScrollLeft:a=>r("Left",a)}};let JV=1;const eW=ie({name:"ElTable",directives:{Mousewheel:d8},components:{TableHeader:$V,TableBody:GV,TableFooter:jV,ElScrollbar:uA,hColgroup:t2},props:ZV,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],setup(e){const{t}=Fs(),r=Oe("table"),n=it();Dt(ri,n);const i=TV(n,e);n.store=i;const a=new AV({store:n.store,table:n,fit:e.fit,showHeader:e.showHeader});n.layout=a;const o=k(()=>(i.states.data.value||[]).length===0),{setCurrentRow:s,getSelectionRows:l,toggleRowSelection:u,clearSelection:f,clearFilter:c,toggleAllSelection:h,toggleRowExpansion:d,clearSort:v,sort:p}=qV(i),{isHidden:m,renderExpanded:g,setDragVisible:y,isGroup:_,handleMouseLeave:b,handleHeaderFooterMousewheel:x,tableSize:w,emptyBlockStyle:S,handleFixedMousewheel:C,resizeProxyVisible:M,bodyWidth:A,resizeState:P,doLayout:E,tableBodyStyles:L,tableLayout:O,scrollbarViewStyle:N,tableInnerStyle:H,scrollbarStyle:V}=KV(e,a,i,n),{scrollBarRef:U,scrollTo:F,setScrollLeft:z,setScrollTop:te}=QV(),J=hd(E,50),me=`${r.namespace.value}-table_${JV++}`;n.tableId=me,n.state={isGroup:_,resizeState:P,doLayout:E,debouncedUpdateLayout:J};const Se=k(()=>e.sumText||t("el.table.sumText")),$e=k(()=>e.emptyText||t("el.table.emptyText"));return XV(n),{ns:r,layout:a,store:i,handleHeaderFooterMousewheel:x,handleMouseLeave:b,tableId:me,tableSize:w,isHidden:m,isEmpty:o,renderExpanded:g,resizeProxyVisible:M,resizeState:P,isGroup:_,bodyWidth:A,tableBodyStyles:L,emptyBlockStyle:S,debouncedUpdateLayout:J,handleFixedMousewheel:C,setCurrentRow:s,getSelectionRows:l,toggleRowSelection:u,clearSelection:f,clearFilter:c,toggleAllSelection:h,toggleRowExpansion:d,clearSort:v,doLayout:E,sort:p,t,setDragVisible:y,context:n,computedSumText:Se,computedEmptyText:$e,tableLayout:O,scrollbarViewStyle:N,tableInnerStyle:H,scrollbarStyle:V,scrollBarRef:U,scrollTo:F,setScrollLeft:z,setScrollTop:te}}}),tW=["data-prefix"],rW={ref:"hiddenColumns",class:"hidden-columns"};function nW(e,t,r,n,i,a){const o=xr("hColgroup"),s=xr("table-header"),l=xr("table-body"),u=xr("table-footer"),f=xr("el-scrollbar"),c=fT("mousewheel");return G(),ce("div",{ref:"tableWrapper",class:re([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:ct(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[0]||(t[0]=(...h)=>e.handleMouseLeave&&e.handleMouseLeave(...h))},[ee("div",{class:re(e.ns.e("inner-wrapper")),style:ct(e.tableInnerStyle)},[ee("div",rW,[Ce(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?qt((G(),ce("div",{key:0,ref:"headerWrapper",class:re(e.ns.e("header-wrapper"))},[ee("table",{ref:"tableHeader",class:re(e.ns.e("header")),style:ct(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[Z(o,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Z(s,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])],6)],2)),[[c,e.handleHeaderFooterMousewheel]]):Ae("v-if",!0),ee("div",{ref:"bodyWrapper",class:re(e.ns.e("body-wrapper"))},[Z(f,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn},{default:j(()=>[ee("table",{ref:"tableBody",class:re(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:ct({width:e.bodyWidth,tableLayout:e.tableLayout})},[Z(o,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(G(),de(s,{key:0,ref:"tableHeaderRef",class:re(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","onSetDragVisible"])):Ae("v-if",!0),Z(l,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"tooltip-options":e.tooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(G(),de(u,{key:1,class:re(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):Ae("v-if",!0)],6),e.isEmpty?(G(),ce("div",{key:0,ref:"emptyBlock",style:ct(e.emptyBlockStyle),class:re(e.ns.e("empty-block"))},[ee("span",{class:re(e.ns.e("empty-text"))},[Ce(e.$slots,"empty",{},()=>[mt(be(e.computedEmptyText),1)])],2)],6)):Ae("v-if",!0),e.$slots.append?(G(),ce("div",{key:1,ref:"appendWrapper",class:re(e.ns.e("append-wrapper"))},[Ce(e.$slots,"append")],2)):Ae("v-if",!0)]),_:3},8,["view-style","wrap-style","always"])],2),e.showSummary&&e.tableLayout==="fixed"?qt((G(),ce("div",{key:1,ref:"footerWrapper",class:re(e.ns.e("footer-wrapper"))},[ee("table",{class:re(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:ct(e.tableBodyStyles)},[Z(o,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Z(u,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[Kn,!e.isEmpty],[c,e.handleHeaderFooterMousewheel]]):Ae("v-if",!0),e.border||e.isGroup?(G(),ce("div",{key:2,class:re(e.ns.e("border-left-patch"))},null,2)):Ae("v-if",!0)],6),qt(ee("div",{ref:"resizeProxy",class:re(e.ns.e("column-resize-proxy"))},null,2),[[Kn,e.resizeProxyVisible]])],46,tW)}var iW=Ke(eW,[["render",nW],["__file","table.vue"]]);const aW={selection:"table-column--selection",expand:"table__expand-column"},oW={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},sW=e=>aW[e]||"",lW={selection:{renderHeader({store:e,column:t}){function r(){return e.states.data.value&&e.states.data.value.length===0}return Te(Cs,{disabled:r(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection,modelValue:e.states.isAllSelected.value,ariaLabel:t.label})},renderCell({row:e,column:t,store:r,$index:n}){return Te(Cs,{disabled:t.selectable?!t.selectable.call(null,e,n):!1,size:r.states.tableSize.value,onChange:()=>{r.commit("rowSelectedChanged",e)},onClick:i=>i.stopPropagation(),modelValue:r.isSelected(e),ariaLabel:t.label})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let r=t+1;const n=e.index;return typeof n=="number"?r=t+n:typeof n=="function"&&(r=n(t)),Te("div",{},[r])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({row:e,store:t,expanded:r}){const{ns:n}=t,i=[n.e("expand-icon")];return r&&i.push(n.em("expand-icon","expanded")),Te("div",{class:i,onClick:function(o){o.stopPropagation(),t.toggleRowExpansion(e)}},{default:()=>[Te(Nt,null,{default:()=>[Te(Ey)]})]})},sortable:!1,resizable:!1}};function uW({row:e,column:t,$index:r}){var n;const i=t.property,a=i&&Ec(e,i).value;return t&&t.formatter?t.formatter(e,t,a,r):((n=a==null?void 0:a.toString)==null?void 0:n.call(a))||""}function fW({row:e,treeNode:t,store:r},n=!1){const{ns:i}=r;if(!t)return n?[Te("span",{class:i.e("placeholder")})]:null;const a=[],o=function(s){s.stopPropagation(),!t.loading&&r.loadOrToggle(e)};if(t.indent&&a.push(Te("span",{class:i.e("indent"),style:{"padding-left":`${t.indent}px`}})),typeof t.expanded=="boolean"&&!t.noLazyChildren){const s=[i.e("expand-icon"),t.expanded?i.em("expand-icon","expanded"):""];let l=Ey;t.loading&&(l=Ly),a.push(Te("div",{class:s,onClick:o},{default:()=>[Te(Nt,{class:{[i.is("loading")]:t.loading}},{default:()=>[Te(l)]})]}))}else a.push(Te("span",{class:i.e("placeholder")}));return a}function O1(e,t){return e.reduce((r,n)=>(r[n]=n,r),t)}function cW(e,t){const r=it();return{registerComplexWatchers:()=>{const a=["fixed"],o={realWidth:"width",realMinWidth:"minWidth"},s=O1(a,o);Object.keys(s).forEach(l=>{const u=o[l];Ue(t,u)&&we(()=>t[u],f=>{let c=f;u==="width"&&l==="realWidth"&&(c=qy(f)),u==="minWidth"&&l==="realMinWidth"&&(c=qA(f)),r.columnConfig.value[u]=c,r.columnConfig.value[l]=c;const h=u==="fixed";e.value.store.scheduleLayout(h)})})},registerNormalWatchers:()=>{const a=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip"],o={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},s=O1(a,o);Object.keys(s).forEach(l=>{const u=o[l];Ue(t,u)&&we(()=>t[u],f=>{r.columnConfig.value[l]=f})})}}}function dW(e,t,r){const n=it(),i=$(""),a=$(!1),o=$(),s=$(),l=Oe("table");na(()=>{o.value=e.align?`is-${e.align}`:null,o.value}),na(()=>{s.value=e.headerAlign?`is-${e.headerAlign}`:o.value,s.value});const u=k(()=>{let b=n.vnode.vParent||n.parent;for(;b&&!b.tableId&&!b.columnId;)b=b.vnode.vParent||b.parent;return b}),f=k(()=>{const{store:b}=n.parent;if(!b)return!1;const{treeData:x}=b.states,w=x.value;return w&&Object.keys(w).length>0}),c=$(qy(e.width)),h=$(qA(e.minWidth)),d=b=>(c.value&&(b.width=c.value),h.value&&(b.minWidth=h.value),!c.value&&h.value&&(b.width=void 0),b.minWidth||(b.minWidth=80),b.realWidth=Number(b.width===void 0?b.minWidth:b.width),b),v=b=>{const x=b.type,w=lW[x]||{};Object.keys(w).forEach(C=>{const M=w[C];C!=="className"&&M!==void 0&&(b[C]=M)});const S=sW(x);if(S){const C=`${T(l.namespace)}-${S}`;b.className=b.className?`${b.className} ${C}`:C}return b},p=b=>{Array.isArray(b)?b.forEach(w=>x(w)):x(b);function x(w){var S;((S=w==null?void 0:w.type)==null?void 0:S.name)==="ElTableColumn"&&(w.vParent=n)}};return{columnId:i,realAlign:o,isSubColumn:a,realHeaderAlign:s,columnOrTableParent:u,setColumnWidth:d,setColumnForcedProps:v,setColumnRenders:b=>{e.renderHeader||b.type!=="selection"&&(b.renderHeader=w=>(n.columnConfig.value.label,Ce(t,"header",w,()=>[b.label])));let x=b.renderCell;return b.type==="expand"?(b.renderCell=w=>Te("div",{class:"cell"},[x(w)]),r.value.renderExpanded=w=>t.default?t.default(w):t.default):(x=x||uW,b.renderCell=w=>{let S=null;if(t.default){const L=t.default(w);S=L.some(O=>O.type!==Mr)?L:x(w)}else S=x(w);const{columns:C}=r.value.store.states,M=C.value.findIndex(L=>L.type==="default"),A=f.value&&w.cellIndex===M,P=fW(w,A),E={class:"cell",style:{}};return b.showOverflowTooltip&&(E.class=`${E.class} ${T(l.namespace)}-tooltip`,E.style={width:`${(w.column.realWidth||Number(w.column.width))-1}px`}),p(S),Te("div",E,[P,S])}),b},getPropsData:(...b)=>b.reduce((x,w)=>(Array.isArray(w)&&w.forEach(S=>{x[S]=e[S]}),x),{}),getColumnElIndex:(b,x)=>Array.prototype.indexOf.call(b,x),updateColumnOrder:()=>{r.value.store.commit("updateColumnOrder",n.columnConfig.value)}}}var hW={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let vW=1;var r2=ie({name:"ElTableColumn",components:{ElCheckbox:Cs},props:hW,setup(e,{slots:t}){const r=it(),n=$({}),i=k(()=>{let _=r.parent;for(;_&&!_.tableId;)_=_.parent;return _}),{registerNormalWatchers:a,registerComplexWatchers:o}=cW(i,e),{columnId:s,isSubColumn:l,realHeaderAlign:u,columnOrTableParent:f,setColumnWidth:c,setColumnForcedProps:h,setColumnRenders:d,getPropsData:v,getColumnElIndex:p,realAlign:m,updateColumnOrder:g}=dW(e,t,i),y=f.value;s.value=`${y.tableId||y.columnId}_column_${vW++}`,eh(()=>{l.value=i.value!==y;const _=e.type||"default",b=e.sortable===""?!0:e.sortable,x=ys(e.showOverflowTooltip)?y.props.showOverflowTooltip:e.showOverflowTooltip,w={...oW[_],id:s.value,type:_,property:e.prop||e.property,align:m,headerAlign:u,showOverflowTooltip:x,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:b,index:e.index,rawColumnKey:r.vnode.key};let P=v(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);P=vV(w,P),P=gV(d,c,h)(P),n.value=P,a(),o()}),_t(()=>{var _;const b=f.value,x=l.value?b.vnode.el.children:(_=b.refs.hiddenColumns)==null?void 0:_.children,w=()=>p(x||[],r.vnode.el);n.value.getColumnIndex=w,w()>-1&&i.value.store.commit("insertColumn",n.value,l.value?b.columnConfig.value:null,g)}),tr(()=>{i.value.store.commit("removeColumn",n.value,l.value?y.columnConfig.value:null,g)}),r.columnId=s.value,r.columnConfig=n},render(){var e,t,r;try{const n=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),i=[];if(Array.isArray(n))for(const o of n)((r=o.type)==null?void 0:r.name)==="ElTableColumn"||o.shapeFlag&2?i.push(o):o.type===ft&&Array.isArray(o.children)&&o.children.forEach(s=>{(s==null?void 0:s.patchFlag)!==1024&&!ze(s==null?void 0:s.children)&&i.push(s)});return Te("div",i)}catch{return Te("div",[])}}});const pW=Yt(iW,{TableColumn:r2}),gW=pa(r2),mW=Je({type:{type:String,values:["primary","success","info","warning","danger",""],default:""},size:{type:String,values:Bs,default:""},truncated:{type:Boolean},lineClamp:{type:[String,Number]},tag:{type:String,default:"span"}}),yW=ie({name:"ElText"}),_W=ie({...yW,props:mW,setup(e){const t=e,r=xi(),n=Oe("text"),i=k(()=>[n.b(),n.m(t.type),n.m(r.value),n.is("truncated",t.truncated),n.is("line-clamp",!ys(t.lineClamp))]);return(a,o)=>(G(),de(Vt(a.tag),{class:re(T(i)),style:ct({"-webkit-line-clamp":a.lineClamp})},{default:j(()=>[Ce(a.$slots,"default")]),_:3},8,["class","style"]))}});var bW=Ke(_W,[["__file","text.vue"]]);const wW=Yt(bW),n2=["success","info","warning","error"],wr=ja({customClass:"",center:!1,dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",offset:16,zIndex:0,grouping:!1,repeatNum:1,appendTo:At?document.body:void 0}),SW=Je({customClass:{type:String,default:wr.customClass},center:{type:Boolean,default:wr.center},dangerouslyUseHTMLString:{type:Boolean,default:wr.dangerouslyUseHTMLString},duration:{type:Number,default:wr.duration},icon:{type:vr,default:wr.icon},id:{type:String,default:wr.id},message:{type:Be([String,Object,Function]),default:wr.message},onClose:{type:Be(Function),required:!1},showClose:{type:Boolean,default:wr.showClose},type:{type:String,values:n2,default:wr.type},offset:{type:Number,default:wr.offset},zIndex:{type:Number,default:wr.zIndex},grouping:{type:Boolean,default:wr.grouping},repeatNum:{type:Number,default:wr.repeatNum}}),xW={destroy:()=>!0},Cn=Qm([]),CW=e=>{const t=Cn.findIndex(i=>i.id===e),r=Cn[t];let n;return t>0&&(n=Cn[t-1]),{current:r,prev:n}},TW=e=>{const{prev:t}=CW(e);return t?t.vm.exposed.bottom.value:0},MW=(e,t)=>Cn.findIndex(n=>n.id===e)>0?20:t,AW=["id"],PW=["innerHTML"],EW=ie({name:"ElMessage"}),LW=ie({...EW,props:SW,emits:xW,setup(e,{expose:t}){const r=e,{Close:n}=G3,{ns:i,zIndex:a}=m4("message"),{currentZIndex:o,nextZIndex:s}=a,l=$(),u=$(!1),f=$(0);let c;const h=k(()=>r.type?r.type==="error"?"danger":r.type:"info"),d=k(()=>{const S=r.type;return{[i.bm("icon",S)]:S&&Wb[S]}}),v=k(()=>r.icon||Wb[r.type]||""),p=k(()=>TW(r.id)),m=k(()=>MW(r.id,r.offset)+p.value),g=k(()=>f.value+m.value),y=k(()=>({top:`${m.value}px`,zIndex:o.value}));function _(){r.duration!==0&&({stop:c}=hu(()=>{x()},r.duration))}function b(){c==null||c()}function x(){u.value=!1}function w({code:S}){S===hr.esc&&x()}return _t(()=>{_(),s(),u.value=!0}),we(()=>r.repeatNum,()=>{b(),_()}),xn(document,"keydown",w),ps(l,()=>{f.value=l.value.getBoundingClientRect().height}),t({visible:u,bottom:g,close:x}),(S,C)=>(G(),de(ti,{name:T(i).b("fade"),onBeforeLeave:S.onClose,onAfterLeave:C[0]||(C[0]=M=>S.$emit("destroy")),persisted:""},{default:j(()=>[qt(ee("div",{id:S.id,ref_key:"messageRef",ref:l,class:re([T(i).b(),{[T(i).m(S.type)]:S.type},T(i).is("center",S.center),T(i).is("closable",S.showClose),S.customClass]),style:ct(T(y)),role:"alert",onMouseenter:b,onMouseleave:_},[S.repeatNum>1?(G(),de(T(Nz),{key:0,value:S.repeatNum,type:T(h),class:re(T(i).e("badge"))},null,8,["value","type","class"])):Ae("v-if",!0),T(v)?(G(),de(T(Nt),{key:1,class:re([T(i).e("icon"),T(d)])},{default:j(()=>[(G(),de(Vt(T(v))))]),_:1},8,["class"])):Ae("v-if",!0),Ce(S.$slots,"default",{},()=>[S.dangerouslyUseHTMLString?(G(),ce(ft,{key:1},[Ae(" Caution here, message could've been compromised, never use user's input as message "),ee("p",{class:re(T(i).e("content")),innerHTML:S.message},null,10,PW)],2112)):(G(),ce("p",{key:0,class:re(T(i).e("content"))},be(S.message),3))]),S.showClose?(G(),de(T(Nt),{key:2,class:re(T(i).e("closeBtn")),onClick:ua(x,["stop"])},{default:j(()=>[Z(T(n))]),_:1},8,["class","onClick"])):Ae("v-if",!0)],46,AW),[[Kn,u.value]])]),_:3},8,["name","onBeforeLeave"]))}});var DW=Ke(LW,[["__file","message.vue"]]);let IW=1;const i2=e=>{const t=!e||ze(e)||la(e)||De(e)?{message:e}:e,r={...wr,...t};if(!r.appendTo)r.appendTo=document.body;else if(ze(r.appendTo)){let n=document.querySelector(r.appendTo);mo(n)||(n=document.body),r.appendTo=n}return r},OW=e=>{const t=Cn.indexOf(e);if(t===-1)return;Cn.splice(t,1);const{handler:r}=e;r.close()},RW=({appendTo:e,...t},r)=>{const n=`message_${IW++}`,i=t.onClose,a=document.createElement("div"),o={...t,id:n,onClose:()=>{i==null||i(),OW(f)},onDestroy:()=>{ld(null,a)}},s=Z(DW,o,De(o.message)||la(o.message)?{default:De(o.message)?o.message:()=>o.message}:null);s.appContext=r||Ms._context,ld(s,a),e.appendChild(a.firstElementChild);const l=s.component,f={id:n,vnode:s,vm:l,handler:{close:()=>{l.exposed.visible.value=!1}},props:s.component.props};return f},Ms=(e={},t)=>{if(!At)return{close:()=>{}};if(Rt(i1.max)&&Cn.length>=i1.max)return{close:()=>{}};const r=i2(e);if(r.grouping&&Cn.length){const i=Cn.find(({vnode:a})=>{var o;return((o=a.props)==null?void 0:o.message)===r.message});if(i)return i.props.repeatNum+=1,i.props.type=r.type,i.handler}const n=RW(r,t);return Cn.push(n),n.handler};n2.forEach(e=>{Ms[e]=(t={},r)=>{const n=i2(t);return Ms({...n,type:e},r)}});function kW(e){for(const t of Cn)(!e||e===t.props.type)&&t.handler.close()}Ms.closeAll=kW;Ms._context=null;const Wl=U3(Ms,"$message"),NW={id:"app"},BW={class:"grid-content header-color"},FW={class:"header-content"},$W=ee("div",{class:"brand"},[ee("a",{href:"#"},"frp")],-1),HW={class:"dark-switch"},zW=ee("span",null,"Proxies",-1),VW={id:"content"},WW=ee("footer",null,null,-1),GW=ie({__name:"App",setup(e){const t=XR(),r=$(t),n=mR(t),i=a=>{a==""&&window.open("https://github.com/fatedier/frp")};return(a,o)=>{const s=cV,l=H6,u=z6,f=$6,c=$A,h=xr("router-view"),d=FA;return G(),ce("div",NW,[ee("header",BW,[ee("div",FW,[$W,ee("div",HW,[Z(s,{modelValue:r.value,"onUpdate:modelValue":o[0]||(o[0]=v=>r.value=v),"inline-prompt":"","active-text":"Dark","inactive-text":"Light",onChange:T(n),style:{"--el-switch-on-color":"#444452","--el-switch-off-color":"#589ef8"}},null,8,["modelValue","onChange"])])])]),ee("section",null,[Z(d,null,{default:j(()=>[Z(c,{id:"side-nav",xs:24,md:4},{default:j(()=>[Z(f,{"default-active":"/",mode:"vertical",theme:"light",router:"false",onSelect:i},{default:j(()=>[Z(l,{index:"/"},{default:j(()=>[mt("Overview")]),_:1}),Z(u,{index:"/proxies"},{title:j(()=>[zW]),default:j(()=>[Z(l,{index:"/proxies/tcp"},{default:j(()=>[mt("TCP")]),_:1}),Z(l,{index:"/proxies/udp"},{default:j(()=>[mt("UDP")]),_:1}),Z(l,{index:"/proxies/http"},{default:j(()=>[mt("HTTP")]),_:1}),Z(l,{index:"/proxies/https"},{default:j(()=>[mt("HTTPS")]),_:1}),Z(l,{index:"/proxies/stcp"},{default:j(()=>[mt("STCP")]),_:1}),Z(l,{index:"/proxies/sudp"},{default:j(()=>[mt("SUDP")]),_:1})]),_:1}),Z(l,{index:""},{default:j(()=>[mt("Help")]),_:1})]),_:1})]),_:1}),Z(c,{xs:24,md:20},{default:j(()=>[ee("div",VW,[Z(h)])]),_:1})]),_:1})]),WW])}}});/*! +*/const c8=function(e,t){if(e&&e.addEventListener){const r=function(n){const i=f8(n);t&&Reflect.apply(t,this,[n,i])};e.addEventListener("wheel",r,{passive:!0})}},d8={beforeMount(e,t){c8(e,t.value)}},IA={modelValue:{type:[Number,String,Boolean],default:void 0},label:{type:[String,Boolean,Number,Object],default:void 0},indeterminate:Boolean,disabled:Boolean,checked:Boolean,name:{type:String,default:void 0},trueLabel:{type:[String,Number],default:void 0},falseLabel:{type:[String,Number],default:void 0},id:{type:String,default:void 0},controls:{type:String,default:void 0},border:Boolean,size:dh,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0}},OA={[wi]:e=>ze(e)||kt(e)||zr(e),change:e=>ze(e)||kt(e)||zr(e)},Ws=Symbol("checkboxGroupContextKey"),h8=({model:e,isChecked:t})=>{const r=Le(Ws,void 0),n=k(()=>{var a,o;const s=(a=r==null?void 0:r.max)==null?void 0:a.value,l=(o=r==null?void 0:r.min)==null?void 0:o.value;return!bs(s)&&e.value.length>=s&&!t.value||!bs(l)&&e.value.length<=l&&t.value});return{isDisabled:vh(k(()=>(r==null?void 0:r.disabled.value)||n.value)),isLimitDisabled:n}},v8=(e,{model:t,isLimitExceeded:r,hasOwnLabel:n,isDisabled:i,isLabeledByFormItem:a})=>{const o=Le(Ws,void 0),{formItem:s}=tf(),{emit:l}=it();function u(v){var p,m;return v===e.trueLabel||v===!0?(p=e.trueLabel)!=null?p:!0:(m=e.falseLabel)!=null?m:!1}function f(v,p){l("change",u(v),p)}function c(v){if(r.value)return;const p=v.target;l("change",u(p.checked),v)}async function h(v){r.value||!n.value&&!i.value&&a.value&&(v.composedPath().some(g=>g.tagName==="LABEL")||(t.value=u([!1,e.falseLabel].includes(t.value)),await Nt(),f(t.value,v)))}const d=k(()=>(o==null?void 0:o.validateEvent)||e.validateEvent);return be(()=>e.modelValue,()=>{d.value&&(s==null||s.validate("change").catch(v=>void 0))}),{handleChange:c,onClickRoot:h}},p8=e=>{const t=$(!1),{emit:r}=it(),n=Le(Ws,void 0),i=k(()=>bs(n)===!1),a=$(!1),o=k({get(){var s,l;return i.value?(s=n==null?void 0:n.modelValue)==null?void 0:s.value:(l=e.modelValue)!=null?l:t.value},set(s){var l,u;i.value&&_e(s)?(a.value=((l=n==null?void 0:n.max)==null?void 0:l.value)!==void 0&&s.length>(n==null?void 0:n.max.value)&&s.length>o.value.length,a.value===!1&&((u=n==null?void 0:n.changeEvent)==null||u.call(n,s))):(r(wi,s),t.value=s)}});return{model:o,isGroup:i,isLimitExceeded:a}},g8=(e,t,{model:r})=>{const n=Le(Ws,void 0),i=$(!1),a=k(()=>{const u=r.value;return zr(u)?u:_e(u)?qe(e.label)?u.map(Qe).some(f=>p3(f,e.label)):u.map(Qe).includes(e.label):u!=null?u===e.trueLabel:!!u}),o=xi(k(()=>{var u;return(u=n==null?void 0:n.size)==null?void 0:u.value}),{prop:!0}),s=xi(k(()=>{var u;return(u=n==null?void 0:n.size)==null?void 0:u.value})),l=k(()=>!!t.default||!_s(e.label));return{checkboxButtonSize:o,isChecked:a,isFocused:i,checkboxSize:s,hasOwnLabel:l}},m8=(e,{model:t})=>{function r(){_e(t.value)&&!t.value.includes(e.label)?t.value.push(e.label):t.value=e.trueLabel||!0}e.checked&&r()},RA=(e,t)=>{const{formItem:r}=tf(),{model:n,isGroup:i,isLimitExceeded:a}=p8(e),{isFocused:o,isChecked:s,checkboxButtonSize:l,checkboxSize:u,hasOwnLabel:f}=g8(e,t,{model:n}),{isDisabled:c}=h8({model:n,isChecked:s}),{inputId:h,isLabeledByFormItem:d}=Vy(e,{formItemContext:r,disableIdGeneration:f,disableIdManagement:i}),{handleChange:v,onClickRoot:p}=v8(e,{model:n,isLimitExceeded:a,hasOwnLabel:f,isDisabled:c,isLabeledByFormItem:d});return m8(e,{model:n}),{inputId:h,isLabeledByFormItem:d,isChecked:s,isDisabled:c,isFocused:o,checkboxButtonSize:l,checkboxSize:u,hasOwnLabel:f,model:n,handleChange:v,onClickRoot:p}},y8=["id","indeterminate","name","tabindex","disabled","true-value","false-value"],_8=["id","indeterminate","disabled","value","name","tabindex"],b8=ie({name:"ElCheckbox"}),w8=ie({...b8,props:IA,emits:OA,setup(e){const t=e,r=Ns(),{inputId:n,isLabeledByFormItem:i,isChecked:a,isDisabled:o,isFocused:s,checkboxSize:l,hasOwnLabel:u,model:f,handleChange:c,onClickRoot:h}=RA(t,r),d=Oe("checkbox"),v=k(()=>[d.b(),d.m(l.value),d.is("disabled",o.value),d.is("bordered",t.border),d.is("checked",a.value)]),p=k(()=>[d.e("input"),d.is("disabled",o.value),d.is("checked",a.value),d.is("indeterminate",t.indeterminate),d.is("focus",s.value)]);return(m,g)=>(G(),ve(Vt(!T(u)&&T(i)?"span":"label"),{class:re(T(v)),"aria-controls":m.indeterminate?m.controls:null,onClick:T(h)},{default:q(()=>[te("span",{class:re(T(p))},[m.trueLabel||m.falseLabel?qt((G(),ce("input",{key:0,id:T(n),"onUpdate:modelValue":g[0]||(g[0]=y=>Pt(f)?f.value=y:null),class:re(T(d).e("original")),type:"checkbox",indeterminate:m.indeterminate,name:m.name,tabindex:m.tabindex,disabled:T(o),"true-value":m.trueLabel,"false-value":m.falseLabel,onChange:g[1]||(g[1]=(...y)=>T(c)&&T(c)(...y)),onFocus:g[2]||(g[2]=y=>s.value=!0),onBlur:g[3]||(g[3]=y=>s.value=!1),onClick:g[4]||(g[4]=ua(()=>{},["stop"]))},null,42,y8)),[[sd,T(f)]]):qt((G(),ce("input",{key:1,id:T(n),"onUpdate:modelValue":g[5]||(g[5]=y=>Pt(f)?f.value=y:null),class:re(T(d).e("original")),type:"checkbox",indeterminate:m.indeterminate,disabled:T(o),value:m.label,name:m.name,tabindex:m.tabindex,onChange:g[6]||(g[6]=(...y)=>T(c)&&T(c)(...y)),onFocus:g[7]||(g[7]=y=>s.value=!0),onBlur:g[8]||(g[8]=y=>s.value=!1),onClick:g[9]||(g[9]=ua(()=>{},["stop"]))},null,42,_8)),[[sd,T(f)]]),te("span",{class:re(T(d).e("inner"))},null,2)],2),T(u)?(G(),ce("span",{key:0,class:re(T(d).e("label"))},[Ce(m.$slots,"default"),m.$slots.default?Ae("v-if",!0):(G(),ce(ft,{key:0},[pt(xe(m.label),1)],64))],2)):Ae("v-if",!0)]),_:3},8,["class","aria-controls","onClick"]))}});var S8=Ke(w8,[["__file","checkbox.vue"]]);const x8=["name","tabindex","disabled","true-value","false-value"],C8=["name","tabindex","disabled","value"],T8=ie({name:"ElCheckboxButton"}),M8=ie({...T8,props:IA,emits:OA,setup(e){const t=e,r=Ns(),{isFocused:n,isChecked:i,isDisabled:a,checkboxButtonSize:o,model:s,handleChange:l}=RA(t,r),u=Le(Ws,void 0),f=Oe("checkbox"),c=k(()=>{var d,v,p,m;const g=(v=(d=u==null?void 0:u.fill)==null?void 0:d.value)!=null?v:"";return{backgroundColor:g,borderColor:g,color:(m=(p=u==null?void 0:u.textColor)==null?void 0:p.value)!=null?m:"",boxShadow:g?`-1px 0 0 0 ${g}`:void 0}}),h=k(()=>[f.b("button"),f.bm("button",o.value),f.is("disabled",a.value),f.is("checked",i.value),f.is("focus",n.value)]);return(d,v)=>(G(),ce("label",{class:re(T(h))},[d.trueLabel||d.falseLabel?qt((G(),ce("input",{key:0,"onUpdate:modelValue":v[0]||(v[0]=p=>Pt(s)?s.value=p:null),class:re(T(f).be("button","original")),type:"checkbox",name:d.name,tabindex:d.tabindex,disabled:T(a),"true-value":d.trueLabel,"false-value":d.falseLabel,onChange:v[1]||(v[1]=(...p)=>T(l)&&T(l)(...p)),onFocus:v[2]||(v[2]=p=>n.value=!0),onBlur:v[3]||(v[3]=p=>n.value=!1),onClick:v[4]||(v[4]=ua(()=>{},["stop"]))},null,42,x8)),[[sd,T(s)]]):qt((G(),ce("input",{key:1,"onUpdate:modelValue":v[5]||(v[5]=p=>Pt(s)?s.value=p:null),class:re(T(f).be("button","original")),type:"checkbox",name:d.name,tabindex:d.tabindex,disabled:T(a),value:d.label,onChange:v[6]||(v[6]=(...p)=>T(l)&&T(l)(...p)),onFocus:v[7]||(v[7]=p=>n.value=!0),onBlur:v[8]||(v[8]=p=>n.value=!1),onClick:v[9]||(v[9]=ua(()=>{},["stop"]))},null,42,C8)),[[sd,T(s)]]),d.$slots.default||d.label?(G(),ce("span",{key:2,class:re(T(f).be("button","inner")),style:ct(T(i)?T(c):void 0)},[Ce(d.$slots,"default",{},()=>[pt(xe(d.label),1)])],6)):Ae("v-if",!0)],2))}});var kA=Ke(M8,[["__file","checkbox-button.vue"]]);const A8=Je({modelValue:{type:Be(Array),default:()=>[]},disabled:Boolean,min:Number,max:Number,size:dh,label:String,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0}}),P8={[wi]:e=>_e(e),change:e=>_e(e)},E8=ie({name:"ElCheckboxGroup"}),L8=ie({...E8,props:A8,emits:P8,setup(e,{emit:t}){const r=e,n=Oe("checkbox"),{formItem:i}=tf(),{inputId:a,isLabeledByFormItem:o}=Vy(r,{formItemContext:i}),s=async u=>{t(wi,u),await Nt(),t("change",u)},l=k({get(){return r.modelValue},set(u){s(u)}});return Dt(Ws,{...b3(Kd(r),["size","min","max","disabled","validateEvent","fill","textColor"]),modelValue:l,changeEvent:s}),be(()=>r.modelValue,()=>{r.validateEvent&&(i==null||i.validate("change").catch(u=>void 0))}),(u,f)=>{var c;return G(),ve(Vt(u.tag),{id:T(a),class:re(T(n).b("group")),role:"group","aria-label":T(o)?void 0:u.label||"checkbox-group","aria-labelledby":T(o)?(c=T(i))==null?void 0:c.labelId:void 0},{default:q(()=>[Ce(u.$slots,"default")]),_:3},8,["id","class","aria-label","aria-labelledby"])}}});var NA=Ke(L8,[["__file","checkbox-group.vue"]]);const Ms=Yt(S8,{CheckboxButton:kA,CheckboxGroup:NA});pa(kA);pa(NA);const D8=Je({type:{type:String,values:["success","info","warning","danger",""],default:""},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:{type:String,default:""},size:{type:String,values:$s,default:""},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),I8={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},O8=ie({name:"ElTag"}),R8=ie({...O8,props:D8,emits:I8,setup(e,{emit:t}){const r=e,n=xi(),i=Oe("tag"),a=k(()=>{const{type:l,hit:u,effect:f,closable:c,round:h}=r;return[i.b(),i.is("closable",c),i.m(l),i.m(n.value),i.m(f),i.is("hit",u),i.is("round",h)]}),o=l=>{t("close",l)},s=l=>{t("click",l)};return(l,u)=>l.disableTransitions?(G(),ce("span",{key:0,class:re(T(a)),style:ct({backgroundColor:l.color}),onClick:s},[te("span",{class:re(T(i).e("content"))},[Ce(l.$slots,"default")],2),l.closable?(G(),ve(T(Bt),{key:0,class:re(T(i).e("close")),onClick:ua(o,["stop"])},{default:q(()=>[Z(T(vd))]),_:1},8,["class","onClick"])):Ae("v-if",!0)],6)):(G(),ve(ti,{key:1,name:`${T(i).namespace.value}-zoom-in-center`,appear:""},{default:q(()=>[te("span",{class:re(T(a)),style:ct({backgroundColor:l.color}),onClick:s},[te("span",{class:re(T(i).e("content"))},[Ce(l.$slots,"default")],2),l.closable?(G(),ve(T(Bt),{key:0,class:re(T(i).e("close")),onClick:ua(o,["stop"])},{default:q(()=>[Z(T(vd))]),_:1},8,["class","onClick"])):Ae("v-if",!0)],6)]),_:3},8,["name"]))}});var k8=Ke(R8,[["__file","tag.vue"]]);const N8=Yt(k8),BA=Symbol("rowContextKey"),B8=["start","center","end","space-around","space-between","space-evenly"],F8=["top","middle","bottom"],$8=Je({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:B8,default:"start"},align:{type:String,values:F8}}),H8=ie({name:"ElRow"}),z8=ie({...H8,props:$8,setup(e){const t=e,r=Oe("row"),n=k(()=>t.gutter);Dt(BA,{gutter:n});const i=k(()=>{const o={};return t.gutter&&(o.marginRight=o.marginLeft=`-${t.gutter/2}px`),o}),a=k(()=>[r.b(),r.is(`justify-${t.justify}`,t.justify!=="start"),r.is(`align-${t.align}`,!!t.align)]);return(o,s)=>(G(),ve(Vt(o.tag),{class:re(T(a)),style:ct(T(i))},{default:q(()=>[Ce(o.$slots,"default")]),_:3},8,["class","style"]))}});var V8=Ke(z8,[["__file","row.vue"]]);const FA=Yt(V8),W8=Je({tag:{type:String,default:"div"},span:{type:Number,default:24},offset:{type:Number,default:0},pull:{type:Number,default:0},push:{type:Number,default:0},xs:{type:Be([Number,Object]),default:()=>ja({})},sm:{type:Be([Number,Object]),default:()=>ja({})},md:{type:Be([Number,Object]),default:()=>ja({})},lg:{type:Be([Number,Object]),default:()=>ja({})},xl:{type:Be([Number,Object]),default:()=>ja({})}}),G8=ie({name:"ElCol"}),U8=ie({...G8,props:W8,setup(e){const t=e,{gutter:r}=Le(BA,{gutter:k(()=>0)}),n=Oe("col"),i=k(()=>{const o={};return r.value&&(o.paddingLeft=o.paddingRight=`${r.value/2}px`),o}),a=k(()=>{const o=[];return["span","offset","pull","push"].forEach(u=>{const f=t[u];kt(f)&&(u==="span"?o.push(n.b(`${t[u]}`)):f>0&&o.push(n.b(`${u}-${t[u]}`)))}),["xs","sm","md","lg","xl"].forEach(u=>{kt(t[u])?o.push(n.b(`${u}-${t[u]}`)):qe(t[u])&&Object.entries(t[u]).forEach(([f,c])=>{o.push(f!=="span"?n.b(`${u}-${f}-${c}`):n.b(`${u}-${c}`))})}),r.value&&o.push(n.is("guttered")),[n.b(),o]});return(o,s)=>(G(),ve(Vt(o.tag),{class:re(T(a)),style:ct(T(i))},{default:q(()=>[Ce(o.$slots,"default")]),_:3},8,["class","style"]))}});var Y8=Ke(U8,[["__file","col.vue"]]);const $A=Yt(Y8),j8=ie({name:"ElCollapseTransition"}),q8=ie({...j8,setup(e){const t=Oe("collapse-transition"),r=i=>{i.style.maxHeight="",i.style.overflow=i.dataset.oldOverflow,i.style.paddingTop=i.dataset.oldPaddingTop,i.style.paddingBottom=i.dataset.oldPaddingBottom},n={beforeEnter(i){i.dataset||(i.dataset={}),i.dataset.oldPaddingTop=i.style.paddingTop,i.dataset.oldPaddingBottom=i.style.paddingBottom,i.style.height&&(i.dataset.elExistsHeight=i.style.height),i.style.maxHeight=0,i.style.paddingTop=0,i.style.paddingBottom=0},enter(i){requestAnimationFrame(()=>{i.dataset.oldOverflow=i.style.overflow,i.dataset.elExistsHeight?i.style.maxHeight=i.dataset.elExistsHeight:i.scrollHeight!==0?i.style.maxHeight=`${i.scrollHeight}px`:i.style.maxHeight=0,i.style.paddingTop=i.dataset.oldPaddingTop,i.style.paddingBottom=i.dataset.oldPaddingBottom,i.style.overflow="hidden"})},afterEnter(i){i.style.maxHeight="",i.style.overflow=i.dataset.oldOverflow},enterCancelled(i){r(i)},beforeLeave(i){i.dataset||(i.dataset={}),i.dataset.oldPaddingTop=i.style.paddingTop,i.dataset.oldPaddingBottom=i.style.paddingBottom,i.dataset.oldOverflow=i.style.overflow,i.style.maxHeight=`${i.scrollHeight}px`,i.style.overflow="hidden"},leave(i){i.scrollHeight!==0&&(i.style.maxHeight=0,i.style.paddingTop=0,i.style.paddingBottom=0)},afterLeave(i){r(i)},leaveCancelled(i){r(i)}};return(i,a)=>(G(),ve(ti,ei({name:T(t).b()},YI(n)),{default:q(()=>[Ce(i.$slots,"default")]),_:3},16,["name"]))}});var Bc=Ke(q8,[["__file","collapse-transition.vue"]]);Bc.install=e=>{e.component(Bc.name,Bc)};const K8=Bc,X8=Je({mask:{type:Boolean,default:!0},customMaskEvent:{type:Boolean,default:!1},overlayClass:{type:Be([String,Array,Object])},zIndex:{type:Be([String,Number])}}),Z8={click:e=>e instanceof MouseEvent},Q8="overlay";var J8=ie({name:"ElOverlay",props:X8,emits:Z8,setup(e,{slots:t,emit:r}){const n=Oe(Q8),i=l=>{r("click",l)},{onClick:a,onMousedown:o,onMouseup:s}=XM(e.customMaskEvent?void 0:i);return()=>e.mask?Z("div",{class:[n.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:a,onMousedown:o,onMouseup:s},[Ce(t,"default")],Lc.STYLE|Lc.CLASS|Lc.PROPS,["onClick","onMouseup","onMousedown"]):Te("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[Ce(t,"default")])}});const e6=J8,HA=Symbol("dialogInjectionKey"),zA=Je({center:Boolean,alignCenter:Boolean,closeIcon:{type:vr},customClass:{type:String,default:""},draggable:Boolean,fullscreen:Boolean,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),t6={close:()=>!0},r6=["aria-level"],n6=["aria-label"],i6=["id"],a6=ie({name:"ElDialogContent"}),o6=ie({...a6,props:zA,emits:t6,setup(e){const t=e,{t:r}=Hs(),{Close:n}=W3,{dialogRef:i,headerRef:a,bodyId:o,ns:s,style:l}=Le(HA),{focusTrapRef:u}=Le(pA),f=k(()=>[s.b(),s.is("fullscreen",t.fullscreen),s.is("draggable",t.draggable),s.is("align-center",t.alignCenter),{[s.m("center")]:t.center},t.customClass]),c=Y3(u,i),h=k(()=>t.draggable);return K3(i,a,h),(d,v)=>(G(),ce("div",{ref:T(c),class:re(T(f)),style:ct(T(l)),tabindex:"-1"},[te("header",{ref_key:"headerRef",ref:a,class:re(T(s).e("header"))},[Ce(d.$slots,"header",{},()=>[te("span",{role:"heading","aria-level":d.ariaLevel,class:re(T(s).e("title"))},xe(d.title),11,r6)]),d.showClose?(G(),ce("button",{key:0,"aria-label":T(r)("el.dialog.close"),class:re(T(s).e("headerbtn")),type:"button",onClick:v[0]||(v[0]=p=>d.$emit("close"))},[Z(T(Bt),{class:re(T(s).e("close"))},{default:q(()=>[(G(),ve(Vt(d.closeIcon||T(n))))]),_:1},8,["class"])],10,n6)):Ae("v-if",!0)],2),te("div",{id:T(o),class:re(T(s).e("body"))},[Ce(d.$slots,"default")],10,i6),d.$slots.footer?(G(),ce("footer",{key:0,class:re(T(s).e("footer"))},[Ce(d.$slots,"footer")],2)):Ae("v-if",!0)],6))}});var s6=Ke(o6,[["__file","dialog-content.vue"]]);const l6=Je({...zA,appendToBody:Boolean,appendTo:{type:Be(String),default:"body"},beforeClose:{type:Be(Function)},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},openDelay:{type:Number,default:0},closeDelay:{type:Number,default:0},top:{type:String},modelValue:Boolean,modalClass:String,width:{type:[String,Number]},zIndex:{type:Number},trapFocus:{type:Boolean,default:!1},headerAriaLevel:{type:String,default:"2"}}),u6={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[wi]:e=>zr(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},f6=(e,t)=>{var r;const i=it().emit,{nextZIndex:a}=zy();let o="";const s=xu(),l=xu(),u=$(!1),f=$(!1),c=$(!1),h=$((r=e.zIndex)!=null?r:a());let d,v;const p=hh("namespace",Bl),m=k(()=>{const N={},H=`--${p.value}-dialog`;return e.fullscreen||(e.top&&(N[`${H}-margin-top`]=e.top),e.width&&(N[`${H}-width`]=Zn(e.width))),N}),g=k(()=>e.alignCenter?{display:"flex"}:{});function y(){i("opened")}function _(){i("closed"),i(wi,!1),e.destroyOnClose&&(c.value=!1)}function b(){i("close")}function x(){v==null||v(),d==null||d(),e.openDelay&&e.openDelay>0?{stop:d}=hu(()=>M(),e.openDelay):M()}function w(){d==null||d(),v==null||v(),e.closeDelay&&e.closeDelay>0?{stop:v}=hu(()=>A(),e.closeDelay):A()}function S(){function N(H){H||(f.value=!0,u.value=!1)}e.beforeClose?e.beforeClose(N):w()}function C(){e.closeOnClickModal&&S()}function M(){At&&(u.value=!0)}function A(){u.value=!1}function P(){i("openAutoFocus")}function E(){i("closeAutoFocus")}function L(N){var H;((H=N.detail)==null?void 0:H.focusReason)==="pointer"&&N.preventDefault()}e.lockScroll&&t5(u);function O(){e.closeOnPressEscape&&S()}return be(()=>e.modelValue,N=>{N?(f.value=!1,x(),c.value=!0,h.value=MM(e.zIndex)?a():h.value++,Nt(()=>{i("open"),t.value&&(t.value.scrollTop=0)})):u.value&&w()}),be(()=>e.fullscreen,N=>{t.value&&(N?(o=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=o)}),_t(()=>{e.modelValue&&(u.value=!0,c.value=!0,x())}),{afterEnter:y,afterLeave:_,beforeLeave:b,handleClose:S,onModalClick:C,close:w,doClose:A,onOpenAutoFocus:P,onCloseAutoFocus:E,onCloseRequested:O,onFocusoutPrevented:L,titleId:s,bodyId:l,closed:f,style:m,overlayDialogStyle:g,rendered:c,visible:u,zIndex:h}},c6=["aria-label","aria-labelledby","aria-describedby"],d6=ie({name:"ElDialog",inheritAttrs:!1}),h6=ie({...d6,props:l6,emits:u6,setup(e,{expose:t}){const r=e,n=Ns();bu({scope:"el-dialog",from:"the title slot",replacement:"the header slot",version:"3.0.0",ref:"https://element-plus.org/en-US/component/dialog.html#slots"},k(()=>!!n.title)),bu({scope:"el-dialog",from:"custom-class",replacement:"class",version:"2.3.0",ref:"https://element-plus.org/en-US/component/dialog.html#attributes",type:"Attribute"},k(()=>!!r.customClass));const i=Oe("dialog"),a=$(),o=$(),s=$(),{visible:l,titleId:u,bodyId:f,style:c,overlayDialogStyle:h,rendered:d,zIndex:v,afterEnter:p,afterLeave:m,beforeLeave:g,handleClose:y,onModalClick:_,onOpenAutoFocus:b,onCloseAutoFocus:x,onCloseRequested:w,onFocusoutPrevented:S}=f6(r,a);Dt(HA,{dialogRef:a,headerRef:o,bodyId:f,ns:i,rendered:d,style:c});const C=XM(_),M=k(()=>r.draggable&&!r.fullscreen);return t({visible:l,dialogContentRef:s}),(A,P)=>(G(),ve(MT,{to:A.appendTo,disabled:A.appendTo!=="body"?!1:!A.appendToBody},[Z(ti,{name:"dialog-fade",onAfterEnter:T(p),onAfterLeave:T(m),onBeforeLeave:T(g),persisted:""},{default:q(()=>[qt(Z(T(e6),{"custom-mask-event":"",mask:A.modal,"overlay-class":A.modalClass,"z-index":T(v)},{default:q(()=>[te("div",{role:"dialog","aria-modal":"true","aria-label":A.title||void 0,"aria-labelledby":A.title?void 0:T(u),"aria-describedby":T(f),class:re(`${T(i).namespace.value}-overlay-dialog`),style:ct(T(h)),onClick:P[0]||(P[0]=(...E)=>T(C).onClick&&T(C).onClick(...E)),onMousedown:P[1]||(P[1]=(...E)=>T(C).onMousedown&&T(C).onMousedown(...E)),onMouseup:P[2]||(P[2]=(...E)=>T(C).onMouseup&&T(C).onMouseup(...E))},[Z(T(mA),{loop:"",trapped:T(l),"focus-start-el":"container",onFocusAfterTrapped:T(b),onFocusAfterReleased:T(x),onFocusoutPrevented:T(S),onReleaseRequested:T(w)},{default:q(()=>[T(d)?(G(),ve(s6,ei({key:0,ref_key:"dialogContentRef",ref:s},A.$attrs,{"custom-class":A.customClass,center:A.center,"align-center":A.alignCenter,"close-icon":A.closeIcon,draggable:T(M),fullscreen:A.fullscreen,"show-close":A.showClose,title:A.title,"aria-level":A.headerAriaLevel,onClose:T(y)}),UI({header:q(()=>[A.$slots.title?Ce(A.$slots,"title",{key:1}):Ce(A.$slots,"header",{key:0,close:T(y),titleId:T(u),titleClass:T(i).e("title")})]),default:q(()=>[Ce(A.$slots,"default")]),_:2},[A.$slots.footer?{name:"footer",fn:q(()=>[Ce(A.$slots,"footer")])}:void 0]),1040,["custom-class","center","align-center","close-icon","draggable","fullscreen","show-close","title","aria-level","onClose"])):Ae("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,c6)]),_:3},8,["mask","overlay-class","z-index"]),[[Kn,T(l)]])]),_:3},8,["onAfterEnter","onAfterLeave","onBeforeLeave"])],8,["to","disabled"]))}});var v6=Ke(h6,[["__file","dialog.vue"]]);const p6=Yt(v6),g6=Je({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:Be(String),default:"solid"}}),m6=ie({name:"ElDivider"}),y6=ie({...m6,props:g6,setup(e){const t=e,r=Oe("divider"),n=k(()=>r.cssVar({"border-style":t.borderStyle}));return(i,a)=>(G(),ce("div",{class:re([T(r).b(),T(r).m(i.direction)]),style:ct(T(n)),role:"separator"},[i.$slots.default&&i.direction!=="vertical"?(G(),ce("div",{key:0,class:re([T(r).e("text"),T(r).is(i.contentPosition)])},[Ce(i.$slots,"default")],2)):Ae("v-if",!0)],6))}});var _6=Ke(y6,[["__file","divider.vue"]]);const VA=Yt(_6);let b6=class{constructor(t,r){this.parent=t,this.domNode=r,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(t){t===this.subMenuItems.length?t=0:t<0&&(t=this.subMenuItems.length-1),this.subMenuItems[t].focus(),this.subIndex=t}addListeners(){const t=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,r=>{r.addEventListener("keydown",n=>{let i=!1;switch(n.code){case hr.down:{this.gotoSubIndex(this.subIndex+1),i=!0;break}case hr.up:{this.gotoSubIndex(this.subIndex-1),i=!0;break}case hr.tab:{Ac(t,"mouseleave");break}case hr.enter:case hr.space:{i=!0,n.currentTarget.click();break}}return i&&(n.preventDefault(),n.stopPropagation()),!1})})}},w6=class{constructor(t,r){this.domNode=t,this.submenu=null,this.submenu=null,this.init(r)}init(t){this.domNode.setAttribute("tabindex","0");const r=this.domNode.querySelector(`.${t}-menu`);r&&(this.submenu=new b6(this,r)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",t=>{let r=!1;switch(t.code){case hr.down:{Ac(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),r=!0;break}case hr.up:{Ac(t.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),r=!0;break}case hr.tab:{Ac(t.currentTarget,"mouseleave");break}case hr.enter:case hr.space:{r=!0,t.currentTarget.click();break}}r&&t.preventDefault()})}},S6=class{constructor(t,r){this.domNode=t,this.init(r)}init(t){const r=this.domNode.childNodes;Array.from(r).forEach(n=>{n.nodeType===1&&new w6(n,t)})}};const x6=ie({name:"ElMenuCollapseTransition",setup(){const e=Oe("menu");return{listeners:{onBeforeEnter:r=>r.style.opacity="0.2",onEnter(r,n){Za(r,`${e.namespace.value}-opacity-transition`),r.style.opacity="1",n()},onAfterEnter(r){so(r,`${e.namespace.value}-opacity-transition`),r.style.opacity=""},onBeforeLeave(r){r.dataset||(r.dataset={}),oo(r,e.m("collapse"))?(so(r,e.m("collapse")),r.dataset.oldOverflow=r.style.overflow,r.dataset.scrollWidth=r.clientWidth.toString(),Za(r,e.m("collapse"))):(Za(r,e.m("collapse")),r.dataset.oldOverflow=r.style.overflow,r.dataset.scrollWidth=r.clientWidth.toString(),so(r,e.m("collapse"))),r.style.width=`${r.scrollWidth}px`,r.style.overflow="hidden"},onLeave(r){Za(r,"horizontal-collapse-transition"),r.style.width=`${r.dataset.scrollWidth}px`}}}}});function C6(e,t,r,n,i,a){return G(),ve(ti,ei({mode:"out-in"},e.listeners),{default:q(()=>[Ce(e.$slots,"default")]),_:3},16)}var T6=Ke(x6,[["render",C6],["__file","menu-collapse-transition.vue"]]);function WA(e,t){const r=k(()=>{let i=e.parent;const a=[t.value];for(;i.type.name!=="ElMenu";)i.props.index&&a.unshift(i.props.index),i=i.parent;return a});return{parentMenu:k(()=>{let i=e.parent;for(;i&&!["ElMenu","ElSubMenu"].includes(i.type.name);)i=i.parent;return i}),indexPath:r}}function M6(e){return k(()=>{const r=e.backgroundColor;return r?new SA(r).shade(20).toString():""})}const GA=(e,t)=>{const r=Oe("menu");return k(()=>r.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":M6(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},A6=Je({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,disabled:Boolean,popperAppendToBody:{type:Boolean,default:void 0},teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:vr},expandOpenIcon:{type:vr},collapseCloseIcon:{type:vr},collapseOpenIcon:{type:vr}}),Of="ElSubMenu";var jy=ie({name:Of,props:A6,setup(e,{slots:t,expose:r}){bu({from:"popper-append-to-body",replacement:"teleported",scope:Of,version:"2.3.0",ref:"https://element-plus.org/en-US/component/menu.html#submenu-attributes"},k(()=>e.popperAppendToBody!==void 0));const n=it(),{indexPath:i,parentMenu:a}=WA(n,k(()=>e.index)),o=Oe("menu"),s=Oe("sub-menu"),l=Le("rootMenu");l||bi(Of,"can not inject root menu");const u=Le(`subMenu:${a.value.uid}`);u||bi(Of,"can not inject sub menu");const f=$({}),c=$({});let h;const d=$(!1),v=$(),p=$(null),m=k(()=>C.value==="horizontal"&&y.value?"bottom-start":"right-start"),g=k(()=>C.value==="horizontal"&&y.value||C.value==="vertical"&&!l.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?w.value?e.expandOpenIcon:e.expandCloseIcon:EM:e.collapseCloseIcon&&e.collapseOpenIcon?w.value?e.collapseOpenIcon:e.collapseCloseIcon:Ey),y=k(()=>u.level===0),_=k(()=>{var z;const ee=(z=e.teleported)!=null?z:e.popperAppendToBody;return ee===void 0?y.value:ee}),b=k(()=>l.props.collapse?`${o.namespace.value}-zoom-in-left`:`${o.namespace.value}-zoom-in-top`),x=k(()=>C.value==="horizontal"&&y.value?["bottom-start","bottom-end","top-start","top-end","right-start","left-start"]:["right-start","right","right-end","left-start","bottom-start","bottom-end","top-start","top-end"]),w=k(()=>l.openedMenus.includes(e.index)),S=k(()=>{let z=!1;return Object.values(f.value).forEach(ee=>{ee.active&&(z=!0)}),Object.values(c.value).forEach(ee=>{ee.active&&(z=!0)}),z}),C=k(()=>l.props.mode),M=Ln({index:e.index,indexPath:i,active:S}),A=GA(l.props,u.level+1),P=k(()=>{var z;return(z=e.popperOffset)!=null?z:l.props.popperOffset}),E=k(()=>{var z;return(z=e.popperClass)!=null?z:l.props.popperClass}),L=k(()=>{var z;return(z=e.showTimeout)!=null?z:l.props.showTimeout}),O=k(()=>{var z;return(z=e.hideTimeout)!=null?z:l.props.hideTimeout}),N=()=>{var z,ee,J;return(J=(ee=(z=p.value)==null?void 0:z.popperRef)==null?void 0:ee.popperInstanceRef)==null?void 0:J.destroy()},H=z=>{z||N()},V=()=>{l.props.menuTrigger==="hover"&&l.props.mode==="horizontal"||l.props.collapse&&l.props.mode==="vertical"||e.disabled||l.handleSubMenuClick({index:e.index,indexPath:i.value,active:S.value})},U=(z,ee=L.value)=>{var J;if(z.type!=="focus"){if(l.props.menuTrigger==="click"&&l.props.mode==="horizontal"||!l.props.collapse&&l.props.mode==="vertical"||e.disabled){u.mouseInChild.value=!0;return}u.mouseInChild.value=!0,h==null||h(),{stop:h}=hu(()=>{l.openMenu(e.index,i.value)},ee),_.value&&((J=a.value.vnode.el)==null||J.dispatchEvent(new MouseEvent("mouseenter")))}},F=(z=!1)=>{var ee;if(l.props.menuTrigger==="click"&&l.props.mode==="horizontal"||!l.props.collapse&&l.props.mode==="vertical"){u.mouseInChild.value=!1;return}h==null||h(),u.mouseInChild.value=!1,{stop:h}=hu(()=>!d.value&&l.closeMenu(e.index,i.value),O.value),_.value&&z&&((ee=u.handleMouseleave)==null||ee.call(u,!0))};be(()=>l.props.collapse,z=>H(!!z));{const z=J=>{c.value[J.index]=J},ee=J=>{delete c.value[J.index]};Dt(`subMenu:${n.uid}`,{addSubMenu:z,removeSubMenu:ee,handleMouseleave:F,mouseInChild:d,level:u.level+1})}return r({opened:w}),_t(()=>{l.addSubMenu(M),u.addSubMenu(M)}),tr(()=>{u.removeSubMenu(M),l.removeSubMenu(M)}),()=>{var z;const ee=[(z=t.title)==null?void 0:z.call(t),Te(Bt,{class:s.e("icon-arrow"),style:{transform:w.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&l.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>ze(g.value)?Te(n.appContext.components[g.value]):Te(g.value)})],J=l.isMenuPopup?Te(Vs,{ref:p,visible:w.value,effect:"light",pure:!0,offset:P.value,showArrow:!1,persistent:!0,popperClass:E.value,placement:m.value,teleported:_.value,fallbackPlacements:x.value,transition:b.value,gpuAcceleration:!1},{content:()=>{var me;return Te("div",{class:[o.m(C.value),o.m("popup-container"),E.value],onMouseenter:we=>U(we,100),onMouseleave:()=>F(!0),onFocus:we=>U(we,100)},[Te("ul",{class:[o.b(),o.m("popup"),o.m(`popup-${m.value}`)],style:A.value},[(me=t.default)==null?void 0:me.call(t)])])},default:()=>Te("div",{class:s.e("title"),onClick:V},ee)}):Te(ft,{},[Te("div",{class:s.e("title"),ref:v,onClick:V},ee),Te(K8,{},{default:()=>{var me;return qt(Te("ul",{role:"menu",class:[o.b(),o.m("inline")],style:A.value},[(me=t.default)==null?void 0:me.call(t)]),[[Kn,w.value]])}})]);return Te("li",{class:[s.b(),s.is("active",S.value),s.is("opened",w.value),s.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:w.value,onMouseenter:U,onMouseleave:()=>F(),onFocus:U},[J])}}});const P6=Je({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:Be(Array),default:()=>ja([])},uniqueOpened:Boolean,router:Boolean,menuTrigger:{type:String,values:["hover","click"],default:"hover"},collapse:Boolean,backgroundColor:String,textColor:String,activeTextColor:String,closeOnClickOutside:Boolean,collapseTransition:{type:Boolean,default:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:vr,default:()=>B3},popperEffect:{type:String,values:["dark","light"],default:"dark"},popperClass:String,showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300}}),uv=e=>Array.isArray(e)&&e.every(t=>ze(t)),E6={close:(e,t)=>ze(e)&&uv(t),open:(e,t)=>ze(e)&&uv(t),select:(e,t,r,n)=>ze(e)&&uv(t)&&qe(r)&&(n===void 0||n instanceof Promise)};var L6=ie({name:"ElMenu",props:P6,emits:E6,setup(e,{emit:t,slots:r,expose:n}){const i=it(),a=i.appContext.config.globalProperties.$router,o=$(),s=Oe("menu"),l=Oe("sub-menu"),u=$(-1),f=$(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),c=$(e.defaultActive),h=$({}),d=$({}),v=k(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),p=()=>{const L=c.value&&h.value[c.value];if(!L||e.mode==="horizontal"||e.collapse)return;L.indexPath.forEach(N=>{const H=d.value[N];H&&m(N,H.indexPath)})},m=(L,O)=>{f.value.includes(L)||(e.uniqueOpened&&(f.value=f.value.filter(N=>O.includes(N))),f.value.push(L),t("open",L,O))},g=L=>{const O=f.value.indexOf(L);O!==-1&&f.value.splice(O,1)},y=(L,O)=>{g(L),t("close",L,O)},_=({index:L,indexPath:O})=>{f.value.includes(L)?y(L,O):m(L,O)},b=L=>{(e.mode==="horizontal"||e.collapse)&&(f.value=[]);const{index:O,indexPath:N}=L;if(!(_s(O)||_s(N)))if(e.router&&a){const H=L.route||O,V=a.push(H).then(U=>(U||(c.value=O),U));t("select",O,N,{index:O,indexPath:N,route:H},V)}else c.value=O,t("select",O,N,{index:O,indexPath:N})},x=L=>{const O=h.value,N=O[L]||c.value&&O[c.value]||O[e.defaultActive];N?c.value=N.index:c.value=L},w=()=>{var L,O;if(!o.value)return-1;const N=Array.from((O=(L=o.value)==null?void 0:L.childNodes)!=null?O:[]).filter(J=>J.nodeName!=="#comment"&&(J.nodeName!=="#text"||J.nodeValue)),H=64,V=Number.parseInt(getComputedStyle(o.value).paddingLeft,10),U=Number.parseInt(getComputedStyle(o.value).paddingRight,10),F=o.value.clientWidth-V-U;let z=0,ee=0;return N.forEach((J,me)=>{z+=J.offsetWidth||0,z<=F-H&&(ee=me+1)}),ee===N.length?-1:ee},S=L=>d.value[L].indexPath,C=(L,O=33.34)=>{let N;return()=>{N&&clearTimeout(N),N=setTimeout(()=>{L()},O)}};let M=!0;const A=()=>{const L=()=>{u.value=-1,Nt(()=>{u.value=w()})};M?L():C(L)(),M=!1};be(()=>e.defaultActive,L=>{h.value[L]||(c.value=""),x(L)}),be(()=>e.collapse,L=>{L&&(f.value=[])}),be(h.value,p);let P;na(()=>{e.mode==="horizontal"&&e.ellipsis?P=ms(o,A).stop:P==null||P()});const E=$(!1);{const L=V=>{d.value[V.index]=V},O=V=>{delete d.value[V.index]};Dt("rootMenu",Ln({props:e,openedMenus:f,items:h,subMenus:d,activeIndex:c,isMenuPopup:v,addMenuItem:V=>{h.value[V.index]=V},removeMenuItem:V=>{delete h.value[V.index]},addSubMenu:L,removeSubMenu:O,openMenu:m,closeMenu:y,handleMenuItemClick:b,handleSubMenuClick:_})),Dt(`subMenu:${i.uid}`,{addSubMenu:L,removeSubMenu:O,mouseInChild:E,level:0})}return _t(()=>{e.mode==="horizontal"&&new S6(i.vnode.el,s.namespace.value)}),n({open:O=>{const{indexPath:N}=d.value[O];N.forEach(H=>m(H,N))},close:g,handleResize:A}),()=>{var L,O;let N=(O=(L=r.default)==null?void 0:L.call(r))!=null?O:[];const H=[];if(e.mode==="horizontal"&&o.value){const z=Dc(N),ee=u.value===-1?z:z.slice(0,u.value),J=u.value===-1?[]:z.slice(u.value);J!=null&&J.length&&e.ellipsis&&(N=ee,H.push(Te(jy,{index:"sub-menu-more",class:l.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>Te(Bt,{class:l.e("icon-more")},{default:()=>Te(e.ellipsisIcon)}),default:()=>J})))}const V=GA(e,0),U=e.closeOnClickOutside?[[CA,()=>{f.value.length&&(E.value||(f.value.forEach(z=>t("close",z,S(z))),f.value=[]))}]]:[],F=qt(Te("ul",{key:String(e.collapse),role:"menubar",ref:o,style:V.value,class:{[s.b()]:!0,[s.m(e.mode)]:!0,[s.m("collapse")]:e.collapse}},[...N,...H]),U);return e.collapseTransition&&e.mode==="vertical"?Te(T6,()=>F):F}}});const D6=Je({index:{type:Be([String,null]),default:null},route:{type:Be([String,Object])},disabled:Boolean}),I6={click:e=>ze(e.index)&&Array.isArray(e.indexPath)},fv="ElMenuItem",O6=ie({name:fv,components:{ElTooltip:Vs},props:D6,emits:I6,setup(e,{emit:t}){const r=it(),n=Le("rootMenu"),i=Oe("menu"),a=Oe("menu-item");n||bi(fv,"can not inject root menu");const{parentMenu:o,indexPath:s}=WA(r,wn(e,"index")),l=Le(`subMenu:${o.value.uid}`);l||bi(fv,"can not inject sub menu");const u=k(()=>e.index===n.activeIndex),f=Ln({index:e.index,indexPath:s,active:u}),c=()=>{e.disabled||(n.handleMenuItemClick({index:e.index,indexPath:s.value,route:e.route}),t("click",f))};return _t(()=>{l.addSubMenu(f),n.addMenuItem(f)}),tr(()=>{l.removeSubMenu(f),n.removeMenuItem(f)}),{parentMenu:o,rootMenu:n,active:u,nsMenu:i,nsMenuItem:a,handleClick:c}}});function R6(e,t,r,n,i,a){const o=xr("el-tooltip");return G(),ce("li",{class:re([e.nsMenuItem.b(),e.nsMenuItem.is("active",e.active),e.nsMenuItem.is("disabled",e.disabled)]),role:"menuitem",tabindex:"-1",onClick:t[0]||(t[0]=(...s)=>e.handleClick&&e.handleClick(...s))},[e.parentMenu.type.name==="ElMenu"&&e.rootMenu.props.collapse&&e.$slots.title?(G(),ve(o,{key:0,effect:e.rootMenu.props.popperEffect,placement:"right","fallback-placements":["left"],persistent:""},{content:q(()=>[Ce(e.$slots,"title")]),default:q(()=>[te("div",{class:re(e.nsMenu.be("tooltip","trigger"))},[Ce(e.$slots,"default")],2)]),_:3},8,["effect"])):(G(),ce(ft,{key:1},[Ce(e.$slots,"default"),Ce(e.$slots,"title")],64))],2)}var UA=Ke(O6,[["render",R6],["__file","menu-item.vue"]]);const k6={title:String},N6="ElMenuItemGroup",B6=ie({name:N6,props:k6,setup(){return{ns:Oe("menu-item-group")}}});function F6(e,t,r,n,i,a){return G(),ce("li",{class:re(e.ns.b())},[te("div",{class:re(e.ns.e("title"))},[e.$slots.title?Ce(e.$slots,"title",{key:1}):(G(),ce(ft,{key:0},[pt(xe(e.title),1)],64))],2),te("ul",null,[Ce(e.$slots,"default")])],2)}var YA=Ke(B6,[["render",F6],["__file","menu-item-group.vue"]]);const $6=Yt(L6,{MenuItem:UA,MenuItemGroup:YA,SubMenu:jy}),H6=pa(UA);pa(YA);const z6=pa(jy),V6=Je({icon:{type:vr,default:()=>D3},title:String,content:{type:String,default:""}}),W6={back:()=>!0},G6=["aria-label"],U6=ie({name:"ElPageHeader"}),Y6=ie({...U6,props:V6,emits:W6,setup(e,{emit:t}){const r=Ns(),{t:n}=Hs(),i=Oe("page-header"),a=k(()=>[i.b(),{[i.m("has-breadcrumb")]:!!r.breadcrumb,[i.m("has-extra")]:!!r.extra,[i.is("contentful")]:!!r.default}]);function o(){t("back")}return(s,l)=>(G(),ce("div",{class:re(T(a))},[s.$slots.breadcrumb?(G(),ce("div",{key:0,class:re(T(i).e("breadcrumb"))},[Ce(s.$slots,"breadcrumb")],2)):Ae("v-if",!0),te("div",{class:re(T(i).e("header"))},[te("div",{class:re(T(i).e("left"))},[te("div",{class:re(T(i).e("back")),role:"button",tabindex:"0",onClick:o},[s.icon||s.$slots.icon?(G(),ce("div",{key:0,"aria-label":s.title||T(n)("el.pageHeader.title"),class:re(T(i).e("icon"))},[Ce(s.$slots,"icon",{},()=>[s.icon?(G(),ve(T(Bt),{key:0},{default:q(()=>[(G(),ve(Vt(s.icon)))]),_:1})):Ae("v-if",!0)])],10,G6)):Ae("v-if",!0),te("div",{class:re(T(i).e("title"))},[Ce(s.$slots,"title",{},()=>[pt(xe(s.title||T(n)("el.pageHeader.title")),1)])],2)],2),Z(T(VA),{direction:"vertical"}),te("div",{class:re(T(i).e("content"))},[Ce(s.$slots,"content",{},()=>[pt(xe(s.content),1)])],2)],2),s.$slots.extra?(G(),ce("div",{key:0,class:re(T(i).e("extra"))},[Ce(s.$slots,"extra")],2)):Ae("v-if",!0)],2),s.$slots.default?(G(),ce("div",{key:1,class:re(T(i).e("main"))},[Ce(s.$slots,"default")],2)):Ae("v-if",!0)],2))}});var j6=Ke(Y6,[["__file","page-header.vue"]]);const q6=Yt(j6),K6=Je({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:pg,default:"primary"},cancelButtonType:{type:String,values:pg,default:"text"},icon:{type:vr,default:()=>$3},iconColor:{type:String,default:"#f90"},hideIcon:{type:Boolean,default:!1},hideAfter:{type:Number,default:200},teleported:md.teleported,persistent:md.persistent,width:{type:[String,Number],default:150}}),X6={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent},Z6=ie({name:"ElPopconfirm"}),Q6=ie({...Z6,props:K6,emits:X6,setup(e,{emit:t}){const r=e,{t:n}=Hs(),i=Oe("popconfirm"),a=$(),o=()=>{var h,d;(d=(h=a.value)==null?void 0:h.onClose)==null||d.call(h)},s=k(()=>({width:Zn(r.width)})),l=h=>{t("confirm",h),o()},u=h=>{t("cancel",h),o()},f=k(()=>r.confirmButtonText||n("el.popconfirm.confirmButtonText")),c=k(()=>r.cancelButtonText||n("el.popconfirm.cancelButtonText"));return(h,d)=>(G(),ve(T(Vs),ei({ref_key:"tooltipRef",ref:a,trigger:"click",effect:"light"},h.$attrs,{"popper-class":`${T(i).namespace.value}-popover`,"popper-style":T(s),teleported:h.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":h.hideAfter,persistent:h.persistent}),{content:q(()=>[te("div",{class:re(T(i).b())},[te("div",{class:re(T(i).e("main"))},[!h.hideIcon&&h.icon?(G(),ve(T(Bt),{key:0,class:re(T(i).e("icon")),style:ct({color:h.iconColor})},{default:q(()=>[(G(),ve(Vt(h.icon)))]),_:1},8,["class","style"])):Ae("v-if",!0),pt(" "+xe(h.title),1)],2),te("div",{class:re(T(i).e("action"))},[Z(T(yg),{size:"small",type:h.cancelButtonType==="text"?"":h.cancelButtonType,text:h.cancelButtonType==="text",onClick:u},{default:q(()=>[pt(xe(T(c)),1)]),_:1},8,["type","text"]),Z(T(yg),{size:"small",type:h.confirmButtonType==="text"?"":h.confirmButtonType,text:h.confirmButtonType==="text",onClick:l},{default:q(()=>[pt(xe(T(f)),1)]),_:1},8,["type","text"])],2)],2)]),default:q(()=>[h.$slots.reference?Ce(h.$slots,"reference",{key:0}):Ae("v-if",!0)]),_:3},16,["popper-class","popper-style","teleported","hide-after","persistent"]))}});var J6=Ke(Q6,[["__file","popconfirm.vue"]]);const eV=Yt(J6),tV=Je({modelValue:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},size:{type:String,validator:j3},width:{type:[String,Number],default:""},inlinePrompt:{type:Boolean,default:!1},inactiveActionIcon:{type:vr},activeActionIcon:{type:vr},activeIcon:{type:vr},inactiveIcon:{type:vr},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},activeColor:{type:String,default:""},inactiveColor:{type:String,default:""},borderColor:{type:String,default:""},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:Be(Function)},id:String,tabindex:{type:[String,Number]},value:{type:[Boolean,String,Number],default:!1},label:{type:String,default:void 0}}),rV={[wi]:e=>zr(e)||ze(e)||kt(e),[sg]:e=>zr(e)||ze(e)||kt(e),[lg]:e=>zr(e)||ze(e)||kt(e)},nV=["onClick"],iV=["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex","onKeydown"],aV=["aria-hidden"],oV=["aria-hidden"],sV=["aria-hidden"],Ag="ElSwitch",lV=ie({name:Ag}),uV=ie({...lV,props:tV,emits:rV,setup(e,{expose:t,emit:r}){const n=e,i=it(),{formItem:a}=tf(),o=xi(),s=Oe("switch");(C=>{C.forEach(M=>{bu({from:M[0],replacement:M[1],scope:Ag,version:"2.3.0",ref:"https://element-plus.org/en-US/component/switch.html#attributes",type:"Attribute"},k(()=>{var A;return!!((A=i.vnode.props)!=null&&A[M[2]])}))})})([['"value"','"model-value" or "v-model"',"value"],['"active-color"',"CSS var `--el-switch-on-color`","activeColor"],['"inactive-color"',"CSS var `--el-switch-off-color`","inactiveColor"],['"border-color"',"CSS var `--el-switch-border-color`","borderColor"]]);const{inputId:u}=Vy(n,{formItemContext:a}),f=vh(k(()=>n.loading)),c=$(n.modelValue!==!1),h=$(),d=$(),v=k(()=>[s.b(),s.m(o.value),s.is("disabled",f.value),s.is("checked",_.value)]),p=k(()=>[s.e("label"),s.em("label","left"),s.is("active",!_.value)]),m=k(()=>[s.e("label"),s.em("label","right"),s.is("active",_.value)]),g=k(()=>({width:Zn(n.width)}));be(()=>n.modelValue,()=>{c.value=!0}),be(()=>n.value,()=>{c.value=!1});const y=k(()=>c.value?n.modelValue:n.value),_=k(()=>y.value===n.activeValue);[n.activeValue,n.inactiveValue].includes(y.value)||(r(wi,n.inactiveValue),r(sg,n.inactiveValue),r(lg,n.inactiveValue)),be(_,C=>{var M;h.value.checked=C,n.validateEvent&&((M=a==null?void 0:a.validate)==null||M.call(a,"change").catch(A=>void 0))});const b=()=>{const C=_.value?n.inactiveValue:n.activeValue;r(wi,C),r(sg,C),r(lg,C),Nt(()=>{h.value.checked=_.value})},x=()=>{if(f.value)return;const{beforeChange:C}=n;if(!C){b();return}const M=C();[Qc(M),zr(M)].includes(!0)||bi(Ag,"beforeChange must return type `Promise` or `boolean`"),Qc(M)?M.then(P=>{P&&b()}).catch(P=>{}):M&&b()},w=k(()=>s.cssVarBlock({...n.activeColor?{"on-color":n.activeColor}:null,...n.inactiveColor?{"off-color":n.inactiveColor}:null,...n.borderColor?{"border-color":n.borderColor}:null})),S=()=>{var C,M;(M=(C=h.value)==null?void 0:C.focus)==null||M.call(C)};return _t(()=>{h.value.checked=_.value}),t({focus:S,checked:_}),(C,M)=>(G(),ce("div",{class:re(T(v)),style:ct(T(w)),onClick:ua(x,["prevent"])},[te("input",{id:T(u),ref_key:"input",ref:h,class:re(T(s).e("input")),type:"checkbox",role:"switch","aria-checked":T(_),"aria-disabled":T(f),"aria-label":C.label,name:C.name,"true-value":C.activeValue,"false-value":C.inactiveValue,disabled:T(f),tabindex:C.tabindex,onChange:b,onKeydown:iR(x,["enter"])},null,42,iV),!C.inlinePrompt&&(C.inactiveIcon||C.inactiveText)?(G(),ce("span",{key:0,class:re(T(p))},[C.inactiveIcon?(G(),ve(T(Bt),{key:0},{default:q(()=>[(G(),ve(Vt(C.inactiveIcon)))]),_:1})):Ae("v-if",!0),!C.inactiveIcon&&C.inactiveText?(G(),ce("span",{key:1,"aria-hidden":T(_)},xe(C.inactiveText),9,aV)):Ae("v-if",!0)],2)):Ae("v-if",!0),te("span",{ref_key:"core",ref:d,class:re(T(s).e("core")),style:ct(T(g))},[C.inlinePrompt?(G(),ce("div",{key:0,class:re(T(s).e("inner"))},[C.activeIcon||C.inactiveIcon?(G(),ve(T(Bt),{key:0,class:re(T(s).is("icon"))},{default:q(()=>[(G(),ve(Vt(T(_)?C.activeIcon:C.inactiveIcon)))]),_:1},8,["class"])):C.activeText||C.inactiveText?(G(),ce("span",{key:1,class:re(T(s).is("text")),"aria-hidden":!T(_)},xe(T(_)?C.activeText:C.inactiveText),11,oV)):Ae("v-if",!0)],2)):Ae("v-if",!0),te("div",{class:re(T(s).e("action"))},[C.loading?(G(),ve(T(Bt),{key:0,class:re(T(s).is("loading"))},{default:q(()=>[Z(T(Ly))]),_:1},8,["class"])):T(_)?Ce(C.$slots,"active-action",{key:1},()=>[C.activeActionIcon?(G(),ve(T(Bt),{key:0},{default:q(()=>[(G(),ve(Vt(C.activeActionIcon)))]),_:1})):Ae("v-if",!0)]):T(_)?Ae("v-if",!0):Ce(C.$slots,"inactive-action",{key:2},()=>[C.inactiveActionIcon?(G(),ve(T(Bt),{key:0},{default:q(()=>[(G(),ve(Vt(C.inactiveActionIcon)))]),_:1})):Ae("v-if",!0)])],2)],6),!C.inlinePrompt&&(C.activeIcon||C.activeText)?(G(),ce("span",{key:1,class:re(T(m))},[C.activeIcon?(G(),ve(T(Bt),{key:0},{default:q(()=>[(G(),ve(Vt(C.activeIcon)))]),_:1})):Ae("v-if",!0),!C.activeIcon&&C.activeText?(G(),ce("span",{key:1,"aria-hidden":!T(_)},xe(C.activeText),9,sV)):Ae("v-if",!0)],2)):Ae("v-if",!0)],14,nV))}});var fV=Ke(uV,[["__file","switch.vue"]]);const cV=Yt(fV),cv=function(e){var t;return(t=e.target)==null?void 0:t.closest("td")},dV=function(e,t,r,n,i){if(!t&&!n&&(!i||Array.isArray(i)&&!i.length))return e;typeof r=="string"?r=r==="descending"?-1:1:r=r&&r<0?-1:1;const a=n?null:function(s,l){return i?(Array.isArray(i)||(i=[i]),i.map(u=>typeof u=="string"?yu(s,u):u(s,l,e))):(t!=="$key"&&qe(s)&&"$value"in s&&(s=s.$value),[qe(s)?yu(s,t):s])},o=function(s,l){if(n)return n(s.value,l.value);for(let u=0,f=s.key.length;ul.key[u])return 1}return 0};return e.map((s,l)=>({value:s,index:l,key:a?a(s,l):null})).sort((s,l)=>{let u=o(s,l);return u||(u=s.index-l.index),u*+r}).map(s=>s.value)},jA=function(e,t){let r=null;return e.columns.forEach(n=>{n.id===t&&(r=n)}),r},hV=function(e,t){let r=null;for(let n=0;n{if(!e)throw new Error("Row is required when get row identity");if(typeof t=="string"){if(!t.includes("."))return`${e[t]}`;const r=t.split(".");let n=e;for(const i of r)n=n[i];return`${n}`}else if(typeof t=="function")return t.call(null,e)},eo=function(e,t){const r={};return(e||[]).forEach((n,i)=>{r[Jt(n,t)]={row:n,index:i}}),r};function vV(e,t){const r={};let n;for(n in e)r[n]=e[n];for(n in t)if(Ue(t,n)){const i=t[n];typeof i<"u"&&(r[n]=i)}return r}function qy(e){return e===""||e!==void 0&&(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function qA(e){return e===""||e!==void 0&&(e=qy(e),Number.isNaN(e)&&(e=80)),e}function pV(e){return typeof e=="number"?e:typeof e=="string"?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function gV(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,r)=>(...n)=>t(r(...n)))}function zl(e,t,r){let n=!1;const i=e.indexOf(t),a=i!==-1,o=s=>{s==="add"?e.push(t):e.splice(i,1),n=!0,_e(t.children)&&t.children.forEach(l=>{zl(e,l,r??!a)})};return zr(r)?r&&!a?o("add"):!r&&a&&o("remove"):o(a?"remove":"add"),n}function mV(e,t,r="children",n="hasChildren"){const i=o=>!(Array.isArray(o)&&o.length);function a(o,s,l){t(o,s,l),s.forEach(u=>{if(u[n]){t(u,null,l+1);return}const f=u[r];i(f)||a(u,f,l+1)})}e.forEach(o=>{if(o[n]){t(o,null,0);return}const s=o[r];i(s)||a(o,s,0)})}let Xr=null;function yV(e,t,r,n){if((Xr==null?void 0:Xr.trigger)===r)return;Xr==null||Xr();const i=n==null?void 0:n.refs.tableWrapper,a=i==null?void 0:i.dataset.prefix,o={strategy:"fixed",...e.popperOptions},s=Z(Vs,{content:t,virtualTriggering:!0,virtualRef:r,appendTo:i,placement:"top",transition:"none",offset:0,hideAfter:0,...e,popperOptions:o,onHide:()=>{Xr==null||Xr()}});s.appContext=n.appContext;const l=document.createElement("div");ld(s,l),s.component.exposed.onOpen();const u=i==null?void 0:i.querySelector(`.${a}-scrollbar__wrap`);Xr=()=>{ld(null,l),u==null||u.removeEventListener("scroll",Xr),Xr=null},Xr.trigger=r,u==null||u.addEventListener("scroll",Xr)}function KA(e){return e.children?v3(e.children,KA):[e]}function D1(e,t){return e+t.colSpan}const XA=(e,t,r,n)=>{let i=0,a=e;const o=r.states.columns.value;if(n){const l=KA(n[e]);i=o.slice(0,o.indexOf(l[0])).reduce(D1,0),a=i+l.reduce(D1,0)-1}else i=e;let s;switch(t){case"left":a=o.length-r.states.rightFixedLeafColumnsLength.value&&(s="right");break;default:a=o.length-r.states.rightFixedLeafColumnsLength.value&&(s="right")}return s?{direction:s,start:i,after:a}:{}},Ky=(e,t,r,n,i,a=0)=>{const o=[],{direction:s,start:l,after:u}=XA(t,r,n,i);if(s){const f=s==="left";o.push(`${e}-fixed-column--${s}`),f&&u+a===n.states.fixedLeafColumnsLength.value-1?o.push("is-last-column"):!f&&l-a===n.states.columns.value.length-n.states.rightFixedLeafColumnsLength.value&&o.push("is-first-column")}return o};function I1(e,t){return e+(t.realWidth===null||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Xy=(e,t,r,n)=>{const{direction:i,start:a=0,after:o=0}=XA(e,t,r,n);if(!i)return;const s={},l=i==="left",u=r.states.columns.value;return l?s.left=u.slice(0,a).reduce(I1,0):s.right=u.slice(o+1).reverse().reduce(I1,0),s},As=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function _V(e){const t=it(),r=$(!1),n=$([]);return{updateExpandRows:()=>{const l=e.data.value||[],u=e.rowKey.value;if(r.value)n.value=l.slice();else if(u){const f=eo(n.value,u);n.value=l.reduce((c,h)=>{const d=Jt(h,u);return f[d]&&c.push(h),c},[])}else n.value=[]},toggleRowExpansion:(l,u)=>{zl(n.value,l,u)&&t.emit("expand-change",l,n.value.slice())},setExpandRowKeys:l=>{t.store.assertRowKey();const u=e.data.value||[],f=e.rowKey.value,c=eo(u,f);n.value=l.reduce((h,d)=>{const v=c[d];return v&&h.push(v.row),h},[])},isRowExpanded:l=>{const u=e.rowKey.value;return u?!!eo(n.value,u)[Jt(l,u)]:n.value.includes(l)},states:{expandRows:n,defaultExpandAll:r}}}function bV(e){const t=it(),r=$(null),n=$(null),i=u=>{t.store.assertRowKey(),r.value=u,o(u)},a=()=>{r.value=null},o=u=>{const{data:f,rowKey:c}=e;let h=null;c.value&&(h=(T(f)||[]).find(d=>Jt(d,c.value)===u)),n.value=h,t.emit("current-change",n.value,null)};return{setCurrentRowKey:i,restoreCurrentRowKey:a,setCurrentRowByKey:o,updateCurrentRow:u=>{const f=n.value;if(u&&u!==f){n.value=u,t.emit("current-change",n.value,f);return}!u&&f&&(n.value=null,t.emit("current-change",null,f))},updateCurrentRowData:()=>{const u=e.rowKey.value,f=e.data.value||[],c=n.value;if(!f.includes(c)&&c){if(u){const h=Jt(c,u);o(h)}else n.value=null;n.value===null&&t.emit("current-change",null,c)}else r.value&&(o(r.value),a())},states:{_currentRowKey:r,currentRow:n}}}function wV(e){const t=$([]),r=$({}),n=$(16),i=$(!1),a=$({}),o=$("hasChildren"),s=$("children"),l=it(),u=k(()=>{if(!e.rowKey.value)return{};const g=e.data.value||[];return c(g)}),f=k(()=>{const g=e.rowKey.value,y=Object.keys(a.value),_={};return y.length&&y.forEach(b=>{if(a.value[b].length){const x={children:[]};a.value[b].forEach(w=>{const S=Jt(w,g);x.children.push(S),w[o.value]&&!_[S]&&(_[S]={children:[]})}),_[b]=x}}),_}),c=g=>{const y=e.rowKey.value,_={};return mV(g,(b,x,w)=>{const S=Jt(b,y);Array.isArray(x)?_[S]={children:x.map(C=>Jt(C,y)),level:w}:i.value&&(_[S]={children:[],lazy:!0,level:w})},s.value,o.value),_},h=(g=!1,y=(_=>(_=l.store)==null?void 0:_.states.defaultExpandAll.value)())=>{var _;const b=u.value,x=f.value,w=Object.keys(b),S={};if(w.length){const C=T(r),M=[],A=(E,L)=>{if(g)return t.value?y||t.value.includes(L):!!(y||E!=null&&E.expanded);{const O=y||t.value&&t.value.includes(L);return!!(E!=null&&E.expanded||O)}};w.forEach(E=>{const L=C[E],O={...b[E]};if(O.expanded=A(L,E),O.lazy){const{loaded:N=!1,loading:H=!1}=L||{};O.loaded=!!N,O.loading=!!H,M.push(E)}S[E]=O});const P=Object.keys(x);i.value&&P.length&&M.length&&P.forEach(E=>{const L=C[E],O=x[E].children;if(M.includes(E)){if(S[E].children.length!==0)throw new Error("[ElTable]children must be an empty array.");S[E].children=O}else{const{loaded:N=!1,loading:H=!1}=L||{};S[E]={lazy:!0,loaded:!!N,loading:!!H,expanded:A(L,E),children:O,level:""}}})}r.value=S,(_=l.store)==null||_.updateTableScrollY()};be(()=>t.value,()=>{h(!0)}),be(()=>u.value,()=>{h()}),be(()=>f.value,()=>{h()});const d=g=>{t.value=g,h()},v=(g,y)=>{l.store.assertRowKey();const _=e.rowKey.value,b=Jt(g,_),x=b&&r.value[b];if(b&&x&&"expanded"in x){const w=x.expanded;y=typeof y>"u"?!x.expanded:y,r.value[b].expanded=y,w!==y&&l.emit("expand-change",g,y),l.store.updateTableScrollY()}},p=g=>{l.store.assertRowKey();const y=e.rowKey.value,_=Jt(g,y),b=r.value[_];i.value&&b&&"loaded"in b&&!b.loaded?m(g,_,b):v(g,void 0)},m=(g,y,_)=>{const{load:b}=l.props;b&&!r.value[y].loaded&&(r.value[y].loading=!0,b(g,_,x=>{if(!Array.isArray(x))throw new TypeError("[ElTable] data must be an array");r.value[y].loading=!1,r.value[y].loaded=!0,r.value[y].expanded=!0,x.length&&(a.value[y]=x),l.emit("expand-change",g,!0)}))};return{loadData:m,loadOrToggle:p,toggleTreeExpansion:v,updateTreeExpandKeys:d,updateTreeData:h,normalize:c,states:{expandRowKeys:t,treeData:r,indent:n,lazy:i,lazyTreeNodeMap:a,lazyColumnIdentifier:o,childrenColumnName:s}}}const SV=(e,t)=>{const r=t.sortingColumn;return!r||typeof r.sortable=="string"?e:dV(e,t.sortProp,t.sortOrder,r.sortMethod,r.sortBy)},Fc=e=>{const t=[];return e.forEach(r=>{r.children&&r.children.length>0?t.push.apply(t,Fc(r.children)):t.push(r)}),t};function xV(){var e;const t=it(),{size:r}=Kd((e=t.proxy)==null?void 0:e.$props),n=$(null),i=$([]),a=$([]),o=$(!1),s=$([]),l=$([]),u=$([]),f=$([]),c=$([]),h=$([]),d=$([]),v=$([]),p=[],m=$(0),g=$(0),y=$(0),_=$(!1),b=$([]),x=$(!1),w=$(!1),S=$(null),C=$({}),M=$(null),A=$(null),P=$(null),E=$(null),L=$(null);be(i,()=>t.state&&V(!1),{deep:!0});const O=()=>{if(!n.value)throw new Error("[ElTable] prop row-key is required")},N=he=>{var Pe;(Pe=he.children)==null||Pe.forEach(We=>{We.fixed=he.fixed,N(We)})},H=()=>{s.value.forEach(et=>{N(et)}),f.value=s.value.filter(et=>et.fixed===!0||et.fixed==="left"),c.value=s.value.filter(et=>et.fixed==="right"),f.value.length>0&&s.value[0]&&s.value[0].type==="selection"&&!s.value[0].fixed&&(s.value[0].fixed=!0,f.value.unshift(s.value[0]));const he=s.value.filter(et=>!et.fixed);l.value=[].concat(f.value).concat(he).concat(c.value);const Pe=Fc(he),We=Fc(f.value),Ge=Fc(c.value);m.value=Pe.length,g.value=We.length,y.value=Ge.length,u.value=[].concat(We).concat(Pe).concat(Ge),o.value=f.value.length>0||c.value.length>0},V=(he,Pe=!1)=>{he&&H(),Pe?t.state.doLayout():t.state.debouncedUpdateLayout()},U=he=>b.value.includes(he),F=()=>{_.value=!1,b.value.length&&(b.value=[],t.emit("selection-change",[]))},z=()=>{let he;if(n.value){he=[];const Pe=eo(b.value,n.value),We=eo(i.value,n.value);for(const Ge in Pe)Ue(Pe,Ge)&&!We[Ge]&&he.push(Pe[Ge].row)}else he=b.value.filter(Pe=>!i.value.includes(Pe));if(he.length){const Pe=b.value.filter(We=>!he.includes(We));b.value=Pe,t.emit("selection-change",Pe.slice())}},ee=()=>(b.value||[]).slice(),J=(he,Pe=void 0,We=!0)=>{if(zl(b.value,he,Pe)){const et=(b.value||[]).slice();We&&t.emit("select",et,he),t.emit("selection-change",et)}},me=()=>{var he,Pe;const We=w.value?!_.value:!(_.value||b.value.length);_.value=We;let Ge=!1,et=0;const zt=(Pe=(he=t==null?void 0:t.store)==null?void 0:he.states)==null?void 0:Pe.rowKey.value;i.value.forEach((gt,Kt)=>{const Yr=Kt+et;S.value?S.value.call(null,gt,Yr)&&zl(b.value,gt,We)&&(Ge=!0):zl(b.value,gt,We)&&(Ge=!0),et+=Ie(Jt(gt,zt))}),Ge&&t.emit("selection-change",b.value?b.value.slice():[]),t.emit("select-all",b.value)},we=()=>{const he=eo(b.value,n.value);i.value.forEach(Pe=>{const We=Jt(Pe,n.value),Ge=he[We];Ge&&(b.value[Ge.index]=Pe)})},$e=()=>{var he,Pe,We;if(((he=i.value)==null?void 0:he.length)===0){_.value=!1;return}let Ge;n.value&&(Ge=eo(b.value,n.value));const et=function(Yr){return Ge?!!Ge[Jt(Yr,n.value)]:b.value.includes(Yr)};let zt=!0,gt=0,Kt=0;for(let Yr=0,AD=(i.value||[]).length;Yr{var Pe;if(!t||!t.store)return 0;const{treeData:We}=t.store.states;let Ge=0;const et=(Pe=We.value[he])==null?void 0:Pe.children;return et&&(Ge+=et.length,et.forEach(zt=>{Ge+=Ie(zt)})),Ge},B=(he,Pe)=>{Array.isArray(he)||(he=[he]);const We={};return he.forEach(Ge=>{C.value[Ge.id]=Pe,We[Ge.columnKey||Ge.id]=Pe}),We},Y=(he,Pe,We)=>{A.value&&A.value!==he&&(A.value.order=null),A.value=he,P.value=Pe,E.value=We},K=()=>{let he=T(a);Object.keys(C.value).forEach(Pe=>{const We=C.value[Pe];if(!We||We.length===0)return;const Ge=jA({columns:u.value},Pe);Ge&&Ge.filterMethod&&(he=he.filter(et=>We.some(zt=>Ge.filterMethod.call(null,zt,et,Ge))))}),M.value=he},Q=()=>{i.value=SV(M.value,{sortingColumn:A.value,sortProp:P.value,sortOrder:E.value})},oe=(he=void 0)=>{he&&he.filter||K(),Q()},pe=he=>{const{tableHeaderRef:Pe}=t.refs;if(!Pe)return;const We=Object.assign({},Pe.filterPanels),Ge=Object.keys(We);if(Ge.length)if(typeof he=="string"&&(he=[he]),Array.isArray(he)){const et=he.map(zt=>hV({columns:u.value},zt));Ge.forEach(zt=>{const gt=et.find(Kt=>Kt.id===zt);gt&&(gt.filteredValue=[])}),t.store.commit("filterChange",{column:et,values:[],silent:!0,multi:!0})}else Ge.forEach(et=>{const zt=u.value.find(gt=>gt.id===et);zt&&(zt.filteredValue=[])}),C.value={},t.store.commit("filterChange",{column:{},values:[],silent:!0})},D=()=>{A.value&&(Y(null,null,null),t.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:I,toggleRowExpansion:W,updateExpandRows:X,states:j,isRowExpanded:le}=_V({data:i,rowKey:n}),{updateTreeExpandKeys:fe,toggleTreeExpansion:ae,updateTreeData:se,loadOrToggle:ne,states:de}=wV({data:i,rowKey:n}),{updateCurrentRowData:Me,updateCurrentRow:Se,setCurrentRowKey:ke,states:Ve}=bV({data:i,rowKey:n});return{assertRowKey:O,updateColumns:H,scheduleLayout:V,isSelected:U,clearSelection:F,cleanSelection:z,getSelectionRows:ee,toggleRowSelection:J,_toggleAllSelection:me,toggleAllSelection:null,updateSelectionByRowKey:we,updateAllSelected:$e,updateFilters:B,updateCurrentRow:Se,updateSort:Y,execFilter:K,execSort:Q,execQuery:oe,clearFilter:pe,clearSort:D,toggleRowExpansion:W,setExpandRowKeysAdapter:he=>{I(he),fe(he)},setCurrentRowKey:ke,toggleRowExpansionAdapter:(he,Pe)=>{u.value.some(({type:Ge})=>Ge==="expand")?W(he,Pe):ae(he,Pe)},isRowExpanded:le,updateExpandRows:X,updateCurrentRowData:Me,loadOrToggle:ne,updateTreeData:se,states:{tableSize:r,rowKey:n,data:i,_data:a,isComplex:o,_columns:s,originColumns:l,columns:u,fixedColumns:f,rightFixedColumns:c,leafColumns:h,fixedLeafColumns:d,rightFixedLeafColumns:v,updateOrderFns:p,leafColumnsLength:m,fixedLeafColumnsLength:g,rightFixedLeafColumnsLength:y,isAllSelected:_,selection:b,reserveSelection:x,selectOnIndeterminate:w,selectable:S,filters:C,filteredData:M,sortingColumn:A,sortProp:P,sortOrder:E,hoverRow:L,...j,...de,...Ve}}}function Pg(e,t){return e.map(r=>{var n;return r.id===t.id?t:((n=r.children)!=null&&n.length&&(r.children=Pg(r.children,t)),r)})}function Eg(e){e.forEach(t=>{var r,n;t.no=(r=t.getColumnIndex)==null?void 0:r.call(t),(n=t.children)!=null&&n.length&&Eg(t.children)}),e.sort((t,r)=>t.no-r.no)}function CV(){const e=it(),t=xV();return{ns:Oe("table"),...t,mutations:{setData(o,s){const l=T(o._data)!==s;o.data.value=s,o._data.value=s,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),T(o.reserveSelection)?(e.store.assertRowKey(),e.store.updateSelectionByRowKey()):l?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(o,s,l,u){const f=T(o._columns);let c=[];l?(l&&!l.children&&(l.children=[]),l.children.push(s),c=Pg(f,l)):(f.push(s),c=f),Eg(c),o._columns.value=c,o.updateOrderFns.push(u),s.type==="selection"&&(o.selectable.value=s.selectable,o.reserveSelection.value=s.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(o,s){var l;((l=s.getColumnIndex)==null?void 0:l.call(s))!==s.no&&(Eg(o._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(o,s,l,u){const f=T(o._columns)||[];if(l)l.children.splice(l.children.findIndex(h=>h.id===s.id),1),Nt(()=>{var h;((h=l.children)==null?void 0:h.length)===0&&delete l.children}),o._columns.value=Pg(f,l);else{const h=f.indexOf(s);h>-1&&(f.splice(h,1),o._columns.value=f)}const c=o.updateOrderFns.indexOf(u);c>-1&&o.updateOrderFns.splice(c,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(o,s){const{prop:l,order:u,init:f}=s;if(l){const c=T(o.columns).find(h=>h.property===l);c&&(c.order=u,e.store.updateSort(c,l,u),e.store.commit("changeSortCondition",{init:f}))}},changeSortCondition(o,s){const{sortingColumn:l,sortProp:u,sortOrder:f}=o,c=T(l),h=T(u),d=T(f);d===null&&(o.sortingColumn.value=null,o.sortProp.value=null);const v={filter:!0};e.store.execQuery(v),(!s||!(s.silent||s.init))&&e.emit("sort-change",{column:c,prop:h,order:d}),e.store.updateTableScrollY()},filterChange(o,s){const{column:l,values:u,silent:f}=s,c=e.store.updateFilters(l,u);e.store.execQuery(),f||e.emit("filter-change",c),e.store.updateTableScrollY()},toggleAllSelection(){e.store.toggleAllSelection()},rowSelectedChanged(o,s){e.store.toggleRowSelection(s),e.store.updateAllSelected()},setHoverRow(o,s){o.hoverRow.value=s},setCurrentRow(o,s){e.store.updateCurrentRow(s)}},commit:function(o,...s){const l=e.store.mutations;if(l[o])l[o].apply(e,[e.store.states].concat(s));else throw new Error(`Action not found: ${o}`)},updateTableScrollY:function(){Nt(()=>e.layout.updateScrollY.apply(e.layout))}}}const Vl={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy",data:"data","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"}};function TV(e,t){if(!e)throw new Error("Table is required.");const r=CV();return r.toggleAllSelection=hd(r._toggleAllSelection,10),Object.keys(Vl).forEach(n=>{ZA(QA(t,n),n,r)}),MV(r,t),r}function MV(e,t){Object.keys(Vl).forEach(r=>{be(()=>QA(t,r),n=>{ZA(n,r,e)})})}function ZA(e,t,r){let n=e,i=Vl[t];typeof Vl[t]=="object"&&(i=i.key,n=n||Vl[t].default),r.states[i].value=n}function QA(e,t){if(t.includes(".")){const r=t.split(".");let n=e;return r.forEach(i=>{n=n[i]}),n}else return e[t]}class AV{constructor(t){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=$(null),this.scrollX=$(!1),this.scrollY=$(!1),this.bodyWidth=$(null),this.fixedWidth=$(null),this.rightFixedWidth=$(null),this.gutterWidth=0;for(const r in t)Ue(t,r)&&(Pt(this[r])?this[r].value=t[r]:this[r]=t[r]);if(!this.table)throw new Error("Table is required for Table Layout");if(!this.store)throw new Error("Store is required for Table Layout")}updateScrollY(){if(this.height.value===null)return!1;const r=this.table.refs.scrollBarRef;if(this.table.vnode.el&&(r!=null&&r.wrapRef)){let n=!0;const i=this.scrollY.value;return n=r.wrapRef.scrollHeight>r.wrapRef.clientHeight,this.scrollY.value=n,i!==n}return!1}setHeight(t,r="height"){if(!At)return;const n=this.table.vnode.el;if(t=pV(t),this.height.value=Number(t),!n&&(t||t===0))return Nt(()=>this.setHeight(t,r));typeof t=="number"?(n.style[r]=`${t}px`,this.updateElsHeight()):typeof t=="string"&&(n.style[r]=t,this.updateElsHeight())}setMaxHeight(t){this.setHeight(t,"max-height")}getFlattenColumns(){const t=[];return this.table.store.states.columns.value.forEach(n=>{n.isColumnGroup?t.push.apply(t,n.columns):t.push(n)}),t}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(t){if(!t)return!0;let r=t;for(;r.tagName!=="DIV";){if(getComputedStyle(r).display==="none")return!0;r=r.parentElement}return!1}updateColumnsWidth(){if(!At)return;const t=this.fit,r=this.table.vnode.el.clientWidth;let n=0;const i=this.getFlattenColumns(),a=i.filter(l=>typeof l.width!="number");if(i.forEach(l=>{typeof l.width=="number"&&l.realWidth&&(l.realWidth=null)}),a.length>0&&t){if(i.forEach(l=>{n+=Number(l.width||l.minWidth||80)}),n<=r){this.scrollX.value=!1;const l=r-n;if(a.length===1)a[0].realWidth=Number(a[0].minWidth||80)+l;else{const u=a.reduce((h,d)=>h+Number(d.minWidth||80),0),f=l/u;let c=0;a.forEach((h,d)=>{if(d===0)return;const v=Math.floor(Number(h.minWidth||80)*f);c+=v,h.realWidth=Number(h.minWidth||80)+v}),a[0].realWidth=Number(a[0].minWidth||80)+l-c}}else this.scrollX.value=!0,a.forEach(l=>{l.realWidth=Number(l.minWidth)});this.bodyWidth.value=Math.max(n,r),this.table.state.resizeState.value.width=this.bodyWidth.value}else i.forEach(l=>{!l.width&&!l.minWidth?l.realWidth=80:l.realWidth=Number(l.width||l.minWidth),n+=l.realWidth}),this.scrollX.value=n>r,this.bodyWidth.value=n;const o=this.store.states.fixedColumns.value;if(o.length>0){let l=0;o.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.fixedWidth.value=l}const s=this.store.states.rightFixedColumns.value;if(s.length>0){let l=0;s.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.rightFixedWidth.value=l}this.notifyObservers("columns")}addObserver(t){this.observers.push(t)}removeObserver(t){const r=this.observers.indexOf(t);r!==-1&&this.observers.splice(r,1)}notifyObservers(t){this.observers.forEach(n=>{var i,a;switch(t){case"columns":(i=n.state)==null||i.onColumnsChange(this);break;case"scrollable":(a=n.state)==null||a.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${t}.`)}})}}const{CheckboxGroup:PV}=Ms,EV=ie({name:"ElTableFilterPanel",components:{ElCheckbox:Ms,ElCheckboxGroup:PV,ElScrollbar:uA,ElTooltip:Vs,ElIcon:Bt,ArrowDown:EM,ArrowUp:E3},directives:{ClickOutside:CA},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function}},setup(e){const t=it(),{t:r}=Hs(),n=Oe("table-filter"),i=t==null?void 0:t.parent;i.filterPanels.value[e.column.id]||(i.filterPanels.value[e.column.id]=t);const a=$(!1),o=$(null),s=k(()=>e.column&&e.column.filters),l=k(()=>e.column.filterClassName?`${n.b()} ${e.column.filterClassName}`:n.b()),u=k({get:()=>{var x;return(((x=e.column)==null?void 0:x.filteredValue)||[])[0]},set:x=>{f.value&&(typeof x<"u"&&x!==null?f.value.splice(0,1,x):f.value.splice(0,1))}}),f=k({get(){return e.column?e.column.filteredValue||[]:[]},set(x){e.column&&e.upDataColumn("filteredValue",x)}}),c=k(()=>e.column?e.column.filterMultiple:!0),h=x=>x.value===u.value,d=()=>{a.value=!1},v=x=>{x.stopPropagation(),a.value=!a.value},p=()=>{a.value=!1},m=()=>{_(f.value),d()},g=()=>{f.value=[],_(f.value),d()},y=x=>{u.value=x,_(typeof x<"u"&&x!==null?f.value:[]),d()},_=x=>{e.store.commit("filterChange",{column:e.column,values:x}),e.store.updateAllSelected()};be(a,x=>{e.column&&e.upDataColumn("filterOpened",x)},{immediate:!0});const b=k(()=>{var x,w;return(w=(x=o.value)==null?void 0:x.popperRef)==null?void 0:w.contentRef});return{tooltipVisible:a,multiple:c,filterClassName:l,filteredValue:f,filterValue:u,filters:s,handleConfirm:m,handleReset:g,handleSelect:y,isActive:h,t:r,ns:n,showFilterPanel:v,hideFilterPanel:p,popperPaneRef:b,tooltip:o}}}),LV={key:0},DV=["disabled"],IV=["label","onClick"];function OV(e,t,r,n,i,a){const o=xr("el-checkbox"),s=xr("el-checkbox-group"),l=xr("el-scrollbar"),u=xr("arrow-up"),f=xr("arrow-down"),c=xr("el-icon"),h=xr("el-tooltip"),d=fT("click-outside");return G(),ve(h,{ref:"tooltip",visible:e.tooltipVisible,offset:0,placement:e.placement,"show-arrow":!1,"stop-popper-mouse-event":!1,teleported:"",effect:"light",pure:"","popper-class":e.filterClassName,persistent:""},{content:q(()=>[e.multiple?(G(),ce("div",LV,[te("div",{class:re(e.ns.e("content"))},[Z(l,{"wrap-class":e.ns.e("wrap")},{default:q(()=>[Z(s,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=v=>e.filteredValue=v),class:re(e.ns.e("checkbox-group"))},{default:q(()=>[(G(!0),ce(ft,null,Hp(e.filters,v=>(G(),ve(o,{key:v.value,label:v.value},{default:q(()=>[pt(xe(v.text),1)]),_:2},1032,["label"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),te("div",{class:re(e.ns.e("bottom"))},[te("button",{class:re({[e.ns.is("disabled")]:e.filteredValue.length===0}),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...v)=>e.handleConfirm&&e.handleConfirm(...v))},xe(e.t("el.table.confirmFilter")),11,DV),te("button",{type:"button",onClick:t[2]||(t[2]=(...v)=>e.handleReset&&e.handleReset(...v))},xe(e.t("el.table.resetFilter")),1)],2)])):(G(),ce("ul",{key:1,class:re(e.ns.e("list"))},[te("li",{class:re([e.ns.e("list-item"),{[e.ns.is("active")]:e.filterValue===void 0||e.filterValue===null}]),onClick:t[3]||(t[3]=v=>e.handleSelect(null))},xe(e.t("el.table.clearFilter")),3),(G(!0),ce(ft,null,Hp(e.filters,v=>(G(),ce("li",{key:v.value,class:re([e.ns.e("list-item"),e.ns.is("active",e.isActive(v))]),label:v.value,onClick:p=>e.handleSelect(v.value)},xe(v.text),11,IV))),128))],2))]),default:q(()=>[qt((G(),ce("span",{class:re([`${e.ns.namespace.value}-table__column-filter-trigger`,`${e.ns.namespace.value}-none-outline`]),onClick:t[4]||(t[4]=(...v)=>e.showFilterPanel&&e.showFilterPanel(...v))},[Z(c,null,{default:q(()=>[e.column.filterOpened?(G(),ve(u,{key:0})):(G(),ve(f,{key:1}))]),_:1})],2)),[[d,e.hideFilterPanel,e.popperPaneRef]])]),_:1},8,["visible","placement","popper-class"])}var RV=Ke(EV,[["render",OV],["__file","filter-panel.vue"]]);function JA(e){const t=it();eh(()=>{r.value.addObserver(t)}),_t(()=>{n(r.value),i(r.value)}),Uu(()=>{n(r.value),i(r.value)}),ks(()=>{r.value.removeObserver(t)});const r=k(()=>{const a=e.layout;if(!a)throw new Error("Can not find table layout.");return a}),n=a=>{var o;const s=((o=e.vnode.el)==null?void 0:o.querySelectorAll("colgroup > col"))||[];if(!s.length)return;const l=a.getFlattenColumns(),u={};l.forEach(f=>{u[f.id]=f});for(let f=0,c=s.length;f{var o,s;const l=((o=e.vnode.el)==null?void 0:o.querySelectorAll("colgroup > col[name=gutter]"))||[];for(let f=0,c=l.length;f{p.stopPropagation()},a=(p,m)=>{!m.filters&&m.sortable?v(p,m,!1):m.filterable&&!m.sortable&&i(p),n==null||n.emit("header-click",m,p)},o=(p,m)=>{n==null||n.emit("header-contextmenu",m,p)},s=$(null),l=$(!1),u=$({}),f=(p,m)=>{if(At&&!(m.children&&m.children.length>0)&&s.value&&e.border){l.value=!0;const g=n;t("set-drag-visible",!0);const _=(g==null?void 0:g.vnode.el).getBoundingClientRect().left,b=r.vnode.el.querySelector(`th.${m.id}`),x=b.getBoundingClientRect(),w=x.left-_+30;Za(b,"noclick"),u.value={startMouseLeft:p.clientX,startLeft:x.right-_,startColumnLeft:x.left-_,tableLeft:_};const S=g==null?void 0:g.refs.resizeProxy;S.style.left=`${u.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const C=A=>{const P=A.clientX-u.value.startMouseLeft,E=u.value.startLeft+P;S.style.left=`${Math.max(w,E)}px`},M=()=>{if(l.value){const{startColumnLeft:A,startLeft:P}=u.value,L=Number.parseInt(S.style.left,10)-A;m.width=m.realWidth=L,g==null||g.emit("header-dragend",m.width,P-A,m,p),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",l.value=!1,s.value=null,u.value={},t("set-drag-visible",!1)}document.removeEventListener("mousemove",C),document.removeEventListener("mouseup",M),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{so(b,"noclick")},0)};document.addEventListener("mousemove",C),document.addEventListener("mouseup",M)}},c=(p,m)=>{if(m.children&&m.children.length>0)return;const g=p.target;if(!mo(g))return;const y=g==null?void 0:g.closest("th");if(!(!m||!m.resizable)&&!l.value&&e.border){const _=y.getBoundingClientRect(),b=document.body.style;_.width>12&&_.right-p.pageX<8?(b.cursor="col-resize",oo(y,"is-sortable")&&(y.style.cursor="col-resize"),s.value=m):l.value||(b.cursor="",oo(y,"is-sortable")&&(y.style.cursor="pointer"),s.value=null)}},h=()=>{At&&(document.body.style.cursor="")},d=({order:p,sortOrders:m})=>{if(p==="")return m[0];const g=m.indexOf(p||null);return m[g>m.length-2?0:g+1]},v=(p,m,g)=>{var y;p.stopPropagation();const _=m.order===g?null:g||d(m),b=(y=p.target)==null?void 0:y.closest("th");if(b&&oo(b,"noclick")){so(b,"noclick");return}if(!m.sortable)return;const x=e.store.states;let w=x.sortProp.value,S;const C=x.sortingColumn.value;(C!==m||C===m&&C.order===null)&&(C&&(C.order=null),x.sortingColumn.value=m,w=m.property),_?S=m.order=_:S=m.order=null,x.sortProp.value=w,x.sortOrder.value=S,n==null||n.store.commit("changeSortCondition")};return{handleHeaderClick:a,handleHeaderContextMenu:o,handleMouseDown:f,handleMouseMove:c,handleMouseOut:h,handleSortClick:v,handleFilterClick:i}}function NV(e){const t=Le(ri),r=Oe("table");return{getHeaderRowStyle:s=>{const l=t==null?void 0:t.props.headerRowStyle;return typeof l=="function"?l.call(null,{rowIndex:s}):l},getHeaderRowClass:s=>{const l=[],u=t==null?void 0:t.props.headerRowClassName;return typeof u=="string"?l.push(u):typeof u=="function"&&l.push(u.call(null,{rowIndex:s})),l.join(" ")},getHeaderCellStyle:(s,l,u,f)=>{var c;let h=(c=t==null?void 0:t.props.headerCellStyle)!=null?c:{};typeof h=="function"&&(h=h.call(null,{rowIndex:s,columnIndex:l,row:u,column:f}));const d=Xy(l,f.fixed,e.store,u);return As(d,"left"),As(d,"right"),Object.assign({},h,d)},getHeaderCellClass:(s,l,u,f)=>{const c=Ky(r.b(),l,f.fixed,e.store,u),h=[f.id,f.order,f.headerAlign,f.className,f.labelClassName,...c];f.children||h.push("is-leaf"),f.sortable&&h.push("is-sortable");const d=t==null?void 0:t.props.headerCellClassName;return typeof d=="string"?h.push(d):typeof d=="function"&&h.push(d.call(null,{rowIndex:s,columnIndex:l,row:u,column:f})),h.push(r.e("cell")),h.filter(v=>!!v).join(" ")}}}const e2=e=>{const t=[];return e.forEach(r=>{r.children?(t.push(r),t.push.apply(t,e2(r.children))):t.push(r)}),t},BV=e=>{let t=1;const r=(a,o)=>{if(o&&(a.level=o.level+1,t{r(l,a),s+=l.colSpan}),a.colSpan=s}else a.colSpan=1};e.forEach(a=>{a.level=1,r(a,void 0)});const n=[];for(let a=0;a{a.children?(a.rowSpan=1,a.children.forEach(o=>o.isSubColumn=!0)):a.rowSpan=t-a.level+1,n[a.level-1].push(a)}),n};function FV(e){const t=Le(ri),r=k(()=>BV(e.store.states.originColumns.value));return{isGroup:k(()=>{const a=r.value.length>1;return a&&t&&(t.state.isGroup.value=!0),a}),toggleAllSelection:a=>{a.stopPropagation(),t==null||t.store.commit("toggleAllSelection")},columnRows:r}}var $V=ie({name:"ElTableHeader",components:{ElCheckbox:Ms},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e,{emit:t}){const r=it(),n=Le(ri),i=Oe("table"),a=$({}),{onColumnsChange:o,onScrollableChange:s}=JA(n);_t(async()=>{await Nt(),await Nt();const{prop:w,order:S}=e.defaultSort;n==null||n.store.commit("sort",{prop:w,order:S,init:!0})});const{handleHeaderClick:l,handleHeaderContextMenu:u,handleMouseDown:f,handleMouseMove:c,handleMouseOut:h,handleSortClick:d,handleFilterClick:v}=kV(e,t),{getHeaderRowStyle:p,getHeaderRowClass:m,getHeaderCellStyle:g,getHeaderCellClass:y}=NV(e),{isGroup:_,toggleAllSelection:b,columnRows:x}=FV(e);return r.state={onColumnsChange:o,onScrollableChange:s},r.filterPanels=a,{ns:i,filterPanels:a,onColumnsChange:o,onScrollableChange:s,columnRows:x,getHeaderRowClass:m,getHeaderRowStyle:p,getHeaderCellClass:y,getHeaderCellStyle:g,handleHeaderClick:l,handleHeaderContextMenu:u,handleMouseDown:f,handleMouseMove:c,handleMouseOut:h,handleSortClick:d,handleFilterClick:v,isGroup:_,toggleAllSelection:b}},render(){const{ns:e,isGroup:t,columnRows:r,getHeaderCellStyle:n,getHeaderCellClass:i,getHeaderRowClass:a,getHeaderRowStyle:o,handleHeaderClick:s,handleHeaderContextMenu:l,handleMouseDown:u,handleMouseMove:f,handleSortClick:c,handleMouseOut:h,store:d,$parent:v}=this;let p=1;return Te("thead",{class:{[e.is("group")]:t}},r.map((m,g)=>Te("tr",{class:a(g),key:g,style:o(g)},m.map((y,_)=>(y.rowSpan>p&&(p=y.rowSpan),Te("th",{class:i(g,_,m,y),colspan:y.colSpan,key:`${y.id}-thead`,rowspan:y.rowSpan,style:n(g,_,m,y),onClick:b=>s(b,y),onContextmenu:b=>l(b,y),onMousedown:b=>u(b,y),onMousemove:b=>f(b,y),onMouseout:h},[Te("div",{class:["cell",y.filteredValue&&y.filteredValue.length>0?"highlight":""]},[y.renderHeader?y.renderHeader({column:y,$index:_,store:d,_self:v}):y.label,y.sortable&&Te("span",{onClick:b=>c(b,y),class:"caret-wrapper"},[Te("i",{onClick:b=>c(b,y,"ascending"),class:"sort-caret ascending"}),Te("i",{onClick:b=>c(b,y,"descending"),class:"sort-caret descending"})]),y.filterable&&Te(RV,{store:d,placement:y.filterPlacement||"bottom-start",column:y,upDataColumn:(b,x)=>{y[b]=x}})])]))))))}});function HV(e){const t=Le(ri),r=$(""),n=$(Te("div")),i=(d,v,p)=>{var m;const g=t,y=cv(d);let _;const b=(m=g==null?void 0:g.vnode.el)==null?void 0:m.dataset.prefix;y&&(_=L1({columns:e.store.states.columns.value},y,b),_&&(g==null||g.emit(`cell-${p}`,v,_,y,d))),g==null||g.emit(`row-${p}`,v,_,d)},a=(d,v)=>{i(d,v,"dblclick")},o=(d,v)=>{e.store.commit("setCurrentRow",v),i(d,v,"click")},s=(d,v)=>{i(d,v,"contextmenu")},l=hd(d=>{e.store.commit("setHoverRow",d)},30),u=hd(()=>{e.store.commit("setHoverRow",null)},30),f=d=>{const v=window.getComputedStyle(d,null),p=Number.parseInt(v.paddingLeft,10)||0,m=Number.parseInt(v.paddingRight,10)||0,g=Number.parseInt(v.paddingTop,10)||0,y=Number.parseInt(v.paddingBottom,10)||0;return{left:p,right:m,top:g,bottom:y}};return{handleDoubleClick:a,handleClick:o,handleContextMenu:s,handleMouseEnter:l,handleMouseLeave:u,handleCellMouseEnter:(d,v,p)=>{var m;const g=t,y=cv(d),_=(m=g==null?void 0:g.vnode.el)==null?void 0:m.dataset.prefix;if(y){const H=L1({columns:e.store.states.columns.value},y,_),V=g.hoverState={cell:y,column:H,row:v};g==null||g.emit("cell-mouse-enter",V.row,V.column,V.cell,d)}if(!p)return;const b=d.target.querySelector(".cell");if(!(oo(b,`${_}-tooltip`)&&b.childNodes.length))return;const x=document.createRange();x.setStart(b,0),x.setEnd(b,b.childNodes.length);let w=x.getBoundingClientRect().width,S=x.getBoundingClientRect().height;w-Math.floor(w)<.001&&(w=Math.floor(w)),S-Math.floor(S)<.001&&(S=Math.floor(S));const{top:A,left:P,right:E,bottom:L}=f(b),O=P+E,N=A+L;(w+O>b.offsetWidth||S+N>b.offsetHeight||b.scrollWidth>b.offsetWidth)&&yV(p,y.innerText||y.textContent,y,g)},handleCellMouseLeave:d=>{if(!cv(d))return;const p=t==null?void 0:t.hoverState;t==null||t.emit("cell-mouse-leave",p==null?void 0:p.row,p==null?void 0:p.column,p==null?void 0:p.cell,d)},tooltipContent:r,tooltipTrigger:n}}function zV(e){const t=Le(ri),r=Oe("table");return{getRowStyle:(u,f)=>{const c=t==null?void 0:t.props.rowStyle;return typeof c=="function"?c.call(null,{row:u,rowIndex:f}):c||null},getRowClass:(u,f)=>{const c=[r.e("row")];t!=null&&t.props.highlightCurrentRow&&u===e.store.states.currentRow.value&&c.push("current-row"),e.stripe&&f%2===1&&c.push(r.em("row","striped"));const h=t==null?void 0:t.props.rowClassName;return typeof h=="string"?c.push(h):typeof h=="function"&&c.push(h.call(null,{row:u,rowIndex:f})),c},getCellStyle:(u,f,c,h)=>{const d=t==null?void 0:t.props.cellStyle;let v=d??{};typeof d=="function"&&(v=d.call(null,{rowIndex:u,columnIndex:f,row:c,column:h}));const p=Xy(f,e==null?void 0:e.fixed,e.store);return As(p,"left"),As(p,"right"),Object.assign({},v,p)},getCellClass:(u,f,c,h,d)=>{const v=Ky(r.b(),f,e==null?void 0:e.fixed,e.store,void 0,d),p=[h.id,h.align,h.className,...v],m=t==null?void 0:t.props.cellClassName;return typeof m=="string"?p.push(m):typeof m=="function"&&p.push(m.call(null,{rowIndex:u,columnIndex:f,row:c,column:h})),p.push(r.e("cell")),p.filter(g=>!!g).join(" ")},getSpan:(u,f,c,h)=>{let d=1,v=1;const p=t==null?void 0:t.props.spanMethod;if(typeof p=="function"){const m=p({row:u,column:f,rowIndex:c,columnIndex:h});Array.isArray(m)?(d=m[0],v=m[1]):typeof m=="object"&&(d=m.rowspan,v=m.colspan)}return{rowspan:d,colspan:v}},getColspanRealWidth:(u,f,c)=>{if(f<1)return u[c].realWidth;const h=u.map(({realWidth:d,width:v})=>d||v).slice(c,c+f);return Number(h.reduce((d,v)=>Number(d)+Number(v),-1))}}}function VV(e){const t=Le(ri),r=Oe("table"),{handleDoubleClick:n,handleClick:i,handleContextMenu:a,handleMouseEnter:o,handleMouseLeave:s,handleCellMouseEnter:l,handleCellMouseLeave:u,tooltipContent:f,tooltipTrigger:c}=HV(e),{getRowStyle:h,getRowClass:d,getCellStyle:v,getCellClass:p,getSpan:m,getColspanRealWidth:g}=zV(e),y=k(()=>e.store.states.columns.value.findIndex(({type:S})=>S==="default")),_=(S,C)=>{const M=t.props.rowKey;return M?Jt(S,M):C},b=(S,C,M,A=!1)=>{const{tooltipEffect:P,tooltipOptions:E,store:L}=e,{indent:O,columns:N}=L.states,H=d(S,C);let V=!0;return M&&(H.push(r.em("row",`level-${M.level}`)),V=M.display),Te("tr",{style:[V?null:{display:"none"},h(S,C)],class:H,key:_(S,C),onDblclick:F=>n(F,S),onClick:F=>i(F,S),onContextmenu:F=>a(F,S),onMouseenter:()=>o(C),onMouseleave:s},N.value.map((F,z)=>{const{rowspan:ee,colspan:J}=m(S,F,C,z);if(!ee||!J)return null;const me=Object.assign({},F);me.realWidth=g(N.value,J,z);const we={store:e.store,_self:e.context||t,column:me,row:S,$index:C,cellIndex:z,expanded:A};z===y.value&&M&&(we.treeNode={indent:M.level*O.value,level:M.level},typeof M.expanded=="boolean"&&(we.treeNode.expanded=M.expanded,"loading"in M&&(we.treeNode.loading=M.loading),"noLazyChildren"in M&&(we.treeNode.noLazyChildren=M.noLazyChildren)));const $e=`${C},${z}`,Ie=me.columnKey||me.rawColumnKey||"",B=x(z,F,we),Y=F.showOverflowTooltip&&m3({effect:P},E,F.showOverflowTooltip);return Te("td",{style:v(C,z,S,F),class:p(C,z,S,F,J-1),key:`${Ie}${$e}`,rowspan:ee,colspan:J,onMouseenter:K=>l(K,S,Y),onMouseleave:u},[B])}))},x=(S,C,M)=>C.renderCell(M);return{wrappedRowRender:(S,C)=>{const M=e.store,{isRowExpanded:A,assertRowKey:P}=M,{treeData:E,lazyTreeNodeMap:L,childrenColumnName:O,rowKey:N}=M.states,H=M.states.columns.value;if(H.some(({type:U})=>U==="expand")){const U=A(S),F=b(S,C,void 0,U),z=t.renderExpanded;return U?z?[[F,Te("tr",{key:`expanded-row__${F.key}`},[Te("td",{colspan:H.length,class:`${r.e("cell")} ${r.e("expanded-cell")}`},[z({row:S,$index:C,store:M,expanded:U})])])]]:(console.error("[Element Error]renderExpanded is required."),F):[[F]]}else if(Object.keys(E.value).length){P();const U=Jt(S,N.value);let F=E.value[U],z=null;F&&(z={expanded:F.expanded,level:F.level,display:!0},typeof F.lazy=="boolean"&&(typeof F.loaded=="boolean"&&F.loaded&&(z.noLazyChildren=!(F.children&&F.children.length)),z.loading=F.loading));const ee=[b(S,C,z)];if(F){let J=0;const me=($e,Ie)=>{$e&&$e.length&&Ie&&$e.forEach(B=>{const Y={display:Ie.display&&Ie.expanded,level:Ie.level+1,expanded:!1,noLazyChildren:!1,loading:!1},K=Jt(B,N.value);if(K==null)throw new Error("For nested data item, row-key is required.");if(F={...E.value[K]},F&&(Y.expanded=F.expanded,F.level=F.level||Y.level,F.display=!!(F.expanded&&Y.display),typeof F.lazy=="boolean"&&(typeof F.loaded=="boolean"&&F.loaded&&(Y.noLazyChildren=!(F.children&&F.children.length)),Y.loading=F.loading)),J++,ee.push(b(B,C+J,Y)),F){const Q=L.value[K]||B[O.value];me(Q,F)}})};F.display=!0;const we=L.value[U]||S[O.value];me(we,F)}return ee}else return b(S,C,void 0)},tooltipContent:f,tooltipTrigger:c}}const WV={store:{required:!0,type:Object},stripe:Boolean,tooltipEffect:String,tooltipOptions:{type:Object},context:{default:()=>({}),type:Object},rowClassName:[String,Function],rowStyle:[Object,Function],fixed:{type:String,default:""},highlight:Boolean};var GV=ie({name:"ElTableBody",props:WV,setup(e){const t=it(),r=Le(ri),n=Oe("table"),{wrappedRowRender:i,tooltipContent:a,tooltipTrigger:o}=VV(e),{onColumnsChange:s,onScrollableChange:l}=JA(r);return be(e.store.states.hoverRow,(u,f)=>{!e.store.states.isComplex.value||!At||q3(()=>{const c=t==null?void 0:t.vnode.el,h=Array.from((c==null?void 0:c.children)||[]).filter(p=>p==null?void 0:p.classList.contains(`${n.e("row")}`)),d=h[f],v=h[u];d&&so(d,"hover-row"),v&&Za(v,"hover-row")})}),ks(()=>{var u;(u=Xr)==null||u()}),{ns:n,onColumnsChange:s,onScrollableChange:l,wrappedRowRender:i,tooltipContent:a,tooltipTrigger:o}},render(){const{wrappedRowRender:e,store:t}=this,r=t.states.data.value||[];return Te("tbody",{tabIndex:-1},[r.reduce((n,i)=>n.concat(e(i,n.length)),[])])}});function UV(){const e=Le(ri),t=e==null?void 0:e.store,r=k(()=>t.states.fixedLeafColumnsLength.value),n=k(()=>t.states.rightFixedColumns.value.length),i=k(()=>t.states.columns.value.length),a=k(()=>t.states.fixedColumns.value.length),o=k(()=>t.states.rightFixedColumns.value.length);return{leftFixedLeafCount:r,rightFixedLeafCount:n,columnsCount:i,leftFixedCount:a,rightFixedCount:o,columns:t.states.columns}}function YV(e){const{columns:t}=UV(),r=Oe("table");return{getCellClasses:(a,o)=>{const s=a[o],l=[r.e("cell"),s.id,s.align,s.labelClassName,...Ky(r.b(),o,s.fixed,e.store)];return s.className&&l.push(s.className),s.children||l.push(r.is("leaf")),l},getCellStyles:(a,o)=>{const s=Xy(o,a.fixed,e.store);return As(s,"left"),As(s,"right"),s},columns:t}}var jV=ie({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const{getCellClasses:t,getCellStyles:r,columns:n}=YV(e);return{ns:Oe("table"),getCellClasses:t,getCellStyles:r,columns:n}},render(){const{columns:e,getCellStyles:t,getCellClasses:r,summaryMethod:n,sumText:i}=this,a=this.store.states.data.value;let o=[];return n?o=n({columns:e,data:a}):e.forEach((s,l)=>{if(l===0){o[l]=i;return}const u=a.map(d=>Number(d[s.property])),f=[];let c=!0;u.forEach(d=>{if(!Number.isNaN(+d)){c=!1;const v=`${d}`.split(".")[1];f.push(v?v.length:0)}});const h=Math.max.apply(null,f);c?o[l]="":o[l]=u.reduce((d,v)=>{const p=Number(v);return Number.isNaN(+p)?d:Number.parseFloat((d+v).toFixed(Math.min(h,20)))},0)}),Te(Te("tfoot",[Te("tr",{},[...e.map((s,l)=>Te("td",{key:l,colspan:s.colSpan,rowspan:s.rowSpan,class:r(e,l),style:t(s,l)},[Te("div",{class:["cell",s.labelClassName]},[o[l]])]))])]))}});function qV(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(f,c)=>{e.toggleRowSelection(f,c,!1),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,c)=>{e.toggleRowExpansionAdapter(f,c)},clearSort:()=>{e.clearSort()},sort:(f,c)=>{e.commit("sort",{prop:f,order:c})}}}function KV(e,t,r,n){const i=$(!1),a=$(null),o=$(!1),s=F=>{o.value=F},l=$({width:null,height:null,headerHeight:null}),u=$(!1),f={display:"inline-block",verticalAlign:"middle"},c=$(),h=$(0),d=$(0),v=$(0),p=$(0),m=$(0);na(()=>{t.setHeight(e.height)}),na(()=>{t.setMaxHeight(e.maxHeight)}),be(()=>[e.currentRowKey,r.states.rowKey],([F,z])=>{!T(z)||!T(F)||r.setCurrentRowKey(`${F}`)},{immediate:!0}),be(()=>e.data,F=>{n.store.commit("setData",F)},{immediate:!0,deep:!0}),na(()=>{e.expandRowKeys&&r.setExpandRowKeysAdapter(e.expandRowKeys)});const g=()=>{n.store.commit("setHoverRow",null),n.hoverState&&(n.hoverState=null)},y=(F,z)=>{const{pixelX:ee,pixelY:J}=z;Math.abs(ee)>=Math.abs(J)&&(n.refs.bodyWrapper.scrollLeft+=z.pixelX/5)},_=k(()=>e.height||e.maxHeight||r.states.fixedColumns.value.length>0||r.states.rightFixedColumns.value.length>0),b=k(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),x=()=>{_.value&&t.updateElsHeight(),t.updateColumnsWidth(),requestAnimationFrame(M)};_t(async()=>{await Nt(),r.updateColumns(),A(),requestAnimationFrame(x);const F=n.vnode.el,z=n.refs.headerWrapper;e.flexible&&F&&F.parentElement&&(F.parentElement.style.minWidth="0"),l.value={width:c.value=F.offsetWidth,height:F.offsetHeight,headerHeight:e.showHeader&&z?z.offsetHeight:null},r.states.columns.value.forEach(ee=>{ee.filteredValue&&ee.filteredValue.length&&n.store.commit("filterChange",{column:ee,values:ee.filteredValue,silent:!0})}),n.$ready=!0});const w=(F,z)=>{if(!F)return;const ee=Array.from(F.classList).filter(J=>!J.startsWith("is-scrolling-"));ee.push(t.scrollX.value?z:"is-scrolling-none"),F.className=ee.join(" ")},S=F=>{const{tableWrapper:z}=n.refs;w(z,F)},C=F=>{const{tableWrapper:z}=n.refs;return!!(z&&z.classList.contains(F))},M=function(){if(!n.refs.scrollBarRef)return;if(!t.scrollX.value){const Ie="is-scrolling-none";C(Ie)||S(Ie);return}const F=n.refs.scrollBarRef.wrapRef;if(!F)return;const{scrollLeft:z,offsetWidth:ee,scrollWidth:J}=F,{headerWrapper:me,footerWrapper:we}=n.refs;me&&(me.scrollLeft=z),we&&(we.scrollLeft=z);const $e=J-ee-1;z>=$e?S("is-scrolling-right"):S(z===0?"is-scrolling-left":"is-scrolling-middle")},A=()=>{n.refs.scrollBarRef&&(n.refs.scrollBarRef.wrapRef&&xn(n.refs.scrollBarRef.wrapRef,"scroll",M,{passive:!0}),e.fit?ms(n.vnode.el,P):xn(window,"resize",P),ms(n.refs.bodyWrapper,()=>{var F,z;P(),(z=(F=n.refs)==null?void 0:F.scrollBarRef)==null||z.update()}))},P=()=>{var F,z,ee,J;const me=n.vnode.el;if(!n.$ready||!me)return;let we=!1;const{width:$e,height:Ie,headerHeight:B}=l.value,Y=c.value=me.offsetWidth;$e!==Y&&(we=!0);const K=me.offsetHeight;(e.height||_.value)&&Ie!==K&&(we=!0);const Q=e.tableLayout==="fixed"?n.refs.headerWrapper:(F=n.refs.tableHeaderRef)==null?void 0:F.$el;e.showHeader&&(Q==null?void 0:Q.offsetHeight)!==B&&(we=!0),h.value=((z=n.refs.tableWrapper)==null?void 0:z.scrollHeight)||0,v.value=(Q==null?void 0:Q.scrollHeight)||0,p.value=((ee=n.refs.footerWrapper)==null?void 0:ee.offsetHeight)||0,m.value=((J=n.refs.appendWrapper)==null?void 0:J.offsetHeight)||0,d.value=h.value-v.value-p.value-m.value,we&&(l.value={width:Y,height:K,headerHeight:e.showHeader&&(Q==null?void 0:Q.offsetHeight)||0},x())},E=xi(),L=k(()=>{const{bodyWidth:F,scrollY:z,gutterWidth:ee}=t;return F.value?`${F.value-(z.value?ee:0)}px`:""}),O=k(()=>e.maxHeight?"fixed":e.tableLayout),N=k(()=>{if(e.data&&e.data.length)return null;let F="100%";e.height&&d.value&&(F=`${d.value}px`);const z=c.value;return{width:z?`${z}px`:"",height:F}}),H=k(()=>e.height?{height:Number.isNaN(Number(e.height))?e.height:`${e.height}px`}:e.maxHeight?{maxHeight:Number.isNaN(Number(e.maxHeight))?e.maxHeight:`${e.maxHeight}px`}:{}),V=k(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${v.value+p.value}px)`}:{maxHeight:`${e.maxHeight-v.value-p.value}px`}:{});return{isHidden:i,renderExpanded:a,setDragVisible:s,isGroup:u,handleMouseLeave:g,handleHeaderFooterMousewheel:y,tableSize:E,emptyBlockStyle:N,handleFixedMousewheel:(F,z)=>{const ee=n.refs.bodyWrapper;if(Math.abs(z.spinY)>0){const J=ee.scrollTop;z.pixelY<0&&J!==0&&F.preventDefault(),z.pixelY>0&&ee.scrollHeight-ee.clientHeight>J&&F.preventDefault(),ee.scrollTop+=Math.ceil(z.pixelY/5)}else ee.scrollLeft+=Math.ceil(z.pixelX/5)},resizeProxyVisible:o,bodyWidth:L,resizeState:l,doLayout:x,tableBodyStyles:b,tableLayout:O,scrollbarViewStyle:f,tableInnerStyle:H,scrollbarStyle:V}}function XV(e){const t=$(),r=()=>{const i=e.vnode.el.querySelector(".hidden-columns"),a={childList:!0,subtree:!0},o=e.store.states.updateOrderFns;t.value=new MutationObserver(()=>{o.forEach(s=>s())}),t.value.observe(i,a)};_t(()=>{r()}),ks(()=>{var n;(n=t.value)==null||n.disconnect()})}var ZV={data:{type:Array,default:()=>[]},size:dh,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},showSummary:Boolean,sumText:String,summaryMethod:Function,rowClassName:[String,Function],rowStyle:[Object,Function],cellClassName:[String,Function],cellStyle:[Object,Function],headerRowClassName:[String,Function],headerRowStyle:[Object,Function],headerCellClassName:[String,Function],headerCellStyle:[Object,Function],highlightCurrentRow:Boolean,currentRowKey:[String,Number],emptyText:String,expandRowKeys:Array,defaultExpandAll:Boolean,defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children"})},lazy:Boolean,load:Function,style:{type:Object,default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:{type:Boolean,default:!1},flexible:Boolean,showOverflowTooltip:[Boolean,Object]};function t2(e){const t=e.tableLayout==="auto";let r=e.columns||[];t&&r.every(i=>i.width===void 0)&&(r=[]);const n=i=>{const a={key:`${e.tableLayout}_${i.id}`,style:{},name:void 0};return t?a.style={width:`${i.width}px`}:a.name=i.id,a};return Te("colgroup",{},r.map(i=>Te("col",n(i))))}t2.props=["columns","tableLayout"];const QV=()=>{const e=$(),t=(a,o)=>{const s=e.value;s&&s.scrollTo(a,o)},r=(a,o)=>{const s=e.value;s&&kt(o)&&["Top","Left"].includes(a)&&s[`setScroll${a}`](o)};return{scrollBarRef:e,scrollTo:t,setScrollTop:a=>r("Top",a),setScrollLeft:a=>r("Left",a)}};let JV=1;const eW=ie({name:"ElTable",directives:{Mousewheel:d8},components:{TableHeader:$V,TableBody:GV,TableFooter:jV,ElScrollbar:uA,hColgroup:t2},props:ZV,emits:["select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-contextmenu","cell-click","cell-dblclick","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],setup(e){const{t}=Hs(),r=Oe("table"),n=it();Dt(ri,n);const i=TV(n,e);n.store=i;const a=new AV({store:n.store,table:n,fit:e.fit,showHeader:e.showHeader});n.layout=a;const o=k(()=>(i.states.data.value||[]).length===0),{setCurrentRow:s,getSelectionRows:l,toggleRowSelection:u,clearSelection:f,clearFilter:c,toggleAllSelection:h,toggleRowExpansion:d,clearSort:v,sort:p}=qV(i),{isHidden:m,renderExpanded:g,setDragVisible:y,isGroup:_,handleMouseLeave:b,handleHeaderFooterMousewheel:x,tableSize:w,emptyBlockStyle:S,handleFixedMousewheel:C,resizeProxyVisible:M,bodyWidth:A,resizeState:P,doLayout:E,tableBodyStyles:L,tableLayout:O,scrollbarViewStyle:N,tableInnerStyle:H,scrollbarStyle:V}=KV(e,a,i,n),{scrollBarRef:U,scrollTo:F,setScrollLeft:z,setScrollTop:ee}=QV(),J=hd(E,50),me=`${r.namespace.value}-table_${JV++}`;n.tableId=me,n.state={isGroup:_,resizeState:P,doLayout:E,debouncedUpdateLayout:J};const we=k(()=>e.sumText||t("el.table.sumText")),$e=k(()=>e.emptyText||t("el.table.emptyText"));return XV(n),{ns:r,layout:a,store:i,handleHeaderFooterMousewheel:x,handleMouseLeave:b,tableId:me,tableSize:w,isHidden:m,isEmpty:o,renderExpanded:g,resizeProxyVisible:M,resizeState:P,isGroup:_,bodyWidth:A,tableBodyStyles:L,emptyBlockStyle:S,debouncedUpdateLayout:J,handleFixedMousewheel:C,setCurrentRow:s,getSelectionRows:l,toggleRowSelection:u,clearSelection:f,clearFilter:c,toggleAllSelection:h,toggleRowExpansion:d,clearSort:v,doLayout:E,sort:p,t,setDragVisible:y,context:n,computedSumText:we,computedEmptyText:$e,tableLayout:O,scrollbarViewStyle:N,tableInnerStyle:H,scrollbarStyle:V,scrollBarRef:U,scrollTo:F,setScrollLeft:z,setScrollTop:ee}}}),tW=["data-prefix"],rW={ref:"hiddenColumns",class:"hidden-columns"};function nW(e,t,r,n,i,a){const o=xr("hColgroup"),s=xr("table-header"),l=xr("table-body"),u=xr("table-footer"),f=xr("el-scrollbar"),c=fT("mousewheel");return G(),ce("div",{ref:"tableWrapper",class:re([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:ct(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[0]||(t[0]=(...h)=>e.handleMouseLeave&&e.handleMouseLeave(...h))},[te("div",{class:re(e.ns.e("inner-wrapper")),style:ct(e.tableInnerStyle)},[te("div",rW,[Ce(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?qt((G(),ce("div",{key:0,ref:"headerWrapper",class:re(e.ns.e("header-wrapper"))},[te("table",{ref:"tableHeader",class:re(e.ns.e("header")),style:ct(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[Z(o,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Z(s,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","onSetDragVisible"])],6)],2)),[[c,e.handleHeaderFooterMousewheel]]):Ae("v-if",!0),te("div",{ref:"bodyWrapper",class:re(e.ns.e("body-wrapper"))},[Z(f,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn},{default:q(()=>[te("table",{ref:"tableBody",class:re(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:ct({width:e.bodyWidth,tableLayout:e.tableLayout})},[Z(o,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(G(),ve(s,{key:0,ref:"tableHeaderRef",class:re(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","onSetDragVisible"])):Ae("v-if",!0),Z(l,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.tooltipEffect,"tooltip-options":e.tooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(G(),ve(u,{key:1,class:re(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):Ae("v-if",!0)],6),e.isEmpty?(G(),ce("div",{key:0,ref:"emptyBlock",style:ct(e.emptyBlockStyle),class:re(e.ns.e("empty-block"))},[te("span",{class:re(e.ns.e("empty-text"))},[Ce(e.$slots,"empty",{},()=>[pt(xe(e.computedEmptyText),1)])],2)],6)):Ae("v-if",!0),e.$slots.append?(G(),ce("div",{key:1,ref:"appendWrapper",class:re(e.ns.e("append-wrapper"))},[Ce(e.$slots,"append")],2)):Ae("v-if",!0)]),_:3},8,["view-style","wrap-style","always"])],2),e.showSummary&&e.tableLayout==="fixed"?qt((G(),ce("div",{key:1,ref:"footerWrapper",class:re(e.ns.e("footer-wrapper"))},[te("table",{class:re(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:ct(e.tableBodyStyles)},[Z(o,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Z(u,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[Kn,!e.isEmpty],[c,e.handleHeaderFooterMousewheel]]):Ae("v-if",!0),e.border||e.isGroup?(G(),ce("div",{key:2,class:re(e.ns.e("border-left-patch"))},null,2)):Ae("v-if",!0)],6),qt(te("div",{ref:"resizeProxy",class:re(e.ns.e("column-resize-proxy"))},null,2),[[Kn,e.resizeProxyVisible]])],46,tW)}var iW=Ke(eW,[["render",nW],["__file","table.vue"]]);const aW={selection:"table-column--selection",expand:"table__expand-column"},oW={default:{order:""},selection:{width:48,minWidth:48,realWidth:48,order:""},expand:{width:48,minWidth:48,realWidth:48,order:""},index:{width:48,minWidth:48,realWidth:48,order:""}},sW=e=>aW[e]||"",lW={selection:{renderHeader({store:e,column:t}){function r(){return e.states.data.value&&e.states.data.value.length===0}return Te(Ms,{disabled:r(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection,modelValue:e.states.isAllSelected.value,ariaLabel:t.label})},renderCell({row:e,column:t,store:r,$index:n}){return Te(Ms,{disabled:t.selectable?!t.selectable.call(null,e,n):!1,size:r.states.tableSize.value,onChange:()=>{r.commit("rowSelectedChanged",e)},onClick:i=>i.stopPropagation(),modelValue:r.isSelected(e),ariaLabel:t.label})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let r=t+1;const n=e.index;return typeof n=="number"?r=t+n:typeof n=="function"&&(r=n(t)),Te("div",{},[r])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({row:e,store:t,expanded:r}){const{ns:n}=t,i=[n.e("expand-icon")];return r&&i.push(n.em("expand-icon","expanded")),Te("div",{class:i,onClick:function(o){o.stopPropagation(),t.toggleRowExpansion(e)}},{default:()=>[Te(Bt,null,{default:()=>[Te(Ey)]})]})},sortable:!1,resizable:!1}};function uW({row:e,column:t,$index:r}){var n;const i=t.property,a=i&&Ec(e,i).value;return t&&t.formatter?t.formatter(e,t,a,r):((n=a==null?void 0:a.toString)==null?void 0:n.call(a))||""}function fW({row:e,treeNode:t,store:r},n=!1){const{ns:i}=r;if(!t)return n?[Te("span",{class:i.e("placeholder")})]:null;const a=[],o=function(s){s.stopPropagation(),!t.loading&&r.loadOrToggle(e)};if(t.indent&&a.push(Te("span",{class:i.e("indent"),style:{"padding-left":`${t.indent}px`}})),typeof t.expanded=="boolean"&&!t.noLazyChildren){const s=[i.e("expand-icon"),t.expanded?i.em("expand-icon","expanded"):""];let l=Ey;t.loading&&(l=Ly),a.push(Te("div",{class:s,onClick:o},{default:()=>[Te(Bt,{class:{[i.is("loading")]:t.loading}},{default:()=>[Te(l)]})]}))}else a.push(Te("span",{class:i.e("placeholder")}));return a}function O1(e,t){return e.reduce((r,n)=>(r[n]=n,r),t)}function cW(e,t){const r=it();return{registerComplexWatchers:()=>{const a=["fixed"],o={realWidth:"width",realMinWidth:"minWidth"},s=O1(a,o);Object.keys(s).forEach(l=>{const u=o[l];Ue(t,u)&&be(()=>t[u],f=>{let c=f;u==="width"&&l==="realWidth"&&(c=qy(f)),u==="minWidth"&&l==="realMinWidth"&&(c=qA(f)),r.columnConfig.value[u]=c,r.columnConfig.value[l]=c;const h=u==="fixed";e.value.store.scheduleLayout(h)})})},registerNormalWatchers:()=>{const a=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip"],o={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},s=O1(a,o);Object.keys(s).forEach(l=>{const u=o[l];Ue(t,u)&&be(()=>t[u],f=>{r.columnConfig.value[l]=f})})}}}function dW(e,t,r){const n=it(),i=$(""),a=$(!1),o=$(),s=$(),l=Oe("table");na(()=>{o.value=e.align?`is-${e.align}`:null,o.value}),na(()=>{s.value=e.headerAlign?`is-${e.headerAlign}`:o.value,s.value});const u=k(()=>{let b=n.vnode.vParent||n.parent;for(;b&&!b.tableId&&!b.columnId;)b=b.vnode.vParent||b.parent;return b}),f=k(()=>{const{store:b}=n.parent;if(!b)return!1;const{treeData:x}=b.states,w=x.value;return w&&Object.keys(w).length>0}),c=$(qy(e.width)),h=$(qA(e.minWidth)),d=b=>(c.value&&(b.width=c.value),h.value&&(b.minWidth=h.value),!c.value&&h.value&&(b.width=void 0),b.minWidth||(b.minWidth=80),b.realWidth=Number(b.width===void 0?b.minWidth:b.width),b),v=b=>{const x=b.type,w=lW[x]||{};Object.keys(w).forEach(C=>{const M=w[C];C!=="className"&&M!==void 0&&(b[C]=M)});const S=sW(x);if(S){const C=`${T(l.namespace)}-${S}`;b.className=b.className?`${b.className} ${C}`:C}return b},p=b=>{Array.isArray(b)?b.forEach(w=>x(w)):x(b);function x(w){var S;((S=w==null?void 0:w.type)==null?void 0:S.name)==="ElTableColumn"&&(w.vParent=n)}};return{columnId:i,realAlign:o,isSubColumn:a,realHeaderAlign:s,columnOrTableParent:u,setColumnWidth:d,setColumnForcedProps:v,setColumnRenders:b=>{e.renderHeader||b.type!=="selection"&&(b.renderHeader=w=>(n.columnConfig.value.label,Ce(t,"header",w,()=>[b.label])));let x=b.renderCell;return b.type==="expand"?(b.renderCell=w=>Te("div",{class:"cell"},[x(w)]),r.value.renderExpanded=w=>t.default?t.default(w):t.default):(x=x||uW,b.renderCell=w=>{let S=null;if(t.default){const L=t.default(w);S=L.some(O=>O.type!==Mr)?L:x(w)}else S=x(w);const{columns:C}=r.value.store.states,M=C.value.findIndex(L=>L.type==="default"),A=f.value&&w.cellIndex===M,P=fW(w,A),E={class:"cell",style:{}};return b.showOverflowTooltip&&(E.class=`${E.class} ${T(l.namespace)}-tooltip`,E.style={width:`${(w.column.realWidth||Number(w.column.width))-1}px`}),p(S),Te("div",E,[P,S])}),b},getPropsData:(...b)=>b.reduce((x,w)=>(Array.isArray(w)&&w.forEach(S=>{x[S]=e[S]}),x),{}),getColumnElIndex:(b,x)=>Array.prototype.indexOf.call(b,x),updateColumnOrder:()=>{r.value.store.commit("updateColumnOrder",n.columnConfig.value)}}}var hW={type:{type:String,default:"default"},label:String,className:String,labelClassName:String,property:String,prop:String,width:{type:[String,Number],default:""},minWidth:{type:[String,Number],default:""},renderHeader:Function,sortable:{type:[Boolean,String],default:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},columnKey:String,align:String,headerAlign:String,showOverflowTooltip:{type:[Boolean,Object],default:void 0},fixed:[Boolean,String],formatter:Function,selectable:Function,reserveSelection:Boolean,filterMethod:Function,filteredValue:Array,filters:Array,filterPlacement:String,filterMultiple:{type:Boolean,default:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let vW=1;var r2=ie({name:"ElTableColumn",components:{ElCheckbox:Ms},props:hW,setup(e,{slots:t}){const r=it(),n=$({}),i=k(()=>{let _=r.parent;for(;_&&!_.tableId;)_=_.parent;return _}),{registerNormalWatchers:a,registerComplexWatchers:o}=cW(i,e),{columnId:s,isSubColumn:l,realHeaderAlign:u,columnOrTableParent:f,setColumnWidth:c,setColumnForcedProps:h,setColumnRenders:d,getPropsData:v,getColumnElIndex:p,realAlign:m,updateColumnOrder:g}=dW(e,t,i),y=f.value;s.value=`${y.tableId||y.columnId}_column_${vW++}`,eh(()=>{l.value=i.value!==y;const _=e.type||"default",b=e.sortable===""?!0:e.sortable,x=bs(e.showOverflowTooltip)?y.props.showOverflowTooltip:e.showOverflowTooltip,w={...oW[_],id:s.value,type:_,property:e.prop||e.property,align:m,headerAlign:u,showOverflowTooltip:x,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:b,index:e.index,rawColumnKey:r.vnode.key};let P=v(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);P=vV(w,P),P=gV(d,c,h)(P),n.value=P,a(),o()}),_t(()=>{var _;const b=f.value,x=l.value?b.vnode.el.children:(_=b.refs.hiddenColumns)==null?void 0:_.children,w=()=>p(x||[],r.vnode.el);n.value.getColumnIndex=w,w()>-1&&i.value.store.commit("insertColumn",n.value,l.value?b.columnConfig.value:null,g)}),tr(()=>{i.value.store.commit("removeColumn",n.value,l.value?y.columnConfig.value:null,g)}),r.columnId=s.value,r.columnConfig=n},render(){var e,t,r;try{const n=(t=(e=this.$slots).default)==null?void 0:t.call(e,{row:{},column:{},$index:-1}),i=[];if(Array.isArray(n))for(const o of n)((r=o.type)==null?void 0:r.name)==="ElTableColumn"||o.shapeFlag&2?i.push(o):o.type===ft&&Array.isArray(o.children)&&o.children.forEach(s=>{(s==null?void 0:s.patchFlag)!==1024&&!ze(s==null?void 0:s.children)&&i.push(s)});return Te("div",i)}catch{return Te("div",[])}}});const pW=Yt(iW,{TableColumn:r2}),gW=pa(r2),mW=Je({type:{type:String,values:["primary","success","info","warning","danger",""],default:""},size:{type:String,values:$s,default:""},truncated:{type:Boolean},lineClamp:{type:[String,Number]},tag:{type:String,default:"span"}}),yW=ie({name:"ElText"}),_W=ie({...yW,props:mW,setup(e){const t=e,r=xi(),n=Oe("text"),i=k(()=>[n.b(),n.m(t.type),n.m(r.value),n.is("truncated",t.truncated),n.is("line-clamp",!bs(t.lineClamp))]);return(a,o)=>(G(),ve(Vt(a.tag),{class:re(T(i)),style:ct({"-webkit-line-clamp":a.lineClamp})},{default:q(()=>[Ce(a.$slots,"default")]),_:3},8,["class","style"]))}});var bW=Ke(_W,[["__file","text.vue"]]);const wW=Yt(bW),n2=["success","info","warning","error"],wr=ja({customClass:"",center:!1,dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",offset:16,zIndex:0,grouping:!1,repeatNum:1,appendTo:At?document.body:void 0}),SW=Je({customClass:{type:String,default:wr.customClass},center:{type:Boolean,default:wr.center},dangerouslyUseHTMLString:{type:Boolean,default:wr.dangerouslyUseHTMLString},duration:{type:Number,default:wr.duration},icon:{type:vr,default:wr.icon},id:{type:String,default:wr.id},message:{type:Be([String,Object,Function]),default:wr.message},onClose:{type:Be(Function),required:!1},showClose:{type:Boolean,default:wr.showClose},type:{type:String,values:n2,default:wr.type},offset:{type:Number,default:wr.offset},zIndex:{type:Number,default:wr.zIndex},grouping:{type:Boolean,default:wr.grouping},repeatNum:{type:Number,default:wr.repeatNum}}),xW={destroy:()=>!0},Cn=Qm([]),CW=e=>{const t=Cn.findIndex(i=>i.id===e),r=Cn[t];let n;return t>0&&(n=Cn[t-1]),{current:r,prev:n}},TW=e=>{const{prev:t}=CW(e);return t?t.vm.exposed.bottom.value:0},MW=(e,t)=>Cn.findIndex(n=>n.id===e)>0?20:t,AW=["id"],PW=["innerHTML"],EW=ie({name:"ElMessage"}),LW=ie({...EW,props:SW,emits:xW,setup(e,{expose:t}){const r=e,{Close:n}=G3,{ns:i,zIndex:a}=m4("message"),{currentZIndex:o,nextZIndex:s}=a,l=$(),u=$(!1),f=$(0);let c;const h=k(()=>r.type?r.type==="error"?"danger":r.type:"info"),d=k(()=>{const S=r.type;return{[i.bm("icon",S)]:S&&Wb[S]}}),v=k(()=>r.icon||Wb[r.type]||""),p=k(()=>TW(r.id)),m=k(()=>MW(r.id,r.offset)+p.value),g=k(()=>f.value+m.value),y=k(()=>({top:`${m.value}px`,zIndex:o.value}));function _(){r.duration!==0&&({stop:c}=hu(()=>{x()},r.duration))}function b(){c==null||c()}function x(){u.value=!1}function w({code:S}){S===hr.esc&&x()}return _t(()=>{_(),s(),u.value=!0}),be(()=>r.repeatNum,()=>{b(),_()}),xn(document,"keydown",w),ms(l,()=>{f.value=l.value.getBoundingClientRect().height}),t({visible:u,bottom:g,close:x}),(S,C)=>(G(),ve(ti,{name:T(i).b("fade"),onBeforeLeave:S.onClose,onAfterLeave:C[0]||(C[0]=M=>S.$emit("destroy")),persisted:""},{default:q(()=>[qt(te("div",{id:S.id,ref_key:"messageRef",ref:l,class:re([T(i).b(),{[T(i).m(S.type)]:S.type},T(i).is("center",S.center),T(i).is("closable",S.showClose),S.customClass]),style:ct(T(y)),role:"alert",onMouseenter:b,onMouseleave:_},[S.repeatNum>1?(G(),ve(T(Nz),{key:0,value:S.repeatNum,type:T(h),class:re(T(i).e("badge"))},null,8,["value","type","class"])):Ae("v-if",!0),T(v)?(G(),ve(T(Bt),{key:1,class:re([T(i).e("icon"),T(d)])},{default:q(()=>[(G(),ve(Vt(T(v))))]),_:1},8,["class"])):Ae("v-if",!0),Ce(S.$slots,"default",{},()=>[S.dangerouslyUseHTMLString?(G(),ce(ft,{key:1},[Ae(" Caution here, message could've been compromised, never use user's input as message "),te("p",{class:re(T(i).e("content")),innerHTML:S.message},null,10,PW)],2112)):(G(),ce("p",{key:0,class:re(T(i).e("content"))},xe(S.message),3))]),S.showClose?(G(),ve(T(Bt),{key:2,class:re(T(i).e("closeBtn")),onClick:ua(x,["stop"])},{default:q(()=>[Z(T(n))]),_:1},8,["class","onClick"])):Ae("v-if",!0)],46,AW),[[Kn,u.value]])]),_:3},8,["name","onBeforeLeave"]))}});var DW=Ke(LW,[["__file","message.vue"]]);let IW=1;const i2=e=>{const t=!e||ze(e)||la(e)||De(e)?{message:e}:e,r={...wr,...t};if(!r.appendTo)r.appendTo=document.body;else if(ze(r.appendTo)){let n=document.querySelector(r.appendTo);mo(n)||(n=document.body),r.appendTo=n}return r},OW=e=>{const t=Cn.indexOf(e);if(t===-1)return;Cn.splice(t,1);const{handler:r}=e;r.close()},RW=({appendTo:e,...t},r)=>{const n=`message_${IW++}`,i=t.onClose,a=document.createElement("div"),o={...t,id:n,onClose:()=>{i==null||i(),OW(f)},onDestroy:()=>{ld(null,a)}},s=Z(DW,o,De(o.message)||la(o.message)?{default:De(o.message)?o.message:()=>o.message}:null);s.appContext=r||Ps._context,ld(s,a),e.appendChild(a.firstElementChild);const l=s.component,f={id:n,vnode:s,vm:l,handler:{close:()=>{l.exposed.visible.value=!1}},props:s.component.props};return f},Ps=(e={},t)=>{if(!At)return{close:()=>{}};if(kt(i1.max)&&Cn.length>=i1.max)return{close:()=>{}};const r=i2(e);if(r.grouping&&Cn.length){const i=Cn.find(({vnode:a})=>{var o;return((o=a.props)==null?void 0:o.message)===r.message});if(i)return i.props.repeatNum+=1,i.props.type=r.type,i.handler}const n=RW(r,t);return Cn.push(n),n.handler};n2.forEach(e=>{Ps[e]=(t={},r)=>{const n=i2(t);return Ps({...n,type:e},r)}});function kW(e){for(const t of Cn)(!e||e===t.props.type)&&t.handler.close()}Ps.closeAll=kW;Ps._context=null;const Wl=U3(Ps,"$message"),NW={id:"app"},BW={class:"grid-content header-color"},FW={class:"header-content"},$W=te("div",{class:"brand"},[te("a",{href:"#"},"frp")],-1),HW={class:"dark-switch"},zW=te("span",null,"Proxies",-1),VW={id:"content"},WW=te("footer",null,null,-1),GW=ie({__name:"App",setup(e){const t=XR(),r=$(t),n=mR(t),i=a=>{a==""&&window.open("https://github.com/fatedier/frp")};return(a,o)=>{const s=cV,l=H6,u=z6,f=$6,c=$A,h=xr("router-view"),d=FA;return G(),ce("div",NW,[te("header",BW,[te("div",FW,[$W,te("div",HW,[Z(s,{modelValue:r.value,"onUpdate:modelValue":o[0]||(o[0]=v=>r.value=v),"inline-prompt":"","active-text":"Dark","inactive-text":"Light",onChange:T(n),style:{"--el-switch-on-color":"#444452","--el-switch-off-color":"#589ef8"}},null,8,["modelValue","onChange"])])])]),te("section",null,[Z(d,null,{default:q(()=>[Z(c,{id:"side-nav",xs:24,md:4},{default:q(()=>[Z(f,{"default-active":"/",mode:"vertical",theme:"light",router:"false",onSelect:i},{default:q(()=>[Z(l,{index:"/"},{default:q(()=>[pt("Overview")]),_:1}),Z(u,{index:"/proxies"},{title:q(()=>[zW]),default:q(()=>[Z(l,{index:"/proxies/tcp"},{default:q(()=>[pt("TCP")]),_:1}),Z(l,{index:"/proxies/udp"},{default:q(()=>[pt("UDP")]),_:1}),Z(l,{index:"/proxies/http"},{default:q(()=>[pt("HTTP")]),_:1}),Z(l,{index:"/proxies/https"},{default:q(()=>[pt("HTTPS")]),_:1}),Z(l,{index:"/proxies/tcpmux"},{default:q(()=>[pt("TCPMUX")]),_:1}),Z(l,{index:"/proxies/stcp"},{default:q(()=>[pt("STCP")]),_:1}),Z(l,{index:"/proxies/sudp"},{default:q(()=>[pt("SUDP")]),_:1})]),_:1}),Z(l,{index:""},{default:q(()=>[pt("Help")]),_:1})]),_:1})]),_:1}),Z(c,{xs:24,md:20},{default:q(()=>[te("div",VW,[Z(h)])]),_:1})]),_:1})]),WW])}}});/*! * vue-router v4.2.5 * (c) 2023 Eduardo San Martin Morote * @license MIT - */const Ko=typeof window<"u";function UW(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const lt=Object.assign;function dv(e,t){const r={};for(const n in t){const i=t[n];r[n]=En(i)?i.map(e):e(i)}return r}const Gl=()=>{},En=Array.isArray,YW=/\/$/,jW=e=>e.replace(YW,"");function hv(e,t,r="/"){let n,i={},a="",o="";const s=t.indexOf("#");let l=t.indexOf("?");return s=0&&(l=-1),l>-1&&(n=t.slice(0,l),a=t.slice(l+1,s>-1?s:t.length),i=e(a)),s>-1&&(n=n||t.slice(0,s),o=t.slice(s,t.length)),n=ZW(n??t,r),{fullPath:n+(a&&"?")+a+o,path:n,query:i,hash:o}}function qW(e,t){const r=t.query?e(t.query):"";return t.path+(r&&"?")+r+(t.hash||"")}function R1(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function KW(e,t,r){const n=t.matched.length-1,i=r.matched.length-1;return n>-1&&n===i&&As(t.matched[n],r.matched[i])&&a2(t.params,r.params)&&e(t.query)===e(r.query)&&t.hash===r.hash}function As(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function a2(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const r in e)if(!XW(e[r],t[r]))return!1;return!0}function XW(e,t){return En(e)?k1(e,t):En(t)?k1(t,e):e===t}function k1(e,t){return En(t)?e.length===t.length&&e.every((r,n)=>r===t[n]):e.length===1&&e[0]===t}function ZW(e,t){if(e.startsWith("/"))return e;if(!e)return t;const r=t.split("/"),n=e.split("/"),i=n[n.length-1];(i===".."||i===".")&&n.push("");let a=r.length-1,o,s;for(o=0;o1&&a--;else break;return r.slice(0,a).join("/")+"/"+n.slice(o-(o===n.length?1:0)).join("/")}var Tu;(function(e){e.pop="pop",e.push="push"})(Tu||(Tu={}));var Ul;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ul||(Ul={}));function QW(e){if(!e)if(Ko){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),jW(e)}const JW=/^[^#]+#/;function eG(e,t){return e.replace(JW,"#")+t}function tG(e,t){const r=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-r.left-(t.left||0),top:n.top-r.top-(t.top||0)}}const gh=()=>({left:window.pageXOffset,top:window.pageYOffset});function rG(e){let t;if("el"in e){const r=e.el,n=typeof r=="string"&&r.startsWith("#"),i=typeof r=="string"?n?document.getElementById(r.slice(1)):document.querySelector(r):r;if(!i)return;t=tG(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function N1(e,t){return(history.state?history.state.position-t:-1)+e}const Lg=new Map;function nG(e,t){Lg.set(e,t)}function iG(e){const t=Lg.get(e);return Lg.delete(e),t}let aG=()=>location.protocol+"//"+location.host;function o2(e,t){const{pathname:r,search:n,hash:i}=t,a=e.indexOf("#");if(a>-1){let s=i.includes(e.slice(a))?e.slice(a).length:1,l=i.slice(s);return l[0]!=="/"&&(l="/"+l),R1(l,"")}return R1(r,e)+n+i}function oG(e,t,r,n){let i=[],a=[],o=null;const s=({state:h})=>{const d=o2(e,location),v=r.value,p=t.value;let m=0;if(h){if(r.value=d,t.value=h,o&&o===v){o=null;return}m=p?h.position-p.position:0}else n(d);i.forEach(g=>{g(r.value,v,{delta:m,type:Tu.pop,direction:m?m>0?Ul.forward:Ul.back:Ul.unknown})})};function l(){o=r.value}function u(h){i.push(h);const d=()=>{const v=i.indexOf(h);v>-1&&i.splice(v,1)};return a.push(d),d}function f(){const{history:h}=window;h.state&&h.replaceState(lt({},h.state,{scroll:gh()}),"")}function c(){for(const h of a)h();a=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",f,{passive:!0}),{pauseListeners:l,listen:u,destroy:c}}function B1(e,t,r,n=!1,i=!1){return{back:e,current:t,forward:r,replaced:n,position:window.history.length,scroll:i?gh():null}}function sG(e){const{history:t,location:r}=window,n={value:o2(e,r)},i={value:t.state};i.value||a(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(l,u,f){const c=e.indexOf("#"),h=c>-1?(r.host&&document.querySelector("base")?e:e.slice(c))+l:aG()+e+l;try{t[f?"replaceState":"pushState"](u,"",h),i.value=u}catch(d){console.error(d),r[f?"replace":"assign"](h)}}function o(l,u){const f=lt({},t.state,B1(i.value.back,l,i.value.forward,!0),u,{position:i.value.position});a(l,f,!0),n.value=l}function s(l,u){const f=lt({},i.value,t.state,{forward:l,scroll:gh()});a(f.current,f,!0);const c=lt({},B1(n.value,l,null),{position:f.position+1},u);a(l,c,!1),n.value=l}return{location:n,state:i,push:s,replace:o}}function lG(e){e=QW(e);const t=sG(e),r=oG(e,t.state,t.location,t.replace);function n(a,o=!0){o||r.pauseListeners(),history.go(a)}const i=lt({location:"",base:e,go:n,createHref:eG.bind(null,e)},t,r);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function uG(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),lG(e)}function fG(e){return typeof e=="string"||e&&typeof e=="object"}function s2(e){return typeof e=="string"||typeof e=="symbol"}const Ri={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},l2=Symbol("");var F1;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(F1||(F1={}));function Ps(e,t){return lt(new Error,{type:e,[l2]:!0},t)}function li(e,t){return e instanceof Error&&l2 in e&&(t==null||!!(e.type&t))}const $1="[^/]+?",cG={sensitive:!1,strict:!1,start:!0,end:!0},dG=/[.+*?^${}()[\]/\\]/g;function hG(e,t){const r=lt({},cG,t),n=[];let i=r.start?"^":"";const a=[];for(const u of e){const f=u.length?[]:[90];r.strict&&!u.length&&(i+="/");for(let c=0;ct.length?t.length===1&&t[0]===80?1:-1:0}function pG(e,t){let r=0;const n=e.score,i=t.score;for(;r0&&t[t.length-1]<0}const gG={type:0,value:""},mG=/[a-zA-Z0-9_]/;function yG(e){if(!e)return[[]];if(e==="/")return[[gG]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(d){throw new Error(`ERR (${r})/"${u}": ${d}`)}let r=0,n=r;const i=[];let a;function o(){a&&i.push(a),a=[]}let s=0,l,u="",f="";function c(){u&&(r===0?a.push({type:0,value:u}):r===1||r===2||r===3?(a.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:u,regexp:f,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=l}for(;s{o(y)}:Gl}function o(f){if(s2(f)){const c=n.get(f);c&&(n.delete(f),r.splice(r.indexOf(c),1),c.children.forEach(o),c.alias.forEach(o))}else{const c=r.indexOf(f);c>-1&&(r.splice(c,1),f.record.name&&n.delete(f.record.name),f.children.forEach(o),f.alias.forEach(o))}}function s(){return r}function l(f){let c=0;for(;c=0&&(f.record.path!==r[c].record.path||!u2(f,r[c]));)c++;r.splice(c,0,f),f.record.name&&!V1(f)&&n.set(f.record.name,f)}function u(f,c){let h,d={},v,p;if("name"in f&&f.name){if(h=n.get(f.name),!h)throw Ps(1,{location:f});p=h.record.name,d=lt(z1(c.params,h.keys.filter(y=>!y.optional).map(y=>y.name)),f.params&&z1(f.params,h.keys.map(y=>y.name))),v=h.stringify(d)}else if("path"in f)v=f.path,h=r.find(y=>y.re.test(v)),h&&(d=h.parse(v),p=h.record.name);else{if(h=c.name?n.get(c.name):r.find(y=>y.re.test(c.path)),!h)throw Ps(1,{location:f,currentLocation:c});p=h.record.name,d=lt({},c.params,f.params),v=h.stringify(d)}const m=[];let g=h;for(;g;)m.unshift(g.record),g=g.parent;return{name:p,path:v,params:d,matched:m,meta:xG(m)}}return e.forEach(f=>a(f)),{addRoute:a,resolve:u,removeRoute:o,getRoutes:s,getRecordMatcher:i}}function z1(e,t){const r={};for(const n of t)n in e&&(r[n]=e[n]);return r}function wG(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:SG(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function SG(e){const t={},r=e.props||!1;if("component"in e)t.default=r;else for(const n in e.components)t[n]=typeof r=="object"?r[n]:r;return t}function V1(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function xG(e){return e.reduce((t,r)=>lt(t,r.meta),{})}function W1(e,t){const r={};for(const n in e)r[n]=n in t?t[n]:e[n];return r}function u2(e,t){return t.children.some(r=>r===e||u2(e,r))}const f2=/#/g,CG=/&/g,TG=/\//g,MG=/=/g,AG=/\?/g,c2=/\+/g,PG=/%5B/g,EG=/%5D/g,d2=/%5E/g,LG=/%60/g,h2=/%7B/g,DG=/%7C/g,v2=/%7D/g,IG=/%20/g;function Zy(e){return encodeURI(""+e).replace(DG,"|").replace(PG,"[").replace(EG,"]")}function OG(e){return Zy(e).replace(h2,"{").replace(v2,"}").replace(d2,"^")}function Dg(e){return Zy(e).replace(c2,"%2B").replace(IG,"+").replace(f2,"%23").replace(CG,"%26").replace(LG,"`").replace(h2,"{").replace(v2,"}").replace(d2,"^")}function RG(e){return Dg(e).replace(MG,"%3D")}function kG(e){return Zy(e).replace(f2,"%23").replace(AG,"%3F")}function NG(e){return e==null?"":kG(e).replace(TG,"%2F")}function yd(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function BG(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;ia&&Dg(a)):[n&&Dg(n)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+r,a!=null&&(t+="="+a))})}return t}function FG(e){const t={};for(const r in e){const n=e[r];n!==void 0&&(t[r]=En(n)?n.map(i=>i==null?null:""+i):n==null?n:""+n)}return t}const $G=Symbol(""),U1=Symbol(""),Qy=Symbol(""),p2=Symbol(""),Ig=Symbol("");function el(){let e=[];function t(n){return e.push(n),()=>{const i=e.indexOf(n);i>-1&&e.splice(i,1)}}function r(){e=[]}return{add:t,list:()=>e.slice(),reset:r}}function Xi(e,t,r,n,i){const a=n&&(n.enterCallbacks[i]=n.enterCallbacks[i]||[]);return()=>new Promise((o,s)=>{const l=c=>{c===!1?s(Ps(4,{from:r,to:t})):c instanceof Error?s(c):fG(c)?s(Ps(2,{from:t,to:c})):(a&&n.enterCallbacks[i]===a&&typeof c=="function"&&a.push(c),o())},u=e.call(n&&n.instances[i],t,r,l);let f=Promise.resolve(u);e.length<3&&(f=f.then(l)),f.catch(c=>s(c))})}function vv(e,t,r,n){const i=[];for(const a of e)for(const o in a.components){let s=a.components[o];if(!(t!=="beforeRouteEnter"&&!a.instances[o]))if(HG(s)){const u=(s.__vccOpts||s)[t];u&&i.push(Xi(u,r,n,a,o))}else{let l=s();i.push(()=>l.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${o}" at "${a.path}"`));const f=UW(u)?u.default:u;a.components[o]=f;const h=(f.__vccOpts||f)[t];return h&&Xi(h,r,n,a,o)()}))}}return i}function HG(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Y1(e){const t=Le(Qy),r=Le(p2),n=k(()=>t.resolve(T(e.to))),i=k(()=>{const{matched:l}=n.value,{length:u}=l,f=l[u-1],c=r.matched;if(!f||!c.length)return-1;const h=c.findIndex(As.bind(null,f));if(h>-1)return h;const d=j1(l[u-2]);return u>1&&j1(f)===d&&c[c.length-1].path!==d?c.findIndex(As.bind(null,l[u-2])):h}),a=k(()=>i.value>-1&&GG(r.params,n.value.params)),o=k(()=>i.value>-1&&i.value===r.matched.length-1&&a2(r.params,n.value.params));function s(l={}){return WG(l)?t[T(e.replace)?"replace":"push"](T(e.to)).catch(Gl):Promise.resolve()}return{route:n,href:k(()=>n.value.href),isActive:a,isExactActive:o,navigate:s}}const zG=ie({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Y1,setup(e,{slots:t}){const r=Ln(Y1(e)),{options:n}=Le(Qy),i=k(()=>({[q1(e.activeClass,n.linkActiveClass,"router-link-active")]:r.isActive,[q1(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:r.isExactActive}));return()=>{const a=t.default&&t.default(r);return e.custom?a:Te("a",{"aria-current":r.isExactActive?e.ariaCurrentValue:null,href:r.href,onClick:r.navigate,class:i.value},a)}}}),VG=zG;function WG(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function GG(e,t){for(const r in t){const n=t[r],i=e[r];if(typeof n=="string"){if(n!==i)return!1}else if(!En(i)||i.length!==n.length||n.some((a,o)=>a!==i[o]))return!1}return!0}function j1(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const q1=(e,t,r)=>e??t??r,UG=ie({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:r}){const n=Le(Ig),i=k(()=>e.route||n.value),a=Le(U1,0),o=k(()=>{let u=T(a);const{matched:f}=i.value;let c;for(;(c=f[u])&&!c.components;)u++;return u}),s=k(()=>i.value.matched[o.value]);Dt(U1,k(()=>o.value+1)),Dt($G,s),Dt(Ig,i);const l=$();return we(()=>[l.value,s.value,e.name],([u,f,c],[h,d,v])=>{f&&(f.instances[c]=u,d&&d!==f&&u&&u===h&&(f.leaveGuards.size||(f.leaveGuards=d.leaveGuards),f.updateGuards.size||(f.updateGuards=d.updateGuards))),u&&f&&(!d||!As(f,d)||!h)&&(f.enterCallbacks[c]||[]).forEach(p=>p(u))},{flush:"post"}),()=>{const u=i.value,f=e.name,c=s.value,h=c&&c.components[f];if(!h)return K1(r.default,{Component:h,route:u});const d=c.props[f],v=d?d===!0?u.params:typeof d=="function"?d(u):d:null,m=Te(h,lt({},v,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(c.instances[f]=null)},ref:l}));return K1(r.default,{Component:m,route:u})||m}}});function K1(e,t){if(!e)return null;const r=e(t);return r.length===1?r[0]:r}const YG=UG;function jG(e){const t=bG(e.routes,e),r=e.parseQuery||BG,n=e.stringifyQuery||G1,i=e.history,a=el(),o=el(),s=el(),l=ty(Ri);let u=Ri;Ko&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=dv.bind(null,B=>""+B),c=dv.bind(null,NG),h=dv.bind(null,yd);function d(B,Y){let K,Q;return s2(B)?(K=t.getRecordMatcher(B),Q=Y):Q=B,t.addRoute(Q,K)}function v(B){const Y=t.getRecordMatcher(B);Y&&t.removeRoute(Y)}function p(){return t.getRoutes().map(B=>B.record)}function m(B){return!!t.getRecordMatcher(B)}function g(B,Y){if(Y=lt({},Y||l.value),typeof B=="string"){const I=hv(r,B,Y.path),W=t.resolve({path:I.path},Y),X=i.createHref(I.fullPath);return lt(I,W,{params:h(W.params),hash:yd(I.hash),redirectedFrom:void 0,href:X})}let K;if("path"in B)K=lt({},B,{path:hv(r,B.path,Y.path).path});else{const I=lt({},B.params);for(const W in I)I[W]==null&&delete I[W];K=lt({},B,{params:c(I)}),Y.params=c(Y.params)}const Q=t.resolve(K,Y),oe=B.hash||"";Q.params=f(h(Q.params));const pe=qW(n,lt({},B,{hash:OG(oe),path:Q.path})),D=i.createHref(pe);return lt({fullPath:pe,hash:oe,query:n===G1?FG(B.query):B.query||{}},Q,{redirectedFrom:void 0,href:D})}function y(B){return typeof B=="string"?hv(r,B,l.value.path):lt({},B)}function _(B,Y){if(u!==B)return Ps(8,{from:Y,to:B})}function b(B){return S(B)}function x(B){return b(lt(y(B),{replace:!0}))}function w(B){const Y=B.matched[B.matched.length-1];if(Y&&Y.redirect){const{redirect:K}=Y;let Q=typeof K=="function"?K(B):K;return typeof Q=="string"&&(Q=Q.includes("?")||Q.includes("#")?Q=y(Q):{path:Q},Q.params={}),lt({query:B.query,hash:B.hash,params:"path"in Q?{}:B.params},Q)}}function S(B,Y){const K=u=g(B),Q=l.value,oe=B.state,pe=B.force,D=B.replace===!0,I=w(K);if(I)return S(lt(y(I),{state:typeof I=="object"?lt({},oe,I.state):oe,force:pe,replace:D}),Y||K);const W=K;W.redirectedFrom=Y;let X;return!pe&&KW(n,Q,K)&&(X=Ps(16,{to:W,from:Q}),te(Q,Q,!0,!1)),(X?Promise.resolve(X):A(W,Q)).catch(q=>li(q)?li(q,2)?q:z(q):U(q,W,Q)).then(q=>{if(q){if(li(q,2))return S(lt({replace:D},y(q.to),{state:typeof q.to=="object"?lt({},oe,q.to.state):oe,force:pe}),Y||W)}else q=E(W,Q,!0,D,oe);return P(W,Q,q),q})}function C(B,Y){const K=_(B,Y);return K?Promise.reject(K):Promise.resolve()}function M(B){const Y=Se.values().next().value;return Y&&typeof Y.runWithContext=="function"?Y.runWithContext(B):B()}function A(B,Y){let K;const[Q,oe,pe]=qG(B,Y);K=vv(Q.reverse(),"beforeRouteLeave",B,Y);for(const I of Q)I.leaveGuards.forEach(W=>{K.push(Xi(W,B,Y))});const D=C.bind(null,B,Y);return K.push(D),Ie(K).then(()=>{K=[];for(const I of a.list())K.push(Xi(I,B,Y));return K.push(D),Ie(K)}).then(()=>{K=vv(oe,"beforeRouteUpdate",B,Y);for(const I of oe)I.updateGuards.forEach(W=>{K.push(Xi(W,B,Y))});return K.push(D),Ie(K)}).then(()=>{K=[];for(const I of pe)if(I.beforeEnter)if(En(I.beforeEnter))for(const W of I.beforeEnter)K.push(Xi(W,B,Y));else K.push(Xi(I.beforeEnter,B,Y));return K.push(D),Ie(K)}).then(()=>(B.matched.forEach(I=>I.enterCallbacks={}),K=vv(pe,"beforeRouteEnter",B,Y),K.push(D),Ie(K))).then(()=>{K=[];for(const I of o.list())K.push(Xi(I,B,Y));return K.push(D),Ie(K)}).catch(I=>li(I,8)?I:Promise.reject(I))}function P(B,Y,K){s.list().forEach(Q=>M(()=>Q(B,Y,K)))}function E(B,Y,K,Q,oe){const pe=_(B,Y);if(pe)return pe;const D=Y===Ri,I=Ko?history.state:{};K&&(Q||D?i.replace(B.fullPath,lt({scroll:D&&I&&I.scroll},oe)):i.push(B.fullPath,oe)),l.value=B,te(B,Y,K,D),z()}let L;function O(){L||(L=i.listen((B,Y,K)=>{if(!$e.listening)return;const Q=g(B),oe=w(Q);if(oe){S(lt(oe,{replace:!0}),Q).catch(Gl);return}u=Q;const pe=l.value;Ko&&nG(N1(pe.fullPath,K.delta),gh()),A(Q,pe).catch(D=>li(D,12)?D:li(D,2)?(S(D.to,Q).then(I=>{li(I,20)&&!K.delta&&K.type===Tu.pop&&i.go(-1,!1)}).catch(Gl),Promise.reject()):(K.delta&&i.go(-K.delta,!1),U(D,Q,pe))).then(D=>{D=D||E(Q,pe,!1),D&&(K.delta&&!li(D,8)?i.go(-K.delta,!1):K.type===Tu.pop&&li(D,20)&&i.go(-1,!1)),P(Q,pe,D)}).catch(Gl)}))}let N=el(),H=el(),V;function U(B,Y,K){z(B);const Q=H.list();return Q.length?Q.forEach(oe=>oe(B,Y,K)):console.error(B),Promise.reject(B)}function F(){return V&&l.value!==Ri?Promise.resolve():new Promise((B,Y)=>{N.add([B,Y])})}function z(B){return V||(V=!B,O(),N.list().forEach(([Y,K])=>B?K(B):Y()),N.reset()),B}function te(B,Y,K,Q){const{scrollBehavior:oe}=e;if(!Ko||!oe)return Promise.resolve();const pe=!K&&iG(N1(B.fullPath,0))||(Q||!K)&&history.state&&history.state.scroll||null;return kt().then(()=>oe(B,Y,pe)).then(D=>D&&rG(D)).catch(D=>U(D,B,Y))}const J=B=>i.go(B);let me;const Se=new Set,$e={currentRoute:l,listening:!0,addRoute:d,removeRoute:v,hasRoute:m,getRoutes:p,resolve:g,options:e,push:b,replace:x,go:J,back:()=>J(-1),forward:()=>J(1),beforeEach:a.add,beforeResolve:o.add,afterEach:s.add,onError:H.add,isReady:F,install(B){const Y=this;B.component("RouterLink",VG),B.component("RouterView",YG),B.config.globalProperties.$router=Y,Object.defineProperty(B.config.globalProperties,"$route",{enumerable:!0,get:()=>T(l)}),Ko&&!me&&l.value===Ri&&(me=!0,b(i.location).catch(oe=>{}));const K={};for(const oe in Ri)Object.defineProperty(K,oe,{get:()=>l.value[oe],enumerable:!0});B.provide(Qy,Y),B.provide(p2,Qm(K)),B.provide(Ig,l);const Q=B.unmount;Se.add(B),B.unmount=function(){Se.delete(B),Se.size<1&&(u=Ri,L&&L(),L=null,l.value=Ri,me=!1,V=!1),Q()}}};function Ie(B){return B.reduce((Y,K)=>Y.then(()=>M(K)),Promise.resolve())}return $e}function qG(e,t){const r=[],n=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;oAs(u,s))?n.push(s):r.push(s));const l=e.matched[o];l&&(t.matched.find(u=>As(u,l))||i.push(l))}return[r,n,i]}var Og={exports:{}};(function(e,t){var r=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(n){return typeof n}:function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol?"symbol":typeof n};(function(n,i){r(t)==="object"?e.exports=i():n.Humanize=i()})(a8,function(){var n=[{name:"second",value:1e3},{name:"minute",value:6e4},{name:"hour",value:36e5},{name:"day",value:864e5},{name:"week",value:6048e5}],i={P:Math.pow(2,50),T:Math.pow(2,40),G:Math.pow(2,30),M:Math.pow(2,20)},a=function(c){return typeof c<"u"&&c!==null},o=function(c){return c!==c},s=function(c){return isFinite(c)&&!o(parseFloat(c))},l=function(c){var h=Object.prototype.toString.call(c);return h==="[object Array]"},u={intword:function(c,h){var d=arguments.length<=2||arguments[2]===void 0?2:arguments[2];return u.compactInteger(c,d)},compactInteger:function(c){var h=arguments.length<=1||arguments[1]===void 0?0:arguments[1];h=Math.max(h,0);var d=parseInt(c,10),v=d<0?"-":"",p=Math.abs(d),m=String(p),g=m.length,y=[13,10,7,4],_=["T","B","M","k"];if(p<1e3)return""+v+m;if(g>y[0]+3)return d.toExponential(h).replace("e+","x10^");for(var b=void 0,x=0;x=w){b=w;break}}var S=g-b+1,C=m.split(""),M=C.slice(0,S),A=C.slice(S,S+h+1),P=M.join(""),E=A.join("");E.length=v)return u.formatNumber(c/v,h,"")+" "+d+"B"}return c>=1024?u.formatNumber(c/1024,0)+" KB":u.formatNumber(c,0)+u.pluralize(c," byte")},filesize:function(){return u.fileSize.apply(u,arguments)},formatNumber:function(c){var h=arguments.length<=1||arguments[1]===void 0?0:arguments[1],d=arguments.length<=2||arguments[2]===void 0?",":arguments[2],v=arguments.length<=3||arguments[3]===void 0?".":arguments[3],p=function(S,C,M){return M?S.substr(0,M)+C:""},m=function(S,C,M){return S.substr(M).replace(/(\d{3})(?=\d)/g,"$1"+C)},g=function(S,C,M){return M?C+u.toFixed(Math.abs(S),M).split(".")[1]:""},y=u.normalizePrecision(h),_=c<0&&"-"||"",b=String(parseInt(u.toFixed(Math.abs(c||0),y),10)),x=b.length>3?b.length%3:0;return _+p(b,d,x)+m(b,d,x)+g(c,v,y)},toFixed:function(c,h){h=a(h)?h:u.normalizePrecision(h,0);var d=Math.pow(10,h);return(Math.round(c*d)/d).toFixed(h)},normalizePrecision:function(c,h){return c=Math.round(Math.abs(c)),o(c)?h:c},ordinal:function(c){var h=parseInt(c,10);if(h===0)return c;var d=h%100;if([11,12,13].indexOf(d)>=0)return h+"th";var v=h%10,p=void 0;switch(v){case 1:p="st";break;case 2:p="nd";break;case 3:p="rd";break;default:p="th"}return""+h+p},times:function(c){var h=arguments.length<=1||arguments[1]===void 0?{}:arguments[1];if(s(c)&&c>=0){var d=parseFloat(c),v=["never","once","twice"];if(a(h[d]))return String(h[d]);var p=a(v[d])&&v[d].toString();return p||d.toString()+" times"}return null},pluralize:function(c,h,d){return a(c)&&a(h)?(d=a(d)?d:h+"s",parseInt(c,10)===1?h:d):null},truncate:function(c){var h=arguments.length<=1||arguments[1]===void 0?100:arguments[1],d=arguments.length<=2||arguments[2]===void 0?"...":arguments[2];return c.length>h?c.substring(0,h-d.length)+d:c},truncateWords:function(c,h){for(var d=c.split(" "),v="",p=0;ph?v+"...":null},truncatewords:function(){return u.truncateWords.apply(u,arguments)},boundedNumber:function(c){var h=arguments.length<=1||arguments[1]===void 0?100:arguments[1],d=arguments.length<=2||arguments[2]===void 0?"+":arguments[2],v=void 0;return s(c)&&s(h)&&c>h&&(v=h+d),(v||c).toString()},truncatenumber:function(){return u.boundedNumber.apply(u,arguments)},oxford:function(c,h,d){var v=c.length,p=void 0;if(v<2)return String(c);if(v===2)return c.join(" and ");if(a(h)&&v>h){var m=v-h;p=h,d=a(d)?d:", and "+m+" "+u.pluralize(m,"other")}else p=-1,d=", and "+c[v-1];return c.slice(0,p).join(", ")+d},dictionary:function(c){var h=arguments.length<=1||arguments[1]===void 0?" is ":arguments[1],d=arguments.length<=2||arguments[2]===void 0?", ":arguments[2],v="";if(a(c)&&(typeof c>"u"?"undefined":r(c))==="object"&&!l(c)){var p=[];for(var m in c)if(c.hasOwnProperty(m)){var g=c[m];p.push(""+m+h+g)}return p.join(d)}return v},frequency:function(c,h){if(!l(c))return null;var d=c.length,v=u.times(d);return d===0?v+" "+h:h+" "+v},pace:function(c,h){var d=arguments.length<=2||arguments[2]===void 0?"time":arguments[2];if(c===0||h===0)return"No "+u.pluralize(0,d);for(var v="Approximately",p=void 0,m=void 0,g=c/h,y=0;y1){p=_.name;break}}p||(v="Less than",m=1,p=n[n.length-1].name);var b=Math.round(m);return d=u.pluralize(b,d),v+" "+b+" "+d+" per "+p},nl2br:function(c){var h=arguments.length<=1||arguments[1]===void 0?"
":arguments[1];return c.replace(/\n/g,h)},br2nl:function(c){var h=arguments.length<=1||arguments[1]===void 0?`\r + */const Zo=typeof window<"u";function UW(e){return e.__esModule||e[Symbol.toStringTag]==="Module"}const lt=Object.assign;function dv(e,t){const r={};for(const n in t){const i=t[n];r[n]=En(i)?i.map(e):e(i)}return r}const Gl=()=>{},En=Array.isArray,YW=/\/$/,jW=e=>e.replace(YW,"");function hv(e,t,r="/"){let n,i={},a="",o="";const s=t.indexOf("#");let l=t.indexOf("?");return s=0&&(l=-1),l>-1&&(n=t.slice(0,l),a=t.slice(l+1,s>-1?s:t.length),i=e(a)),s>-1&&(n=n||t.slice(0,s),o=t.slice(s,t.length)),n=ZW(n??t,r),{fullPath:n+(a&&"?")+a+o,path:n,query:i,hash:o}}function qW(e,t){const r=t.query?e(t.query):"";return t.path+(r&&"?")+r+(t.hash||"")}function R1(e,t){return!t||!e.toLowerCase().startsWith(t.toLowerCase())?e:e.slice(t.length)||"/"}function KW(e,t,r){const n=t.matched.length-1,i=r.matched.length-1;return n>-1&&n===i&&Es(t.matched[n],r.matched[i])&&a2(t.params,r.params)&&e(t.query)===e(r.query)&&t.hash===r.hash}function Es(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function a2(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const r in e)if(!XW(e[r],t[r]))return!1;return!0}function XW(e,t){return En(e)?k1(e,t):En(t)?k1(t,e):e===t}function k1(e,t){return En(t)?e.length===t.length&&e.every((r,n)=>r===t[n]):e.length===1&&e[0]===t}function ZW(e,t){if(e.startsWith("/"))return e;if(!e)return t;const r=t.split("/"),n=e.split("/"),i=n[n.length-1];(i===".."||i===".")&&n.push("");let a=r.length-1,o,s;for(o=0;o1&&a--;else break;return r.slice(0,a).join("/")+"/"+n.slice(o-(o===n.length?1:0)).join("/")}var Tu;(function(e){e.pop="pop",e.push="push"})(Tu||(Tu={}));var Ul;(function(e){e.back="back",e.forward="forward",e.unknown=""})(Ul||(Ul={}));function QW(e){if(!e)if(Zo){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return e[0]!=="/"&&e[0]!=="#"&&(e="/"+e),jW(e)}const JW=/^[^#]+#/;function eG(e,t){return e.replace(JW,"#")+t}function tG(e,t){const r=document.documentElement.getBoundingClientRect(),n=e.getBoundingClientRect();return{behavior:t.behavior,left:n.left-r.left-(t.left||0),top:n.top-r.top-(t.top||0)}}const gh=()=>({left:window.pageXOffset,top:window.pageYOffset});function rG(e){let t;if("el"in e){const r=e.el,n=typeof r=="string"&&r.startsWith("#"),i=typeof r=="string"?n?document.getElementById(r.slice(1)):document.querySelector(r):r;if(!i)return;t=tG(i,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(t.left!=null?t.left:window.pageXOffset,t.top!=null?t.top:window.pageYOffset)}function N1(e,t){return(history.state?history.state.position-t:-1)+e}const Lg=new Map;function nG(e,t){Lg.set(e,t)}function iG(e){const t=Lg.get(e);return Lg.delete(e),t}let aG=()=>location.protocol+"//"+location.host;function o2(e,t){const{pathname:r,search:n,hash:i}=t,a=e.indexOf("#");if(a>-1){let s=i.includes(e.slice(a))?e.slice(a).length:1,l=i.slice(s);return l[0]!=="/"&&(l="/"+l),R1(l,"")}return R1(r,e)+n+i}function oG(e,t,r,n){let i=[],a=[],o=null;const s=({state:h})=>{const d=o2(e,location),v=r.value,p=t.value;let m=0;if(h){if(r.value=d,t.value=h,o&&o===v){o=null;return}m=p?h.position-p.position:0}else n(d);i.forEach(g=>{g(r.value,v,{delta:m,type:Tu.pop,direction:m?m>0?Ul.forward:Ul.back:Ul.unknown})})};function l(){o=r.value}function u(h){i.push(h);const d=()=>{const v=i.indexOf(h);v>-1&&i.splice(v,1)};return a.push(d),d}function f(){const{history:h}=window;h.state&&h.replaceState(lt({},h.state,{scroll:gh()}),"")}function c(){for(const h of a)h();a=[],window.removeEventListener("popstate",s),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",s),window.addEventListener("beforeunload",f,{passive:!0}),{pauseListeners:l,listen:u,destroy:c}}function B1(e,t,r,n=!1,i=!1){return{back:e,current:t,forward:r,replaced:n,position:window.history.length,scroll:i?gh():null}}function sG(e){const{history:t,location:r}=window,n={value:o2(e,r)},i={value:t.state};i.value||a(n.value,{back:null,current:n.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function a(l,u,f){const c=e.indexOf("#"),h=c>-1?(r.host&&document.querySelector("base")?e:e.slice(c))+l:aG()+e+l;try{t[f?"replaceState":"pushState"](u,"",h),i.value=u}catch(d){console.error(d),r[f?"replace":"assign"](h)}}function o(l,u){const f=lt({},t.state,B1(i.value.back,l,i.value.forward,!0),u,{position:i.value.position});a(l,f,!0),n.value=l}function s(l,u){const f=lt({},i.value,t.state,{forward:l,scroll:gh()});a(f.current,f,!0);const c=lt({},B1(n.value,l,null),{position:f.position+1},u);a(l,c,!1),n.value=l}return{location:n,state:i,push:s,replace:o}}function lG(e){e=QW(e);const t=sG(e),r=oG(e,t.state,t.location,t.replace);function n(a,o=!0){o||r.pauseListeners(),history.go(a)}const i=lt({location:"",base:e,go:n,createHref:eG.bind(null,e)},t,r);return Object.defineProperty(i,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(i,"state",{enumerable:!0,get:()=>t.state.value}),i}function uG(e){return e=location.host?e||location.pathname+location.search:"",e.includes("#")||(e+="#"),lG(e)}function fG(e){return typeof e=="string"||e&&typeof e=="object"}function s2(e){return typeof e=="string"||typeof e=="symbol"}const Ri={path:"/",name:void 0,params:{},query:{},hash:"",fullPath:"/",matched:[],meta:{},redirectedFrom:void 0},l2=Symbol("");var F1;(function(e){e[e.aborted=4]="aborted",e[e.cancelled=8]="cancelled",e[e.duplicated=16]="duplicated"})(F1||(F1={}));function Ls(e,t){return lt(new Error,{type:e,[l2]:!0},t)}function li(e,t){return e instanceof Error&&l2 in e&&(t==null||!!(e.type&t))}const $1="[^/]+?",cG={sensitive:!1,strict:!1,start:!0,end:!0},dG=/[.+*?^${}()[\]/\\]/g;function hG(e,t){const r=lt({},cG,t),n=[];let i=r.start?"^":"";const a=[];for(const u of e){const f=u.length?[]:[90];r.strict&&!u.length&&(i+="/");for(let c=0;ct.length?t.length===1&&t[0]===80?1:-1:0}function pG(e,t){let r=0;const n=e.score,i=t.score;for(;r0&&t[t.length-1]<0}const gG={type:0,value:""},mG=/[a-zA-Z0-9_]/;function yG(e){if(!e)return[[]];if(e==="/")return[[gG]];if(!e.startsWith("/"))throw new Error(`Invalid path "${e}"`);function t(d){throw new Error(`ERR (${r})/"${u}": ${d}`)}let r=0,n=r;const i=[];let a;function o(){a&&i.push(a),a=[]}let s=0,l,u="",f="";function c(){u&&(r===0?a.push({type:0,value:u}):r===1||r===2||r===3?(a.length>1&&(l==="*"||l==="+")&&t(`A repeatable param (${u}) must be alone in its segment. eg: '/:ids+.`),a.push({type:1,value:u,regexp:f,repeatable:l==="*"||l==="+",optional:l==="*"||l==="?"})):t("Invalid state to consume buffer"),u="")}function h(){u+=l}for(;s{o(y)}:Gl}function o(f){if(s2(f)){const c=n.get(f);c&&(n.delete(f),r.splice(r.indexOf(c),1),c.children.forEach(o),c.alias.forEach(o))}else{const c=r.indexOf(f);c>-1&&(r.splice(c,1),f.record.name&&n.delete(f.record.name),f.children.forEach(o),f.alias.forEach(o))}}function s(){return r}function l(f){let c=0;for(;c=0&&(f.record.path!==r[c].record.path||!u2(f,r[c]));)c++;r.splice(c,0,f),f.record.name&&!V1(f)&&n.set(f.record.name,f)}function u(f,c){let h,d={},v,p;if("name"in f&&f.name){if(h=n.get(f.name),!h)throw Ls(1,{location:f});p=h.record.name,d=lt(z1(c.params,h.keys.filter(y=>!y.optional).map(y=>y.name)),f.params&&z1(f.params,h.keys.map(y=>y.name))),v=h.stringify(d)}else if("path"in f)v=f.path,h=r.find(y=>y.re.test(v)),h&&(d=h.parse(v),p=h.record.name);else{if(h=c.name?n.get(c.name):r.find(y=>y.re.test(c.path)),!h)throw Ls(1,{location:f,currentLocation:c});p=h.record.name,d=lt({},c.params,f.params),v=h.stringify(d)}const m=[];let g=h;for(;g;)m.unshift(g.record),g=g.parent;return{name:p,path:v,params:d,matched:m,meta:xG(m)}}return e.forEach(f=>a(f)),{addRoute:a,resolve:u,removeRoute:o,getRoutes:s,getRecordMatcher:i}}function z1(e,t){const r={};for(const n of t)n in e&&(r[n]=e[n]);return r}function wG(e){return{path:e.path,redirect:e.redirect,name:e.name,meta:e.meta||{},aliasOf:void 0,beforeEnter:e.beforeEnter,props:SG(e),children:e.children||[],instances:{},leaveGuards:new Set,updateGuards:new Set,enterCallbacks:{},components:"components"in e?e.components||null:e.component&&{default:e.component}}}function SG(e){const t={},r=e.props||!1;if("component"in e)t.default=r;else for(const n in e.components)t[n]=typeof r=="object"?r[n]:r;return t}function V1(e){for(;e;){if(e.record.aliasOf)return!0;e=e.parent}return!1}function xG(e){return e.reduce((t,r)=>lt(t,r.meta),{})}function W1(e,t){const r={};for(const n in e)r[n]=n in t?t[n]:e[n];return r}function u2(e,t){return t.children.some(r=>r===e||u2(e,r))}const f2=/#/g,CG=/&/g,TG=/\//g,MG=/=/g,AG=/\?/g,c2=/\+/g,PG=/%5B/g,EG=/%5D/g,d2=/%5E/g,LG=/%60/g,h2=/%7B/g,DG=/%7C/g,v2=/%7D/g,IG=/%20/g;function Zy(e){return encodeURI(""+e).replace(DG,"|").replace(PG,"[").replace(EG,"]")}function OG(e){return Zy(e).replace(h2,"{").replace(v2,"}").replace(d2,"^")}function Dg(e){return Zy(e).replace(c2,"%2B").replace(IG,"+").replace(f2,"%23").replace(CG,"%26").replace(LG,"`").replace(h2,"{").replace(v2,"}").replace(d2,"^")}function RG(e){return Dg(e).replace(MG,"%3D")}function kG(e){return Zy(e).replace(f2,"%23").replace(AG,"%3F")}function NG(e){return e==null?"":kG(e).replace(TG,"%2F")}function yd(e){try{return decodeURIComponent(""+e)}catch{}return""+e}function BG(e){const t={};if(e===""||e==="?")return t;const n=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;ia&&Dg(a)):[n&&Dg(n)]).forEach(a=>{a!==void 0&&(t+=(t.length?"&":"")+r,a!=null&&(t+="="+a))})}return t}function FG(e){const t={};for(const r in e){const n=e[r];n!==void 0&&(t[r]=En(n)?n.map(i=>i==null?null:""+i):n==null?n:""+n)}return t}const $G=Symbol(""),U1=Symbol(""),Qy=Symbol(""),p2=Symbol(""),Ig=Symbol("");function el(){let e=[];function t(n){return e.push(n),()=>{const i=e.indexOf(n);i>-1&&e.splice(i,1)}}function r(){e=[]}return{add:t,list:()=>e.slice(),reset:r}}function Xi(e,t,r,n,i){const a=n&&(n.enterCallbacks[i]=n.enterCallbacks[i]||[]);return()=>new Promise((o,s)=>{const l=c=>{c===!1?s(Ls(4,{from:r,to:t})):c instanceof Error?s(c):fG(c)?s(Ls(2,{from:t,to:c})):(a&&n.enterCallbacks[i]===a&&typeof c=="function"&&a.push(c),o())},u=e.call(n&&n.instances[i],t,r,l);let f=Promise.resolve(u);e.length<3&&(f=f.then(l)),f.catch(c=>s(c))})}function vv(e,t,r,n){const i=[];for(const a of e)for(const o in a.components){let s=a.components[o];if(!(t!=="beforeRouteEnter"&&!a.instances[o]))if(HG(s)){const u=(s.__vccOpts||s)[t];u&&i.push(Xi(u,r,n,a,o))}else{let l=s();i.push(()=>l.then(u=>{if(!u)return Promise.reject(new Error(`Couldn't resolve component "${o}" at "${a.path}"`));const f=UW(u)?u.default:u;a.components[o]=f;const h=(f.__vccOpts||f)[t];return h&&Xi(h,r,n,a,o)()}))}}return i}function HG(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Y1(e){const t=Le(Qy),r=Le(p2),n=k(()=>t.resolve(T(e.to))),i=k(()=>{const{matched:l}=n.value,{length:u}=l,f=l[u-1],c=r.matched;if(!f||!c.length)return-1;const h=c.findIndex(Es.bind(null,f));if(h>-1)return h;const d=j1(l[u-2]);return u>1&&j1(f)===d&&c[c.length-1].path!==d?c.findIndex(Es.bind(null,l[u-2])):h}),a=k(()=>i.value>-1&&GG(r.params,n.value.params)),o=k(()=>i.value>-1&&i.value===r.matched.length-1&&a2(r.params,n.value.params));function s(l={}){return WG(l)?t[T(e.replace)?"replace":"push"](T(e.to)).catch(Gl):Promise.resolve()}return{route:n,href:k(()=>n.value.href),isActive:a,isExactActive:o,navigate:s}}const zG=ie({name:"RouterLink",compatConfig:{MODE:3},props:{to:{type:[String,Object],required:!0},replace:Boolean,activeClass:String,exactActiveClass:String,custom:Boolean,ariaCurrentValue:{type:String,default:"page"}},useLink:Y1,setup(e,{slots:t}){const r=Ln(Y1(e)),{options:n}=Le(Qy),i=k(()=>({[q1(e.activeClass,n.linkActiveClass,"router-link-active")]:r.isActive,[q1(e.exactActiveClass,n.linkExactActiveClass,"router-link-exact-active")]:r.isExactActive}));return()=>{const a=t.default&&t.default(r);return e.custom?a:Te("a",{"aria-current":r.isExactActive?e.ariaCurrentValue:null,href:r.href,onClick:r.navigate,class:i.value},a)}}}),VG=zG;function WG(e){if(!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)&&!e.defaultPrevented&&!(e.button!==void 0&&e.button!==0)){if(e.currentTarget&&e.currentTarget.getAttribute){const t=e.currentTarget.getAttribute("target");if(/\b_blank\b/i.test(t))return}return e.preventDefault&&e.preventDefault(),!0}}function GG(e,t){for(const r in t){const n=t[r],i=e[r];if(typeof n=="string"){if(n!==i)return!1}else if(!En(i)||i.length!==n.length||n.some((a,o)=>a!==i[o]))return!1}return!0}function j1(e){return e?e.aliasOf?e.aliasOf.path:e.path:""}const q1=(e,t,r)=>e??t??r,UG=ie({name:"RouterView",inheritAttrs:!1,props:{name:{type:String,default:"default"},route:Object},compatConfig:{MODE:3},setup(e,{attrs:t,slots:r}){const n=Le(Ig),i=k(()=>e.route||n.value),a=Le(U1,0),o=k(()=>{let u=T(a);const{matched:f}=i.value;let c;for(;(c=f[u])&&!c.components;)u++;return u}),s=k(()=>i.value.matched[o.value]);Dt(U1,k(()=>o.value+1)),Dt($G,s),Dt(Ig,i);const l=$();return be(()=>[l.value,s.value,e.name],([u,f,c],[h,d,v])=>{f&&(f.instances[c]=u,d&&d!==f&&u&&u===h&&(f.leaveGuards.size||(f.leaveGuards=d.leaveGuards),f.updateGuards.size||(f.updateGuards=d.updateGuards))),u&&f&&(!d||!Es(f,d)||!h)&&(f.enterCallbacks[c]||[]).forEach(p=>p(u))},{flush:"post"}),()=>{const u=i.value,f=e.name,c=s.value,h=c&&c.components[f];if(!h)return K1(r.default,{Component:h,route:u});const d=c.props[f],v=d?d===!0?u.params:typeof d=="function"?d(u):d:null,m=Te(h,lt({},v,t,{onVnodeUnmounted:g=>{g.component.isUnmounted&&(c.instances[f]=null)},ref:l}));return K1(r.default,{Component:m,route:u})||m}}});function K1(e,t){if(!e)return null;const r=e(t);return r.length===1?r[0]:r}const YG=UG;function jG(e){const t=bG(e.routes,e),r=e.parseQuery||BG,n=e.stringifyQuery||G1,i=e.history,a=el(),o=el(),s=el(),l=ty(Ri);let u=Ri;Zo&&e.scrollBehavior&&"scrollRestoration"in history&&(history.scrollRestoration="manual");const f=dv.bind(null,B=>""+B),c=dv.bind(null,NG),h=dv.bind(null,yd);function d(B,Y){let K,Q;return s2(B)?(K=t.getRecordMatcher(B),Q=Y):Q=B,t.addRoute(Q,K)}function v(B){const Y=t.getRecordMatcher(B);Y&&t.removeRoute(Y)}function p(){return t.getRoutes().map(B=>B.record)}function m(B){return!!t.getRecordMatcher(B)}function g(B,Y){if(Y=lt({},Y||l.value),typeof B=="string"){const I=hv(r,B,Y.path),W=t.resolve({path:I.path},Y),X=i.createHref(I.fullPath);return lt(I,W,{params:h(W.params),hash:yd(I.hash),redirectedFrom:void 0,href:X})}let K;if("path"in B)K=lt({},B,{path:hv(r,B.path,Y.path).path});else{const I=lt({},B.params);for(const W in I)I[W]==null&&delete I[W];K=lt({},B,{params:c(I)}),Y.params=c(Y.params)}const Q=t.resolve(K,Y),oe=B.hash||"";Q.params=f(h(Q.params));const pe=qW(n,lt({},B,{hash:OG(oe),path:Q.path})),D=i.createHref(pe);return lt({fullPath:pe,hash:oe,query:n===G1?FG(B.query):B.query||{}},Q,{redirectedFrom:void 0,href:D})}function y(B){return typeof B=="string"?hv(r,B,l.value.path):lt({},B)}function _(B,Y){if(u!==B)return Ls(8,{from:Y,to:B})}function b(B){return S(B)}function x(B){return b(lt(y(B),{replace:!0}))}function w(B){const Y=B.matched[B.matched.length-1];if(Y&&Y.redirect){const{redirect:K}=Y;let Q=typeof K=="function"?K(B):K;return typeof Q=="string"&&(Q=Q.includes("?")||Q.includes("#")?Q=y(Q):{path:Q},Q.params={}),lt({query:B.query,hash:B.hash,params:"path"in Q?{}:B.params},Q)}}function S(B,Y){const K=u=g(B),Q=l.value,oe=B.state,pe=B.force,D=B.replace===!0,I=w(K);if(I)return S(lt(y(I),{state:typeof I=="object"?lt({},oe,I.state):oe,force:pe,replace:D}),Y||K);const W=K;W.redirectedFrom=Y;let X;return!pe&&KW(n,Q,K)&&(X=Ls(16,{to:W,from:Q}),ee(Q,Q,!0,!1)),(X?Promise.resolve(X):A(W,Q)).catch(j=>li(j)?li(j,2)?j:z(j):U(j,W,Q)).then(j=>{if(j){if(li(j,2))return S(lt({replace:D},y(j.to),{state:typeof j.to=="object"?lt({},oe,j.to.state):oe,force:pe}),Y||W)}else j=E(W,Q,!0,D,oe);return P(W,Q,j),j})}function C(B,Y){const K=_(B,Y);return K?Promise.reject(K):Promise.resolve()}function M(B){const Y=we.values().next().value;return Y&&typeof Y.runWithContext=="function"?Y.runWithContext(B):B()}function A(B,Y){let K;const[Q,oe,pe]=qG(B,Y);K=vv(Q.reverse(),"beforeRouteLeave",B,Y);for(const I of Q)I.leaveGuards.forEach(W=>{K.push(Xi(W,B,Y))});const D=C.bind(null,B,Y);return K.push(D),Ie(K).then(()=>{K=[];for(const I of a.list())K.push(Xi(I,B,Y));return K.push(D),Ie(K)}).then(()=>{K=vv(oe,"beforeRouteUpdate",B,Y);for(const I of oe)I.updateGuards.forEach(W=>{K.push(Xi(W,B,Y))});return K.push(D),Ie(K)}).then(()=>{K=[];for(const I of pe)if(I.beforeEnter)if(En(I.beforeEnter))for(const W of I.beforeEnter)K.push(Xi(W,B,Y));else K.push(Xi(I.beforeEnter,B,Y));return K.push(D),Ie(K)}).then(()=>(B.matched.forEach(I=>I.enterCallbacks={}),K=vv(pe,"beforeRouteEnter",B,Y),K.push(D),Ie(K))).then(()=>{K=[];for(const I of o.list())K.push(Xi(I,B,Y));return K.push(D),Ie(K)}).catch(I=>li(I,8)?I:Promise.reject(I))}function P(B,Y,K){s.list().forEach(Q=>M(()=>Q(B,Y,K)))}function E(B,Y,K,Q,oe){const pe=_(B,Y);if(pe)return pe;const D=Y===Ri,I=Zo?history.state:{};K&&(Q||D?i.replace(B.fullPath,lt({scroll:D&&I&&I.scroll},oe)):i.push(B.fullPath,oe)),l.value=B,ee(B,Y,K,D),z()}let L;function O(){L||(L=i.listen((B,Y,K)=>{if(!$e.listening)return;const Q=g(B),oe=w(Q);if(oe){S(lt(oe,{replace:!0}),Q).catch(Gl);return}u=Q;const pe=l.value;Zo&&nG(N1(pe.fullPath,K.delta),gh()),A(Q,pe).catch(D=>li(D,12)?D:li(D,2)?(S(D.to,Q).then(I=>{li(I,20)&&!K.delta&&K.type===Tu.pop&&i.go(-1,!1)}).catch(Gl),Promise.reject()):(K.delta&&i.go(-K.delta,!1),U(D,Q,pe))).then(D=>{D=D||E(Q,pe,!1),D&&(K.delta&&!li(D,8)?i.go(-K.delta,!1):K.type===Tu.pop&&li(D,20)&&i.go(-1,!1)),P(Q,pe,D)}).catch(Gl)}))}let N=el(),H=el(),V;function U(B,Y,K){z(B);const Q=H.list();return Q.length?Q.forEach(oe=>oe(B,Y,K)):console.error(B),Promise.reject(B)}function F(){return V&&l.value!==Ri?Promise.resolve():new Promise((B,Y)=>{N.add([B,Y])})}function z(B){return V||(V=!B,O(),N.list().forEach(([Y,K])=>B?K(B):Y()),N.reset()),B}function ee(B,Y,K,Q){const{scrollBehavior:oe}=e;if(!Zo||!oe)return Promise.resolve();const pe=!K&&iG(N1(B.fullPath,0))||(Q||!K)&&history.state&&history.state.scroll||null;return Nt().then(()=>oe(B,Y,pe)).then(D=>D&&rG(D)).catch(D=>U(D,B,Y))}const J=B=>i.go(B);let me;const we=new Set,$e={currentRoute:l,listening:!0,addRoute:d,removeRoute:v,hasRoute:m,getRoutes:p,resolve:g,options:e,push:b,replace:x,go:J,back:()=>J(-1),forward:()=>J(1),beforeEach:a.add,beforeResolve:o.add,afterEach:s.add,onError:H.add,isReady:F,install(B){const Y=this;B.component("RouterLink",VG),B.component("RouterView",YG),B.config.globalProperties.$router=Y,Object.defineProperty(B.config.globalProperties,"$route",{enumerable:!0,get:()=>T(l)}),Zo&&!me&&l.value===Ri&&(me=!0,b(i.location).catch(oe=>{}));const K={};for(const oe in Ri)Object.defineProperty(K,oe,{get:()=>l.value[oe],enumerable:!0});B.provide(Qy,Y),B.provide(p2,Qm(K)),B.provide(Ig,l);const Q=B.unmount;we.add(B),B.unmount=function(){we.delete(B),we.size<1&&(u=Ri,L&&L(),L=null,l.value=Ri,me=!1,V=!1),Q()}}};function Ie(B){return B.reduce((Y,K)=>Y.then(()=>M(K)),Promise.resolve())}return $e}function qG(e,t){const r=[],n=[],i=[],a=Math.max(t.matched.length,e.matched.length);for(let o=0;oEs(u,s))?n.push(s):r.push(s));const l=e.matched[o];l&&(t.matched.find(u=>Es(u,l))||i.push(l))}return[r,n,i]}var Og={exports:{}};(function(e,t){var r=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(n){return typeof n}:function(n){return n&&typeof Symbol=="function"&&n.constructor===Symbol?"symbol":typeof n};(function(n,i){r(t)==="object"?e.exports=i():n.Humanize=i()})(a8,function(){var n=[{name:"second",value:1e3},{name:"minute",value:6e4},{name:"hour",value:36e5},{name:"day",value:864e5},{name:"week",value:6048e5}],i={P:Math.pow(2,50),T:Math.pow(2,40),G:Math.pow(2,30),M:Math.pow(2,20)},a=function(c){return typeof c<"u"&&c!==null},o=function(c){return c!==c},s=function(c){return isFinite(c)&&!o(parseFloat(c))},l=function(c){var h=Object.prototype.toString.call(c);return h==="[object Array]"},u={intword:function(c,h){var d=arguments.length<=2||arguments[2]===void 0?2:arguments[2];return u.compactInteger(c,d)},compactInteger:function(c){var h=arguments.length<=1||arguments[1]===void 0?0:arguments[1];h=Math.max(h,0);var d=parseInt(c,10),v=d<0?"-":"",p=Math.abs(d),m=String(p),g=m.length,y=[13,10,7,4],_=["T","B","M","k"];if(p<1e3)return""+v+m;if(g>y[0]+3)return d.toExponential(h).replace("e+","x10^");for(var b=void 0,x=0;x=w){b=w;break}}var S=g-b+1,C=m.split(""),M=C.slice(0,S),A=C.slice(S,S+h+1),P=M.join(""),E=A.join("");E.length=v)return u.formatNumber(c/v,h,"")+" "+d+"B"}return c>=1024?u.formatNumber(c/1024,0)+" KB":u.formatNumber(c,0)+u.pluralize(c," byte")},filesize:function(){return u.fileSize.apply(u,arguments)},formatNumber:function(c){var h=arguments.length<=1||arguments[1]===void 0?0:arguments[1],d=arguments.length<=2||arguments[2]===void 0?",":arguments[2],v=arguments.length<=3||arguments[3]===void 0?".":arguments[3],p=function(S,C,M){return M?S.substr(0,M)+C:""},m=function(S,C,M){return S.substr(M).replace(/(\d{3})(?=\d)/g,"$1"+C)},g=function(S,C,M){return M?C+u.toFixed(Math.abs(S),M).split(".")[1]:""},y=u.normalizePrecision(h),_=c<0&&"-"||"",b=String(parseInt(u.toFixed(Math.abs(c||0),y),10)),x=b.length>3?b.length%3:0;return _+p(b,d,x)+m(b,d,x)+g(c,v,y)},toFixed:function(c,h){h=a(h)?h:u.normalizePrecision(h,0);var d=Math.pow(10,h);return(Math.round(c*d)/d).toFixed(h)},normalizePrecision:function(c,h){return c=Math.round(Math.abs(c)),o(c)?h:c},ordinal:function(c){var h=parseInt(c,10);if(h===0)return c;var d=h%100;if([11,12,13].indexOf(d)>=0)return h+"th";var v=h%10,p=void 0;switch(v){case 1:p="st";break;case 2:p="nd";break;case 3:p="rd";break;default:p="th"}return""+h+p},times:function(c){var h=arguments.length<=1||arguments[1]===void 0?{}:arguments[1];if(s(c)&&c>=0){var d=parseFloat(c),v=["never","once","twice"];if(a(h[d]))return String(h[d]);var p=a(v[d])&&v[d].toString();return p||d.toString()+" times"}return null},pluralize:function(c,h,d){return a(c)&&a(h)?(d=a(d)?d:h+"s",parseInt(c,10)===1?h:d):null},truncate:function(c){var h=arguments.length<=1||arguments[1]===void 0?100:arguments[1],d=arguments.length<=2||arguments[2]===void 0?"...":arguments[2];return c.length>h?c.substring(0,h-d.length)+d:c},truncateWords:function(c,h){for(var d=c.split(" "),v="",p=0;ph?v+"...":null},truncatewords:function(){return u.truncateWords.apply(u,arguments)},boundedNumber:function(c){var h=arguments.length<=1||arguments[1]===void 0?100:arguments[1],d=arguments.length<=2||arguments[2]===void 0?"+":arguments[2],v=void 0;return s(c)&&s(h)&&c>h&&(v=h+d),(v||c).toString()},truncatenumber:function(){return u.boundedNumber.apply(u,arguments)},oxford:function(c,h,d){var v=c.length,p=void 0;if(v<2)return String(c);if(v===2)return c.join(" and ");if(a(h)&&v>h){var m=v-h;p=h,d=a(d)?d:", and "+m+" "+u.pluralize(m,"other")}else p=-1,d=", and "+c[v-1];return c.slice(0,p).join(", ")+d},dictionary:function(c){var h=arguments.length<=1||arguments[1]===void 0?" is ":arguments[1],d=arguments.length<=2||arguments[2]===void 0?", ":arguments[2],v="";if(a(c)&&(typeof c>"u"?"undefined":r(c))==="object"&&!l(c)){var p=[];for(var m in c)if(c.hasOwnProperty(m)){var g=c[m];p.push(""+m+h+g)}return p.join(d)}return v},frequency:function(c,h){if(!l(c))return null;var d=c.length,v=u.times(d);return d===0?v+" "+h:h+" "+v},pace:function(c,h){var d=arguments.length<=2||arguments[2]===void 0?"time":arguments[2];if(c===0||h===0)return"No "+u.pluralize(0,d);for(var v="Approximately",p=void 0,m=void 0,g=c/h,y=0;y1){p=_.name;break}}p||(v="Less than",m=1,p=n[n.length-1].name);var b=Math.round(m);return d=u.pluralize(b,d),v+" "+b+" "+d+" per "+p},nl2br:function(c){var h=arguments.length<=1||arguments[1]===void 0?"
":arguments[1];return c.replace(/\n/g,h)},br2nl:function(c){var h=arguments.length<=1||arguments[1]===void 0?`\r `:arguments[1];return c.replace(/\/g,h)},capitalize:function(c){var h=arguments.length<=1||arguments[1]===void 0?!1:arguments[1];return""+c.charAt(0).toUpperCase()+(h?c.slice(1).toLowerCase():c.slice(1))},capitalizeAll:function(c){return c.replace(/(?:^|\s)\S/g,function(h){return h.toUpperCase()})},titleCase:function(c){var h=/\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\.?)\b/i,d=/\S+[A-Z]+\S*/,v=/\s+/,p=/-/,m=void 0;return m=function(y){for(var _=arguments.length<=1||arguments[1]===void 0?!1:arguments[1],b=arguments.length<=2||arguments[2]===void 0?!0:arguments[2],x=[],w=y.split(_?p:v),S=0;S"u"&&typeof self<"u"?He.worker=!0:typeof navigator>"u"?(He.node=!0,He.svgSupported=!0):ZG(navigator.userAgent,He);function ZG(e,t){var r=t.browser,n=e.match(/Firefox\/([\d.]+)/),i=e.match(/MSIE\s([\d.]+)/)||e.match(/Trident\/.+?rv:(([\d.]+))/),a=e.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(e);n&&(r.firefox=!0,r.version=n[1]),i&&(r.ie=!0,r.version=i[1]),a&&(r.edge=!0,r.version=a[1],r.newEdge=+a[1].split(".")[0]>18),o&&(r.weChat=!0),t.svgSupported=typeof SVGRect<"u",t.touchEventsSupported="ontouchstart"in window&&!r.ie&&!r.edge,t.pointerEventsSupported="onpointerdown"in window&&(r.edge||r.ie&&+r.version>=11),t.domSupported=typeof document<"u";var s=document.documentElement.style;t.transform3dSupported=(r.ie&&"transition"in s||r.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),t.transformSupported=t.transform3dSupported||r.ie&&+r.version>=9}var Jy=12,QG="sans-serif",_o=Jy+"px "+QG,JG=20,eU=100,tU="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function rU(e){var t={};if(typeof JSON>"u")return t;for(var r=0;r=0)s=o*r.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",n[l]+":0",i[u]+":0",n[1-l]+":auto",i[1-u]+":auto",""].join("!important;"),e.appendChild(o),r.push(o)}return r}function AU(e,t,r){for(var n=r?"invTrans":"trans",i=t[n],a=t.srcCoords,o=[],s=[],l=!0,u=0;u<4;u++){var f=e[u].getBoundingClientRect(),c=2*u,h=f.left,d=f.top;o.push(h,d),l=l&&a&&h===a[c]&&d===a[c+1],s.push(e[u].offsetLeft,e[u].offsetTop)}return l&&i?i:(t.srcCoords=o,t[n]=r?J1(s,o):J1(o,s))}function x2(e){return e.nodeName.toUpperCase()==="CANVAS"}var PU=/([&<>"'])/g,EU={"&":"&","<":"<",">":">",'"':""","'":"'"};function tn(e){return e==null?"":(e+"").replace(PU,function(t,r){return EU[r]})}var LU=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,yv=[],DU=He.browser.firefox&&+He.browser.version.split(".")[0]<39;function zg(e,t,r,n){return r=r||{},n?tw(e,t,r):DU&&t.layerX!=null&&t.layerX!==t.offsetX?(r.zrX=t.layerX,r.zrY=t.layerY):t.offsetX!=null?(r.zrX=t.offsetX,r.zrY=t.offsetY):tw(e,t,r),r}function tw(e,t,r){if(He.domSupported&&e.getBoundingClientRect){var n=t.clientX,i=t.clientY;if(x2(e)){var a=e.getBoundingClientRect();r.zrX=n-a.left,r.zrY=i-a.top;return}else if(Hg(yv,e,n,i)){r.zrX=yv[0],r.zrY=yv[1];return}}r.zrX=r.zrY=0}function i0(e){return e||window.event}function Qr(e,t,r){if(t=i0(t),t.zrX!=null)return t;var n=t.type,i=n&&n.indexOf("touch")>=0;if(i){var o=n!=="touchend"?t.targetTouches[0]:t.changedTouches[0];o&&zg(e,o,t,r)}else{zg(e,t,t,r);var a=IU(t);t.zrDelta=a?a/120:-(t.detail||0)/3}var s=t.button;return t.which==null&&s!==void 0&&LU.test(t.type)&&(t.which=s&1?1:s&2?3:s&4?2:0),t}function IU(e){var t=e.wheelDelta;if(t)return t;var r=e.deltaX,n=e.deltaY;if(r==null||n==null)return t;var i=Math.abs(n!==0?n:r),a=n>0?-1:n<0?1:r>0?-1:1;return 3*i*a}function OU(e,t,r,n){e.addEventListener(t,r,n)}function RU(e,t,r,n){e.removeEventListener(t,r,n)}var C2=function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0},kU=function(){function e(){this._track=[]}return e.prototype.recognize=function(t,r,n){return this._doTrack(t,r,n),this._recognize(t)},e.prototype.clear=function(){return this._track.length=0,this},e.prototype._doTrack=function(t,r,n){var i=t.touches;if(i){for(var a={points:[],touches:[],target:r,event:t},o=0,s=i.length;o1&&n&&n.length>1){var a=rw(n)/rw(i);!isFinite(a)&&(a=1),t.pinchScale=a;var o=NU(n);return t.pinchX=o[0],t.pinchY=o[1],{type:"pinch",target:e[0].target,event:t}}}}};function Pu(){return[1,0,0,1,0,0]}function a0(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e}function BU(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function ls(e,t,r){var n=t[0]*r[0]+t[2]*r[1],i=t[1]*r[0]+t[3]*r[1],a=t[0]*r[2]+t[2]*r[3],o=t[1]*r[2]+t[3]*r[3],s=t[0]*r[4]+t[2]*r[5]+t[4],l=t[1]*r[4]+t[3]*r[5]+t[5];return e[0]=n,e[1]=i,e[2]=a,e[3]=o,e[4]=s,e[5]=l,e}function Vg(e,t,r){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+r[0],e[5]=t[5]+r[1],e}function o0(e,t,r){var n=t[0],i=t[2],a=t[4],o=t[1],s=t[3],l=t[5],u=Math.sin(r),f=Math.cos(r);return e[0]=n*f+o*u,e[1]=-n*u+o*f,e[2]=i*f+s*u,e[3]=-i*u+f*s,e[4]=f*a+u*l,e[5]=f*l-u*a,e}function FU(e,t,r){var n=r[0],i=r[1];return e[0]=t[0]*n,e[1]=t[1]*i,e[2]=t[2]*n,e[3]=t[3]*i,e[4]=t[4]*n,e[5]=t[5]*i,e}function bh(e,t){var r=t[0],n=t[2],i=t[4],a=t[1],o=t[3],s=t[5],l=r*o-a*n;return l?(l=1/l,e[0]=o*l,e[1]=-a*l,e[2]=-n*l,e[3]=r*l,e[4]=(n*s-o*i)*l,e[5]=(a*i-r*s)*l,e):null}var $U=function(){function e(t,r){this.x=t||0,this.y=r||0}return e.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},e.prototype.clone=function(){return new e(this.x,this.y)},e.prototype.set=function(t,r){return this.x=t,this.y=r,this},e.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},e.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},e.prototype.scale=function(t){this.x*=t,this.y*=t},e.prototype.scaleAndAdd=function(t,r){this.x+=t.x*r,this.y+=t.y*r},e.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},e.prototype.dot=function(t){return this.x*t.x+this.y*t.y},e.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},e.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},e.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},e.prototype.distance=function(t){var r=this.x-t.x,n=this.y-t.y;return Math.sqrt(r*r+n*n)},e.prototype.distanceSquare=function(t){var r=this.x-t.x,n=this.y-t.y;return r*r+n*n},e.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},e.prototype.transform=function(t){if(t){var r=this.x,n=this.y;return this.x=t[0]*r+t[2]*n+t[4],this.y=t[1]*r+t[3]*n+t[5],this}},e.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},e.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},e.set=function(t,r,n){t.x=r,t.y=n},e.copy=function(t,r){t.x=r.x,t.y=r.y},e.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},e.lenSquare=function(t){return t.x*t.x+t.y*t.y},e.dot=function(t,r){return t.x*r.x+t.y*r.y},e.add=function(t,r,n){t.x=r.x+n.x,t.y=r.y+n.y},e.sub=function(t,r,n){t.x=r.x-n.x,t.y=r.y-n.y},e.scale=function(t,r,n){t.x=r.x*n,t.y=r.y*n},e.scaleAndAdd=function(t,r,n,i){t.x=r.x+n.x*i,t.y=r.y+n.y*i},e.lerp=function(t,r,n,i){var a=1-i;t.x=a*r.x+i*n.x,t.y=a*r.y+i*n.y},e}();const Fe=$U;var kf=Math.min,Nf=Math.max,wa=new Fe,Sa=new Fe,xa=new Fe,Ca=new Fe,tl=new Fe,rl=new Fe,nt=function(){function e(t,r,n,i){n<0&&(t=t+n,n=-n),i<0&&(r=r+i,i=-i),this.x=t,this.y=r,this.width=n,this.height=i}return e.prototype.union=function(t){var r=kf(t.x,this.x),n=kf(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Nf(t.x+t.width,this.x+this.width)-r:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=Nf(t.y+t.height,this.y+this.height)-n:this.height=t.height,this.x=r,this.y=n},e.prototype.applyTransform=function(t){e.applyTransform(this,this,t)},e.prototype.calculateTransform=function(t){var r=this,n=t.width/r.width,i=t.height/r.height,a=Pu();return Vg(a,a,[-r.x,-r.y]),FU(a,a,[n,i]),Vg(a,a,[t.x,t.y]),a},e.prototype.intersect=function(t,r){if(!t)return!1;t instanceof e||(t=e.create(t));var n=this,i=n.x,a=n.x+n.width,o=n.y,s=n.y+n.height,l=t.x,u=t.x+t.width,f=t.y,c=t.y+t.height,h=!(av&&(v=_,pv&&(v=b,g=n.x&&t<=n.x+n.width&&r>=n.y&&r<=n.y+n.height},e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height)},e.prototype.copy=function(t){e.copy(this,t)},e.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},e.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},e.prototype.isZero=function(){return this.width===0||this.height===0},e.create=function(t){return new e(t.x,t.y,t.width,t.height)},e.copy=function(t,r){t.x=r.x,t.y=r.y,t.width=r.width,t.height=r.height},e.applyTransform=function(t,r,n){if(!n){t!==r&&e.copy(t,r);return}if(n[1]<1e-5&&n[1]>-1e-5&&n[2]<1e-5&&n[2]>-1e-5){var i=n[0],a=n[3],o=n[4],s=n[5];t.x=r.x*i+o,t.y=r.y*a+s,t.width=r.width*i,t.height=r.height*a,t.width<0&&(t.x+=t.width,t.width=-t.width),t.height<0&&(t.y+=t.height,t.height=-t.height);return}wa.x=xa.x=r.x,wa.y=Ca.y=r.y,Sa.x=Ca.x=r.x+r.width,Sa.y=xa.y=r.y+r.height,wa.transform(n),Ca.transform(n),Sa.transform(n),xa.transform(n),t.x=kf(wa.x,Sa.x,xa.x,Ca.x),t.y=kf(wa.y,Sa.y,xa.y,Ca.y);var l=Nf(wa.x,Sa.x,xa.x,Ca.x),u=Nf(wa.y,Sa.y,xa.y,Ca.y);t.width=l-t.x,t.height=u-t.y},e}(),T2="silent";function HU(e,t,r){return{type:e,event:r,target:t.target,topTarget:t.topTarget,cancelBubble:!1,offsetX:r.zrX,offsetY:r.zrY,gestureEvent:r.gestureEvent,pinchX:r.pinchX,pinchY:r.pinchY,pinchScale:r.pinchScale,wheelDelta:r.zrDelta,zrByTouch:r.zrByTouch,which:r.which,stop:zU}}function zU(){C2(this.event)}var VU=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.handler=null,r}return t.prototype.dispose=function(){},t.prototype.setCursor=function(){},t}(ii),nl=function(){function e(t,r){this.x=t,this.y=r}return e}(),WU=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],bv=new nt(0,0,0,0),M2=function(e){ge(t,e);function t(r,n,i,a,o){var s=e.call(this)||this;return s._hovered=new nl(0,0),s.storage=r,s.painter=n,s.painterRoot=a,s._pointerSize=o,i=i||new VU,s.proxy=null,s.setHandlerProxy(i),s._draggingMgr=new SU(s),s}return t.prototype.setHandlerProxy=function(r){this.proxy&&this.proxy.dispose(),r&&(R(WU,function(n){r.on&&r.on(n,this[n],this)},this),r.handler=this),this.proxy=r},t.prototype.mousemove=function(r){var n=r.zrX,i=r.zrY,a=A2(this,n,i),o=this._hovered,s=o.target;s&&!s.__zr&&(o=this.findHover(o.x,o.y),s=o.target);var l=this._hovered=a?new nl(n,i):this.findHover(n,i),u=l.target,f=this.proxy;f.setCursor&&f.setCursor(u?u.cursor:"default"),s&&u!==s&&this.dispatchToElement(o,"mouseout",r),this.dispatchToElement(l,"mousemove",r),u&&u!==s&&this.dispatchToElement(l,"mouseover",r)},t.prototype.mouseout=function(r){var n=r.zrEventControl;n!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",r),n!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:r})},t.prototype.resize=function(){this._hovered=new nl(0,0)},t.prototype.dispatch=function(r,n){var i=this[r];i&&i.call(this,n)},t.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},t.prototype.setCursorStyle=function(r){var n=this.proxy;n.setCursor&&n.setCursor(r)},t.prototype.dispatchToElement=function(r,n,i){r=r||{};var a=r.target;if(!(a&&a.silent)){for(var o="on"+n,s=HU(n,r,i);a&&(a[o]&&(s.cancelBubble=!!a[o].call(a,s)),a.trigger(n,s),a=a.__hostTarget?a.__hostTarget:a.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(n,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[o]=="function"&&l[o].call(l,s),l.trigger&&l.trigger(n,s)}))}},t.prototype.findHover=function(r,n,i){var a=this.storage.getDisplayList(),o=new nl(r,n);if(nw(a,o,r,n,i),this._pointerSize&&!o.target){for(var s=[],l=this._pointerSize,u=l/2,f=new nt(r-u,n-u,l,l),c=a.length-1;c>=0;c--){var h=a[c];h!==i&&!h.ignore&&!h.ignoreCoarsePointer&&(!h.parent||!h.parent.ignoreCoarsePointer)&&(bv.copy(h.getBoundingRect()),h.transform&&bv.applyTransform(h.transform),bv.intersect(f)&&s.push(h))}if(s.length)for(var d=4,v=Math.PI/12,p=Math.PI*2,m=0;m4)return;this._downPoint=null}this.dispatchToElement(a,e,t)}});function GU(e,t,r){if(e[e.rectHover?"rectContain":"contain"](t,r)){for(var n=e,i=void 0,a=!1;n;){if(n.ignoreClip&&(a=!0),!a){var o=n.getClipPath();if(o&&!o.contain(t,r))return!1;n.silent&&(i=!0)}var s=n.__hostTarget;n=s||n.parent}return i?T2:!0}return!1}function nw(e,t,r,n,i){for(var a=e.length-1;a>=0;a--){var o=e[a],s=void 0;if(o!==i&&!o.ignore&&(s=GU(o,r,n))&&(!t.topTarget&&(t.topTarget=o),s!==T2)){t.target=o;break}}}function A2(e,t,r){var n=e.painter;return t<0||t>n.getWidth()||r<0||r>n.getHeight()}const UU=M2;var P2=32,il=7;function YU(e){for(var t=0;e>=P2;)t|=e&1,e>>=1;return e+t}function iw(e,t,r,n){var i=t+1;if(i===r)return 1;if(n(e[i++],e[t])<0){for(;i=0;)i++;return i-t}function jU(e,t,r){for(r--;t>>1,i(a,e[l])<0?s=l:o=l+1;var u=n-o;switch(u){case 3:e[o+3]=e[o+2];case 2:e[o+2]=e[o+1];case 1:e[o+1]=e[o];break;default:for(;u>0;)e[o+u]=e[o+u-1],u--}e[o]=a}}function wv(e,t,r,n,i,a){var o=0,s=0,l=1;if(a(e,t[r+i])>0){for(s=n-i;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}else{for(s=i+1;ls&&(l=s);var u=o;o=i-l,l=i-u}for(o++;o>>1);a(e,t[r+f])>0?o=f+1:l=f}return l}function Sv(e,t,r,n,i,a){var o=0,s=0,l=1;if(a(e,t[r+i])<0){for(s=i+1;ls&&(l=s);var u=o;o=i-l,l=i-u}else{for(s=n-i;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}for(o++;o>>1);a(e,t[r+f])<0?l=f:o=f+1}return l}function qU(e,t){var r=il,n,i,a=0;e.length;var o=[];n=[],i=[];function s(d,v){n[a]=d,i[a]=v,a+=1}function l(){for(;a>1;){var d=a-2;if(d>=1&&i[d-1]<=i[d]+i[d+1]||d>=2&&i[d-2]<=i[d]+i[d-1])i[d-1]i[d+1])break;f(d)}}function u(){for(;a>1;){var d=a-2;d>0&&i[d-1]=il||S>=il);if(C)break;x<0&&(x=0),x+=2}if(r=x,r<1&&(r=1),v===1){for(g=0;g=0;g--)e[w+g]=e[x+g];e[b]=o[_];return}for(var S=r;;){var C=0,M=0,A=!1;do if(t(o[_],e[y])<0){if(e[b--]=e[y--],C++,M=0,--v===0){A=!0;break}}else if(e[b--]=o[_--],M++,C=0,--m===1){A=!0;break}while((C|M)=0;g--)e[w+g]=e[x+g];if(v===0){A=!0;break}}if(e[b--]=o[_--],--m===1){A=!0;break}if(M=m-wv(e[y],o,0,m,m-1,t),M!==0){for(b-=M,_-=M,m-=M,w=b+1,x=_+1,g=0;g=il||M>=il);if(A)break;S<0&&(S=0),S+=2}if(r=S,r<1&&(r=1),m===1){for(b-=v,y-=v,w=b+1,x=y+1,g=v-1;g>=0;g--)e[w+g]=e[x+g];e[b]=o[_]}else{if(m===0)throw new Error;for(x=b-(m-1),g=0;gs&&(l=s),aw(e,r,r+l,r+a,t),a=l}o.pushRun(r,a),o.mergeRuns(),i-=a,r+=a}while(i!==0);o.forceMergeRuns()}}var Br=1,Cl=2,Xo=4,ow=!1;function xv(){ow||(ow=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function sw(e,t){return e.zlevel===t.zlevel?e.z===t.z?e.z2-t.z2:e.z-t.z:e.zlevel-t.zlevel}var KU=function(){function e(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=sw}return e.prototype.traverse=function(t,r){for(var n=0;n0&&(f.__clipPaths=[]),isNaN(f.z)&&(xv(),f.z=0),isNaN(f.z2)&&(xv(),f.z2=0),isNaN(f.zlevel)&&(xv(),f.zlevel=0),this._displayList[this._displayListLen++]=f}var c=t.getDecalElement&&t.getDecalElement();c&&this._updateAndAddDisplayable(c,r,n);var h=t.getTextGuideLine();h&&this._updateAndAddDisplayable(h,r,n);var d=t.getTextContent();d&&this._updateAndAddDisplayable(d,r,n)}},e.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},e.prototype.delRoot=function(t){if(t instanceof Array){for(var r=0,n=t.length;r=0&&this._roots.splice(i,1)},e.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},e.prototype.getRoots=function(){return this._roots},e.prototype.dispose=function(){this._displayList=null,this._roots=null},e}(),E2;E2=He.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(e){return setTimeout(e,16)};const Wg=E2;var ql={linear:function(e){return e},quadraticIn:function(e){return e*e},quadraticOut:function(e){return e*(2-e)},quadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},cubicIn:function(e){return e*e*e},cubicOut:function(e){return--e*e*e+1},cubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},quarticIn:function(e){return e*e*e*e},quarticOut:function(e){return 1- --e*e*e*e},quarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},quinticIn:function(e){return e*e*e*e*e},quinticOut:function(e){return--e*e*e*e*e+1},quinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},sinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},sinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},sinusoidalInOut:function(e){return .5*(1-Math.cos(Math.PI*e))},exponentialIn:function(e){return e===0?0:Math.pow(1024,e-1)},exponentialOut:function(e){return e===1?1:1-Math.pow(2,-10*e)},exponentialInOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},circularIn:function(e){return 1-Math.sqrt(1-e*e)},circularOut:function(e){return Math.sqrt(1- --e*e)},circularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},elasticIn:function(e){var t,r=.1,n=.4;return e===0?0:e===1?1:(!r||r<1?(r=1,t=n/4):t=n*Math.asin(1/r)/(2*Math.PI),-(r*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)))},elasticOut:function(e){var t,r=.1,n=.4;return e===0?0:e===1?1:(!r||r<1?(r=1,t=n/4):t=n*Math.asin(1/r)/(2*Math.PI),r*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/n)+1)},elasticInOut:function(e){var t,r=.1,n=.4;return e===0?0:e===1?1:(!r||r<1?(r=1,t=n/4):t=n*Math.asin(1/r)/(2*Math.PI),(e*=2)<1?-.5*(r*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)):r*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)*.5+1)},backIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},backOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},backInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*(e*e*((t+1)*e-t)):.5*((e-=2)*e*((t+1)*e+t)+2)},bounceIn:function(e){return 1-ql.bounceOut(1-e)},bounceOut:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},bounceInOut:function(e){return e<.5?ql.bounceIn(e*2)*.5:ql.bounceOut(e*2-1)*.5+.5}},Bf=Math.pow,ia=Math.sqrt,wd=1e-8,L2=1e-4,lw=ia(3),Ff=1/3,Vn=Ws(),rn=Ws(),us=Ws();function Ji(e){return e>-wd&&ewd||e<-wd}function Zt(e,t,r,n,i){var a=1-i;return a*a*(a*e+3*i*t)+i*i*(i*n+3*a*r)}function uw(e,t,r,n,i){var a=1-i;return 3*(((t-e)*a+2*(r-t)*i)*a+(n-r)*i*i)}function I2(e,t,r,n,i,a){var o=n+3*(t-r)-e,s=3*(r-t*2+e),l=3*(t-e),u=e-i,f=s*s-3*o*l,c=s*l-9*o*u,h=l*l-3*s*u,d=0;if(Ji(f)&&Ji(c))if(Ji(s))a[0]=0;else{var v=-l/s;v>=0&&v<=1&&(a[d++]=v)}else{var p=c*c-4*f*h;if(Ji(p)){var m=c/f,v=-s/o+m,g=-m/2;v>=0&&v<=1&&(a[d++]=v),g>=0&&g<=1&&(a[d++]=g)}else if(p>0){var y=ia(p),_=f*s+1.5*o*(-c+y),b=f*s+1.5*o*(-c-y);_<0?_=-Bf(-_,Ff):_=Bf(_,Ff),b<0?b=-Bf(-b,Ff):b=Bf(b,Ff);var v=(-s-(_+b))/(3*o);v>=0&&v<=1&&(a[d++]=v)}else{var x=(2*f*s-3*o*c)/(2*ia(f*f*f)),w=Math.acos(x)/3,S=ia(f),C=Math.cos(w),v=(-s-2*S*C)/(3*o),g=(-s+S*(C+lw*Math.sin(w)))/(3*o),M=(-s+S*(C-lw*Math.sin(w)))/(3*o);v>=0&&v<=1&&(a[d++]=v),g>=0&&g<=1&&(a[d++]=g),M>=0&&M<=1&&(a[d++]=M)}}return d}function O2(e,t,r,n,i){var a=6*r-12*t+6*e,o=9*t+3*n-3*e-9*r,s=3*t-3*e,l=0;if(Ji(o)){if(D2(a)){var u=-s/a;u>=0&&u<=1&&(i[l++]=u)}}else{var f=a*a-4*o*s;if(Ji(f))i[0]=-a/(2*o);else if(f>0){var c=ia(f),u=(-a+c)/(2*o),h=(-a-c)/(2*o);u>=0&&u<=1&&(i[l++]=u),h>=0&&h<=1&&(i[l++]=h)}}return l}function Sd(e,t,r,n,i,a){var o=(t-e)*i+e,s=(r-t)*i+t,l=(n-r)*i+r,u=(s-o)*i+o,f=(l-s)*i+s,c=(f-u)*i+u;a[0]=e,a[1]=o,a[2]=u,a[3]=c,a[4]=c,a[5]=f,a[6]=l,a[7]=n}function R2(e,t,r,n,i,a,o,s,l,u,f){var c,h=.005,d=1/0,v,p,m,g;Vn[0]=l,Vn[1]=u;for(var y=0;y<1;y+=.05)rn[0]=Zt(e,r,i,o,y),rn[1]=Zt(t,n,a,s,y),m=ss(Vn,rn),m=0&&m=0&&u<=1&&(i[l++]=u)}}else{var f=o*o-4*a*s;if(Ji(f)){var u=-o/(2*a);u>=0&&u<=1&&(i[l++]=u)}else if(f>0){var c=ia(f),u=(-o+c)/(2*a),h=(-o-c)/(2*a);u>=0&&u<=1&&(i[l++]=u),h>=0&&h<=1&&(i[l++]=h)}}return l}function k2(e,t,r){var n=e+r-2*t;return n===0?.5:(e-t)/n}function xd(e,t,r,n,i){var a=(t-e)*n+e,o=(r-t)*n+t,s=(o-a)*n+a;i[0]=e,i[1]=a,i[2]=s,i[3]=s,i[4]=o,i[5]=r}function N2(e,t,r,n,i,a,o,s,l){var u,f=.005,c=1/0;Vn[0]=o,Vn[1]=s;for(var h=0;h<1;h+=.05){rn[0]=ir(e,r,i,h),rn[1]=ir(t,n,a,h);var d=ss(Vn,rn);d=0&&d=1?1:I2(0,n,a,1,l,s)&&Zt(0,i,o,1,s[0])}}}var e9=function(){function e(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||Er,this.ondestroy=t.ondestroy||Er,this.onrestart=t.onrestart||Er,t.easing&&this.setEasing(t.easing)}return e.prototype.step=function(t,r){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),this._paused){this._pausedTime+=r;return}var n=this._life,i=t-this._startTime-this._pausedTime,a=i/n;a<0&&(a=0),a=Math.min(a,1);var o=this.easingFunc,s=o?o(a):a;if(this.onframe(s),a===1)if(this.loop){var l=i%n;this._startTime=t-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},e.prototype.pause=function(){this._paused=!0},e.prototype.resume=function(){this._paused=!1},e.prototype.setEasing=function(t){this.easing=t,this.easingFunc=Ye(t)?t:ql[t]||B2(t)},e}();const t9=e9;var F2=function(){function e(t){this.value=t}return e}(),r9=function(){function e(){this._len=0}return e.prototype.insert=function(t){var r=new F2(t);return this.insertEntry(r),r},e.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},e.prototype.remove=function(t){var r=t.prev,n=t.next;r?r.next=n:this.head=n,n?n.prev=r:this.tail=r,t.next=t.prev=null,this._len--},e.prototype.len=function(){return this._len},e.prototype.clear=function(){this.head=this.tail=null,this._len=0},e}(),af=function(){function e(t){this._list=new r9,this._maxSize=10,this._map={},this._maxSize=t}return e.prototype.put=function(t,r){var n=this._list,i=this._map,a=null;if(i[t]==null){var o=n.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=n.head;n.remove(l),delete i[l.key],a=l.value,this._lastRemovedEntry=l}s?s.value=r:s=new F2(r),s.key=t,n.insertEntry(s),i[t]=s}return a},e.prototype.get=function(t){var r=this._map[t],n=this._list;if(r!=null)return r!==n.tail&&(n.remove(r),n.insertEntry(r)),r.value},e.prototype.clear=function(){this._list.clear(),this._map={}},e.prototype.len=function(){return this._list.len()},e}(),cw={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Kl(e){return e=Math.round(e),e<0?0:e>255?255:e}function dw(e){return e<0?0:e>1?1:e}function Cv(e){var t=e;return t.length&&t.charAt(t.length-1)==="%"?Kl(parseFloat(t)/100*255):Kl(parseInt(t,10))}function Xl(e){var t=e;return t.length&&t.charAt(t.length-1)==="%"?dw(parseFloat(t)/100):dw(parseFloat(t))}function Tv(e,t,r){return r<0?r+=1:r>1&&(r-=1),r*6<1?e+(t-e)*r*6:r*2<1?t:r*3<2?e+(t-e)*(2/3-r)*6:e}function Zr(e,t,r,n,i){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e}function Gg(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}var $2=new af(20),$f=null;function ko(e,t){$f&&Gg($f,t),$f=$2.put(e,$f||t.slice())}function uo(e,t){if(e){t=t||[];var r=$2.get(e);if(r)return Gg(t,r);e=e+"";var n=e.replace(/ /g,"").toLowerCase();if(n in cw)return Gg(t,cw[n]),ko(e,t),t;var i=n.length;if(n.charAt(0)==="#"){if(i===4||i===5){var a=parseInt(n.slice(1,4),16);if(!(a>=0&&a<=4095)){Zr(t,0,0,0,1);return}return Zr(t,(a&3840)>>4|(a&3840)>>8,a&240|(a&240)>>4,a&15|(a&15)<<4,i===5?parseInt(n.slice(4),16)/15:1),ko(e,t),t}else if(i===7||i===9){var a=parseInt(n.slice(1,7),16);if(!(a>=0&&a<=16777215)){Zr(t,0,0,0,1);return}return Zr(t,(a&16711680)>>16,(a&65280)>>8,a&255,i===9?parseInt(n.slice(7),16)/255:1),ko(e,t),t}return}var o=n.indexOf("("),s=n.indexOf(")");if(o!==-1&&s+1===i){var l=n.substr(0,o),u=n.substr(o+1,s-(o+1)).split(","),f=1;switch(l){case"rgba":if(u.length!==4)return u.length===3?Zr(t,+u[0],+u[1],+u[2],1):Zr(t,0,0,0,1);f=Xl(u.pop());case"rgb":if(u.length>=3)return Zr(t,Cv(u[0]),Cv(u[1]),Cv(u[2]),u.length===3?f:Xl(u[3])),ko(e,t),t;Zr(t,0,0,0,1);return;case"hsla":if(u.length!==4){Zr(t,0,0,0,1);return}return u[3]=Xl(u[3]),hw(u,t),ko(e,t),t;case"hsl":if(u.length!==3){Zr(t,0,0,0,1);return}return hw(u,t),ko(e,t),t;default:return}}Zr(t,0,0,0,1)}}function hw(e,t){var r=(parseFloat(e[0])%360+360)%360/360,n=Xl(e[1]),i=Xl(e[2]),a=i<=.5?i*(n+1):i+n-i*n,o=i*2-a;return t=t||[],Zr(t,Kl(Tv(o,a,r+1/3)*255),Kl(Tv(o,a,r)*255),Kl(Tv(o,a,r-1/3)*255),1),e.length===4&&(t[3]=e[3]),t}function vw(e,t){var r=uo(e);if(r){for(var n=0;n<3;n++)t<0?r[n]=r[n]*(1-t)|0:r[n]=(255-r[n])*t+r[n]|0,r[n]>255?r[n]=255:r[n]<0&&(r[n]=0);return s0(r,r.length===4?"rgba":"rgb")}}function s0(e,t){if(!(!e||!e.length)){var r=e[0]+","+e[1]+","+e[2];return(t==="rgba"||t==="hsva"||t==="hsla")&&(r+=","+e[3]),t+"("+r+")"}}function Cd(e,t){var r=uo(e);return r?(.299*r[0]+.587*r[1]+.114*r[2])*r[3]/255+(1-r[3])*t:0}function n9(e){return e.type==="linear"}function i9(e){return e.type==="radial"}(function(){return He.hasGlobalWindow&&Ye(window.btoa)?function(e){return window.btoa(unescape(encodeURIComponent(e)))}:typeof Buffer<"u"?function(e){return Buffer.from(e).toString("base64")}:function(e){return null}})();var Ug=Array.prototype.slice;function hi(e,t,r){return(t-e)*r+e}function Mv(e,t,r,n){for(var i=t.length,a=0;an?t:e,a=Math.min(r,n),o=i[a-1]||{color:[0,0,0,0],offset:0},s=a;so;if(s)n.length=o;else for(var l=a;l=1},e.prototype.getAdditiveTrack=function(){return this._additiveTrack},e.prototype.addKeyframe=function(t,r,n){this._needsSort=!0;var i=this.keyframes,a=i.length,o=!1,s=gw,l=r;if(Ir(r)){var u=l9(r);s=u,(u===1&&!Tt(r[0])||u===2&&!Tt(r[0][0]))&&(o=!0)}else if(Tt(r)&&!bd(r))s=zf;else if(Ee(r))if(!isNaN(+r))s=zf;else{var f=uo(r);f&&(l=f,s=Tl)}else if(yh(r)){var c=ue({},l);c.colorStops=Ne(r.colorStops,function(d){return{offset:d.offset,color:uo(d.color)}}),n9(r)?s=Yg:i9(r)&&(s=jg),l=c}a===0?this.valType=s:(s!==this.valType||s===gw)&&(o=!0),this.discrete=this.discrete||o;var h={time:t,value:l,rawValue:r,percent:0};return n&&(h.easing=n,h.easingFunc=Ye(n)?n:ql[n]||B2(n)),i.push(h),h},e.prototype.prepare=function(t,r){var n=this.keyframes;this._needsSort&&n.sort(function(p,m){return p.time-m.time});for(var i=this.valType,a=n.length,o=n[a-1],s=this.discrete,l=Vf(i),u=mw(i),f=0;f=0&&!(o[f].percent<=r);f--);f=h(f,s-2)}else{for(f=c;fr);f++);f=h(f-1,s-2)}v=o[f+1],d=o[f]}if(d&&v){this._lastFr=f,this._lastFrP=r;var m=v.percent-d.percent,g=m===0?1:h((r-d.percent)/m,1);v.easingFunc&&(g=v.easingFunc(g));var y=n?this._additiveValue:u?al:t[l];if((Vf(a)||u)&&!y&&(y=this._additiveValue=[]),this.discrete)t[l]=g<1?d.rawValue:v.rawValue;else if(Vf(a))a===Vc?Mv(y,d[i],v[i],g):a9(y,d[i],v[i],g);else if(mw(a)){var _=d[i],b=v[i],x=a===Yg;t[l]={type:x?"linear":"radial",x:hi(_.x,b.x,g),y:hi(_.y,b.y,g),colorStops:Ne(_.colorStops,function(S,C){var M=b.colorStops[C];return{offset:hi(S.offset,M.offset,g),color:zc(Mv([],S.color,M.color,g))}}),global:b.global},x?(t[l].x2=hi(_.x2,b.x2,g),t[l].y2=hi(_.y2,b.y2,g)):t[l].r=hi(_.r,b.r,g)}else if(u)Mv(y,d[i],v[i],g),n||(t[l]=zc(y));else{var w=hi(d[i],v[i],g);n?this._additiveValue=w:t[l]=w}n&&this._addToTarget(t)}}},e.prototype._addToTarget=function(t){var r=this.valType,n=this.propName,i=this._additiveValue;r===zf?t[n]=t[n]+i:r===Tl?(uo(t[n],al),Hf(al,al,i,1),t[n]=zc(al)):r===Vc?Hf(t[n],t[n],i,1):r===H2&&pw(t[n],t[n],i,1)},e}(),l0=function(){function e(t,r,n,i){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=t,this._loop=r,r&&i){r0("Can' use additive animation on looped animation.");return}this._additiveAnimators=i,this._allowDiscrete=n}return e.prototype.getMaxTime=function(){return this._maxTime},e.prototype.getDelay=function(){return this._delay},e.prototype.getLoop=function(){return this._loop},e.prototype.getTarget=function(){return this._target},e.prototype.changeTarget=function(t){this._target=t},e.prototype.when=function(t,r,n){return this.whenWithKeys(t,r,Ct(r),n)},e.prototype.whenWithKeys=function(t,r,n,i){for(var a=this._tracks,o=0;o0&&l.addKeyframe(0,Hc(u),i),this._trackKeys.push(s)}l.addKeyframe(t,Hc(r[s]),i)}return this._maxTime=Math.max(this._maxTime,t),this},e.prototype.pause=function(){this._clip.pause(),this._paused=!0},e.prototype.resume=function(){this._clip.resume(),this._paused=!1},e.prototype.isPaused=function(){return!!this._paused},e.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},e.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var r=t.length,n=0;n0)){this._started=1;for(var r=this,n=[],i=this._maxTime||0,a=0;a1){var s=o.pop();a.addKeyframe(s.time,t[i]),a.prepare(this._maxTime,a.getAdditiveTrack())}}}},e}();function ts(){return new Date().getTime()}var f9=function(e){ge(t,e);function t(r){var n=e.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,r=r||{},n.stage=r.stage||{},n}return t.prototype.addClip=function(r){r.animation&&this.removeClip(r),this._head?(this._tail.next=r,r.prev=this._tail,r.next=null,this._tail=r):this._head=this._tail=r,r.animation=this},t.prototype.addAnimator=function(r){r.animation=this;var n=r.getClip();n&&this.addClip(n)},t.prototype.removeClip=function(r){if(r.animation){var n=r.prev,i=r.next;n?n.next=i:this._head=i,i?i.prev=n:this._tail=n,r.next=r.prev=r.animation=null}},t.prototype.removeAnimator=function(r){var n=r.getClip();n&&this.removeClip(n),r.animation=null},t.prototype.update=function(r){for(var n=ts()-this._pausedTime,i=n-this._time,a=this._head;a;){var o=a.next,s=a.step(n,i);s&&(a.ondestroy(),this.removeClip(a)),a=o}this._time=n,r||(this.trigger("frame",i),this.stage.update&&this.stage.update())},t.prototype._startLoop=function(){var r=this;this._running=!0;function n(){r._running&&(Wg(n),!r._paused&&r.update())}Wg(n)},t.prototype.start=function(){this._running||(this._time=ts(),this._pausedTime=0,this._startLoop())},t.prototype.stop=function(){this._running=!1},t.prototype.pause=function(){this._paused||(this._pauseStart=ts(),this._paused=!0)},t.prototype.resume=function(){this._paused&&(this._pausedTime+=ts()-this._pauseStart,this._paused=!1)},t.prototype.clear=function(){for(var r=this._head;r;){var n=r.next;r.prev=r.next=r.animation=null,r=n}this._head=this._tail=null},t.prototype.isFinished=function(){return this._head==null},t.prototype.animate=function(r,n){n=n||{},this.start();var i=new l0(r,n.loop);return this.addAnimator(i),i},t}(ii),c9=300,Av=He.domSupported,Pv=function(){var e=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],t=["touchstart","touchend","touchmove"],r={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},n=Ne(e,function(i){var a=i.replace("mouse","pointer");return r.hasOwnProperty(a)?a:i});return{mouse:e,touch:t,pointer:n}}(),yw={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},_w=!1;function qg(e){var t=e.pointerType;return t==="pen"||t==="touch"}function d9(e){e.touching=!0,e.touchTimer!=null&&(clearTimeout(e.touchTimer),e.touchTimer=null),e.touchTimer=setTimeout(function(){e.touching=!1,e.touchTimer=null},700)}function Ev(e){e&&(e.zrByTouch=!0)}function h9(e,t){return Qr(e.dom,new v9(e,t),!0)}function z2(e,t){for(var r=t,n=!1;r&&r.nodeType!==9&&!(n=r.domBelongToZr||r!==t&&r===e.painterRoot);)r=r.parentNode;return n}var v9=function(){function e(t,r){this.stopPropagation=Er,this.stopImmediatePropagation=Er,this.preventDefault=Er,this.type=r.type,this.target=this.currentTarget=t.dom,this.pointerType=r.pointerType,this.clientX=r.clientX,this.clientY=r.clientY}return e}(),yn={mousedown:function(e){e=Qr(this.dom,e),this.__mayPointerCapture=[e.zrX,e.zrY],this.trigger("mousedown",e)},mousemove:function(e){e=Qr(this.dom,e);var t=this.__mayPointerCapture;t&&(e.zrX!==t[0]||e.zrY!==t[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",e)},mouseup:function(e){e=Qr(this.dom,e),this.__togglePointerCapture(!1),this.trigger("mouseup",e)},mouseout:function(e){e=Qr(this.dom,e);var t=e.toElement||e.relatedTarget;z2(this,t)||(this.__pointerCapturing&&(e.zrEventControl="no_globalout"),this.trigger("mouseout",e))},wheel:function(e){_w=!0,e=Qr(this.dom,e),this.trigger("mousewheel",e)},mousewheel:function(e){_w||(e=Qr(this.dom,e),this.trigger("mousewheel",e))},touchstart:function(e){e=Qr(this.dom,e),Ev(e),this.__lastTouchMoment=new Date,this.handler.processGesture(e,"start"),yn.mousemove.call(this,e),yn.mousedown.call(this,e)},touchmove:function(e){e=Qr(this.dom,e),Ev(e),this.handler.processGesture(e,"change"),yn.mousemove.call(this,e)},touchend:function(e){e=Qr(this.dom,e),Ev(e),this.handler.processGesture(e,"end"),yn.mouseup.call(this,e),+new Date-+this.__lastTouchMomentSw||e<-Sw}var Ma=[],No=[],Dv=Pu(),Iv=Math.abs,wh=function(){function e(){}return e.prototype.getLocalTransform=function(t){return e.getLocalTransform(this,t)},e.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},e.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},e.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},e.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},e.prototype.needLocalTransform=function(){return Ta(this.rotation)||Ta(this.x)||Ta(this.y)||Ta(this.scaleX-1)||Ta(this.scaleY-1)||Ta(this.skewX)||Ta(this.skewY)},e.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,r=this.needLocalTransform(),n=this.transform;if(!(r||t)){n&&(ww(n),this.invTransform=null);return}n=n||Pu(),r?this.getLocalTransform(n):ww(n),t&&(r?ls(n,t,n):BU(n,t)),this.transform=n,this._resolveGlobalScaleRatio(n)},e.prototype._resolveGlobalScaleRatio=function(t){var r=this.globalScaleRatio;if(r!=null&&r!==1){this.getGlobalScale(Ma);var n=Ma[0]<0?-1:1,i=Ma[1]<0?-1:1,a=((Ma[0]-n)*r+n)/Ma[0]||0,o=((Ma[1]-i)*r+i)/Ma[1]||0;t[0]*=a,t[1]*=a,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||Pu(),bh(this.invTransform,t)},e.prototype.getComputedTransform=function(){for(var t=this,r=[];t;)r.push(t),t=t.parent;for(;t=r.pop();)t.updateTransform();return this.transform},e.prototype.setLocalTransform=function(t){if(t){var r=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),a=Math.PI/2+i-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(a),r=Math.sqrt(r),this.skewX=a,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=r,this.scaleY=n,this.originX=0,this.originY=0}},e.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,r=this.transform;t&&t.transform&&(ls(No,t.invTransform,r),r=No);var n=this.originX,i=this.originY;(n||i)&&(Dv[4]=n,Dv[5]=i,ls(No,r,Dv),No[4]-=n,No[5]-=i,r=No),this.setLocalTransform(r)}},e.prototype.getGlobalScale=function(t){var r=this.transform;return t=t||[],r?(t[0]=Math.sqrt(r[0]*r[0]+r[1]*r[1]),t[1]=Math.sqrt(r[2]*r[2]+r[3]*r[3]),r[0]<0&&(t[0]=-t[0]),r[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},e.prototype.transformCoordToLocal=function(t,r){var n=[t,r],i=this.invTransform;return i&&un(n,n,i),n},e.prototype.transformCoordToGlobal=function(t,r){var n=[t,r],i=this.transform;return i&&un(n,n,i),n},e.prototype.getLineScale=function(){var t=this.transform;return t&&Iv(t[0]-1)>1e-10&&Iv(t[3]-1)>1e-10?Math.sqrt(Iv(t[0]*t[3]-t[2]*t[1])):1},e.prototype.copyTransform=function(t){b9(this,t)},e.getLocalTransform=function(t,r){r=r||[];var n=t.originX||0,i=t.originY||0,a=t.scaleX,o=t.scaleY,s=t.anchorX,l=t.anchorY,u=t.rotation||0,f=t.x,c=t.y,h=t.skewX?Math.tan(t.skewX):0,d=t.skewY?Math.tan(-t.skewY):0;if(n||i||s||l){var v=n+s,p=i+l;r[4]=-v*a-h*p*o,r[5]=-p*o-d*v*a}else r[4]=r[5]=0;return r[0]=a,r[3]=o,r[1]=d*a,r[2]=h*o,u&&o0(r,r,u),r[4]+=n+f,r[5]+=i+c,r},e.initDefaultProps=function(){var t=e.prototype;t.scaleX=t.scaleY=t.globalScaleRatio=1,t.x=t.y=t.originX=t.originY=t.skewX=t.skewY=t.rotation=t.anchorX=t.anchorY=0}(),e}(),Eu=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function b9(e,t){for(var r=0;r=0?parseFloat(e)/100*t:parseFloat(e):e}function Md(e,t,r){var n=t.position||"inside",i=t.distance!=null?t.distance:5,a=r.height,o=r.width,s=a/2,l=r.x,u=r.y,f="left",c="top";if(n instanceof Array)l+=da(n[0],r.width),u+=da(n[1],r.height),f=null,c=null;else switch(n){case"left":l-=i,u+=s,f="right",c="middle";break;case"right":l+=i+o,u+=s,c="middle";break;case"top":l+=o/2,u-=i,f="center",c="bottom";break;case"bottom":l+=o/2,u+=a+i,f="center";break;case"inside":l+=o/2,u+=s,f="center",c="middle";break;case"insideLeft":l+=i,u+=s,c="middle";break;case"insideRight":l+=o-i,u+=s,f="right",c="middle";break;case"insideTop":l+=o/2,u+=i,f="center";break;case"insideBottom":l+=o/2,u+=a-i,f="center",c="bottom";break;case"insideTopLeft":l+=i,u+=i;break;case"insideTopRight":l+=o-i,u+=i,f="right";break;case"insideBottomLeft":l+=i,u+=a-i,c="bottom";break;case"insideBottomRight":l+=o-i,u+=a-i,f="right",c="bottom";break}return e=e||{},e.x=l,e.y=u,e.align=f,e.verticalAlign=c,e}var Ov="__zr_normal__",Rv=Eu.concat(["ignore"]),w9=ca(Eu,function(e,t){return e[t]=!0,e},{ignore:!1}),Bo={},S9=new nt(0,0,0,0),c0=function(){function e(t){this.id=y2(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return e.prototype._init=function(t){this.attr(t)},e.prototype.drift=function(t,r,n){switch(this.draggable){case"horizontal":r=0;break;case"vertical":t=0;break}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=r,this.decomposeTransform(),this.markRedraw()},e.prototype.beforeUpdate=function(){},e.prototype.afterUpdate=function(){},e.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},e.prototype.updateInnerText=function(t){var r=this._textContent;if(r&&(!r.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,a=r.innerTransformable,o=void 0,s=void 0,l=!1;a.parent=i?this:null;var u=!1;if(a.copyTransform(r),n.position!=null){var f=S9;n.layoutRect?f.copy(n.layoutRect):f.copy(this.getBoundingRect()),i||f.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(Bo,n,f):Md(Bo,n,f),a.x=Bo.x,a.y=Bo.y,o=Bo.align,s=Bo.verticalAlign;var c=n.origin;if(c&&n.rotation!=null){var h=void 0,d=void 0;c==="center"?(h=f.width*.5,d=f.height*.5):(h=da(c[0],f.width),d=da(c[1],f.height)),u=!0,a.originX=-a.x+h+(i?0:f.x),a.originY=-a.y+d+(i?0:f.y)}}n.rotation!=null&&(a.rotation=n.rotation);var v=n.offset;v&&(a.x+=v[0],a.y+=v[1],u||(a.originX=-v[0],a.originY=-v[1]));var p=n.inside==null?typeof n.position=="string"&&n.position.indexOf("inside")>=0:n.inside,m=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),g=void 0,y=void 0,_=void 0;p&&this.canBeInsideText()?(g=n.insideFill,y=n.insideStroke,(g==null||g==="auto")&&(g=this.getInsideTextFill()),(y==null||y==="auto")&&(y=this.getInsideTextStroke(g),_=!0)):(g=n.outsideFill,y=n.outsideStroke,(g==null||g==="auto")&&(g=this.getOutsideFill()),(y==null||y==="auto")&&(y=this.getOutsideStroke(g),_=!0)),g=g||"#000",(g!==m.fill||y!==m.stroke||_!==m.autoStroke||o!==m.align||s!==m.verticalAlign)&&(l=!0,m.fill=g,m.stroke=y,m.autoStroke=_,m.align=o,m.verticalAlign=s,r.setDefaultTextStyle(m)),r.__dirty|=Br,l&&r.dirtyStyle(!0)}},e.prototype.canBeInsideText=function(){return!0},e.prototype.getInsideTextFill=function(){return"#fff"},e.prototype.getInsideTextStroke=function(t){return"#000"},e.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Qg:Zg},e.prototype.getOutsideStroke=function(t){var r=this.__zr&&this.__zr.getBackgroundColor(),n=typeof r=="string"&&uo(r);n||(n=[255,255,255,1]);for(var i=n[3],a=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(a?0:255)*(1-i);return n[3]=1,s0(n,"rgba")},e.prototype.traverse=function(t,r){},e.prototype.attrKV=function(t,r){t==="textConfig"?this.setTextConfig(r):t==="textContent"?this.setTextContent(r):t==="clipPath"?this.setClipPath(r):t==="extra"?(this.extra=this.extra||{},ue(this.extra,r)):this[t]=r},e.prototype.hide=function(){this.ignore=!0,this.markRedraw()},e.prototype.show=function(){this.ignore=!1,this.markRedraw()},e.prototype.attr=function(t,r){if(typeof t=="string")this.attrKV(t,r);else if(Re(t))for(var n=t,i=Ct(n),a=0;a0},e.prototype.getState=function(t){return this.states[t]},e.prototype.ensureState=function(t){var r=this.states;return r[t]||(r[t]={}),r[t]},e.prototype.clearStates=function(t){this.useState(Ov,!1,t)},e.prototype.useState=function(t,r,n,i){var a=t===Ov,o=this.hasState();if(!(!o&&a)){var s=this.currentStates,l=this.stateTransition;if(!(ot(s,t)>=0&&(r||s.length===1))){var u;if(this.stateProxy&&!a&&(u=this.stateProxy(t)),u||(u=this.states&&this.states[t]),!u&&!a){r0("State "+t+" not exists.");return}a||this.saveCurrentToNormalState(u);var f=!!(u&&u.hoverLayer||i);f&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,u,this._normalState,r,!n&&!this.__inHover&&l&&l.duration>0,l);var c=this._textContent,h=this._textGuide;return c&&c.useState(t,r,n,f),h&&h.useState(t,r,n,f),a?(this.currentStates=[],this._normalState={}):r?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!f&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Br),u}}},e.prototype.useStates=function(t,r,n){if(!t.length)this.clearStates();else{var i=[],a=this.currentStates,o=t.length,s=o===a.length;if(s){for(var l=0;l0,v);var p=this._textContent,m=this._textGuide;p&&p.useStates(t,r,h),m&&m.useStates(t,r,h),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!h&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Br)}},e.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(r,1),this.useStates(n)}},e.prototype.replaceState=function(t,r,n){var i=this.currentStates.slice(),a=ot(i,t),o=ot(i,r)>=0;a>=0?o?i.splice(a,1):i[a]=r:n&&!o&&i.push(r),this.useStates(i)},e.prototype.toggleState=function(t,r){r?this.useState(t,!0):this.removeState(t)},e.prototype._mergeStates=function(t){for(var r={},n,i=0;i=0&&a.splice(o,1)}),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},e.prototype.updateDuringAnimation=function(t){this.markRedraw()},e.prototype.stopAnimation=function(t,r){for(var n=this.animators,i=n.length,a=[],o=0;o0&&r.during&&a[0].during(function(v,p){r.during(p)});for(var h=0;h0||i.force&&!o.length){var C=void 0,M=void 0,A=void 0;if(s){M={},h&&(C={});for(var b=0;b<_;b++){var g=p[b];M[g]=r[g],h?C[g]=n[g]:r[g]=n[g]}}else if(h){A={};for(var b=0;b<_;b++){var g=p[b];A[g]=Hc(r[g]),C9(r,n,g)}}var x=new l0(r,!1,!1,c?jt(v,function(E){return E.targetName===t}):null);x.targetName=t,i.scope&&(x.scope=i.scope),h&&C&&x.whenWithKeys(0,C,p),A&&x.whenWithKeys(0,A,p),x.whenWithKeys(u??500,s?M:n,p).delay(f||0),e.addAnimator(x,t),o.push(x)}}const G2=c0;var Ur=function(e){ge(t,e);function t(r){var n=e.call(this)||this;return n.isGroup=!0,n._children=[],n.attr(r),n}return t.prototype.childrenRef=function(){return this._children},t.prototype.children=function(){return this._children.slice()},t.prototype.childAt=function(r){return this._children[r]},t.prototype.childOfName=function(r){for(var n=this._children,i=0;i=0&&(i.splice(a,0,r),this._doAdd(r))}return this},t.prototype.replace=function(r,n){var i=ot(this._children,r);return i>=0&&this.replaceAt(n,i),this},t.prototype.replaceAt=function(r,n){var i=this._children,a=i[n];if(r&&r!==this&&r.parent!==this&&r!==a){i[n]=r,a.parent=null;var o=this.__zr;o&&a.removeSelfFromZr(o),this._doAdd(r)}return this},t.prototype._doAdd=function(r){r.parent&&r.parent.remove(r),r.parent=this;var n=this.__zr;n&&n!==r.__zr&&r.addSelfToZr(n),n&&n.refresh()},t.prototype.remove=function(r){var n=this.__zr,i=this._children,a=ot(i,r);return a<0?this:(i.splice(a,1),r.parent=null,n&&r.removeSelfFromZr(n),n&&n.refresh(),this)},t.prototype.removeAll=function(){for(var r=this._children,n=this.__zr,i=0;i"u"&&typeof self<"u"?He.worker=!0:typeof navigator>"u"?(He.node=!0,He.svgSupported=!0):ZG(navigator.userAgent,He);function ZG(e,t){var r=t.browser,n=e.match(/Firefox\/([\d.]+)/),i=e.match(/MSIE\s([\d.]+)/)||e.match(/Trident\/.+?rv:(([\d.]+))/),a=e.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(e);n&&(r.firefox=!0,r.version=n[1]),i&&(r.ie=!0,r.version=i[1]),a&&(r.edge=!0,r.version=a[1],r.newEdge=+a[1].split(".")[0]>18),o&&(r.weChat=!0),t.svgSupported=typeof SVGRect<"u",t.touchEventsSupported="ontouchstart"in window&&!r.ie&&!r.edge,t.pointerEventsSupported="onpointerdown"in window&&(r.edge||r.ie&&+r.version>=11),t.domSupported=typeof document<"u";var s=document.documentElement.style;t.transform3dSupported=(r.ie&&"transition"in s||r.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),t.transformSupported=t.transform3dSupported||r.ie&&+r.version>=9}var Jy=12,QG="sans-serif",_o=Jy+"px "+QG,JG=20,eU=100,tU="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function rU(e){var t={};if(typeof JSON>"u")return t;for(var r=0;r=0)s=o*r.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",n[l]+":0",i[u]+":0",n[1-l]+":auto",i[1-u]+":auto",""].join("!important;"),e.appendChild(o),r.push(o)}return r}function AU(e,t,r){for(var n=r?"invTrans":"trans",i=t[n],a=t.srcCoords,o=[],s=[],l=!0,u=0;u<4;u++){var f=e[u].getBoundingClientRect(),c=2*u,h=f.left,d=f.top;o.push(h,d),l=l&&a&&h===a[c]&&d===a[c+1],s.push(e[u].offsetLeft,e[u].offsetTop)}return l&&i?i:(t.srcCoords=o,t[n]=r?J1(s,o):J1(o,s))}function x2(e){return e.nodeName.toUpperCase()==="CANVAS"}var PU=/([&<>"'])/g,EU={"&":"&","<":"<",">":">",'"':""","'":"'"};function tn(e){return e==null?"":(e+"").replace(PU,function(t,r){return EU[r]})}var LU=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,yv=[],DU=He.browser.firefox&&+He.browser.version.split(".")[0]<39;function zg(e,t,r,n){return r=r||{},n?tw(e,t,r):DU&&t.layerX!=null&&t.layerX!==t.offsetX?(r.zrX=t.layerX,r.zrY=t.layerY):t.offsetX!=null?(r.zrX=t.offsetX,r.zrY=t.offsetY):tw(e,t,r),r}function tw(e,t,r){if(He.domSupported&&e.getBoundingClientRect){var n=t.clientX,i=t.clientY;if(x2(e)){var a=e.getBoundingClientRect();r.zrX=n-a.left,r.zrY=i-a.top;return}else if(Hg(yv,e,n,i)){r.zrX=yv[0],r.zrY=yv[1];return}}r.zrX=r.zrY=0}function i0(e){return e||window.event}function Qr(e,t,r){if(t=i0(t),t.zrX!=null)return t;var n=t.type,i=n&&n.indexOf("touch")>=0;if(i){var o=n!=="touchend"?t.targetTouches[0]:t.changedTouches[0];o&&zg(e,o,t,r)}else{zg(e,t,t,r);var a=IU(t);t.zrDelta=a?a/120:-(t.detail||0)/3}var s=t.button;return t.which==null&&s!==void 0&&LU.test(t.type)&&(t.which=s&1?1:s&2?3:s&4?2:0),t}function IU(e){var t=e.wheelDelta;if(t)return t;var r=e.deltaX,n=e.deltaY;if(r==null||n==null)return t;var i=Math.abs(n!==0?n:r),a=n>0?-1:n<0?1:r>0?-1:1;return 3*i*a}function OU(e,t,r,n){e.addEventListener(t,r,n)}function RU(e,t,r,n){e.removeEventListener(t,r,n)}var C2=function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0},kU=function(){function e(){this._track=[]}return e.prototype.recognize=function(t,r,n){return this._doTrack(t,r,n),this._recognize(t)},e.prototype.clear=function(){return this._track.length=0,this},e.prototype._doTrack=function(t,r,n){var i=t.touches;if(i){for(var a={points:[],touches:[],target:r,event:t},o=0,s=i.length;o1&&n&&n.length>1){var a=rw(n)/rw(i);!isFinite(a)&&(a=1),t.pinchScale=a;var o=NU(n);return t.pinchX=o[0],t.pinchY=o[1],{type:"pinch",target:e[0].target,event:t}}}}};function Pu(){return[1,0,0,1,0,0]}function a0(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e}function BU(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e}function fs(e,t,r){var n=t[0]*r[0]+t[2]*r[1],i=t[1]*r[0]+t[3]*r[1],a=t[0]*r[2]+t[2]*r[3],o=t[1]*r[2]+t[3]*r[3],s=t[0]*r[4]+t[2]*r[5]+t[4],l=t[1]*r[4]+t[3]*r[5]+t[5];return e[0]=n,e[1]=i,e[2]=a,e[3]=o,e[4]=s,e[5]=l,e}function Vg(e,t,r){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+r[0],e[5]=t[5]+r[1],e}function o0(e,t,r){var n=t[0],i=t[2],a=t[4],o=t[1],s=t[3],l=t[5],u=Math.sin(r),f=Math.cos(r);return e[0]=n*f+o*u,e[1]=-n*u+o*f,e[2]=i*f+s*u,e[3]=-i*u+f*s,e[4]=f*a+u*l,e[5]=f*l-u*a,e}function FU(e,t,r){var n=r[0],i=r[1];return e[0]=t[0]*n,e[1]=t[1]*i,e[2]=t[2]*n,e[3]=t[3]*i,e[4]=t[4]*n,e[5]=t[5]*i,e}function bh(e,t){var r=t[0],n=t[2],i=t[4],a=t[1],o=t[3],s=t[5],l=r*o-a*n;return l?(l=1/l,e[0]=o*l,e[1]=-a*l,e[2]=-n*l,e[3]=r*l,e[4]=(n*s-o*i)*l,e[5]=(a*i-r*s)*l,e):null}var $U=function(){function e(t,r){this.x=t||0,this.y=r||0}return e.prototype.copy=function(t){return this.x=t.x,this.y=t.y,this},e.prototype.clone=function(){return new e(this.x,this.y)},e.prototype.set=function(t,r){return this.x=t,this.y=r,this},e.prototype.equal=function(t){return t.x===this.x&&t.y===this.y},e.prototype.add=function(t){return this.x+=t.x,this.y+=t.y,this},e.prototype.scale=function(t){this.x*=t,this.y*=t},e.prototype.scaleAndAdd=function(t,r){this.x+=t.x*r,this.y+=t.y*r},e.prototype.sub=function(t){return this.x-=t.x,this.y-=t.y,this},e.prototype.dot=function(t){return this.x*t.x+this.y*t.y},e.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},e.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},e.prototype.normalize=function(){var t=this.len();return this.x/=t,this.y/=t,this},e.prototype.distance=function(t){var r=this.x-t.x,n=this.y-t.y;return Math.sqrt(r*r+n*n)},e.prototype.distanceSquare=function(t){var r=this.x-t.x,n=this.y-t.y;return r*r+n*n},e.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},e.prototype.transform=function(t){if(t){var r=this.x,n=this.y;return this.x=t[0]*r+t[2]*n+t[4],this.y=t[1]*r+t[3]*n+t[5],this}},e.prototype.toArray=function(t){return t[0]=this.x,t[1]=this.y,t},e.prototype.fromArray=function(t){this.x=t[0],this.y=t[1]},e.set=function(t,r,n){t.x=r,t.y=n},e.copy=function(t,r){t.x=r.x,t.y=r.y},e.len=function(t){return Math.sqrt(t.x*t.x+t.y*t.y)},e.lenSquare=function(t){return t.x*t.x+t.y*t.y},e.dot=function(t,r){return t.x*r.x+t.y*r.y},e.add=function(t,r,n){t.x=r.x+n.x,t.y=r.y+n.y},e.sub=function(t,r,n){t.x=r.x-n.x,t.y=r.y-n.y},e.scale=function(t,r,n){t.x=r.x*n,t.y=r.y*n},e.scaleAndAdd=function(t,r,n,i){t.x=r.x+n.x*i,t.y=r.y+n.y*i},e.lerp=function(t,r,n,i){var a=1-i;t.x=a*r.x+i*n.x,t.y=a*r.y+i*n.y},e}();const Fe=$U;var kf=Math.min,Nf=Math.max,wa=new Fe,Sa=new Fe,xa=new Fe,Ca=new Fe,tl=new Fe,rl=new Fe,nt=function(){function e(t,r,n,i){n<0&&(t=t+n,n=-n),i<0&&(r=r+i,i=-i),this.x=t,this.y=r,this.width=n,this.height=i}return e.prototype.union=function(t){var r=kf(t.x,this.x),n=kf(t.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=Nf(t.x+t.width,this.x+this.width)-r:this.width=t.width,isFinite(this.y)&&isFinite(this.height)?this.height=Nf(t.y+t.height,this.y+this.height)-n:this.height=t.height,this.x=r,this.y=n},e.prototype.applyTransform=function(t){e.applyTransform(this,this,t)},e.prototype.calculateTransform=function(t){var r=this,n=t.width/r.width,i=t.height/r.height,a=Pu();return Vg(a,a,[-r.x,-r.y]),FU(a,a,[n,i]),Vg(a,a,[t.x,t.y]),a},e.prototype.intersect=function(t,r){if(!t)return!1;t instanceof e||(t=e.create(t));var n=this,i=n.x,a=n.x+n.width,o=n.y,s=n.y+n.height,l=t.x,u=t.x+t.width,f=t.y,c=t.y+t.height,h=!(av&&(v=_,pv&&(v=b,g=n.x&&t<=n.x+n.width&&r>=n.y&&r<=n.y+n.height},e.prototype.clone=function(){return new e(this.x,this.y,this.width,this.height)},e.prototype.copy=function(t){e.copy(this,t)},e.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},e.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},e.prototype.isZero=function(){return this.width===0||this.height===0},e.create=function(t){return new e(t.x,t.y,t.width,t.height)},e.copy=function(t,r){t.x=r.x,t.y=r.y,t.width=r.width,t.height=r.height},e.applyTransform=function(t,r,n){if(!n){t!==r&&e.copy(t,r);return}if(n[1]<1e-5&&n[1]>-1e-5&&n[2]<1e-5&&n[2]>-1e-5){var i=n[0],a=n[3],o=n[4],s=n[5];t.x=r.x*i+o,t.y=r.y*a+s,t.width=r.width*i,t.height=r.height*a,t.width<0&&(t.x+=t.width,t.width=-t.width),t.height<0&&(t.y+=t.height,t.height=-t.height);return}wa.x=xa.x=r.x,wa.y=Ca.y=r.y,Sa.x=Ca.x=r.x+r.width,Sa.y=xa.y=r.y+r.height,wa.transform(n),Ca.transform(n),Sa.transform(n),xa.transform(n),t.x=kf(wa.x,Sa.x,xa.x,Ca.x),t.y=kf(wa.y,Sa.y,xa.y,Ca.y);var l=Nf(wa.x,Sa.x,xa.x,Ca.x),u=Nf(wa.y,Sa.y,xa.y,Ca.y);t.width=l-t.x,t.height=u-t.y},e}(),T2="silent";function HU(e,t,r){return{type:e,event:r,target:t.target,topTarget:t.topTarget,cancelBubble:!1,offsetX:r.zrX,offsetY:r.zrY,gestureEvent:r.gestureEvent,pinchX:r.pinchX,pinchY:r.pinchY,pinchScale:r.pinchScale,wheelDelta:r.zrDelta,zrByTouch:r.zrByTouch,which:r.which,stop:zU}}function zU(){C2(this.event)}var VU=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.handler=null,r}return t.prototype.dispose=function(){},t.prototype.setCursor=function(){},t}(ii),nl=function(){function e(t,r){this.x=t,this.y=r}return e}(),WU=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],bv=new nt(0,0,0,0),M2=function(e){ge(t,e);function t(r,n,i,a,o){var s=e.call(this)||this;return s._hovered=new nl(0,0),s.storage=r,s.painter=n,s.painterRoot=a,s._pointerSize=o,i=i||new VU,s.proxy=null,s.setHandlerProxy(i),s._draggingMgr=new SU(s),s}return t.prototype.setHandlerProxy=function(r){this.proxy&&this.proxy.dispose(),r&&(R(WU,function(n){r.on&&r.on(n,this[n],this)},this),r.handler=this),this.proxy=r},t.prototype.mousemove=function(r){var n=r.zrX,i=r.zrY,a=A2(this,n,i),o=this._hovered,s=o.target;s&&!s.__zr&&(o=this.findHover(o.x,o.y),s=o.target);var l=this._hovered=a?new nl(n,i):this.findHover(n,i),u=l.target,f=this.proxy;f.setCursor&&f.setCursor(u?u.cursor:"default"),s&&u!==s&&this.dispatchToElement(o,"mouseout",r),this.dispatchToElement(l,"mousemove",r),u&&u!==s&&this.dispatchToElement(l,"mouseover",r)},t.prototype.mouseout=function(r){var n=r.zrEventControl;n!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",r),n!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:r})},t.prototype.resize=function(){this._hovered=new nl(0,0)},t.prototype.dispatch=function(r,n){var i=this[r];i&&i.call(this,n)},t.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},t.prototype.setCursorStyle=function(r){var n=this.proxy;n.setCursor&&n.setCursor(r)},t.prototype.dispatchToElement=function(r,n,i){r=r||{};var a=r.target;if(!(a&&a.silent)){for(var o="on"+n,s=HU(n,r,i);a&&(a[o]&&(s.cancelBubble=!!a[o].call(a,s)),a.trigger(n,s),a=a.__hostTarget?a.__hostTarget:a.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(n,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[o]=="function"&&l[o].call(l,s),l.trigger&&l.trigger(n,s)}))}},t.prototype.findHover=function(r,n,i){var a=this.storage.getDisplayList(),o=new nl(r,n);if(nw(a,o,r,n,i),this._pointerSize&&!o.target){for(var s=[],l=this._pointerSize,u=l/2,f=new nt(r-u,n-u,l,l),c=a.length-1;c>=0;c--){var h=a[c];h!==i&&!h.ignore&&!h.ignoreCoarsePointer&&(!h.parent||!h.parent.ignoreCoarsePointer)&&(bv.copy(h.getBoundingRect()),h.transform&&bv.applyTransform(h.transform),bv.intersect(f)&&s.push(h))}if(s.length)for(var d=4,v=Math.PI/12,p=Math.PI*2,m=0;m4)return;this._downPoint=null}this.dispatchToElement(a,e,t)}});function GU(e,t,r){if(e[e.rectHover?"rectContain":"contain"](t,r)){for(var n=e,i=void 0,a=!1;n;){if(n.ignoreClip&&(a=!0),!a){var o=n.getClipPath();if(o&&!o.contain(t,r))return!1;n.silent&&(i=!0)}var s=n.__hostTarget;n=s||n.parent}return i?T2:!0}return!1}function nw(e,t,r,n,i){for(var a=e.length-1;a>=0;a--){var o=e[a],s=void 0;if(o!==i&&!o.ignore&&(s=GU(o,r,n))&&(!t.topTarget&&(t.topTarget=o),s!==T2)){t.target=o;break}}}function A2(e,t,r){var n=e.painter;return t<0||t>n.getWidth()||r<0||r>n.getHeight()}const UU=M2;var P2=32,il=7;function YU(e){for(var t=0;e>=P2;)t|=e&1,e>>=1;return e+t}function iw(e,t,r,n){var i=t+1;if(i===r)return 1;if(n(e[i++],e[t])<0){for(;i=0;)i++;return i-t}function jU(e,t,r){for(r--;t>>1,i(a,e[l])<0?s=l:o=l+1;var u=n-o;switch(u){case 3:e[o+3]=e[o+2];case 2:e[o+2]=e[o+1];case 1:e[o+1]=e[o];break;default:for(;u>0;)e[o+u]=e[o+u-1],u--}e[o]=a}}function wv(e,t,r,n,i,a){var o=0,s=0,l=1;if(a(e,t[r+i])>0){for(s=n-i;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}else{for(s=i+1;ls&&(l=s);var u=o;o=i-l,l=i-u}for(o++;o>>1);a(e,t[r+f])>0?o=f+1:l=f}return l}function Sv(e,t,r,n,i,a){var o=0,s=0,l=1;if(a(e,t[r+i])<0){for(s=i+1;ls&&(l=s);var u=o;o=i-l,l=i-u}else{for(s=n-i;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=i,l+=i}for(o++;o>>1);a(e,t[r+f])<0?l=f:o=f+1}return l}function qU(e,t){var r=il,n,i,a=0;e.length;var o=[];n=[],i=[];function s(d,v){n[a]=d,i[a]=v,a+=1}function l(){for(;a>1;){var d=a-2;if(d>=1&&i[d-1]<=i[d]+i[d+1]||d>=2&&i[d-2]<=i[d]+i[d-1])i[d-1]i[d+1])break;f(d)}}function u(){for(;a>1;){var d=a-2;d>0&&i[d-1]=il||S>=il);if(C)break;x<0&&(x=0),x+=2}if(r=x,r<1&&(r=1),v===1){for(g=0;g=0;g--)e[w+g]=e[x+g];e[b]=o[_];return}for(var S=r;;){var C=0,M=0,A=!1;do if(t(o[_],e[y])<0){if(e[b--]=e[y--],C++,M=0,--v===0){A=!0;break}}else if(e[b--]=o[_--],M++,C=0,--m===1){A=!0;break}while((C|M)=0;g--)e[w+g]=e[x+g];if(v===0){A=!0;break}}if(e[b--]=o[_--],--m===1){A=!0;break}if(M=m-wv(e[y],o,0,m,m-1,t),M!==0){for(b-=M,_-=M,m-=M,w=b+1,x=_+1,g=0;g=il||M>=il);if(A)break;S<0&&(S=0),S+=2}if(r=S,r<1&&(r=1),m===1){for(b-=v,y-=v,w=b+1,x=y+1,g=v-1;g>=0;g--)e[w+g]=e[x+g];e[b]=o[_]}else{if(m===0)throw new Error;for(x=b-(m-1),g=0;gs&&(l=s),aw(e,r,r+l,r+a,t),a=l}o.pushRun(r,a),o.mergeRuns(),i-=a,r+=a}while(i!==0);o.forceMergeRuns()}}var Br=1,Cl=2,Qo=4,ow=!1;function xv(){ow||(ow=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function sw(e,t){return e.zlevel===t.zlevel?e.z===t.z?e.z2-t.z2:e.z-t.z:e.zlevel-t.zlevel}var KU=function(){function e(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=sw}return e.prototype.traverse=function(t,r){for(var n=0;n0&&(f.__clipPaths=[]),isNaN(f.z)&&(xv(),f.z=0),isNaN(f.z2)&&(xv(),f.z2=0),isNaN(f.zlevel)&&(xv(),f.zlevel=0),this._displayList[this._displayListLen++]=f}var c=t.getDecalElement&&t.getDecalElement();c&&this._updateAndAddDisplayable(c,r,n);var h=t.getTextGuideLine();h&&this._updateAndAddDisplayable(h,r,n);var d=t.getTextContent();d&&this._updateAndAddDisplayable(d,r,n)}},e.prototype.addRoot=function(t){t.__zr&&t.__zr.storage===this||this._roots.push(t)},e.prototype.delRoot=function(t){if(t instanceof Array){for(var r=0,n=t.length;r=0&&this._roots.splice(i,1)},e.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},e.prototype.getRoots=function(){return this._roots},e.prototype.dispose=function(){this._displayList=null,this._roots=null},e}(),E2;E2=He.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(e){return setTimeout(e,16)};const Wg=E2;var ql={linear:function(e){return e},quadraticIn:function(e){return e*e},quadraticOut:function(e){return e*(2-e)},quadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},cubicIn:function(e){return e*e*e},cubicOut:function(e){return--e*e*e+1},cubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},quarticIn:function(e){return e*e*e*e},quarticOut:function(e){return 1- --e*e*e*e},quarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},quinticIn:function(e){return e*e*e*e*e},quinticOut:function(e){return--e*e*e*e*e+1},quinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},sinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},sinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},sinusoidalInOut:function(e){return .5*(1-Math.cos(Math.PI*e))},exponentialIn:function(e){return e===0?0:Math.pow(1024,e-1)},exponentialOut:function(e){return e===1?1:1-Math.pow(2,-10*e)},exponentialInOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},circularIn:function(e){return 1-Math.sqrt(1-e*e)},circularOut:function(e){return Math.sqrt(1- --e*e)},circularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},elasticIn:function(e){var t,r=.1,n=.4;return e===0?0:e===1?1:(!r||r<1?(r=1,t=n/4):t=n*Math.asin(1/r)/(2*Math.PI),-(r*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)))},elasticOut:function(e){var t,r=.1,n=.4;return e===0?0:e===1?1:(!r||r<1?(r=1,t=n/4):t=n*Math.asin(1/r)/(2*Math.PI),r*Math.pow(2,-10*e)*Math.sin((e-t)*(2*Math.PI)/n)+1)},elasticInOut:function(e){var t,r=.1,n=.4;return e===0?0:e===1?1:(!r||r<1?(r=1,t=n/4):t=n*Math.asin(1/r)/(2*Math.PI),(e*=2)<1?-.5*(r*Math.pow(2,10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)):r*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*(2*Math.PI)/n)*.5+1)},backIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},backOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},backInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*(e*e*((t+1)*e-t)):.5*((e-=2)*e*((t+1)*e+t)+2)},bounceIn:function(e){return 1-ql.bounceOut(1-e)},bounceOut:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},bounceInOut:function(e){return e<.5?ql.bounceIn(e*2)*.5:ql.bounceOut(e*2-1)*.5+.5}},Bf=Math.pow,ia=Math.sqrt,wd=1e-8,L2=1e-4,lw=ia(3),Ff=1/3,Vn=Us(),rn=Us(),cs=Us();function Ji(e){return e>-wd&&ewd||e<-wd}function Zt(e,t,r,n,i){var a=1-i;return a*a*(a*e+3*i*t)+i*i*(i*n+3*a*r)}function uw(e,t,r,n,i){var a=1-i;return 3*(((t-e)*a+2*(r-t)*i)*a+(n-r)*i*i)}function I2(e,t,r,n,i,a){var o=n+3*(t-r)-e,s=3*(r-t*2+e),l=3*(t-e),u=e-i,f=s*s-3*o*l,c=s*l-9*o*u,h=l*l-3*s*u,d=0;if(Ji(f)&&Ji(c))if(Ji(s))a[0]=0;else{var v=-l/s;v>=0&&v<=1&&(a[d++]=v)}else{var p=c*c-4*f*h;if(Ji(p)){var m=c/f,v=-s/o+m,g=-m/2;v>=0&&v<=1&&(a[d++]=v),g>=0&&g<=1&&(a[d++]=g)}else if(p>0){var y=ia(p),_=f*s+1.5*o*(-c+y),b=f*s+1.5*o*(-c-y);_<0?_=-Bf(-_,Ff):_=Bf(_,Ff),b<0?b=-Bf(-b,Ff):b=Bf(b,Ff);var v=(-s-(_+b))/(3*o);v>=0&&v<=1&&(a[d++]=v)}else{var x=(2*f*s-3*o*c)/(2*ia(f*f*f)),w=Math.acos(x)/3,S=ia(f),C=Math.cos(w),v=(-s-2*S*C)/(3*o),g=(-s+S*(C+lw*Math.sin(w)))/(3*o),M=(-s+S*(C-lw*Math.sin(w)))/(3*o);v>=0&&v<=1&&(a[d++]=v),g>=0&&g<=1&&(a[d++]=g),M>=0&&M<=1&&(a[d++]=M)}}return d}function O2(e,t,r,n,i){var a=6*r-12*t+6*e,o=9*t+3*n-3*e-9*r,s=3*t-3*e,l=0;if(Ji(o)){if(D2(a)){var u=-s/a;u>=0&&u<=1&&(i[l++]=u)}}else{var f=a*a-4*o*s;if(Ji(f))i[0]=-a/(2*o);else if(f>0){var c=ia(f),u=(-a+c)/(2*o),h=(-a-c)/(2*o);u>=0&&u<=1&&(i[l++]=u),h>=0&&h<=1&&(i[l++]=h)}}return l}function Sd(e,t,r,n,i,a){var o=(t-e)*i+e,s=(r-t)*i+t,l=(n-r)*i+r,u=(s-o)*i+o,f=(l-s)*i+s,c=(f-u)*i+u;a[0]=e,a[1]=o,a[2]=u,a[3]=c,a[4]=c,a[5]=f,a[6]=l,a[7]=n}function R2(e,t,r,n,i,a,o,s,l,u,f){var c,h=.005,d=1/0,v,p,m,g;Vn[0]=l,Vn[1]=u;for(var y=0;y<1;y+=.05)rn[0]=Zt(e,r,i,o,y),rn[1]=Zt(t,n,a,s,y),m=us(Vn,rn),m=0&&m=0&&u<=1&&(i[l++]=u)}}else{var f=o*o-4*a*s;if(Ji(f)){var u=-o/(2*a);u>=0&&u<=1&&(i[l++]=u)}else if(f>0){var c=ia(f),u=(-o+c)/(2*a),h=(-o-c)/(2*a);u>=0&&u<=1&&(i[l++]=u),h>=0&&h<=1&&(i[l++]=h)}}return l}function k2(e,t,r){var n=e+r-2*t;return n===0?.5:(e-t)/n}function xd(e,t,r,n,i){var a=(t-e)*n+e,o=(r-t)*n+t,s=(o-a)*n+a;i[0]=e,i[1]=a,i[2]=s,i[3]=s,i[4]=o,i[5]=r}function N2(e,t,r,n,i,a,o,s,l){var u,f=.005,c=1/0;Vn[0]=o,Vn[1]=s;for(var h=0;h<1;h+=.05){rn[0]=ir(e,r,i,h),rn[1]=ir(t,n,a,h);var d=us(Vn,rn);d=0&&d=1?1:I2(0,n,a,1,l,s)&&Zt(0,i,o,1,s[0])}}}var e9=function(){function e(t){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=t.life||1e3,this._delay=t.delay||0,this.loop=t.loop||!1,this.onframe=t.onframe||Er,this.ondestroy=t.ondestroy||Er,this.onrestart=t.onrestart||Er,t.easing&&this.setEasing(t.easing)}return e.prototype.step=function(t,r){if(this._inited||(this._startTime=t+this._delay,this._inited=!0),this._paused){this._pausedTime+=r;return}var n=this._life,i=t-this._startTime-this._pausedTime,a=i/n;a<0&&(a=0),a=Math.min(a,1);var o=this.easingFunc,s=o?o(a):a;if(this.onframe(s),a===1)if(this.loop){var l=i%n;this._startTime=t-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},e.prototype.pause=function(){this._paused=!0},e.prototype.resume=function(){this._paused=!1},e.prototype.setEasing=function(t){this.easing=t,this.easingFunc=Ye(t)?t:ql[t]||B2(t)},e}();const t9=e9;var F2=function(){function e(t){this.value=t}return e}(),r9=function(){function e(){this._len=0}return e.prototype.insert=function(t){var r=new F2(t);return this.insertEntry(r),r},e.prototype.insertEntry=function(t){this.head?(this.tail.next=t,t.prev=this.tail,t.next=null,this.tail=t):this.head=this.tail=t,this._len++},e.prototype.remove=function(t){var r=t.prev,n=t.next;r?r.next=n:this.head=n,n?n.prev=r:this.tail=r,t.next=t.prev=null,this._len--},e.prototype.len=function(){return this._len},e.prototype.clear=function(){this.head=this.tail=null,this._len=0},e}(),af=function(){function e(t){this._list=new r9,this._maxSize=10,this._map={},this._maxSize=t}return e.prototype.put=function(t,r){var n=this._list,i=this._map,a=null;if(i[t]==null){var o=n.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=n.head;n.remove(l),delete i[l.key],a=l.value,this._lastRemovedEntry=l}s?s.value=r:s=new F2(r),s.key=t,n.insertEntry(s),i[t]=s}return a},e.prototype.get=function(t){var r=this._map[t],n=this._list;if(r!=null)return r!==n.tail&&(n.remove(r),n.insertEntry(r)),r.value},e.prototype.clear=function(){this._list.clear(),this._map={}},e.prototype.len=function(){return this._list.len()},e}(),cw={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function Kl(e){return e=Math.round(e),e<0?0:e>255?255:e}function dw(e){return e<0?0:e>1?1:e}function Cv(e){var t=e;return t.length&&t.charAt(t.length-1)==="%"?Kl(parseFloat(t)/100*255):Kl(parseInt(t,10))}function Xl(e){var t=e;return t.length&&t.charAt(t.length-1)==="%"?dw(parseFloat(t)/100):dw(parseFloat(t))}function Tv(e,t,r){return r<0?r+=1:r>1&&(r-=1),r*6<1?e+(t-e)*r*6:r*2<1?t:r*3<2?e+(t-e)*(2/3-r)*6:e}function Zr(e,t,r,n,i){return e[0]=t,e[1]=r,e[2]=n,e[3]=i,e}function Gg(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}var $2=new af(20),$f=null;function Bo(e,t){$f&&Gg($f,t),$f=$2.put(e,$f||t.slice())}function uo(e,t){if(e){t=t||[];var r=$2.get(e);if(r)return Gg(t,r);e=e+"";var n=e.replace(/ /g,"").toLowerCase();if(n in cw)return Gg(t,cw[n]),Bo(e,t),t;var i=n.length;if(n.charAt(0)==="#"){if(i===4||i===5){var a=parseInt(n.slice(1,4),16);if(!(a>=0&&a<=4095)){Zr(t,0,0,0,1);return}return Zr(t,(a&3840)>>4|(a&3840)>>8,a&240|(a&240)>>4,a&15|(a&15)<<4,i===5?parseInt(n.slice(4),16)/15:1),Bo(e,t),t}else if(i===7||i===9){var a=parseInt(n.slice(1,7),16);if(!(a>=0&&a<=16777215)){Zr(t,0,0,0,1);return}return Zr(t,(a&16711680)>>16,(a&65280)>>8,a&255,i===9?parseInt(n.slice(7),16)/255:1),Bo(e,t),t}return}var o=n.indexOf("("),s=n.indexOf(")");if(o!==-1&&s+1===i){var l=n.substr(0,o),u=n.substr(o+1,s-(o+1)).split(","),f=1;switch(l){case"rgba":if(u.length!==4)return u.length===3?Zr(t,+u[0],+u[1],+u[2],1):Zr(t,0,0,0,1);f=Xl(u.pop());case"rgb":if(u.length>=3)return Zr(t,Cv(u[0]),Cv(u[1]),Cv(u[2]),u.length===3?f:Xl(u[3])),Bo(e,t),t;Zr(t,0,0,0,1);return;case"hsla":if(u.length!==4){Zr(t,0,0,0,1);return}return u[3]=Xl(u[3]),hw(u,t),Bo(e,t),t;case"hsl":if(u.length!==3){Zr(t,0,0,0,1);return}return hw(u,t),Bo(e,t),t;default:return}}Zr(t,0,0,0,1)}}function hw(e,t){var r=(parseFloat(e[0])%360+360)%360/360,n=Xl(e[1]),i=Xl(e[2]),a=i<=.5?i*(n+1):i+n-i*n,o=i*2-a;return t=t||[],Zr(t,Kl(Tv(o,a,r+1/3)*255),Kl(Tv(o,a,r)*255),Kl(Tv(o,a,r-1/3)*255),1),e.length===4&&(t[3]=e[3]),t}function vw(e,t){var r=uo(e);if(r){for(var n=0;n<3;n++)t<0?r[n]=r[n]*(1-t)|0:r[n]=(255-r[n])*t+r[n]|0,r[n]>255?r[n]=255:r[n]<0&&(r[n]=0);return s0(r,r.length===4?"rgba":"rgb")}}function s0(e,t){if(!(!e||!e.length)){var r=e[0]+","+e[1]+","+e[2];return(t==="rgba"||t==="hsva"||t==="hsla")&&(r+=","+e[3]),t+"("+r+")"}}function Cd(e,t){var r=uo(e);return r?(.299*r[0]+.587*r[1]+.114*r[2])*r[3]/255+(1-r[3])*t:0}function n9(e){return e.type==="linear"}function i9(e){return e.type==="radial"}(function(){return He.hasGlobalWindow&&Ye(window.btoa)?function(e){return window.btoa(unescape(encodeURIComponent(e)))}:typeof Buffer<"u"?function(e){return Buffer.from(e).toString("base64")}:function(e){return null}})();var Ug=Array.prototype.slice;function hi(e,t,r){return(t-e)*r+e}function Mv(e,t,r,n){for(var i=t.length,a=0;an?t:e,a=Math.min(r,n),o=i[a-1]||{color:[0,0,0,0],offset:0},s=a;so;if(s)n.length=o;else for(var l=a;l=1},e.prototype.getAdditiveTrack=function(){return this._additiveTrack},e.prototype.addKeyframe=function(t,r,n){this._needsSort=!0;var i=this.keyframes,a=i.length,o=!1,s=gw,l=r;if(Ir(r)){var u=l9(r);s=u,(u===1&&!Tt(r[0])||u===2&&!Tt(r[0][0]))&&(o=!0)}else if(Tt(r)&&!bd(r))s=zf;else if(Ee(r))if(!isNaN(+r))s=zf;else{var f=uo(r);f&&(l=f,s=Tl)}else if(yh(r)){var c=ue({},l);c.colorStops=Ne(r.colorStops,function(d){return{offset:d.offset,color:uo(d.color)}}),n9(r)?s=Yg:i9(r)&&(s=jg),l=c}a===0?this.valType=s:(s!==this.valType||s===gw)&&(o=!0),this.discrete=this.discrete||o;var h={time:t,value:l,rawValue:r,percent:0};return n&&(h.easing=n,h.easingFunc=Ye(n)?n:ql[n]||B2(n)),i.push(h),h},e.prototype.prepare=function(t,r){var n=this.keyframes;this._needsSort&&n.sort(function(p,m){return p.time-m.time});for(var i=this.valType,a=n.length,o=n[a-1],s=this.discrete,l=Vf(i),u=mw(i),f=0;f=0&&!(o[f].percent<=r);f--);f=h(f,s-2)}else{for(f=c;fr);f++);f=h(f-1,s-2)}v=o[f+1],d=o[f]}if(d&&v){this._lastFr=f,this._lastFrP=r;var m=v.percent-d.percent,g=m===0?1:h((r-d.percent)/m,1);v.easingFunc&&(g=v.easingFunc(g));var y=n?this._additiveValue:u?al:t[l];if((Vf(a)||u)&&!y&&(y=this._additiveValue=[]),this.discrete)t[l]=g<1?d.rawValue:v.rawValue;else if(Vf(a))a===Vc?Mv(y,d[i],v[i],g):a9(y,d[i],v[i],g);else if(mw(a)){var _=d[i],b=v[i],x=a===Yg;t[l]={type:x?"linear":"radial",x:hi(_.x,b.x,g),y:hi(_.y,b.y,g),colorStops:Ne(_.colorStops,function(S,C){var M=b.colorStops[C];return{offset:hi(S.offset,M.offset,g),color:zc(Mv([],S.color,M.color,g))}}),global:b.global},x?(t[l].x2=hi(_.x2,b.x2,g),t[l].y2=hi(_.y2,b.y2,g)):t[l].r=hi(_.r,b.r,g)}else if(u)Mv(y,d[i],v[i],g),n||(t[l]=zc(y));else{var w=hi(d[i],v[i],g);n?this._additiveValue=w:t[l]=w}n&&this._addToTarget(t)}}},e.prototype._addToTarget=function(t){var r=this.valType,n=this.propName,i=this._additiveValue;r===zf?t[n]=t[n]+i:r===Tl?(uo(t[n],al),Hf(al,al,i,1),t[n]=zc(al)):r===Vc?Hf(t[n],t[n],i,1):r===H2&&pw(t[n],t[n],i,1)},e}(),l0=function(){function e(t,r,n,i){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=t,this._loop=r,r&&i){r0("Can' use additive animation on looped animation.");return}this._additiveAnimators=i,this._allowDiscrete=n}return e.prototype.getMaxTime=function(){return this._maxTime},e.prototype.getDelay=function(){return this._delay},e.prototype.getLoop=function(){return this._loop},e.prototype.getTarget=function(){return this._target},e.prototype.changeTarget=function(t){this._target=t},e.prototype.when=function(t,r,n){return this.whenWithKeys(t,r,Ct(r),n)},e.prototype.whenWithKeys=function(t,r,n,i){for(var a=this._tracks,o=0;o0&&l.addKeyframe(0,Hc(u),i),this._trackKeys.push(s)}l.addKeyframe(t,Hc(r[s]),i)}return this._maxTime=Math.max(this._maxTime,t),this},e.prototype.pause=function(){this._clip.pause(),this._paused=!0},e.prototype.resume=function(){this._clip.resume(),this._paused=!1},e.prototype.isPaused=function(){return!!this._paused},e.prototype.duration=function(t){return this._maxTime=t,this._force=!0,this},e.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var t=this._doneCbs;if(t)for(var r=t.length,n=0;n0)){this._started=1;for(var r=this,n=[],i=this._maxTime||0,a=0;a1){var s=o.pop();a.addKeyframe(s.time,t[i]),a.prepare(this._maxTime,a.getAdditiveTrack())}}}},e}();function ns(){return new Date().getTime()}var f9=function(e){ge(t,e);function t(r){var n=e.call(this)||this;return n._running=!1,n._time=0,n._pausedTime=0,n._pauseStart=0,n._paused=!1,r=r||{},n.stage=r.stage||{},n}return t.prototype.addClip=function(r){r.animation&&this.removeClip(r),this._head?(this._tail.next=r,r.prev=this._tail,r.next=null,this._tail=r):this._head=this._tail=r,r.animation=this},t.prototype.addAnimator=function(r){r.animation=this;var n=r.getClip();n&&this.addClip(n)},t.prototype.removeClip=function(r){if(r.animation){var n=r.prev,i=r.next;n?n.next=i:this._head=i,i?i.prev=n:this._tail=n,r.next=r.prev=r.animation=null}},t.prototype.removeAnimator=function(r){var n=r.getClip();n&&this.removeClip(n),r.animation=null},t.prototype.update=function(r){for(var n=ns()-this._pausedTime,i=n-this._time,a=this._head;a;){var o=a.next,s=a.step(n,i);s&&(a.ondestroy(),this.removeClip(a)),a=o}this._time=n,r||(this.trigger("frame",i),this.stage.update&&this.stage.update())},t.prototype._startLoop=function(){var r=this;this._running=!0;function n(){r._running&&(Wg(n),!r._paused&&r.update())}Wg(n)},t.prototype.start=function(){this._running||(this._time=ns(),this._pausedTime=0,this._startLoop())},t.prototype.stop=function(){this._running=!1},t.prototype.pause=function(){this._paused||(this._pauseStart=ns(),this._paused=!0)},t.prototype.resume=function(){this._paused&&(this._pausedTime+=ns()-this._pauseStart,this._paused=!1)},t.prototype.clear=function(){for(var r=this._head;r;){var n=r.next;r.prev=r.next=r.animation=null,r=n}this._head=this._tail=null},t.prototype.isFinished=function(){return this._head==null},t.prototype.animate=function(r,n){n=n||{},this.start();var i=new l0(r,n.loop);return this.addAnimator(i),i},t}(ii),c9=300,Av=He.domSupported,Pv=function(){var e=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],t=["touchstart","touchend","touchmove"],r={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},n=Ne(e,function(i){var a=i.replace("mouse","pointer");return r.hasOwnProperty(a)?a:i});return{mouse:e,touch:t,pointer:n}}(),yw={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},_w=!1;function qg(e){var t=e.pointerType;return t==="pen"||t==="touch"}function d9(e){e.touching=!0,e.touchTimer!=null&&(clearTimeout(e.touchTimer),e.touchTimer=null),e.touchTimer=setTimeout(function(){e.touching=!1,e.touchTimer=null},700)}function Ev(e){e&&(e.zrByTouch=!0)}function h9(e,t){return Qr(e.dom,new v9(e,t),!0)}function z2(e,t){for(var r=t,n=!1;r&&r.nodeType!==9&&!(n=r.domBelongToZr||r!==t&&r===e.painterRoot);)r=r.parentNode;return n}var v9=function(){function e(t,r){this.stopPropagation=Er,this.stopImmediatePropagation=Er,this.preventDefault=Er,this.type=r.type,this.target=this.currentTarget=t.dom,this.pointerType=r.pointerType,this.clientX=r.clientX,this.clientY=r.clientY}return e}(),yn={mousedown:function(e){e=Qr(this.dom,e),this.__mayPointerCapture=[e.zrX,e.zrY],this.trigger("mousedown",e)},mousemove:function(e){e=Qr(this.dom,e);var t=this.__mayPointerCapture;t&&(e.zrX!==t[0]||e.zrY!==t[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",e)},mouseup:function(e){e=Qr(this.dom,e),this.__togglePointerCapture(!1),this.trigger("mouseup",e)},mouseout:function(e){e=Qr(this.dom,e);var t=e.toElement||e.relatedTarget;z2(this,t)||(this.__pointerCapturing&&(e.zrEventControl="no_globalout"),this.trigger("mouseout",e))},wheel:function(e){_w=!0,e=Qr(this.dom,e),this.trigger("mousewheel",e)},mousewheel:function(e){_w||(e=Qr(this.dom,e),this.trigger("mousewheel",e))},touchstart:function(e){e=Qr(this.dom,e),Ev(e),this.__lastTouchMoment=new Date,this.handler.processGesture(e,"start"),yn.mousemove.call(this,e),yn.mousedown.call(this,e)},touchmove:function(e){e=Qr(this.dom,e),Ev(e),this.handler.processGesture(e,"change"),yn.mousemove.call(this,e)},touchend:function(e){e=Qr(this.dom,e),Ev(e),this.handler.processGesture(e,"end"),yn.mouseup.call(this,e),+new Date-+this.__lastTouchMomentSw||e<-Sw}var Ma=[],Fo=[],Dv=Pu(),Iv=Math.abs,wh=function(){function e(){}return e.prototype.getLocalTransform=function(t){return e.getLocalTransform(this,t)},e.prototype.setPosition=function(t){this.x=t[0],this.y=t[1]},e.prototype.setScale=function(t){this.scaleX=t[0],this.scaleY=t[1]},e.prototype.setSkew=function(t){this.skewX=t[0],this.skewY=t[1]},e.prototype.setOrigin=function(t){this.originX=t[0],this.originY=t[1]},e.prototype.needLocalTransform=function(){return Ta(this.rotation)||Ta(this.x)||Ta(this.y)||Ta(this.scaleX-1)||Ta(this.scaleY-1)||Ta(this.skewX)||Ta(this.skewY)},e.prototype.updateTransform=function(){var t=this.parent&&this.parent.transform,r=this.needLocalTransform(),n=this.transform;if(!(r||t)){n&&(ww(n),this.invTransform=null);return}n=n||Pu(),r?this.getLocalTransform(n):ww(n),t&&(r?fs(n,t,n):BU(n,t)),this.transform=n,this._resolveGlobalScaleRatio(n)},e.prototype._resolveGlobalScaleRatio=function(t){var r=this.globalScaleRatio;if(r!=null&&r!==1){this.getGlobalScale(Ma);var n=Ma[0]<0?-1:1,i=Ma[1]<0?-1:1,a=((Ma[0]-n)*r+n)/Ma[0]||0,o=((Ma[1]-i)*r+i)/Ma[1]||0;t[0]*=a,t[1]*=a,t[2]*=o,t[3]*=o}this.invTransform=this.invTransform||Pu(),bh(this.invTransform,t)},e.prototype.getComputedTransform=function(){for(var t=this,r=[];t;)r.push(t),t=t.parent;for(;t=r.pop();)t.updateTransform();return this.transform},e.prototype.setLocalTransform=function(t){if(t){var r=t[0]*t[0]+t[1]*t[1],n=t[2]*t[2]+t[3]*t[3],i=Math.atan2(t[1],t[0]),a=Math.PI/2+i-Math.atan2(t[3],t[2]);n=Math.sqrt(n)*Math.cos(a),r=Math.sqrt(r),this.skewX=a,this.skewY=0,this.rotation=-i,this.x=+t[4],this.y=+t[5],this.scaleX=r,this.scaleY=n,this.originX=0,this.originY=0}},e.prototype.decomposeTransform=function(){if(this.transform){var t=this.parent,r=this.transform;t&&t.transform&&(fs(Fo,t.invTransform,r),r=Fo);var n=this.originX,i=this.originY;(n||i)&&(Dv[4]=n,Dv[5]=i,fs(Fo,r,Dv),Fo[4]-=n,Fo[5]-=i,r=Fo),this.setLocalTransform(r)}},e.prototype.getGlobalScale=function(t){var r=this.transform;return t=t||[],r?(t[0]=Math.sqrt(r[0]*r[0]+r[1]*r[1]),t[1]=Math.sqrt(r[2]*r[2]+r[3]*r[3]),r[0]<0&&(t[0]=-t[0]),r[3]<0&&(t[1]=-t[1]),t):(t[0]=1,t[1]=1,t)},e.prototype.transformCoordToLocal=function(t,r){var n=[t,r],i=this.invTransform;return i&&un(n,n,i),n},e.prototype.transformCoordToGlobal=function(t,r){var n=[t,r],i=this.transform;return i&&un(n,n,i),n},e.prototype.getLineScale=function(){var t=this.transform;return t&&Iv(t[0]-1)>1e-10&&Iv(t[3]-1)>1e-10?Math.sqrt(Iv(t[0]*t[3]-t[2]*t[1])):1},e.prototype.copyTransform=function(t){b9(this,t)},e.getLocalTransform=function(t,r){r=r||[];var n=t.originX||0,i=t.originY||0,a=t.scaleX,o=t.scaleY,s=t.anchorX,l=t.anchorY,u=t.rotation||0,f=t.x,c=t.y,h=t.skewX?Math.tan(t.skewX):0,d=t.skewY?Math.tan(-t.skewY):0;if(n||i||s||l){var v=n+s,p=i+l;r[4]=-v*a-h*p*o,r[5]=-p*o-d*v*a}else r[4]=r[5]=0;return r[0]=a,r[3]=o,r[1]=d*a,r[2]=h*o,u&&o0(r,r,u),r[4]+=n+f,r[5]+=i+c,r},e.initDefaultProps=function(){var t=e.prototype;t.scaleX=t.scaleY=t.globalScaleRatio=1,t.x=t.y=t.originX=t.originY=t.skewX=t.skewY=t.rotation=t.anchorX=t.anchorY=0}(),e}(),Eu=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function b9(e,t){for(var r=0;r=0?parseFloat(e)/100*t:parseFloat(e):e}function Md(e,t,r){var n=t.position||"inside",i=t.distance!=null?t.distance:5,a=r.height,o=r.width,s=a/2,l=r.x,u=r.y,f="left",c="top";if(n instanceof Array)l+=da(n[0],r.width),u+=da(n[1],r.height),f=null,c=null;else switch(n){case"left":l-=i,u+=s,f="right",c="middle";break;case"right":l+=i+o,u+=s,c="middle";break;case"top":l+=o/2,u-=i,f="center",c="bottom";break;case"bottom":l+=o/2,u+=a+i,f="center";break;case"inside":l+=o/2,u+=s,f="center",c="middle";break;case"insideLeft":l+=i,u+=s,c="middle";break;case"insideRight":l+=o-i,u+=s,f="right",c="middle";break;case"insideTop":l+=o/2,u+=i,f="center";break;case"insideBottom":l+=o/2,u+=a-i,f="center",c="bottom";break;case"insideTopLeft":l+=i,u+=i;break;case"insideTopRight":l+=o-i,u+=i,f="right";break;case"insideBottomLeft":l+=i,u+=a-i,c="bottom";break;case"insideBottomRight":l+=o-i,u+=a-i,f="right",c="bottom";break}return e=e||{},e.x=l,e.y=u,e.align=f,e.verticalAlign=c,e}var Ov="__zr_normal__",Rv=Eu.concat(["ignore"]),w9=ca(Eu,function(e,t){return e[t]=!0,e},{ignore:!1}),$o={},S9=new nt(0,0,0,0),c0=function(){function e(t){this.id=y2(),this.animators=[],this.currentStates=[],this.states={},this._init(t)}return e.prototype._init=function(t){this.attr(t)},e.prototype.drift=function(t,r,n){switch(this.draggable){case"horizontal":r=0;break;case"vertical":t=0;break}var i=this.transform;i||(i=this.transform=[1,0,0,1,0,0]),i[4]+=t,i[5]+=r,this.decomposeTransform(),this.markRedraw()},e.prototype.beforeUpdate=function(){},e.prototype.afterUpdate=function(){},e.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},e.prototype.updateInnerText=function(t){var r=this._textContent;if(r&&(!r.ignore||t)){this.textConfig||(this.textConfig={});var n=this.textConfig,i=n.local,a=r.innerTransformable,o=void 0,s=void 0,l=!1;a.parent=i?this:null;var u=!1;if(a.copyTransform(r),n.position!=null){var f=S9;n.layoutRect?f.copy(n.layoutRect):f.copy(this.getBoundingRect()),i||f.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition($o,n,f):Md($o,n,f),a.x=$o.x,a.y=$o.y,o=$o.align,s=$o.verticalAlign;var c=n.origin;if(c&&n.rotation!=null){var h=void 0,d=void 0;c==="center"?(h=f.width*.5,d=f.height*.5):(h=da(c[0],f.width),d=da(c[1],f.height)),u=!0,a.originX=-a.x+h+(i?0:f.x),a.originY=-a.y+d+(i?0:f.y)}}n.rotation!=null&&(a.rotation=n.rotation);var v=n.offset;v&&(a.x+=v[0],a.y+=v[1],u||(a.originX=-v[0],a.originY=-v[1]));var p=n.inside==null?typeof n.position=="string"&&n.position.indexOf("inside")>=0:n.inside,m=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),g=void 0,y=void 0,_=void 0;p&&this.canBeInsideText()?(g=n.insideFill,y=n.insideStroke,(g==null||g==="auto")&&(g=this.getInsideTextFill()),(y==null||y==="auto")&&(y=this.getInsideTextStroke(g),_=!0)):(g=n.outsideFill,y=n.outsideStroke,(g==null||g==="auto")&&(g=this.getOutsideFill()),(y==null||y==="auto")&&(y=this.getOutsideStroke(g),_=!0)),g=g||"#000",(g!==m.fill||y!==m.stroke||_!==m.autoStroke||o!==m.align||s!==m.verticalAlign)&&(l=!0,m.fill=g,m.stroke=y,m.autoStroke=_,m.align=o,m.verticalAlign=s,r.setDefaultTextStyle(m)),r.__dirty|=Br,l&&r.dirtyStyle(!0)}},e.prototype.canBeInsideText=function(){return!0},e.prototype.getInsideTextFill=function(){return"#fff"},e.prototype.getInsideTextStroke=function(t){return"#000"},e.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Qg:Zg},e.prototype.getOutsideStroke=function(t){var r=this.__zr&&this.__zr.getBackgroundColor(),n=typeof r=="string"&&uo(r);n||(n=[255,255,255,1]);for(var i=n[3],a=this.__zr.isDarkMode(),o=0;o<3;o++)n[o]=n[o]*i+(a?0:255)*(1-i);return n[3]=1,s0(n,"rgba")},e.prototype.traverse=function(t,r){},e.prototype.attrKV=function(t,r){t==="textConfig"?this.setTextConfig(r):t==="textContent"?this.setTextContent(r):t==="clipPath"?this.setClipPath(r):t==="extra"?(this.extra=this.extra||{},ue(this.extra,r)):this[t]=r},e.prototype.hide=function(){this.ignore=!0,this.markRedraw()},e.prototype.show=function(){this.ignore=!1,this.markRedraw()},e.prototype.attr=function(t,r){if(typeof t=="string")this.attrKV(t,r);else if(Re(t))for(var n=t,i=Ct(n),a=0;a0},e.prototype.getState=function(t){return this.states[t]},e.prototype.ensureState=function(t){var r=this.states;return r[t]||(r[t]={}),r[t]},e.prototype.clearStates=function(t){this.useState(Ov,!1,t)},e.prototype.useState=function(t,r,n,i){var a=t===Ov,o=this.hasState();if(!(!o&&a)){var s=this.currentStates,l=this.stateTransition;if(!(ot(s,t)>=0&&(r||s.length===1))){var u;if(this.stateProxy&&!a&&(u=this.stateProxy(t)),u||(u=this.states&&this.states[t]),!u&&!a){r0("State "+t+" not exists.");return}a||this.saveCurrentToNormalState(u);var f=!!(u&&u.hoverLayer||i);f&&this._toggleHoverLayerFlag(!0),this._applyStateObj(t,u,this._normalState,r,!n&&!this.__inHover&&l&&l.duration>0,l);var c=this._textContent,h=this._textGuide;return c&&c.useState(t,r,n,f),h&&h.useState(t,r,n,f),a?(this.currentStates=[],this._normalState={}):r?this.currentStates.push(t):this.currentStates=[t],this._updateAnimationTargets(),this.markRedraw(),!f&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Br),u}}},e.prototype.useStates=function(t,r,n){if(!t.length)this.clearStates();else{var i=[],a=this.currentStates,o=t.length,s=o===a.length;if(s){for(var l=0;l0,v);var p=this._textContent,m=this._textGuide;p&&p.useStates(t,r,h),m&&m.useStates(t,r,h),this._updateAnimationTargets(),this.currentStates=t.slice(),this.markRedraw(),!h&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Br)}},e.prototype._updateAnimationTargets=function(){for(var t=0;t=0){var n=this.currentStates.slice();n.splice(r,1),this.useStates(n)}},e.prototype.replaceState=function(t,r,n){var i=this.currentStates.slice(),a=ot(i,t),o=ot(i,r)>=0;a>=0?o?i.splice(a,1):i[a]=r:n&&!o&&i.push(r),this.useStates(i)},e.prototype.toggleState=function(t,r){r?this.useState(t,!0):this.removeState(t)},e.prototype._mergeStates=function(t){for(var r={},n,i=0;i=0&&a.splice(o,1)}),this.animators.push(t),n&&n.animation.addAnimator(t),n&&n.wakeUp()},e.prototype.updateDuringAnimation=function(t){this.markRedraw()},e.prototype.stopAnimation=function(t,r){for(var n=this.animators,i=n.length,a=[],o=0;o0&&r.during&&a[0].during(function(v,p){r.during(p)});for(var h=0;h0||i.force&&!o.length){var C=void 0,M=void 0,A=void 0;if(s){M={},h&&(C={});for(var b=0;b<_;b++){var g=p[b];M[g]=r[g],h?C[g]=n[g]:r[g]=n[g]}}else if(h){A={};for(var b=0;b<_;b++){var g=p[b];A[g]=Hc(r[g]),C9(r,n,g)}}var x=new l0(r,!1,!1,c?jt(v,function(E){return E.targetName===t}):null);x.targetName=t,i.scope&&(x.scope=i.scope),h&&C&&x.whenWithKeys(0,C,p),A&&x.whenWithKeys(0,A,p),x.whenWithKeys(u??500,s?M:n,p).delay(f||0),e.addAnimator(x,t),o.push(x)}}const G2=c0;var Ur=function(e){ge(t,e);function t(r){var n=e.call(this)||this;return n.isGroup=!0,n._children=[],n.attr(r),n}return t.prototype.childrenRef=function(){return this._children},t.prototype.children=function(){return this._children.slice()},t.prototype.childAt=function(r){return this._children[r]},t.prototype.childOfName=function(r){for(var n=this._children,i=0;i=0&&(i.splice(a,0,r),this._doAdd(r))}return this},t.prototype.replace=function(r,n){var i=ot(this._children,r);return i>=0&&this.replaceAt(n,i),this},t.prototype.replaceAt=function(r,n){var i=this._children,a=i[n];if(r&&r!==this&&r.parent!==this&&r!==a){i[n]=r,a.parent=null;var o=this.__zr;o&&a.removeSelfFromZr(o),this._doAdd(r)}return this},t.prototype._doAdd=function(r){r.parent&&r.parent.remove(r),r.parent=this;var n=this.__zr;n&&n!==r.__zr&&r.addSelfToZr(n),n&&n.refresh()},t.prototype.remove=function(r){var n=this.__zr,i=this._children,a=ot(i,r);return a<0?this:(i.splice(a,1),r.parent=null,n&&r.removeSelfFromZr(n),n&&n.refresh(),this)},t.prototype.removeAll=function(){for(var r=this._children,n=this.__zr,i=0;i0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},e.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},e.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},e.prototype.refreshHover=function(){this._needsRefreshHover=!0},e.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover()},e.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},e.prototype.clearAnimation=function(){this.animation.clear()},e.prototype.getWidth=function(){return this.painter.getWidth()},e.prototype.getHeight=function(){return this.painter.getHeight()},e.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},e.prototype.findHover=function(t,r){return this.handler.findHover(t,r)},e.prototype.on=function(t,r,n){return this.handler.on(t,r,n),this},e.prototype.off=function(t,r){this.handler.off(t,r)},e.prototype.trigger=function(t,r){this.handler.trigger(t,r)},e.prototype.clear=function(){for(var t=this.storage.getRoots(),r=0;r0){if(e<=i)return o;if(e>=a)return s}else{if(e>=i)return o;if(e<=a)return s}else{if(e===i)return o;if(e===a)return s}return(e-i)/l*u+o}function yt(e,t){switch(e){case"center":case"middle":e="50%";break;case"left":case"top":e="0%";break;case"right":case"bottom":e="100%";break}return Ee(e)?D9(e).match(/%$/)?parseFloat(e)/100*t:parseFloat(e):e==null?NaN:+e}function Ft(e,t,r){return t==null&&(t=10),t=Math.min(Math.max(0,t),Y2),e=(+e).toFixed(t),r?e:+e}function vi(e){if(e=+e,isNaN(e))return 0;if(e>1e-14){for(var t=1,r=0;r<15;r++,t*=10)if(Math.round(e*t)/t===e)return r}return I9(e)}function I9(e){var t=e.toString().toLowerCase(),r=t.indexOf("e"),n=r>0?+t.slice(r+1):0,i=r>0?r:t.length,a=t.indexOf("."),o=a<0?0:i-1-a;return Math.max(0,o-n)}function O9(e,t){var r=Math.log,n=Math.LN10,i=Math.floor(r(e[1]-e[0])/n),a=Math.round(r(Math.abs(t[1]-t[0]))/n),o=Math.min(Math.max(-i+a,0),20);return isFinite(o)?o:20}function R9(e,t){var r=ca(e,function(d,v){return d+(isNaN(v)?0:v)},0);if(r===0)return[];for(var n=Math.pow(10,t),i=Ne(e,function(d){return(isNaN(d)?0:d)/r*n*100}),a=n*100,o=Ne(i,function(d){return Math.floor(d)}),s=ca(o,function(d,v){return d+v},0),l=Ne(i,function(d,v){return d-o[v]});su&&(u=l[c],f=c);++o[f],l[f]=0,++s}return Ne(o,function(d){return d/n})}function k9(e,t){var r=Math.max(vi(e),vi(t)),n=e+t;return r>Y2?n:Ft(n,r)}function j2(e){var t=Math.PI*2;return(e%t+t)%t}function Ad(e){return e>-Mw&&e=10&&t++,t}function q2(e,t){var r=d0(e),n=Math.pow(10,r),i=e/n,a;return t?i<1.5?a=1:i<2.5?a=2:i<4?a=3:i<7?a=5:a=10:i<1?a=1:i<2?a=2:i<3?a=3:i<5?a=5:a=10,e=a*n,r>=-20?+e.toFixed(r<0?-r:0):e}function Pd(e){var t=parseFloat(e);return t==e&&(t!==0||!Ee(e)||e.indexOf("x")<=0)?t:NaN}function F9(e){return!isNaN(Pd(e))}function K2(){return Math.round(Math.random()*9)}function X2(e,t){return t===0?e:X2(t,e%t)}function Aw(e,t){return e==null?t:t==null?e:e*t/X2(e,t)}function Cr(e){throw new Error(e)}function Pw(e,t,r){return(t-e)*r+e}var Z2="series\0",$9="\0_ec_\0";function pr(e){return e instanceof Array?e:e==null?[]:[e]}function em(e,t,r){if(e){e[t]=e[t]||{},e.emphasis=e.emphasis||{},e.emphasis[t]=e.emphasis[t]||{};for(var n=0,i=r.length;n=0||a&&ot(a,l)<0)){var u=n.getShallow(l,t);u!=null&&(o[e[s][0]]=u)}}return o}}var l7=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],u7=Du(l7),f7=function(){function e(){}return e.prototype.getAreaStyle=function(t,r){return u7(this,t,r)},e}(),tm=new af(50);function c7(e){if(typeof e=="string"){var t=tm.get(e);return t&&t.image}else return e}function rP(e,t,r,n,i){if(e)if(typeof e=="string"){if(t&&t.__zrImageSrc===e||!r)return t;var a=tm.get(e),o={hostEl:r,cb:n,cbPayload:i};return a?(t=a.image,!xh(t)&&a.pending.push(o)):(t=Vs.loadImage(e,Lw,Lw),t.__zrImageSrc=e,tm.put(e,t.__cachedImgObj={image:t,pending:[o]})),t}else return e;else return t}function Lw(){var e=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var t=0;t0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},e.prototype.setSleepAfterStill=function(t){this._sleepAfterStill=t},e.prototype.wakeUp=function(){this.animation.start(),this._stillFrameAccum=0},e.prototype.refreshHover=function(){this._needsRefreshHover=!0},e.prototype.refreshHoverImmediately=function(){this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover()},e.prototype.resize=function(t){t=t||{},this.painter.resize(t.width,t.height),this.handler.resize()},e.prototype.clearAnimation=function(){this.animation.clear()},e.prototype.getWidth=function(){return this.painter.getWidth()},e.prototype.getHeight=function(){return this.painter.getHeight()},e.prototype.setCursorStyle=function(t){this.handler.setCursorStyle(t)},e.prototype.findHover=function(t,r){return this.handler.findHover(t,r)},e.prototype.on=function(t,r,n){return this.handler.on(t,r,n),this},e.prototype.off=function(t,r){this.handler.off(t,r)},e.prototype.trigger=function(t,r){this.handler.trigger(t,r)},e.prototype.clear=function(){for(var t=this.storage.getRoots(),r=0;r0){if(e<=i)return o;if(e>=a)return s}else{if(e>=i)return o;if(e<=a)return s}else{if(e===i)return o;if(e===a)return s}return(e-i)/l*u+o}function yt(e,t){switch(e){case"center":case"middle":e="50%";break;case"left":case"top":e="0%";break;case"right":case"bottom":e="100%";break}return Ee(e)?D9(e).match(/%$/)?parseFloat(e)/100*t:parseFloat(e):e==null?NaN:+e}function $t(e,t,r){return t==null&&(t=10),t=Math.min(Math.max(0,t),Y2),e=(+e).toFixed(t),r?e:+e}function vi(e){if(e=+e,isNaN(e))return 0;if(e>1e-14){for(var t=1,r=0;r<15;r++,t*=10)if(Math.round(e*t)/t===e)return r}return I9(e)}function I9(e){var t=e.toString().toLowerCase(),r=t.indexOf("e"),n=r>0?+t.slice(r+1):0,i=r>0?r:t.length,a=t.indexOf("."),o=a<0?0:i-1-a;return Math.max(0,o-n)}function O9(e,t){var r=Math.log,n=Math.LN10,i=Math.floor(r(e[1]-e[0])/n),a=Math.round(r(Math.abs(t[1]-t[0]))/n),o=Math.min(Math.max(-i+a,0),20);return isFinite(o)?o:20}function R9(e,t){var r=ca(e,function(d,v){return d+(isNaN(v)?0:v)},0);if(r===0)return[];for(var n=Math.pow(10,t),i=Ne(e,function(d){return(isNaN(d)?0:d)/r*n*100}),a=n*100,o=Ne(i,function(d){return Math.floor(d)}),s=ca(o,function(d,v){return d+v},0),l=Ne(i,function(d,v){return d-o[v]});su&&(u=l[c],f=c);++o[f],l[f]=0,++s}return Ne(o,function(d){return d/n})}function k9(e,t){var r=Math.max(vi(e),vi(t)),n=e+t;return r>Y2?n:$t(n,r)}function j2(e){var t=Math.PI*2;return(e%t+t)%t}function Ad(e){return e>-Mw&&e=10&&t++,t}function q2(e,t){var r=d0(e),n=Math.pow(10,r),i=e/n,a;return t?i<1.5?a=1:i<2.5?a=2:i<4?a=3:i<7?a=5:a=10:i<1?a=1:i<2?a=2:i<3?a=3:i<5?a=5:a=10,e=a*n,r>=-20?+e.toFixed(r<0?-r:0):e}function Pd(e){var t=parseFloat(e);return t==e&&(t!==0||!Ee(e)||e.indexOf("x")<=0)?t:NaN}function F9(e){return!isNaN(Pd(e))}function K2(){return Math.round(Math.random()*9)}function X2(e,t){return t===0?e:X2(t,e%t)}function Aw(e,t){return e==null?t:t==null?e:e*t/X2(e,t)}function Cr(e){throw new Error(e)}function Pw(e,t,r){return(t-e)*r+e}var Z2="series\0",$9="\0_ec_\0";function pr(e){return e instanceof Array?e:e==null?[]:[e]}function em(e,t,r){if(e){e[t]=e[t]||{},e.emphasis=e.emphasis||{},e.emphasis[t]=e.emphasis[t]||{};for(var n=0,i=r.length;n=0||a&&ot(a,l)<0)){var u=n.getShallow(l,t);u!=null&&(o[e[s][0]]=u)}}return o}}var l7=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],u7=Du(l7),f7=function(){function e(){}return e.prototype.getAreaStyle=function(t,r){return u7(this,t,r)},e}(),tm=new af(50);function c7(e){if(typeof e=="string"){var t=tm.get(e);return t&&t.image}else return e}function rP(e,t,r,n,i){if(e)if(typeof e=="string"){if(t&&t.__zrImageSrc===e||!r)return t;var a=tm.get(e),o={hostEl:r,cb:n,cbPayload:i};return a?(t=a.image,!xh(t)&&a.pending.push(o)):(t=Gs.loadImage(e,Lw,Lw),t.__zrImageSrc=e,tm.put(e,t.__cachedImgObj={image:t,pending:[o]})),t}else return e;else return t}function Lw(){var e=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var t=0;t=o;l++)s-=o;var u=Vr(r,t);return u>s&&(r="",u=0),s=e-u,i.ellipsis=r,i.ellipsisWidth=u,i.contentWidth=s,i.containerWidth=e,i}function iP(e,t){var r=t.containerWidth,n=t.font,i=t.contentWidth;if(!r)return"";var a=Vr(e,n);if(a<=r)return e;for(var o=0;;o++){if(a<=i||o>=t.maxIterations){e+=t.ellipsis;break}var s=o===0?h7(e,i,t.ascCharWidth,t.cnCharWidth):a>0?Math.floor(e.length*i/a):0;e=e.substr(0,s),a=Vr(e,n)}return e===""&&(e=t.placeholder),e}function h7(e,t,r,n){for(var i=0,a=0,o=e.length;ad&&u){var v=Math.floor(d/s);c=c.slice(0,v)}if(e&&a&&f!=null)for(var p=nP(f,i,t.ellipsis,{minChar:t.truncateMinChar,placeholder:t.placeholder}),m=0;ms&&$v(r,e.substring(s,u),t,o),$v(r,l[2],t,o,l[1]),s=Fv.lastIndex}si){x>0?(y.tokens=y.tokens.slice(0,x),m(y,b,_),r.lines=r.lines.slice(0,g+1)):r.lines=r.lines.slice(0,g);break e}var E=S.width,L=E==null||E==="auto";if(typeof E=="string"&&E.charAt(E.length-1)==="%")w.percentWidth=E,f.push(w),w.contentWidth=Vr(w.text,A);else{if(L){var O=S.backgroundColor,N=O&&O.image;N&&(N=c7(N),xh(N)&&(w.width=Math.max(w.width,N.width*P/N.height)))}var H=v&&n!=null?n-b:null;H!=null&&H0&&v+n.accumWidth>n.width&&(f=t.split(` `),u=!0),n.accumWidth=v}else{var p=aP(t,l,n.width,n.breakAll,n.accumWidth);n.accumWidth=p.accumWidth+d,c=p.linesWidths,f=p.lines}}else f=t.split(` `);for(var m=0;m=32&&t<=591||t>=880&&t<=4351||t>=4608&&t<=5119||t>=7680&&t<=8303}var _7=ca(",&?/;] ".split(""),function(e,t){return e[t]=!0,e},{});function b7(e){return y7(e)?!!_7[e]:!0}function aP(e,t,r,n,i){for(var a=[],o=[],s="",l="",u=0,f=0,c=0;cr:i+f+d>r){f?(s||l)&&(v?(s||(s=l,l="",u=0,f=u),a.push(s),o.push(f-u),l+=h,u+=d,s="",f=u):(l&&(s+=l,l="",u=0),a.push(s),o.push(f),s=h,f=d)):v?(a.push(l),o.push(u),l=h,u=d):(a.push(h),o.push(d));continue}f+=d,v?(l+=h,u+=d):(l&&(s+=l,l="",u=0),s+=h)}return!a.length&&!s&&(s=e,l="",u=0),l&&(s+=l),s&&(a.push(s),o.push(f)),a.length===1&&(f+=i),{accumWidth:f,lines:a,linesWidths:o}}var rm="__zr_style_"+Math.round(Math.random()*10),fo={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Ch={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};fo[rm]=!0;var Iw=["z","z2","invisible"],w7=["invisible"],S7=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype._init=function(r){for(var n=Ct(r),i=0;i1e-4){s[0]=e-r,s[1]=t-n,l[0]=e+r,l[1]=t+n;return}if(Wf[0]=Wv(i)*r+e,Wf[1]=Vv(i)*n+t,Gf[0]=Wv(a)*r+e,Gf[1]=Vv(a)*n+t,u(s,Wf,Gf),f(l,Wf,Gf),i=i%Pa,i<0&&(i=i+Pa),a=a%Pa,a<0&&(a=a+Pa),i>a&&!o?a+=Pa:ii&&(Uf[0]=Wv(d)*r+e,Uf[1]=Vv(d)*n+t,u(s,Uf,s),f(l,Uf,l))}var at={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},Ea=[],La=[],Nn=[],ki=[],Bn=[],Fn=[],Gv=Math.min,Uv=Math.max,Da=Math.cos,Ia=Math.sin,ui=Math.abs,nm=Math.PI,Gi=nm*2,Yv=typeof Float32Array<"u",ol=[];function jv(e){var t=Math.round(e/nm*1e8)/1e8;return t%2*nm}function A7(e,t){var r=jv(e[0]);r<0&&(r+=Gi);var n=r-e[0],i=e[1];i+=n,!t&&i-r>=Gi?i=r+Gi:t&&r-i>=Gi?i=r-Gi:!t&&r>i?i=r+(Gi-jv(r-i)):t&&r0&&(this._ux=ui(n/Td/t)||0,this._uy=ui(n/Td/r)||0)},e.prototype.setDPR=function(t){this.dpr=t},e.prototype.setContext=function(t){this._ctx=t},e.prototype.getContext=function(){return this._ctx},e.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},e.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},e.prototype.moveTo=function(t,r){return this._drawPendingPt(),this.addData(at.M,t,r),this._ctx&&this._ctx.moveTo(t,r),this._x0=t,this._y0=r,this._xi=t,this._yi=r,this},e.prototype.lineTo=function(t,r){var n=ui(t-this._xi),i=ui(r-this._yi),a=n>this._ux||i>this._uy;if(this.addData(at.L,t,r),this._ctx&&a&&this._ctx.lineTo(t,r),a)this._xi=t,this._yi=r,this._pendingPtDist=0;else{var o=n*n+i*i;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=r,this._pendingPtDist=o)}return this},e.prototype.bezierCurveTo=function(t,r,n,i,a,o){return this._drawPendingPt(),this.addData(at.C,t,r,n,i,a,o),this._ctx&&this._ctx.bezierCurveTo(t,r,n,i,a,o),this._xi=a,this._yi=o,this},e.prototype.quadraticCurveTo=function(t,r,n,i){return this._drawPendingPt(),this.addData(at.Q,t,r,n,i),this._ctx&&this._ctx.quadraticCurveTo(t,r,n,i),this._xi=n,this._yi=i,this},e.prototype.arc=function(t,r,n,i,a,o){this._drawPendingPt(),ol[0]=i,ol[1]=a,A7(ol,o),i=ol[0],a=ol[1];var s=a-i;return this.addData(at.A,t,r,n,n,i,s,0,o?0:1),this._ctx&&this._ctx.arc(t,r,n,i,a,o),this._xi=Da(a)*n+t,this._yi=Ia(a)*n+r,this},e.prototype.arcTo=function(t,r,n,i,a){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,r,n,i,a),this},e.prototype.rect=function(t,r,n,i){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,r,n,i),this.addData(at.R,t,r,n,i),this},e.prototype.closePath=function(){this._drawPendingPt(),this.addData(at.Z);var t=this._ctx,r=this._x0,n=this._y0;return t&&t.closePath(),this._xi=r,this._yi=n,this},e.prototype.fill=function(t){t&&t.fill(),this.toStatic()},e.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},e.prototype.len=function(){return this._len},e.prototype.setData=function(t){var r=t.length;!(this.data&&this.data.length===r)&&Yv&&(this.data=new Float32Array(r));for(var n=0;nf.length&&(this._expandData(),f=this.data);for(var c=0;c0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},e.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],r=0;r11&&(this.data=new Float32Array(t)))}},e.prototype.getBoundingRect=function(){Nn[0]=Nn[1]=Bn[0]=Bn[1]=Number.MAX_VALUE,ki[0]=ki[1]=Fn[0]=Fn[1]=-Number.MAX_VALUE;var t=this.data,r=0,n=0,i=0,a=0,o;for(o=0;on||ui(_)>i||h===r-1)&&(p=Math.sqrt(y*y+_*_),a=m,o=g);break}case at.C:{var b=t[h++],x=t[h++],m=t[h++],g=t[h++],w=t[h++],S=t[h++];p=XU(a,o,b,x,m,g,w,S,10),a=w,o=S;break}case at.Q:{var b=t[h++],x=t[h++],m=t[h++],g=t[h++];p=QU(a,o,b,x,m,g,10),a=m,o=g;break}case at.A:var C=t[h++],M=t[h++],A=t[h++],P=t[h++],E=t[h++],L=t[h++],O=L+E;h+=1,t[h++],v&&(s=Da(E)*A+C,l=Ia(E)*P+M),p=Uv(A,P)*Gv(Gi,Math.abs(L)),a=Da(O)*A+C,o=Ia(O)*P+M;break;case at.R:{s=a=t[h++],l=o=t[h++];var N=t[h++],H=t[h++];p=N*2+H*2;break}case at.Z:{var y=s-a,_=l-o;p=Math.sqrt(y*y+_*_),a=s,o=l;break}}p>=0&&(u[c++]=p,f+=p)}return this._pathLen=f,f},e.prototype.rebuildPath=function(t,r){var n=this.data,i=this._ux,a=this._uy,o=this._len,s,l,u,f,c,h,d=r<1,v,p,m=0,g=0,y,_=0,b,x;if(!(d&&(this._pathSegLen||this._calculateLength(),v=this._pathSegLen,p=this._pathLen,y=r*p,!y)))e:for(var w=0;w0&&(t.lineTo(b,x),_=0),S){case at.M:s=u=n[w++],l=f=n[w++],t.moveTo(u,f);break;case at.L:{c=n[w++],h=n[w++];var M=ui(c-u),A=ui(h-f);if(M>i||A>a){if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;t.lineTo(u*(1-E)+c*E,f*(1-E)+h*E);break e}m+=P}t.lineTo(c,h),u=c,f=h,_=0}else{var L=M*M+A*A;L>_&&(b=c,x=h,_=L)}break}case at.C:{var O=n[w++],N=n[w++],H=n[w++],V=n[w++],U=n[w++],F=n[w++];if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;Sd(u,O,H,U,E,Ea),Sd(f,N,V,F,E,La),t.bezierCurveTo(Ea[1],La[1],Ea[2],La[2],Ea[3],La[3]);break e}m+=P}t.bezierCurveTo(O,N,H,V,U,F),u=U,f=F;break}case at.Q:{var O=n[w++],N=n[w++],H=n[w++],V=n[w++];if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;xd(u,O,H,E,Ea),xd(f,N,V,E,La),t.quadraticCurveTo(Ea[1],La[1],Ea[2],La[2]);break e}m+=P}t.quadraticCurveTo(O,N,H,V),u=H,f=V;break}case at.A:var z=n[w++],te=n[w++],J=n[w++],me=n[w++],Se=n[w++],$e=n[w++],Ie=n[w++],B=!n[w++],Y=J>me?J:me,K=ui(J-me)>.001,Q=Se+$e,oe=!1;if(d){var P=v[g++];m+P>y&&(Q=Se+$e*(y-m)/P,oe=!0),m+=P}if(K&&t.ellipse?t.ellipse(z,te,J,me,Ie,Se,Q,B):t.arc(z,te,Y,Se,Q,B),oe)break e;C&&(s=Da(Se)*J+z,l=Ia(Se)*me+te),u=Da(Q)*J+z,f=Ia(Q)*me+te;break;case at.R:s=u=n[w],l=f=n[w+1],c=n[w++],h=n[w++];var pe=n[w++],D=n[w++];if(d){var P=v[g++];if(m+P>y){var I=y-m;t.moveTo(c,h),t.lineTo(c+Gv(I,pe),h),I-=pe,I>0&&t.lineTo(c+pe,h+Gv(I,D)),I-=D,I>0&&t.lineTo(c+Uv(pe-I,0),h+D),I-=pe,I>0&&t.lineTo(c,h+Uv(D-I,0));break e}m+=P}t.rect(c,h,pe,D);break;case at.Z:if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;t.lineTo(u*(1-E)+s*E,f*(1-E)+l*E);break e}m+=P}t.closePath(),u=s,f=l}}},e.prototype.clone=function(){var t=new e,r=this.data;return t.data=r.slice?r.slice():Array.prototype.slice.call(r),t._len=this._len,t},e.CMD=at,e.initDefaultProps=function(){var t=e.prototype;t._saveData=!0,t._ux=0,t._uy=0,t._pendingPtDist=0,t._version=0}(),e}();function Fo(e,t,r,n,i,a,o){if(i===0)return!1;var s=i,l=0,u=e;if(o>t+s&&o>n+s||oe+s&&a>r+s||at+c&&f>n+c&&f>a+c&&f>s+c||fe+c&&u>r+c&&u>i+c&&u>o+c||ut+u&&l>n+u&&l>a+u||le+u&&s>r+u&&s>i+u||sr||f+ui&&(i+=sl);var h=Math.atan2(l,s);return h<0&&(h+=sl),h>=n&&h<=i||h+sl>=n&&h+sl<=i}function Oa(e,t,r,n,i,a){if(a>t&&a>n||ai?s:0}var Ni=bo.CMD,Ra=Math.PI*2,D7=1e-4;function I7(e,t){return Math.abs(e-t)t&&u>n&&u>a&&u>s||u1&&O7(),d=Zt(t,n,a,s,en[0]),h>1&&(v=Zt(t,n,a,s,en[1]))),h===2?mt&&s>n&&s>a||s=0&&u<=1){for(var f=0,c=ir(t,n,a,u),h=0;hr||s<-r)return 0;var l=Math.sqrt(r*r-s*s);cr[0]=-l,cr[1]=l;var u=Math.abs(n-i);if(u<1e-4)return 0;if(u>=Ra-1e-4){n=0,i=Ra;var f=a?1:-1;return o>=cr[0]+e&&o<=cr[1]+e?f:0}if(n>i){var c=n;n=i,i=c}n<0&&(n+=Ra,i+=Ra);for(var h=0,d=0;d<2;d++){var v=cr[d];if(v+e>o){var p=Math.atan2(s,v),f=a?1:-1;p<0&&(p=Ra+p),(p>=n&&p<=i||p+Ra>=n&&p+Ra<=i)&&(p>Math.PI/2&&p1&&(r||(s+=Oa(l,u,f,c,n,i))),m&&(l=a[v],u=a[v+1],f=l,c=u),p){case Ni.M:f=a[v++],c=a[v++],l=f,u=c;break;case Ni.L:if(r){if(Fo(l,u,a[v],a[v+1],t,n,i))return!0}else s+=Oa(l,u,a[v],a[v+1],n,i)||0;l=a[v++],u=a[v++];break;case Ni.C:if(r){if(P7(l,u,a[v++],a[v++],a[v++],a[v++],a[v],a[v+1],t,n,i))return!0}else s+=R7(l,u,a[v++],a[v++],a[v++],a[v++],a[v],a[v+1],n,i)||0;l=a[v++],u=a[v++];break;case Ni.Q:if(r){if(E7(l,u,a[v++],a[v++],a[v],a[v+1],t,n,i))return!0}else s+=k7(l,u,a[v++],a[v++],a[v],a[v+1],n,i)||0;l=a[v++],u=a[v++];break;case Ni.A:var g=a[v++],y=a[v++],_=a[v++],b=a[v++],x=a[v++],w=a[v++];v+=1;var S=!!(1-a[v++]);h=Math.cos(x)*_+g,d=Math.sin(x)*b+y,m?(f=h,c=d):s+=Oa(l,u,h,d,n,i);var C=(n-g)*b/_+g;if(r){if(L7(g,y,b,x,x+w,S,t,C,i))return!0}else s+=N7(g,y,b,x,x+w,S,C,i);l=Math.cos(x+w)*_+g,u=Math.sin(x+w)*b+y;break;case Ni.R:f=l=a[v++],c=u=a[v++];var M=a[v++],A=a[v++];if(h=f+M,d=c+A,r){if(Fo(f,c,h,c,t,n,i)||Fo(h,c,h,d,t,n,i)||Fo(h,d,f,d,t,n,i)||Fo(f,d,f,c,t,n,i))return!0}else s+=Oa(h,c,h,d,n,i),s+=Oa(f,d,f,c,n,i);break;case Ni.Z:if(r){if(Fo(l,u,f,c,t,n,i))return!0}else s+=Oa(l,u,f,c,n,i);l=f,u=c;break}}return!r&&!I7(u,c)&&(s+=Oa(l,u,f,c,n,i)||0),s!==0}function B7(e,t,r){return oP(e,0,!1,t,r)}function F7(e,t,r,n){return oP(e,t,!0,r,n)}var sP=ht({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},fo),$7={style:ht({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},Ch.style)},qv=Eu.concat(["invisible","culling","z","z2","zlevel","parent"]),H7=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.update=function(){var r=this;e.prototype.update.call(this);var n=this.style;if(n.decal){var i=this._decalEl=this._decalEl||new t;i.buildPath===t.prototype.buildPath&&(i.buildPath=function(l){r.buildPath(l,r.shape)}),i.silent=!0;var a=i.style;for(var o in n)a[o]!==n[o]&&(a[o]=n[o]);a.fill=n.fill?n.decal:null,a.decal=null,a.shadowColor=null,n.strokeFirst&&(a.stroke=null);for(var s=0;s.5?Zg:n>.2?_9:Qg}else if(r)return Qg}return Zg},t.prototype.getInsideTextStroke=function(r){var n=this.style.fill;if(Ee(n)){var i=this.__zr,a=!!(i&&i.isDarkMode()),o=Cd(r,0)0))},t.prototype.hasFill=function(){var r=this.style,n=r.fill;return n!=null&&n!=="none"},t.prototype.getBoundingRect=function(){var r=this._rect,n=this.style,i=!r;if(i){var a=!1;this.path||(a=!0,this.createPathProxy());var o=this.path;(a||this.__dirty&Xo)&&(o.beginPath(),this.buildPath(o,this.shape,!1),this.pathUpdated()),r=o.getBoundingRect()}if(this._rect=r,this.hasStroke()&&this.path&&this.path.len()>0){var s=this._rectStroke||(this._rectStroke=r.clone());if(this.__dirty||i){s.copy(r);var l=n.strokeNoScale?this.getLineScale():1,u=n.lineWidth;if(!this.hasFill()){var f=this.strokeContainThreshold;u=Math.max(u,f??4)}l>1e-10&&(s.width+=u/l,s.height+=u/l,s.x-=u/l/2,s.y-=u/l/2)}return s}return r},t.prototype.contain=function(r,n){var i=this.transformCoordToLocal(r,n),a=this.getBoundingRect(),o=this.style;if(r=i[0],n=i[1],a.contain(r,n)){var s=this.path;if(this.hasStroke()){var l=o.lineWidth,u=o.strokeNoScale?this.getLineScale():1;if(u>1e-10&&(this.hasFill()||(l=Math.max(l,this.strokeContainThreshold)),F7(s,l/u,r,n)))return!0}if(this.hasFill())return B7(s,r,n)}return!1},t.prototype.dirtyShape=function(){this.__dirty|=Xo,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},t.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},t.prototype.animateShape=function(r){return this.animate("shape",r)},t.prototype.updateDuringAnimation=function(r){r==="style"?this.dirtyStyle():r==="shape"?this.dirtyShape():this.markRedraw()},t.prototype.attrKV=function(r,n){r==="shape"?this.setShape(n):e.prototype.attrKV.call(this,r,n)},t.prototype.setShape=function(r,n){var i=this.shape;return i||(i=this.shape={}),typeof r=="string"?i[r]=n:ue(i,r),this.dirtyShape(),this},t.prototype.shapeChanged=function(){return!!(this.__dirty&Xo)},t.prototype.createStyle=function(r){return _h(sP,r)},t.prototype._innerSaveToNormal=function(r){e.prototype._innerSaveToNormal.call(this,r);var n=this._normalState;r.shape&&!n.shape&&(n.shape=ue({},this.shape))},t.prototype._applyStateObj=function(r,n,i,a,o,s){e.prototype._applyStateObj.call(this,r,n,i,a,o,s);var l=!(n&&a),u;if(n&&n.shape?o?a?u=n.shape:(u=ue({},i.shape),ue(u,n.shape)):(u=ue({},a?this.shape:i.shape),ue(u,n.shape)):l&&(u=i.shape),u)if(o){this.shape=ue({},this.shape);for(var f={},c=Ct(u),h=0;h0},t.prototype.hasFill=function(){var r=this.style,n=r.fill;return n!=null&&n!=="none"},t.prototype.createStyle=function(r){return _h(z7,r)},t.prototype.setBoundingRect=function(r){this._rect=r},t.prototype.getBoundingRect=function(){var r=this.style;if(!this._rect){var n=r.text;n!=null?n+="":n="";var i=u0(n,r.font,r.textAlign,r.textBaseline);if(i.x+=r.x||0,i.y+=r.y||0,this.hasStroke()){var a=r.lineWidth;i.x-=a/2,i.y-=a/2,i.width+=a,i.height+=a}this._rect=i}return this._rect},t.initDefaultProps=function(){var r=t.prototype;r.dirtyRectTolerance=10}(),t}(uf);lP.prototype.type="tspan";const im=lP;var V7=ht({x:0,y:0},fo),W7={style:ht({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},Ch.style)};function G7(e){return!!(e&&typeof e!="string"&&e.width&&e.height)}var uP=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.createStyle=function(r){return _h(V7,r)},t.prototype._getSize=function(r){var n=this.style,i=n[r];if(i!=null)return i;var a=G7(n.image)?n.image:this.__image;if(!a)return 0;var o=r==="width"?"height":"width",s=n[o];return s==null?a[r]:a[r]/a[o]*s},t.prototype.getWidth=function(){return this._getSize("width")},t.prototype.getHeight=function(){return this._getSize("height")},t.prototype.getAnimationStyleProps=function(){return W7},t.prototype.getBoundingRect=function(){var r=this.style;return this._rect||(this._rect=new nt(r.x||0,r.y||0,this.getWidth(),this.getHeight())),this._rect},t}(uf);uP.prototype.type="image";const Gs=uP;function U7(e,t){var r=t.x,n=t.y,i=t.width,a=t.height,o=t.r,s,l,u,f;i<0&&(r=r+i,i=-i),a<0&&(n=n+a,a=-a),typeof o=="number"?s=l=u=f=o:o instanceof Array?o.length===1?s=l=u=f=o[0]:o.length===2?(s=u=o[0],l=f=o[1]):o.length===3?(s=o[0],l=f=o[1],u=o[2]):(s=o[0],l=o[1],u=o[2],f=o[3]):s=l=u=f=0;var c;s+l>i&&(c=s+l,s*=i/c,l*=i/c),u+f>i&&(c=u+f,u*=i/c,f*=i/c),l+u>a&&(c=l+u,l*=a/c,u*=a/c),s+f>a&&(c=s+f,s*=a/c,f*=a/c),e.moveTo(r+s,n),e.lineTo(r+i-l,n),l!==0&&e.arc(r+i-l,n+l,l,-Math.PI/2,0),e.lineTo(r+i,n+a-u),u!==0&&e.arc(r+i-u,n+a-u,u,0,Math.PI/2),e.lineTo(r+f,n+a),f!==0&&e.arc(r+f,n+a-f,f,Math.PI/2,Math.PI),e.lineTo(r,n+s),s!==0&&e.arc(r+s,n+s,s,Math.PI,Math.PI*1.5)}var rs=Math.round;function fP(e,t,r){if(t){var n=t.x1,i=t.x2,a=t.y1,o=t.y2;e.x1=n,e.x2=i,e.y1=a,e.y2=o;var s=r&&r.lineWidth;return s&&(rs(n*2)===rs(i*2)&&(e.x1=e.x2=to(n,s,!0)),rs(a*2)===rs(o*2)&&(e.y1=e.y2=to(a,s,!0))),e}}function cP(e,t,r){if(t){var n=t.x,i=t.y,a=t.width,o=t.height;e.x=n,e.y=i,e.width=a,e.height=o;var s=r&&r.lineWidth;return s&&(e.x=to(n,s,!0),e.y=to(i,s,!0),e.width=Math.max(to(n+a,s,!1)-e.x,a===0?0:1),e.height=Math.max(to(i+o,s,!1)-e.y,o===0?0:1)),e}}function to(e,t,r){if(!t)return e;var n=rs(e*2);return(n+rs(t))%2===0?n/2:(n+(r?1:-1))/2}var Y7=function(){function e(){this.x=0,this.y=0,this.width=0,this.height=0}return e}(),j7={},dP=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.getDefaultShape=function(){return new Y7},t.prototype.buildPath=function(r,n){var i,a,o,s;if(this.subPixelOptimize){var l=cP(j7,n,this.style);i=l.x,a=l.y,o=l.width,s=l.height,l.r=n.r,n=l}else i=n.x,a=n.y,o=n.width,s=n.height;n.r?U7(r,n):r.rect(i,a,o,s)},t.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},t}(vt);dP.prototype.type="rect";const Gt=dP;var Bw={fill:"#000"},Fw=2,q7={style:ht({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},Ch.style)},hP=function(e){ge(t,e);function t(r){var n=e.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=Bw,n.attr(r),n}return t.prototype.childrenRef=function(){return this._children},t.prototype.update=function(){e.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var r=0;r0,E=r.width!=null&&(r.overflow==="truncate"||r.overflow==="break"||r.overflow==="breakAll"),L=o.calculatedLineHeight,O=0;O=0&&(O=w[L],O.align==="right");)this._placeToken(O,r,C,g,E,"right",_),M-=O.width,E-=O.width,L--;for(P+=(a-(P-m)-(y-E)-M)/2;A<=L;)O=w[A],this._placeToken(O,r,C,g,P+O.width/2,"center",_),P+=O.width,A++;g+=C}},t.prototype._placeToken=function(r,n,i,a,o,s,l){var u=n.rich[r.styleName]||{};u.text=r.text;var f=r.verticalAlign,c=a+i/2;f==="top"?c=a+r.height/2:f==="bottom"&&(c=a+i-r.height/2);var h=!r.isLineHolder&&Kv(u);h&&this._renderBackground(u,n,s==="right"?o-r.width:s==="center"?o-r.width/2:o,c-r.height/2,r.width,r.height);var d=!!u.backgroundColor,v=r.textPadding;v&&(o=Gw(o,s,v),c-=r.height/2-v[0]-r.innerHeight/2);var p=this._getOrCreateChild(im),m=p.createStyle();p.useStyle(m);var g=this._defaultStyle,y=!1,_=0,b=Ww("fill"in u?u.fill:"fill"in n?n.fill:(y=!0,g.fill)),x=Vw("stroke"in u?u.stroke:"stroke"in n?n.stroke:!d&&!l&&(!g.autoStroke||y)?(_=Fw,g.stroke):null),w=u.textShadowBlur>0||n.textShadowBlur>0;m.text=r.text,m.x=o,m.y=c,w&&(m.shadowBlur=u.textShadowBlur||n.textShadowBlur||0,m.shadowColor=u.textShadowColor||n.textShadowColor||"transparent",m.shadowOffsetX=u.textShadowOffsetX||n.textShadowOffsetX||0,m.shadowOffsetY=u.textShadowOffsetY||n.textShadowOffsetY||0),m.textAlign=s,m.textBaseline="middle",m.font=r.font||_o,m.opacity=Yl(u.opacity,n.opacity,1),Hw(m,u),x&&(m.lineWidth=Yl(u.lineWidth,n.lineWidth,_),m.lineDash=Ze(u.lineDash,n.lineDash),m.lineDashOffset=n.lineDashOffset||0,m.stroke=x),b&&(m.fill=b);var S=r.contentWidth,C=r.contentHeight;p.setBoundingRect(new nt(Ml(m.x,S,m.textAlign),Zo(m.y,C,m.textBaseline),S,C))},t.prototype._renderBackground=function(r,n,i,a,o,s){var l=r.backgroundColor,u=r.borderWidth,f=r.borderColor,c=l&&l.image,h=l&&!c,d=r.borderRadius,v=this,p,m;if(h||r.lineHeight||u&&f){p=this._getOrCreateChild(Gt),p.useStyle(p.createStyle()),p.style.fill=null;var g=p.shape;g.x=i,g.y=a,g.width=o,g.height=s,g.r=d,p.dirtyShape()}if(h){var y=p.style;y.fill=l||null,y.fillOpacity=Ze(r.fillOpacity,1)}else if(c){m=this._getOrCreateChild(Gs),m.onload=function(){v.dirtyStyle()};var _=m.style;_.image=l.image,_.x=i,_.y=a,_.width=o,_.height=s}if(u&&f){var y=p.style;y.lineWidth=u,y.stroke=f,y.strokeOpacity=Ze(r.strokeOpacity,1),y.lineDash=r.borderDash,y.lineDashOffset=r.borderDashOffset||0,p.strokeContainThreshold=0,p.hasFill()&&p.hasStroke()&&(y.strokeFirst=!0,y.lineWidth*=2)}var b=(p||m).style;b.shadowBlur=r.shadowBlur||0,b.shadowColor=r.shadowColor||"transparent",b.shadowOffsetX=r.shadowOffsetX||0,b.shadowOffsetY=r.shadowOffsetY||0,b.opacity=Yl(r.opacity,n.opacity,1)},t.makeFont=function(r){var n="";return Q7(r)&&(n=[r.fontStyle,r.fontWeight,Z7(r.fontSize),r.fontFamily||"sans-serif"].join(" ")),n&&Gn(n)||r.textFont||r.font},t}(uf),K7={left:!0,right:1,center:1},X7={top:1,bottom:1,middle:1},$w=["fontStyle","fontWeight","fontSize","fontFamily"];function Z7(e){return typeof e=="string"&&(e.indexOf("px")!==-1||e.indexOf("rem")!==-1||e.indexOf("em")!==-1)?e:isNaN(+e)?Jy+"px":e+"px"}function Hw(e,t){for(var r=0;r<$w.length;r++){var n=$w[r],i=t[n];i!=null&&(e[n]=i)}}function Q7(e){return e.fontSize!=null||e.fontFamily||e.fontWeight}function J7(e){return zw(e),R(e.rich,zw),e}function zw(e){if(e){e.font=hP.makeFont(e);var t=e.align;t==="middle"&&(t="center"),e.align=t==null||K7[t]?t:"left";var r=e.verticalAlign;r==="center"&&(r="middle"),e.verticalAlign=r==null||X7[r]?r:"top";var n=e.padding;n&&(e.padding=_2(e.padding))}}function Vw(e,t){return e==null||t<=0||e==="transparent"||e==="none"?null:e.image||e.colorStops?"#000":e}function Ww(e){return e==null||e==="none"?null:e.image||e.colorStops?"#000":e}function Gw(e,t,r){return t==="right"?e-r[1]:t==="center"?e+r[3]/2-r[1]/2:e+r[3]}function Uw(e){var t=e.text;return t!=null&&(t+=""),t}function Kv(e){return!!(e.backgroundColor||e.lineHeight||e.borderWidth&&e.borderColor)}const mr=hP;var dt=Et(),eY=function(e,t,r,n){if(n){var i=dt(n);i.dataIndex=r,i.dataType=t,i.seriesIndex=e,n.type==="group"&&n.traverse(function(a){var o=dt(a);o.seriesIndex=e,o.dataIndex=r,o.dataType=t})}},Yw=1,jw={},vP=Et(),g0=Et(),pP=0,m0=1,y0=2,Jn=["emphasis","blur","select"],Ed=["normal","emphasis","blur","select"],tY=10,rY=9,co="highlight",Uc="downplay",Ql="select",Yc="unselect",Jl="toggleSelect";function $o(e){return e!=null&&e!=="none"}var qw=new af(100);function Kw(e){if(Ee(e)){var t=qw.get(e);return t||(t=vw(e,-.1),qw.put(e,t)),t}else if(yh(e)){var r=ue({},e);return r.colorStops=Ne(e.colorStops,function(n){return{offset:n.offset,color:vw(n.color,-.1)}}),r}return e}function Th(e,t,r){e.onHoverStateChange&&(e.hoverState||0)!==r&&e.onHoverStateChange(t),e.hoverState=r}function gP(e){Th(e,"emphasis",y0)}function mP(e){e.hoverState===y0&&Th(e,"normal",pP)}function _0(e){Th(e,"blur",m0)}function yP(e){e.hoverState===m0&&Th(e,"normal",pP)}function nY(e){e.selected=!0}function iY(e){e.selected=!1}function Xw(e,t,r){t(e,r)}function Li(e,t,r){Xw(e,t,r),e.isGroup&&e.traverse(function(n){Xw(n,t,r)})}function aY(e,t,r,n){for(var i=e.style,a={},o=0;o=0,a=!1;if(e instanceof vt){var o=vP(e),s=i&&o.selectFill||o.normalFill,l=i&&o.selectStroke||o.normalStroke;if($o(s)||$o(l)){n=n||{};var u=n.style||{};u.fill==="inherit"?(a=!0,n=ue({},n),u=ue({},u),u.fill=s):!$o(u.fill)&&$o(s)?(a=!0,n=ue({},n),u=ue({},u),u.fill=Kw(s)):!$o(u.stroke)&&$o(l)&&(a||(n=ue({},n),u=ue({},u)),u.stroke=Kw(l)),n.style=u}}if(n&&n.z2==null){a||(n=ue({},n));var f=e.z2EmphasisLift;n.z2=e.z2+(f??tY)}return n}function sY(e,t,r){if(r&&r.z2==null){r=ue({},r);var n=e.z2SelectLift;r.z2=e.z2+(n??rY)}return r}function lY(e,t,r){var n=ot(e.currentStates,t)>=0,i=e.style.opacity,a=n?null:aY(e,["opacity"],t,{opacity:1});r=r||{};var o=r.style||{};return o.opacity==null&&(r=ue({},r),o=ue({opacity:n?i:a.opacity*.1},o),r.style=o),r}function Xv(e,t){var r=this.states[e];if(this.style){if(e==="emphasis")return oY(this,e,t,r);if(e==="blur")return lY(this,e,r);if(e==="select")return sY(this,e,r)}return r}function uY(e){e.stateProxy=Xv;var t=e.getTextContent(),r=e.getTextGuideLine();t&&(t.stateProxy=Xv),r&&(r.stateProxy=Xv)}function Zw(e,t){!SP(e,t)&&!e.__highByOuter&&Li(e,gP)}function Qw(e,t){!SP(e,t)&&!e.__highByOuter&&Li(e,mP)}function am(e,t){e.__highByOuter|=1<<(t||0),Li(e,gP)}function om(e,t){!(e.__highByOuter&=~(1<<(t||0)))&&Li(e,mP)}function fY(e){Li(e,_0)}function _P(e){Li(e,yP)}function bP(e){Li(e,nY)}function wP(e){Li(e,iY)}function SP(e,t){return e.__highDownSilentOnTouch&&t.zrByTouch}function xP(e){var t=e.getModel(),r=[],n=[];t.eachComponent(function(i,a){var o=g0(a),s=i==="series",l=s?e.getViewOfSeriesModel(a):e.getViewOfComponentModel(a);!s&&n.push(l),o.isBlured&&(l.group.traverse(function(u){yP(u)}),s&&r.push(a)),o.isBlured=!1}),R(n,function(i){i&&i.toggleBlurSeries&&i.toggleBlurSeries(r,!1,t)})}function sm(e,t,r,n){var i=n.getModel();r=r||"coordinateSystem";function a(u,f){for(var c=0;c0){var s={dataIndex:o,seriesIndex:r.seriesIndex};a!=null&&(s.dataType=a),t.push(s)}})}),t}function um(e,t,r){MP(e,!0),Li(e,uY),mY(e,t,r)}function gY(e){MP(e,!1)}function CP(e,t,r,n){n?gY(e):um(e,t,r)}function mY(e,t,r){var n=dt(e);t!=null?(n.focus=t,n.blurScope=r):n.focus&&(n.focus=null)}var eS=["emphasis","blur","select"],yY={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function TP(e,t,r,n){r=r||"itemStyle";for(var i=0;i1&&(o*=Zv(v),s*=Zv(v));var p=(i===a?-1:1)*Zv((o*o*(s*s)-o*o*(d*d)-s*s*(h*h))/(o*o*(d*d)+s*s*(h*h)))||0,m=p*o*d/s,g=p*-s*h/o,y=(e+r)/2+jf(c)*m-Yf(c)*g,_=(t+n)/2+Yf(c)*m+jf(c)*g,b=iS([1,0],[(h-m)/o,(d-g)/s]),x=[(h-m)/o,(d-g)/s],w=[(-1*h-m)/o,(-1*d-g)/s],S=iS(x,w);if(dm(x,w)<=-1&&(S=ll),dm(x,w)>=1&&(S=0),S<0){var C=Math.round(S/ll*1e6)/1e6;S=ll*2+C%2*ll}f.addData(u,y,_,o,s,b,S,c,a)}var CY=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig,TY=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function MY(e){var t=new bo;if(!e)return t;var r=0,n=0,i=r,a=n,o,s=bo.CMD,l=e.match(CY);if(!l)return t;for(var u=0;uO*O+N*N&&(C=A,M=P),{cx:C,cy:M,x0:-f,y0:-c,x1:C*(i/x-1),y1:M*(i/x-1)}}function RY(e){var t;if(ye(e)){var r=e.length;if(!r)return e;r===1?t=[e[0],e[0],0,0]:r===2?t=[e[0],e[0],e[1],e[1]]:r===3?t=e.concat(e[2]):t=e}else t=[e,e,e,e];return t}function kY(e,t){var r,n=Al(t.r,0),i=Al(t.r0||0,0),a=n>0,o=i>0;if(!(!a&&!o)){if(a||(n=i,i=0),i>n){var s=n;n=i,i=s}var l=t.startAngle,u=t.endAngle;if(!(isNaN(l)||isNaN(u))){var f=t.cx,c=t.cy,h=!!t.clockwise,d=oS(u-l),v=d>Qv&&d%Qv;if(v>mn&&(d=v),!(n>mn))e.moveTo(f,c);else if(d>Qv-mn)e.moveTo(f+n*zo(l),c+n*ka(l)),e.arc(f,c,n,l,u,!h),i>mn&&(e.moveTo(f+i*zo(u),c+i*ka(u)),e.arc(f,c,i,u,l,h));else{var p=void 0,m=void 0,g=void 0,y=void 0,_=void 0,b=void 0,x=void 0,w=void 0,S=void 0,C=void 0,M=void 0,A=void 0,P=void 0,E=void 0,L=void 0,O=void 0,N=n*zo(l),H=n*ka(l),V=i*zo(u),U=i*ka(u),F=d>mn;if(F){var z=t.cornerRadius;z&&(r=RY(z),p=r[0],m=r[1],g=r[2],y=r[3]);var te=oS(n-i)/2;if(_=$n(te,g),b=$n(te,y),x=$n(te,p),w=$n(te,m),M=S=Al(_,b),A=C=Al(x,w),(S>mn||C>mn)&&(P=n*zo(u),E=n*ka(u),L=i*zo(l),O=i*ka(l),dmn){var K=$n(g,M),Q=$n(y,M),oe=qf(L,O,N,H,n,K,h),pe=qf(P,E,V,U,n,Q,h);e.moveTo(f+oe.cx+oe.x0,c+oe.cy+oe.y0),M0&&e.arc(f+oe.cx,c+oe.cy,K,rr(oe.y0,oe.x0),rr(oe.y1,oe.x1),!h),e.arc(f,c,n,rr(oe.cy+oe.y1,oe.cx+oe.x1),rr(pe.cy+pe.y1,pe.cx+pe.x1),!h),Q>0&&e.arc(f+pe.cx,c+pe.cy,Q,rr(pe.y1,pe.x1),rr(pe.y0,pe.x0),!h))}else e.moveTo(f+N,c+H),e.arc(f,c,n,l,u,!h);if(!(i>mn)||!F)e.lineTo(f+V,c+U);else if(A>mn){var K=$n(p,A),Q=$n(m,A),oe=qf(V,U,P,E,i,-Q,h),pe=qf(N,H,L,O,i,-K,h);e.lineTo(f+oe.cx+oe.x0,c+oe.cy+oe.y0),A0&&e.arc(f+oe.cx,c+oe.cy,Q,rr(oe.y0,oe.x0),rr(oe.y1,oe.x1),!h),e.arc(f,c,i,rr(oe.cy+oe.y1,oe.cx+oe.x1),rr(pe.cy+pe.y1,pe.cx+pe.x1),h),K>0&&e.arc(f+pe.cx,c+pe.cy,K,rr(pe.y1,pe.x1),rr(pe.y0,pe.x0),!h))}else e.lineTo(f+V,c+U),e.arc(f,c,i,u,l,h)}e.closePath()}}}var NY=function(){function e(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0,this.cornerRadius=0}return e}(),RP=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.getDefaultShape=function(){return new NY},t.prototype.buildPath=function(r,n){kY(r,n)},t.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},t}(vt);RP.prototype.type="sector";const Eo=RP;var BY=function(){function e(){this.cx=0,this.cy=0,this.r=0,this.r0=0}return e}(),kP=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.getDefaultShape=function(){return new BY},t.prototype.buildPath=function(r,n){var i=n.cx,a=n.cy,o=Math.PI*2;r.moveTo(i+n.r,a),r.arc(i,a,n.r,0,o,!1),r.moveTo(i+n.r0,a),r.arc(i,a,n.r0,0,o,!0)},t}(vt);kP.prototype.type="ring";const NP=kP;function FY(e,t,r,n){var i=[],a=[],o=[],s=[],l,u,f,c;if(n){f=[1/0,1/0],c=[-1/0,-1/0];for(var h=0,d=e.length;h=2){if(n){var a=FY(i,n,r,t.smoothConstraint);e.moveTo(i[0][0],i[0][1]);for(var o=i.length,s=0;s<(r?o:o-1);s++){var l=a[s*2],u=a[s*2+1],f=i[(s+1)%o];e.bezierCurveTo(l[0],l[1],u[0],u[1],f[0],f[1])}}else{e.moveTo(i[0][0],i[0][1]);for(var s=1,c=i.length;sBa[1]){if(s=!1,a)return s;var f=Math.abs(Ba[0]-Na[1]),c=Math.abs(Na[0]-Ba[1]);Math.min(f,c)>i.len()&&(f0){var c=f.duration,h=f.delay,d=f.easing,v={duration:c,delay:h||0,easing:d,done:a,force:!!a||!!o,setToFinal:!u,scope:e,during:o};s?t.animateFrom(r,v):t.animateTo(r,v)}else t.stopAnimation(),!s&&t.attr(r),o&&o(1),a&&a()}function Or(e,t,r,n,i,a){x0("update",e,t,r,n,i,a)}function Wr(e,t,r,n,i,a){x0("enter",e,t,r,n,i,a)}function fs(e){if(!e.__zr)return!0;for(var t=0;tMath.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function uS(e){return!e.isGroup}function dj(e){return e.shape!=null}function XP(e,t,r){if(!e||!t)return;function n(o){var s={};return o.traverse(function(l){uS(l)&&l.anid&&(s[l.anid]=l)}),s}function i(o){var s={x:o.x,y:o.y,rotation:o.rotation};return dj(o)&&(s.shape=ue({},o.shape)),s}var a=n(e);t.traverse(function(o){if(uS(o)&&o.anid){var s=a[o.anid];if(s){var l=i(o);o.attr(i(s)),Or(o,l,r,dt(o).dataIndex)}}})}function hj(e,t){return Ne(e,function(r){var n=r[0];n=Id(n,t.x),n=Od(n,t.x+t.width);var i=r[1];return i=Id(i,t.y),i=Od(i,t.y+t.height),[n,i]})}function vj(e,t){var r=Id(e.x,t.x),n=Od(e.x+e.width,t.x+t.width),i=Id(e.y,t.y),a=Od(e.y+e.height,t.y+t.height);if(n>=r&&a>=i)return{x:r,y:i,width:n-r,height:a-i}}function M0(e,t,r){var n=ue({rectHover:!0},t),i=n.style={strokeNoScale:!0};if(r=r||{x:-1,y:-1,width:2,height:2},e)return e.indexOf("image://")===0?(i.image=e.slice(8),ht(i,r),new Gs(n)):C0(e.replace("path://",""),n,r,"center")}function pj(e,t,r,n,i){for(var a=0,o=i[i.length-1];a1)return!1;var m=Jv(d,v,f,c)/h;return!(m<0||m>1)}function Jv(e,t,r,n){return e*n-r*t}function gj(e){return e<=1e-6&&e>=-1e-6}function A0(e){var t=e.itemTooltipOption,r=e.componentModel,n=e.itemName,i=Ee(t)?{formatter:t}:t,a=r.mainType,o=r.componentIndex,s={componentType:a,name:n,$vars:["name"]};s[a+"Index"]=o;var l=e.formatterParamsExtra;l&&R(Ct(l),function(f){Es(s,f)||(s[f]=l[f],s.$vars.push(f))});var u=dt(e.el);u.componentMainType=a,u.componentIndex=o,u.tooltipConfig={name:n,option:ht({content:n,formatterParams:s},i)}}function fS(e,t){var r;e.isGroup&&(r=t(e)),r||e.traverse(t)}function P0(e,t){if(e)if(ye(e))for(var r=0;r=0&&s.push(l)}),s}}function rE(e,t){return st(st({},e,!0),t,!0)}const Oj={time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}},Rj={time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}};var Rd="ZH",L0="EN",Ou=L0,jc={},D0={},nE=He.domSupported?function(){var e=(document.documentElement.lang||navigator.language||navigator.browserLanguage).toUpperCase();return e.indexOf(Rd)>-1?Rd:Ou}():Ou;function iE(e,t){e=e.toUpperCase(),D0[e]=new sr(t),jc[e]=t}function kj(e){if(Ee(e)){var t=jc[e.toUpperCase()]||{};return e===Rd||e===L0?tt(t):st(tt(t),tt(jc[Ou]),!1)}else return st(tt(e),tt(jc[Ou]),!1)}function Nj(e){return D0[e]}function Bj(){return D0[Ou]}iE(L0,Oj);iE(Rd,Rj);var I0=1e3,O0=I0*60,tu=O0*60,on=tu*24,gS=on*365,Pl={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},Zf="{yyyy}-{MM}-{dd}",mS={year:"{yyyy}",month:"{yyyy}-{MM}",day:Zf,hour:Zf+" "+Pl.hour,minute:Zf+" "+Pl.minute,second:Zf+" "+Pl.second,millisecond:Pl.none},rp=["year","month","day","hour","minute","second","millisecond"],aE=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function Bi(e,t){return e+="","0000".substr(0,t-e.length)+e}function cs(e){switch(e){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return e}}function Fj(e){return e===cs(e)}function $j(e){switch(e){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}function Ph(e,t,r,n){var i=Ti(e),a=i[R0(r)](),o=i[ds(r)]()+1,s=Math.floor((o-1)/3)+1,l=i[Eh(r)](),u=i["get"+(r?"UTC":"")+"Day"](),f=i[Ru(r)](),c=(f-1)%12+1,h=i[Lh(r)](),d=i[Dh(r)](),v=i[Ih(r)](),p=n instanceof sr?n:Nj(n||nE)||Bj(),m=p.getModel("time"),g=m.get("month"),y=m.get("monthAbbr"),_=m.get("dayOfWeek"),b=m.get("dayOfWeekAbbr");return(t||"").replace(/{yyyy}/g,a+"").replace(/{yy}/g,Bi(a%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,g[o-1]).replace(/{MMM}/g,y[o-1]).replace(/{MM}/g,Bi(o,2)).replace(/{M}/g,o+"").replace(/{dd}/g,Bi(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,_[u]).replace(/{ee}/g,b[u]).replace(/{e}/g,u+"").replace(/{HH}/g,Bi(f,2)).replace(/{H}/g,f+"").replace(/{hh}/g,Bi(c+"",2)).replace(/{h}/g,c+"").replace(/{mm}/g,Bi(h,2)).replace(/{m}/g,h+"").replace(/{ss}/g,Bi(d,2)).replace(/{s}/g,d+"").replace(/{SSS}/g,Bi(v,3)).replace(/{S}/g,v+"")}function Hj(e,t,r,n,i){var a=null;if(Ee(r))a=r;else if(Ye(r))a=r(e.value,t,{level:e.level});else{var o=ue({},Pl);if(e.level>0)for(var s=0;s=0;--s)if(l[u]){a=l[u];break}a=a||o.none}if(ye(a)){var c=e.level==null?0:e.level>=0?e.level:a.length+e.level;c=Math.min(c,a.length-1),a=a[c]}}return Ph(new Date(e.value),a,i,n)}function oE(e,t){var r=Ti(e),n=r[ds(t)]()+1,i=r[Eh(t)](),a=r[Ru(t)](),o=r[Lh(t)](),s=r[Dh(t)](),l=r[Ih(t)](),u=l===0,f=u&&s===0,c=f&&o===0,h=c&&a===0,d=h&&i===1,v=d&&n===1;return v?"year":d?"month":h?"day":c?"hour":f?"minute":u?"second":"millisecond"}function yS(e,t,r){var n=Tt(e)?Ti(e):e;switch(t=t||oE(e,r),t){case"year":return n[R0(r)]();case"half-year":return n[ds(r)]()>=6?1:0;case"quarter":return Math.floor((n[ds(r)]()+1)/4);case"month":return n[ds(r)]();case"day":return n[Eh(r)]();case"half-day":return n[Ru(r)]()/24;case"hour":return n[Ru(r)]();case"minute":return n[Lh(r)]();case"second":return n[Dh(r)]();case"millisecond":return n[Ih(r)]()}}function R0(e){return e?"getUTCFullYear":"getFullYear"}function ds(e){return e?"getUTCMonth":"getMonth"}function Eh(e){return e?"getUTCDate":"getDate"}function Ru(e){return e?"getUTCHours":"getHours"}function Lh(e){return e?"getUTCMinutes":"getMinutes"}function Dh(e){return e?"getUTCSeconds":"getSeconds"}function Ih(e){return e?"getUTCMilliseconds":"getMilliseconds"}function zj(e){return e?"setUTCFullYear":"setFullYear"}function sE(e){return e?"setUTCMonth":"setMonth"}function lE(e){return e?"setUTCDate":"setDate"}function uE(e){return e?"setUTCHours":"setHours"}function fE(e){return e?"setUTCMinutes":"setMinutes"}function cE(e){return e?"setUTCSeconds":"setSeconds"}function dE(e){return e?"setUTCMilliseconds":"setMilliseconds"}function hE(e){if(!F9(e))return Ee(e)?e:"-";var t=(e+"").split(".");return t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function vE(e,t){return e=(e||"").toLowerCase().replace(/-(.)/g,function(r,n){return n.toUpperCase()}),t&&e&&(e=e.charAt(0).toUpperCase()+e.slice(1)),e}var Oh=_2;function pm(e,t,r){var n="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}";function i(f){return f&&Gn(f)?f:"-"}function a(f){return!!(f!=null&&!isNaN(f)&&isFinite(f))}var o=t==="time",s=e instanceof Date;if(o||s){var l=o?Ti(e):e;if(isNaN(+l)){if(s)return"-"}else return Ph(l,n,r)}if(t==="ordinal")return kg(e)?i(e):Tt(e)&&a(e)?e+"":"-";var u=Pd(e);return a(u)?hE(u):kg(e)?i(e):typeof e=="boolean"?e+"":"-"}var _S=["a","b","c","d","e","f","g"],np=function(e,t){return"{"+e+(t??"")+"}"};function pE(e,t,r){ye(t)||(t=[t]);var n=t.length;if(!n)return"";for(var i=t[0].$vars||[],a=0;a':'';var o=r.markerId||"markerX";return{renderMode:a,content:"{"+o+"|} ",style:i==="subItem"?{width:4,height:4,borderRadius:2,backgroundColor:n}:{width:10,height:10,borderRadius:5,backgroundColor:n}}}function ku(e,t){return t=t||"transparent",Ee(e)?e:Re(e)&&e.colorStops&&(e.colorStops[0]||{}).color||t}function bS(e,t){if(t==="_blank"||t==="blank"){var r=window.open();r.opener=null,r.location.href=e}else window.open(e,t)}var qc=R,Wj=["left","right","top","bottom","width","height"],Qf=[["width","left","right"],["height","top","bottom"]];function k0(e,t,r,n,i){var a=0,o=0;n==null&&(n=1/0),i==null&&(i=1/0);var s=0;t.eachChild(function(l,u){var f=l.getBoundingRect(),c=t.childAt(u+1),h=c&&c.getBoundingRect(),d,v;if(e==="horizontal"){var p=f.width+(h?-h.x+f.x:0);d=a+p,d>n||l.newline?(a=0,d=p,o+=s+r,s=f.height):s=Math.max(s,f.height)}else{var m=f.height+(h?-h.y+f.y:0);v=o+m,v>i||l.newline?(a+=s+r,o=0,v=m,s=f.width):s=Math.max(s,f.width)}l.newline||(l.x=a,l.y=o,l.markRedraw(),e==="horizontal"?a=d+r:o=v+r)})}var ru=k0;Ot(k0,"vertical");Ot(k0,"horizontal");function Ls(e,t,r){r=Oh(r||0);var n=t.width,i=t.height,a=yt(e.left,n),o=yt(e.top,i),s=yt(e.right,n),l=yt(e.bottom,i),u=yt(e.width,n),f=yt(e.height,i),c=r[2]+r[0],h=r[1]+r[3],d=e.aspect;switch(isNaN(u)&&(u=n-s-h-a),isNaN(f)&&(f=i-l-c-o),d!=null&&(isNaN(u)&&isNaN(f)&&(d>n/i?u=n*.8:f=i*.8),isNaN(u)&&(u=d*f),isNaN(f)&&(f=u/d)),isNaN(a)&&(a=n-s-u-h),isNaN(o)&&(o=i-l-f-c),e.left||e.right){case"center":a=n/2-u/2-r[3];break;case"right":a=n-u-h;break}switch(e.top||e.bottom){case"middle":case"center":o=i/2-f/2-r[0];break;case"bottom":o=i-f-c;break}a=a||0,o=o||0,isNaN(u)&&(u=n-h-a-(s||0)),isNaN(f)&&(f=i-c-o-(l||0));var v=new nt(a+r[3],o+r[0],u,f);return v.margin=r,v}function Nu(e){var t=e.layoutMode||e.constructor.layoutMode;return Re(t)?t:t?{type:t}:null}function Ds(e,t,r){var n=r&&r.ignoreSize;!ye(n)&&(n=[n,n]);var i=o(Qf[0],0),a=o(Qf[1],1);u(Qf[0],e,i),u(Qf[1],e,a);function o(f,c){var h={},d=0,v={},p=0,m=2;if(qc(f,function(_){v[_]=e[_]}),qc(f,function(_){s(t,_)&&(h[_]=v[_]=t[_]),l(h,_)&&d++,l(v,_)&&p++}),n[c])return l(t,f[1])?v[f[2]]=null:l(t,f[2])&&(v[f[1]]=null),v;if(p===m||!d)return v;if(d>=m)return h;for(var g=0;g=0;l--)s=st(s,i[l],!0);n.defaultOption=s}return n.defaultOption},t.prototype.getReferringComponents=function(r,n){var i=r+"Index",a=r+"Id";return lf(this.ecModel,r,{index:this.get(i,!0),id:this.get(a,!0)},n)},t.prototype.getBoxLayoutParams=function(){var r=this;return{left:r.get("left"),top:r.get("top"),right:r.get("right"),bottom:r.get("bottom"),width:r.get("width"),height:r.get("height")}},t.prototype.getZLevelKey=function(){return""},t.prototype.setZLevel=function(r){this.option.zlevel=r},t.protoInitialize=function(){var r=t.prototype;r.type="component",r.id="",r.name="",r.mainType="",r.subType="",r.componentIndex=0}(),t}(sr);tP(Us,sr);Sh(Us);Dj(Us);Ij(Us,Yj);function Yj(e){var t=[];return R(Us.getClassesByMainType(e),function(r){t=t.concat(r.dependencies||r.prototype.dependencies||[])}),t=Ne(t,function(r){return Un(r).main}),e!=="dataset"&&ot(t,"dataset")<=0&&t.unshift("dataset"),t}const Mt=Us;var gE="";typeof navigator<"u"&&(gE=navigator.platform||"");var Vo="rgba(0, 0, 0, 0.2)";const jj={darkMode:"auto",colorBy:"series",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:Vo,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:Vo,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:Vo,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:Vo,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:Vo,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:Vo,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:gE.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1};var mE=je(["tooltip","label","itemName","itemId","itemGroupId","seriesName"]),hn="original",Rr="arrayRows",Rn="objectRows",ai="keyedColumns",aa="typedArray",yE="unknown",yi="column",Ys="row",Xt={Must:1,Might:2,Not:3},_E=Et();function qj(e){_E(e).datasetMap=je()}function Kj(e,t,r){var n={},i=N0(t);if(!i||!e)return n;var a=[],o=[],s=t.ecModel,l=_E(s).datasetMap,u=i.uid+"_"+r.seriesLayoutBy,f,c;e=e.slice(),R(e,function(p,m){var g=Re(p)?p:e[m]={name:p};g.type==="ordinal"&&f==null&&(f=m,c=v(g)),n[g.name]=[]});var h=l.get(u)||l.set(u,{categoryWayDim:c,valueWayDim:0});R(e,function(p,m){var g=p.name,y=v(p);if(f==null){var _=h.valueWayDim;d(n[g],_,y),d(o,_,y),h.valueWayDim+=y}else if(f===m)d(n[g],0,y),d(a,0,y);else{var _=h.categoryWayDim;d(n[g],_,y),d(o,_,y),h.categoryWayDim+=y}});function d(p,m,g){for(var y=0;yt)return e[n];return e[r-1]}function tq(e,t,r,n,i,a,o){a=a||e;var s=t(a),l=s.paletteIdx||0,u=s.paletteNameMap=s.paletteNameMap||{};if(u.hasOwnProperty(i))return u[i];var f=o==null||!n?r:eq(n,o);if(f=f||r,!(!f||!f.length)){var c=f[l];return i&&(u[i]=c),s.paletteIdx=(l+1)%f.length,c}}function rq(e,t){t(e).paletteIdx=0,t(e).paletteNameMap={}}var Jf,ul,SS,xS="\0_ec_inner",nq=1,F0=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.init=function(r,n,i,a,o,s){a=a||{},this.option=null,this._theme=new sr(a),this._locale=new sr(o),this._optionManager=s},t.prototype.setOption=function(r,n,i){var a=MS(n);this._optionManager.setOption(r,i,a),this._resetOption(null,a)},t.prototype.resetOption=function(r,n){return this._resetOption(r,MS(n))},t.prototype._resetOption=function(r,n){var i=!1,a=this._optionManager;if(!r||r==="recreate"){var o=a.mountOption(r==="recreate");!this.option||r==="recreate"?SS(this,o):(this.restoreData(),this._mergeOption(o,n)),i=!0}if((r==="timeline"||r==="media")&&this.restoreData(),!r||r==="recreate"||r==="timeline"){var s=a.getTimelineOption(this);s&&(i=!0,this._mergeOption(s,n))}if(!r||r==="recreate"||r==="media"){var l=a.getMediaOption(this);l.length&&R(l,function(u){i=!0,this._mergeOption(u,n)},this)}return i},t.prototype.mergeOption=function(r){this._mergeOption(r,null)},t.prototype._mergeOption=function(r,n){var i=this.option,a=this._componentsMap,o=this._componentsCount,s=[],l=je(),u=n&&n.replaceMergeMainTypeMap;qj(this),R(r,function(c,h){c!=null&&(Mt.hasClass(h)?h&&(s.push(h),l.set(h,!0)):i[h]=i[h]==null?tt(c):st(i[h],c,!0))}),u&&u.each(function(c,h){Mt.hasClass(h)&&!l.get(h)&&(s.push(h),l.set(h,!0))}),Mt.topologicalTravel(s,Mt.getAllClassMainTypes(),f,this);function f(c){var h=Jj(this,c,pr(r[c])),d=a.get(c),v=d?u&&u.get(c)?"replaceMerge":"normalMerge":"replaceAll",p=z9(d,h,v);q9(p,c,Mt),i[c]=null,a.set(c,null),o.set(c,0);var m=[],g=[],y=0,_;R(p,function(b,x){var w=b.existing,S=b.newOption;if(!S)w&&(w.mergeOption({},this),w.optionUpdated({},!1));else{var C=c==="series",M=Mt.getClass(c,b.keyInfo.subType,!C);if(!M)return;if(c==="tooltip"){if(_)return;_=!0}if(w&&w.constructor===M)w.name=b.keyInfo.name,w.mergeOption(S,this),w.optionUpdated(S,!1);else{var A=ue({componentIndex:x},b.keyInfo);w=new M(S,this,this,A),ue(w,A),b.brandNew&&(w.__requireNewView=!0),w.init(S,this,this),w.optionUpdated(null,!0)}}w?(m.push(w.option),g.push(w),y++):(m.push(void 0),g.push(void 0))},this),i[c]=m,a.set(c,g),o.set(c,y),c==="series"&&Jf(this)}this._seriesIndices||Jf(this)},t.prototype.getOption=function(){var r=tt(this.option);return R(r,function(n,i){if(Mt.hasClass(i)){for(var a=pr(n),o=a.length,s=!1,l=o-1;l>=0;l--)a[l]&&!Lu(a[l])?s=!0:(a[l]=null,!s&&o--);a.length=o,r[i]=a}}),delete r[xS],r},t.prototype.getTheme=function(){return this._theme},t.prototype.getLocaleModel=function(){return this._locale},t.prototype.setUpdatePayload=function(r){this._payload=r},t.prototype.getUpdatePayload=function(){return this._payload},t.prototype.getComponent=function(r,n){var i=this._componentsMap.get(r);if(i){var a=i[n||0];if(a)return a;if(n==null){for(var o=0;o=t:r==="max"?e<=t:e===t}function hq(e,t){return e.join(",")===t.join(",")}const vq=uq;var vn=R,Bu=Re,AS=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function ap(e){var t=e&&e.itemStyle;if(t)for(var r=0,n=AS.length;r=0;m--){var g=e[m];if(s||(v=g.data.rawIndexOf(g.stackedByDimension,d)),v>=0){var y=g.data.getByRawIndex(g.stackResultDimension,v);if(l==="all"||l==="positive"&&y>0||l==="negative"&&y<0||l==="samesign"&&h>=0&&y>0||l==="samesign"&&h<=0&&y<0){h=k9(h,y),p=y;break}}}return n[0]=h,n[1]=p,n})})}var kh=function(){function e(t){this.data=t.data||(t.sourceFormat===ai?{}:[]),this.sourceFormat=t.sourceFormat||yE,this.seriesLayoutBy=t.seriesLayoutBy||yi,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var r=this.dimensionsDefine=t.dimensionsDefine;if(r)for(var n=0;np&&(p=_)}d[0]=v,d[1]=p}},i=function(){return this._data?this._data.length/this._dimSize:0};RS=(t={},t[Rr+"_"+yi]={pure:!0,appendData:a},t[Rr+"_"+Ys]={pure:!0,appendData:function(){throw new Error('Do not support appendData when set seriesLayoutBy: "row".')}},t[Rn]={pure:!0,appendData:a},t[ai]={pure:!0,appendData:function(o){var s=this._data;R(o,function(l,u){for(var f=s[u]||(s[u]=[]),c=0;c<(l||[]).length;c++)f.push(l[c])})}},t[hn]={appendData:a},t[aa]={persistent:!1,pure:!0,appendData:function(o){this._data=o},clean:function(){this._offset+=this.count(),this._data=null}},t);function a(o){for(var s=0;s=0&&(p=o.interpolatedValue[m])}return p!=null?p+"":""})}},e.prototype.getRawValue=function(t,r){return Is(this.getData(r),t)},e.prototype.formatTooltip=function(t,r,n){},e}();function FS(e){var t,r;return Re(e)?e.type&&(r=e):t=e,{text:t,frag:r}}function nu(e){return new Iq(e)}var Iq=function(){function e(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return e.prototype.perform=function(t){var r=this._upstream,n=t&&t.skip;if(this._dirty&&r){var i=this.context;i.data=i.outputData=r.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var a;this._plan&&!n&&(a=this._plan(this.context));var o=f(this._modBy),s=this._modDataCount||0,l=f(t&&t.modBy),u=t&&t.modDataCount||0;(o!==l||s!==u)&&(a="reset");function f(y){return!(y>=1)&&(y=1),y}var c;(this._dirty||a==="reset")&&(this._dirty=!1,c=this._doReset(n)),this._modBy=l,this._modDataCount=u;var h=t&&t.step;if(r?this._dueEnd=r._outputDueEnd:this._dueEnd=this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,v=Math.min(h!=null?this._dueIndex+h:1/0,this._dueEnd);if(!n&&(c||d1&&n>0?s:o}};return a;function o(){return t=e?null:li?-this._resultLT:0},e}(),Rq=function(){function e(){}return e.prototype.getRawData=function(){throw new Error("not supported")},e.prototype.getRawDataItem=function(t){throw new Error("not supported")},e.prototype.cloneRawData=function(){},e.prototype.getDimensionInfo=function(t){},e.prototype.cloneAllDimensionInfo=function(){},e.prototype.count=function(){},e.prototype.retrieveValue=function(t,r){},e.prototype.retrieveValueFromItem=function(t,r){},e.prototype.convertValue=function(t,r){return Kc(t,r)},e}();function kq(e,t){var r=new Rq,n=e.data,i=r.sourceFormat=e.sourceFormat,a=e.startIndex,o="";e.seriesLayoutBy!==yi&&Cr(o);var s=[],l={},u=e.dimensionsDefine;if(u)R(u,function(p,m){var g=p.name,y={index:m,name:g,displayName:p.displayName};if(s.push(y),g!=null){var _="";Es(l,g)&&Cr(_),l[g]=y}});else for(var f=0;f65535?Wq:Gq}function Wo(){return[1/0,-1/0]}function Uq(e){var t=e.constructor;return t===Array?e.slice():new t(e)}function zS(e,t,r,n,i){var a=OE[r||"float"];if(i){var o=e[t],s=o&&o.length;if(s!==n){for(var l=new a(n),u=0;um[1]&&(m[1]=p)}return this._rawCount=this._count=l,{start:s,end:l}},e.prototype._initDataFromProvider=function(t,r,n){for(var i=this._provider,a=this._chunks,o=this._dimensions,s=o.length,l=this._rawExtent,u=Ne(o,function(y){return y.property}),f=0;fg[1]&&(g[1]=m)}}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=r,this._extent=[]},e.prototype.count=function(){return this._count},e.prototype.get=function(t,r){if(!(r>=0&&r=0&&r=this._rawCount||t<0)return-1;if(!this._indices)return t;var r=this._indices,n=r[t];if(n!=null&&nt)a=o-1;else return o}return-1},e.prototype.indicesOfNearest=function(t,r,n){var i=this._chunks,a=i[t],o=[];if(!a)return o;n==null&&(n=1/0);for(var s=1/0,l=-1,u=0,f=0,c=this.count();f=0&&l<0)&&(s=v,l=d,u=0),d===l&&(o[u++]=f))}return o.length=u,o},e.prototype.getIndices=function(){var t,r=this._indices;if(r){var n=r.constructor,i=this._count;if(n===Array){t=new n(i);for(var a=0;a=c&&y<=h||isNaN(y))&&(l[u++]=p),p++}v=!0}else if(a===2){for(var m=d[i[0]],_=d[i[1]],b=t[i[1]][0],x=t[i[1]][1],g=0;g=c&&y<=h||isNaN(y))&&(w>=b&&w<=x||isNaN(w))&&(l[u++]=p),p++}v=!0}}if(!v)if(a===1)for(var g=0;g=c&&y<=h||isNaN(y))&&(l[u++]=S)}else for(var g=0;gt[A][1])&&(C=!1)}C&&(l[u++]=r.getRawIndex(g))}return ug[1]&&(g[1]=m)}}}},e.prototype.lttbDownSample=function(t,r){var n=this.clone([t],!0),i=n._chunks,a=i[t],o=this.count(),s=0,l=Math.floor(1/r),u=this.getRawIndex(0),f,c,h,d=new(cl(this._rawCount))(Math.min((Math.ceil(o/l)+2)*2,o));d[s++]=u;for(var v=1;vf&&(f=c,h=b)}P>0&&Pf-v&&(l=f-v,s.length=l);for(var p=0;pc[1]&&(c[1]=g),h[d++]=y}return a._count=d,a._indices=h,a._updateGetRawIdx(),a},e.prototype.each=function(t,r){if(this._count)for(var n=t.length,i=this._chunks,a=0,o=this.count();al&&(l=c)}return o=[s,l],this._extent[t]=o,o},e.prototype.getRawDataItem=function(t){var r=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(r);for(var n=[],i=this._chunks,a=0;a=0?this._indices[t]:-1},e.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},e.internalField=function(){function t(r,n,i,a){return Kc(r[a],this._dimensions[a])}lp={arrayRows:t,objectRows:function(r,n,i,a){return Kc(r[n],this._dimensions[a])},keyedColumns:t,original:function(r,n,i,a){var o=r&&(r.value==null?r:r.value);return Kc(o instanceof Array?o[a]:o,this._dimensions[a])},typedArray:function(r,n,i,a){return r[a]}}}(),e}(),Yq=function(){function e(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return e.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},e.prototype._setLocalSource=function(t,r){this._sourceList=t,this._upstreamSignList=r,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},e.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},e.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},e.prototype._createSource=function(){this._setLocalSource([],[]);var t=this._sourceHost,r=this._getUpstreamSourceManagers(),n=!!r.length,i,a;if(ec(t)){var o=t,s=void 0,l=void 0,u=void 0;if(n){var f=r[0];f.prepareSource(),u=f.getSource(),s=u.data,l=u.sourceFormat,a=[f._getVersionSign()]}else s=o.get("data",!0),l=Gr(s)?aa:hn,a=[];var c=this._getSourceMetaRawOption()||{},h=u&&u.metaRawOption||{},d=Ze(c.seriesLayoutBy,h.seriesLayoutBy)||null,v=Ze(c.sourceHeader,h.sourceHeader),p=Ze(c.dimensions,h.dimensions),m=d!==h.seriesLayoutBy||!!v!=!!h.sourceHeader||p;i=m?[gm(s,{seriesLayoutBy:d,sourceHeader:v,dimensions:p},l)]:[]}else{var g=t;if(n){var y=this._applyTransform(r);i=y.sourceList,a=y.upstreamSignList}else{var _=g.get("source",!0);i=[gm(_,this._getSourceMetaRawOption(),null)],a=[]}}this._setLocalSource(i,a)},e.prototype._applyTransform=function(t){var r=this._sourceHost,n=r.get("transform",!0),i=r.get("fromTransformResult",!0);if(i!=null){var a="";t.length!==1&&VS(a)}var o,s=[],l=[];return R(t,function(u){u.prepareSource();var f=u.getSource(i||0),c="";i!=null&&!f&&VS(c),s.push(f),l.push(u._getVersionSign())}),n?o=zq(n,s,{datasetIndex:r.componentIndex}):i!=null&&(o=[Cq(s[0])]),{sourceList:o,upstreamSignList:l}},e.prototype._isDirty=function(){if(this._dirty)return!0;for(var t=this._getUpstreamSourceManagers(),r=0;rr:i+f+d>r){f?(s||l)&&(v?(s||(s=l,l="",u=0,f=u),a.push(s),o.push(f-u),l+=h,u+=d,s="",f=u):(l&&(s+=l,l="",u=0),a.push(s),o.push(f),s=h,f=d)):v?(a.push(l),o.push(u),l=h,u=d):(a.push(h),o.push(d));continue}f+=d,v?(l+=h,u+=d):(l&&(s+=l,l="",u=0),s+=h)}return!a.length&&!s&&(s=e,l="",u=0),l&&(s+=l),s&&(a.push(s),o.push(f)),a.length===1&&(f+=i),{accumWidth:f,lines:a,linesWidths:o}}var rm="__zr_style_"+Math.round(Math.random()*10),fo={shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0,shadowColor:"#000",opacity:1,blend:"source-over"},Ch={style:{shadowBlur:!0,shadowOffsetX:!0,shadowOffsetY:!0,shadowColor:!0,opacity:!0}};fo[rm]=!0;var Iw=["z","z2","invisible"],w7=["invisible"],S7=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype._init=function(r){for(var n=Ct(r),i=0;i1e-4){s[0]=e-r,s[1]=t-n,l[0]=e+r,l[1]=t+n;return}if(Wf[0]=Wv(i)*r+e,Wf[1]=Vv(i)*n+t,Gf[0]=Wv(a)*r+e,Gf[1]=Vv(a)*n+t,u(s,Wf,Gf),f(l,Wf,Gf),i=i%Pa,i<0&&(i=i+Pa),a=a%Pa,a<0&&(a=a+Pa),i>a&&!o?a+=Pa:ii&&(Uf[0]=Wv(d)*r+e,Uf[1]=Vv(d)*n+t,u(s,Uf,s),f(l,Uf,l))}var at={M:1,L:2,C:3,Q:4,A:5,Z:6,R:7},Ea=[],La=[],Nn=[],ki=[],Bn=[],Fn=[],Gv=Math.min,Uv=Math.max,Da=Math.cos,Ia=Math.sin,ui=Math.abs,nm=Math.PI,Gi=nm*2,Yv=typeof Float32Array<"u",ol=[];function jv(e){var t=Math.round(e/nm*1e8)/1e8;return t%2*nm}function A7(e,t){var r=jv(e[0]);r<0&&(r+=Gi);var n=r-e[0],i=e[1];i+=n,!t&&i-r>=Gi?i=r+Gi:t&&r-i>=Gi?i=r-Gi:!t&&r>i?i=r+(Gi-jv(r-i)):t&&r0&&(this._ux=ui(n/Td/t)||0,this._uy=ui(n/Td/r)||0)},e.prototype.setDPR=function(t){this.dpr=t},e.prototype.setContext=function(t){this._ctx=t},e.prototype.getContext=function(){return this._ctx},e.prototype.beginPath=function(){return this._ctx&&this._ctx.beginPath(),this.reset(),this},e.prototype.reset=function(){this._saveData&&(this._len=0),this._pathSegLen&&(this._pathSegLen=null,this._pathLen=0),this._version++},e.prototype.moveTo=function(t,r){return this._drawPendingPt(),this.addData(at.M,t,r),this._ctx&&this._ctx.moveTo(t,r),this._x0=t,this._y0=r,this._xi=t,this._yi=r,this},e.prototype.lineTo=function(t,r){var n=ui(t-this._xi),i=ui(r-this._yi),a=n>this._ux||i>this._uy;if(this.addData(at.L,t,r),this._ctx&&a&&this._ctx.lineTo(t,r),a)this._xi=t,this._yi=r,this._pendingPtDist=0;else{var o=n*n+i*i;o>this._pendingPtDist&&(this._pendingPtX=t,this._pendingPtY=r,this._pendingPtDist=o)}return this},e.prototype.bezierCurveTo=function(t,r,n,i,a,o){return this._drawPendingPt(),this.addData(at.C,t,r,n,i,a,o),this._ctx&&this._ctx.bezierCurveTo(t,r,n,i,a,o),this._xi=a,this._yi=o,this},e.prototype.quadraticCurveTo=function(t,r,n,i){return this._drawPendingPt(),this.addData(at.Q,t,r,n,i),this._ctx&&this._ctx.quadraticCurveTo(t,r,n,i),this._xi=n,this._yi=i,this},e.prototype.arc=function(t,r,n,i,a,o){this._drawPendingPt(),ol[0]=i,ol[1]=a,A7(ol,o),i=ol[0],a=ol[1];var s=a-i;return this.addData(at.A,t,r,n,n,i,s,0,o?0:1),this._ctx&&this._ctx.arc(t,r,n,i,a,o),this._xi=Da(a)*n+t,this._yi=Ia(a)*n+r,this},e.prototype.arcTo=function(t,r,n,i,a){return this._drawPendingPt(),this._ctx&&this._ctx.arcTo(t,r,n,i,a),this},e.prototype.rect=function(t,r,n,i){return this._drawPendingPt(),this._ctx&&this._ctx.rect(t,r,n,i),this.addData(at.R,t,r,n,i),this},e.prototype.closePath=function(){this._drawPendingPt(),this.addData(at.Z);var t=this._ctx,r=this._x0,n=this._y0;return t&&t.closePath(),this._xi=r,this._yi=n,this},e.prototype.fill=function(t){t&&t.fill(),this.toStatic()},e.prototype.stroke=function(t){t&&t.stroke(),this.toStatic()},e.prototype.len=function(){return this._len},e.prototype.setData=function(t){var r=t.length;!(this.data&&this.data.length===r)&&Yv&&(this.data=new Float32Array(r));for(var n=0;nf.length&&(this._expandData(),f=this.data);for(var c=0;c0&&(this._ctx&&this._ctx.lineTo(this._pendingPtX,this._pendingPtY),this._pendingPtDist=0)},e.prototype._expandData=function(){if(!(this.data instanceof Array)){for(var t=[],r=0;r11&&(this.data=new Float32Array(t)))}},e.prototype.getBoundingRect=function(){Nn[0]=Nn[1]=Bn[0]=Bn[1]=Number.MAX_VALUE,ki[0]=ki[1]=Fn[0]=Fn[1]=-Number.MAX_VALUE;var t=this.data,r=0,n=0,i=0,a=0,o;for(o=0;on||ui(_)>i||h===r-1)&&(p=Math.sqrt(y*y+_*_),a=m,o=g);break}case at.C:{var b=t[h++],x=t[h++],m=t[h++],g=t[h++],w=t[h++],S=t[h++];p=XU(a,o,b,x,m,g,w,S,10),a=w,o=S;break}case at.Q:{var b=t[h++],x=t[h++],m=t[h++],g=t[h++];p=QU(a,o,b,x,m,g,10),a=m,o=g;break}case at.A:var C=t[h++],M=t[h++],A=t[h++],P=t[h++],E=t[h++],L=t[h++],O=L+E;h+=1,t[h++],v&&(s=Da(E)*A+C,l=Ia(E)*P+M),p=Uv(A,P)*Gv(Gi,Math.abs(L)),a=Da(O)*A+C,o=Ia(O)*P+M;break;case at.R:{s=a=t[h++],l=o=t[h++];var N=t[h++],H=t[h++];p=N*2+H*2;break}case at.Z:{var y=s-a,_=l-o;p=Math.sqrt(y*y+_*_),a=s,o=l;break}}p>=0&&(u[c++]=p,f+=p)}return this._pathLen=f,f},e.prototype.rebuildPath=function(t,r){var n=this.data,i=this._ux,a=this._uy,o=this._len,s,l,u,f,c,h,d=r<1,v,p,m=0,g=0,y,_=0,b,x;if(!(d&&(this._pathSegLen||this._calculateLength(),v=this._pathSegLen,p=this._pathLen,y=r*p,!y)))e:for(var w=0;w0&&(t.lineTo(b,x),_=0),S){case at.M:s=u=n[w++],l=f=n[w++],t.moveTo(u,f);break;case at.L:{c=n[w++],h=n[w++];var M=ui(c-u),A=ui(h-f);if(M>i||A>a){if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;t.lineTo(u*(1-E)+c*E,f*(1-E)+h*E);break e}m+=P}t.lineTo(c,h),u=c,f=h,_=0}else{var L=M*M+A*A;L>_&&(b=c,x=h,_=L)}break}case at.C:{var O=n[w++],N=n[w++],H=n[w++],V=n[w++],U=n[w++],F=n[w++];if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;Sd(u,O,H,U,E,Ea),Sd(f,N,V,F,E,La),t.bezierCurveTo(Ea[1],La[1],Ea[2],La[2],Ea[3],La[3]);break e}m+=P}t.bezierCurveTo(O,N,H,V,U,F),u=U,f=F;break}case at.Q:{var O=n[w++],N=n[w++],H=n[w++],V=n[w++];if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;xd(u,O,H,E,Ea),xd(f,N,V,E,La),t.quadraticCurveTo(Ea[1],La[1],Ea[2],La[2]);break e}m+=P}t.quadraticCurveTo(O,N,H,V),u=H,f=V;break}case at.A:var z=n[w++],ee=n[w++],J=n[w++],me=n[w++],we=n[w++],$e=n[w++],Ie=n[w++],B=!n[w++],Y=J>me?J:me,K=ui(J-me)>.001,Q=we+$e,oe=!1;if(d){var P=v[g++];m+P>y&&(Q=we+$e*(y-m)/P,oe=!0),m+=P}if(K&&t.ellipse?t.ellipse(z,ee,J,me,Ie,we,Q,B):t.arc(z,ee,Y,we,Q,B),oe)break e;C&&(s=Da(we)*J+z,l=Ia(we)*me+ee),u=Da(Q)*J+z,f=Ia(Q)*me+ee;break;case at.R:s=u=n[w],l=f=n[w+1],c=n[w++],h=n[w++];var pe=n[w++],D=n[w++];if(d){var P=v[g++];if(m+P>y){var I=y-m;t.moveTo(c,h),t.lineTo(c+Gv(I,pe),h),I-=pe,I>0&&t.lineTo(c+pe,h+Gv(I,D)),I-=D,I>0&&t.lineTo(c+Uv(pe-I,0),h+D),I-=pe,I>0&&t.lineTo(c,h+Uv(D-I,0));break e}m+=P}t.rect(c,h,pe,D);break;case at.Z:if(d){var P=v[g++];if(m+P>y){var E=(y-m)/P;t.lineTo(u*(1-E)+s*E,f*(1-E)+l*E);break e}m+=P}t.closePath(),u=s,f=l}}},e.prototype.clone=function(){var t=new e,r=this.data;return t.data=r.slice?r.slice():Array.prototype.slice.call(r),t._len=this._len,t},e.CMD=at,e.initDefaultProps=function(){var t=e.prototype;t._saveData=!0,t._ux=0,t._uy=0,t._pendingPtDist=0,t._version=0}(),e}();function Ho(e,t,r,n,i,a,o){if(i===0)return!1;var s=i,l=0,u=e;if(o>t+s&&o>n+s||oe+s&&a>r+s||at+c&&f>n+c&&f>a+c&&f>s+c||fe+c&&u>r+c&&u>i+c&&u>o+c||ut+u&&l>n+u&&l>a+u||le+u&&s>r+u&&s>i+u||sr||f+ui&&(i+=sl);var h=Math.atan2(l,s);return h<0&&(h+=sl),h>=n&&h<=i||h+sl>=n&&h+sl<=i}function Oa(e,t,r,n,i,a){if(a>t&&a>n||ai?s:0}var Ni=bo.CMD,Ra=Math.PI*2,D7=1e-4;function I7(e,t){return Math.abs(e-t)t&&u>n&&u>a&&u>s||u1&&O7(),d=Zt(t,n,a,s,en[0]),h>1&&(v=Zt(t,n,a,s,en[1]))),h===2?mt&&s>n&&s>a||s=0&&u<=1){for(var f=0,c=ir(t,n,a,u),h=0;hr||s<-r)return 0;var l=Math.sqrt(r*r-s*s);cr[0]=-l,cr[1]=l;var u=Math.abs(n-i);if(u<1e-4)return 0;if(u>=Ra-1e-4){n=0,i=Ra;var f=a?1:-1;return o>=cr[0]+e&&o<=cr[1]+e?f:0}if(n>i){var c=n;n=i,i=c}n<0&&(n+=Ra,i+=Ra);for(var h=0,d=0;d<2;d++){var v=cr[d];if(v+e>o){var p=Math.atan2(s,v),f=a?1:-1;p<0&&(p=Ra+p),(p>=n&&p<=i||p+Ra>=n&&p+Ra<=i)&&(p>Math.PI/2&&p1&&(r||(s+=Oa(l,u,f,c,n,i))),m&&(l=a[v],u=a[v+1],f=l,c=u),p){case Ni.M:f=a[v++],c=a[v++],l=f,u=c;break;case Ni.L:if(r){if(Ho(l,u,a[v],a[v+1],t,n,i))return!0}else s+=Oa(l,u,a[v],a[v+1],n,i)||0;l=a[v++],u=a[v++];break;case Ni.C:if(r){if(P7(l,u,a[v++],a[v++],a[v++],a[v++],a[v],a[v+1],t,n,i))return!0}else s+=R7(l,u,a[v++],a[v++],a[v++],a[v++],a[v],a[v+1],n,i)||0;l=a[v++],u=a[v++];break;case Ni.Q:if(r){if(E7(l,u,a[v++],a[v++],a[v],a[v+1],t,n,i))return!0}else s+=k7(l,u,a[v++],a[v++],a[v],a[v+1],n,i)||0;l=a[v++],u=a[v++];break;case Ni.A:var g=a[v++],y=a[v++],_=a[v++],b=a[v++],x=a[v++],w=a[v++];v+=1;var S=!!(1-a[v++]);h=Math.cos(x)*_+g,d=Math.sin(x)*b+y,m?(f=h,c=d):s+=Oa(l,u,h,d,n,i);var C=(n-g)*b/_+g;if(r){if(L7(g,y,b,x,x+w,S,t,C,i))return!0}else s+=N7(g,y,b,x,x+w,S,C,i);l=Math.cos(x+w)*_+g,u=Math.sin(x+w)*b+y;break;case Ni.R:f=l=a[v++],c=u=a[v++];var M=a[v++],A=a[v++];if(h=f+M,d=c+A,r){if(Ho(f,c,h,c,t,n,i)||Ho(h,c,h,d,t,n,i)||Ho(h,d,f,d,t,n,i)||Ho(f,d,f,c,t,n,i))return!0}else s+=Oa(h,c,h,d,n,i),s+=Oa(f,d,f,c,n,i);break;case Ni.Z:if(r){if(Ho(l,u,f,c,t,n,i))return!0}else s+=Oa(l,u,f,c,n,i);l=f,u=c;break}}return!r&&!I7(u,c)&&(s+=Oa(l,u,f,c,n,i)||0),s!==0}function B7(e,t,r){return oP(e,0,!1,t,r)}function F7(e,t,r,n){return oP(e,t,!0,r,n)}var sP=ht({fill:"#000",stroke:null,strokePercent:1,fillOpacity:1,strokeOpacity:1,lineDashOffset:0,lineWidth:1,lineCap:"butt",miterLimit:10,strokeNoScale:!1,strokeFirst:!1},fo),$7={style:ht({fill:!0,stroke:!0,strokePercent:!0,fillOpacity:!0,strokeOpacity:!0,lineDashOffset:!0,lineWidth:!0,miterLimit:!0},Ch.style)},qv=Eu.concat(["invisible","culling","z","z2","zlevel","parent"]),H7=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.update=function(){var r=this;e.prototype.update.call(this);var n=this.style;if(n.decal){var i=this._decalEl=this._decalEl||new t;i.buildPath===t.prototype.buildPath&&(i.buildPath=function(l){r.buildPath(l,r.shape)}),i.silent=!0;var a=i.style;for(var o in n)a[o]!==n[o]&&(a[o]=n[o]);a.fill=n.fill?n.decal:null,a.decal=null,a.shadowColor=null,n.strokeFirst&&(a.stroke=null);for(var s=0;s.5?Zg:n>.2?_9:Qg}else if(r)return Qg}return Zg},t.prototype.getInsideTextStroke=function(r){var n=this.style.fill;if(Ee(n)){var i=this.__zr,a=!!(i&&i.isDarkMode()),o=Cd(r,0)0))},t.prototype.hasFill=function(){var r=this.style,n=r.fill;return n!=null&&n!=="none"},t.prototype.getBoundingRect=function(){var r=this._rect,n=this.style,i=!r;if(i){var a=!1;this.path||(a=!0,this.createPathProxy());var o=this.path;(a||this.__dirty&Qo)&&(o.beginPath(),this.buildPath(o,this.shape,!1),this.pathUpdated()),r=o.getBoundingRect()}if(this._rect=r,this.hasStroke()&&this.path&&this.path.len()>0){var s=this._rectStroke||(this._rectStroke=r.clone());if(this.__dirty||i){s.copy(r);var l=n.strokeNoScale?this.getLineScale():1,u=n.lineWidth;if(!this.hasFill()){var f=this.strokeContainThreshold;u=Math.max(u,f??4)}l>1e-10&&(s.width+=u/l,s.height+=u/l,s.x-=u/l/2,s.y-=u/l/2)}return s}return r},t.prototype.contain=function(r,n){var i=this.transformCoordToLocal(r,n),a=this.getBoundingRect(),o=this.style;if(r=i[0],n=i[1],a.contain(r,n)){var s=this.path;if(this.hasStroke()){var l=o.lineWidth,u=o.strokeNoScale?this.getLineScale():1;if(u>1e-10&&(this.hasFill()||(l=Math.max(l,this.strokeContainThreshold)),F7(s,l/u,r,n)))return!0}if(this.hasFill())return B7(s,r,n)}return!1},t.prototype.dirtyShape=function(){this.__dirty|=Qo,this._rect&&(this._rect=null),this._decalEl&&this._decalEl.dirtyShape(),this.markRedraw()},t.prototype.dirty=function(){this.dirtyStyle(),this.dirtyShape()},t.prototype.animateShape=function(r){return this.animate("shape",r)},t.prototype.updateDuringAnimation=function(r){r==="style"?this.dirtyStyle():r==="shape"?this.dirtyShape():this.markRedraw()},t.prototype.attrKV=function(r,n){r==="shape"?this.setShape(n):e.prototype.attrKV.call(this,r,n)},t.prototype.setShape=function(r,n){var i=this.shape;return i||(i=this.shape={}),typeof r=="string"?i[r]=n:ue(i,r),this.dirtyShape(),this},t.prototype.shapeChanged=function(){return!!(this.__dirty&Qo)},t.prototype.createStyle=function(r){return _h(sP,r)},t.prototype._innerSaveToNormal=function(r){e.prototype._innerSaveToNormal.call(this,r);var n=this._normalState;r.shape&&!n.shape&&(n.shape=ue({},this.shape))},t.prototype._applyStateObj=function(r,n,i,a,o,s){e.prototype._applyStateObj.call(this,r,n,i,a,o,s);var l=!(n&&a),u;if(n&&n.shape?o?a?u=n.shape:(u=ue({},i.shape),ue(u,n.shape)):(u=ue({},a?this.shape:i.shape),ue(u,n.shape)):l&&(u=i.shape),u)if(o){this.shape=ue({},this.shape);for(var f={},c=Ct(u),h=0;h0},t.prototype.hasFill=function(){var r=this.style,n=r.fill;return n!=null&&n!=="none"},t.prototype.createStyle=function(r){return _h(z7,r)},t.prototype.setBoundingRect=function(r){this._rect=r},t.prototype.getBoundingRect=function(){var r=this.style;if(!this._rect){var n=r.text;n!=null?n+="":n="";var i=u0(n,r.font,r.textAlign,r.textBaseline);if(i.x+=r.x||0,i.y+=r.y||0,this.hasStroke()){var a=r.lineWidth;i.x-=a/2,i.y-=a/2,i.width+=a,i.height+=a}this._rect=i}return this._rect},t.initDefaultProps=function(){var r=t.prototype;r.dirtyRectTolerance=10}(),t}(uf);lP.prototype.type="tspan";const im=lP;var V7=ht({x:0,y:0},fo),W7={style:ht({x:!0,y:!0,width:!0,height:!0,sx:!0,sy:!0,sWidth:!0,sHeight:!0},Ch.style)};function G7(e){return!!(e&&typeof e!="string"&&e.width&&e.height)}var uP=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.createStyle=function(r){return _h(V7,r)},t.prototype._getSize=function(r){var n=this.style,i=n[r];if(i!=null)return i;var a=G7(n.image)?n.image:this.__image;if(!a)return 0;var o=r==="width"?"height":"width",s=n[o];return s==null?a[r]:a[r]/a[o]*s},t.prototype.getWidth=function(){return this._getSize("width")},t.prototype.getHeight=function(){return this._getSize("height")},t.prototype.getAnimationStyleProps=function(){return W7},t.prototype.getBoundingRect=function(){var r=this.style;return this._rect||(this._rect=new nt(r.x||0,r.y||0,this.getWidth(),this.getHeight())),this._rect},t}(uf);uP.prototype.type="image";const Ys=uP;function U7(e,t){var r=t.x,n=t.y,i=t.width,a=t.height,o=t.r,s,l,u,f;i<0&&(r=r+i,i=-i),a<0&&(n=n+a,a=-a),typeof o=="number"?s=l=u=f=o:o instanceof Array?o.length===1?s=l=u=f=o[0]:o.length===2?(s=u=o[0],l=f=o[1]):o.length===3?(s=o[0],l=f=o[1],u=o[2]):(s=o[0],l=o[1],u=o[2],f=o[3]):s=l=u=f=0;var c;s+l>i&&(c=s+l,s*=i/c,l*=i/c),u+f>i&&(c=u+f,u*=i/c,f*=i/c),l+u>a&&(c=l+u,l*=a/c,u*=a/c),s+f>a&&(c=s+f,s*=a/c,f*=a/c),e.moveTo(r+s,n),e.lineTo(r+i-l,n),l!==0&&e.arc(r+i-l,n+l,l,-Math.PI/2,0),e.lineTo(r+i,n+a-u),u!==0&&e.arc(r+i-u,n+a-u,u,0,Math.PI/2),e.lineTo(r+f,n+a),f!==0&&e.arc(r+f,n+a-f,f,Math.PI/2,Math.PI),e.lineTo(r,n+s),s!==0&&e.arc(r+s,n+s,s,Math.PI,Math.PI*1.5)}var is=Math.round;function fP(e,t,r){if(t){var n=t.x1,i=t.x2,a=t.y1,o=t.y2;e.x1=n,e.x2=i,e.y1=a,e.y2=o;var s=r&&r.lineWidth;return s&&(is(n*2)===is(i*2)&&(e.x1=e.x2=to(n,s,!0)),is(a*2)===is(o*2)&&(e.y1=e.y2=to(a,s,!0))),e}}function cP(e,t,r){if(t){var n=t.x,i=t.y,a=t.width,o=t.height;e.x=n,e.y=i,e.width=a,e.height=o;var s=r&&r.lineWidth;return s&&(e.x=to(n,s,!0),e.y=to(i,s,!0),e.width=Math.max(to(n+a,s,!1)-e.x,a===0?0:1),e.height=Math.max(to(i+o,s,!1)-e.y,o===0?0:1)),e}}function to(e,t,r){if(!t)return e;var n=is(e*2);return(n+is(t))%2===0?n/2:(n+(r?1:-1))/2}var Y7=function(){function e(){this.x=0,this.y=0,this.width=0,this.height=0}return e}(),j7={},dP=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.getDefaultShape=function(){return new Y7},t.prototype.buildPath=function(r,n){var i,a,o,s;if(this.subPixelOptimize){var l=cP(j7,n,this.style);i=l.x,a=l.y,o=l.width,s=l.height,l.r=n.r,n=l}else i=n.x,a=n.y,o=n.width,s=n.height;n.r?U7(r,n):r.rect(i,a,o,s)},t.prototype.isZeroArea=function(){return!this.shape.width||!this.shape.height},t}(vt);dP.prototype.type="rect";const Gt=dP;var Bw={fill:"#000"},Fw=2,q7={style:ht({fill:!0,stroke:!0,fillOpacity:!0,strokeOpacity:!0,lineWidth:!0,fontSize:!0,lineHeight:!0,width:!0,height:!0,textShadowColor:!0,textShadowBlur:!0,textShadowOffsetX:!0,textShadowOffsetY:!0,backgroundColor:!0,padding:!0,borderColor:!0,borderWidth:!0,borderRadius:!0},Ch.style)},hP=function(e){ge(t,e);function t(r){var n=e.call(this)||this;return n.type="text",n._children=[],n._defaultStyle=Bw,n.attr(r),n}return t.prototype.childrenRef=function(){return this._children},t.prototype.update=function(){e.prototype.update.call(this),this.styleChanged()&&this._updateSubTexts();for(var r=0;r0,E=r.width!=null&&(r.overflow==="truncate"||r.overflow==="break"||r.overflow==="breakAll"),L=o.calculatedLineHeight,O=0;O=0&&(O=w[L],O.align==="right");)this._placeToken(O,r,C,g,E,"right",_),M-=O.width,E-=O.width,L--;for(P+=(a-(P-m)-(y-E)-M)/2;A<=L;)O=w[A],this._placeToken(O,r,C,g,P+O.width/2,"center",_),P+=O.width,A++;g+=C}},t.prototype._placeToken=function(r,n,i,a,o,s,l){var u=n.rich[r.styleName]||{};u.text=r.text;var f=r.verticalAlign,c=a+i/2;f==="top"?c=a+r.height/2:f==="bottom"&&(c=a+i-r.height/2);var h=!r.isLineHolder&&Kv(u);h&&this._renderBackground(u,n,s==="right"?o-r.width:s==="center"?o-r.width/2:o,c-r.height/2,r.width,r.height);var d=!!u.backgroundColor,v=r.textPadding;v&&(o=Gw(o,s,v),c-=r.height/2-v[0]-r.innerHeight/2);var p=this._getOrCreateChild(im),m=p.createStyle();p.useStyle(m);var g=this._defaultStyle,y=!1,_=0,b=Ww("fill"in u?u.fill:"fill"in n?n.fill:(y=!0,g.fill)),x=Vw("stroke"in u?u.stroke:"stroke"in n?n.stroke:!d&&!l&&(!g.autoStroke||y)?(_=Fw,g.stroke):null),w=u.textShadowBlur>0||n.textShadowBlur>0;m.text=r.text,m.x=o,m.y=c,w&&(m.shadowBlur=u.textShadowBlur||n.textShadowBlur||0,m.shadowColor=u.textShadowColor||n.textShadowColor||"transparent",m.shadowOffsetX=u.textShadowOffsetX||n.textShadowOffsetX||0,m.shadowOffsetY=u.textShadowOffsetY||n.textShadowOffsetY||0),m.textAlign=s,m.textBaseline="middle",m.font=r.font||_o,m.opacity=Yl(u.opacity,n.opacity,1),Hw(m,u),x&&(m.lineWidth=Yl(u.lineWidth,n.lineWidth,_),m.lineDash=Ze(u.lineDash,n.lineDash),m.lineDashOffset=n.lineDashOffset||0,m.stroke=x),b&&(m.fill=b);var S=r.contentWidth,C=r.contentHeight;p.setBoundingRect(new nt(Ml(m.x,S,m.textAlign),Jo(m.y,C,m.textBaseline),S,C))},t.prototype._renderBackground=function(r,n,i,a,o,s){var l=r.backgroundColor,u=r.borderWidth,f=r.borderColor,c=l&&l.image,h=l&&!c,d=r.borderRadius,v=this,p,m;if(h||r.lineHeight||u&&f){p=this._getOrCreateChild(Gt),p.useStyle(p.createStyle()),p.style.fill=null;var g=p.shape;g.x=i,g.y=a,g.width=o,g.height=s,g.r=d,p.dirtyShape()}if(h){var y=p.style;y.fill=l||null,y.fillOpacity=Ze(r.fillOpacity,1)}else if(c){m=this._getOrCreateChild(Ys),m.onload=function(){v.dirtyStyle()};var _=m.style;_.image=l.image,_.x=i,_.y=a,_.width=o,_.height=s}if(u&&f){var y=p.style;y.lineWidth=u,y.stroke=f,y.strokeOpacity=Ze(r.strokeOpacity,1),y.lineDash=r.borderDash,y.lineDashOffset=r.borderDashOffset||0,p.strokeContainThreshold=0,p.hasFill()&&p.hasStroke()&&(y.strokeFirst=!0,y.lineWidth*=2)}var b=(p||m).style;b.shadowBlur=r.shadowBlur||0,b.shadowColor=r.shadowColor||"transparent",b.shadowOffsetX=r.shadowOffsetX||0,b.shadowOffsetY=r.shadowOffsetY||0,b.opacity=Yl(r.opacity,n.opacity,1)},t.makeFont=function(r){var n="";return Q7(r)&&(n=[r.fontStyle,r.fontWeight,Z7(r.fontSize),r.fontFamily||"sans-serif"].join(" ")),n&&Gn(n)||r.textFont||r.font},t}(uf),K7={left:!0,right:1,center:1},X7={top:1,bottom:1,middle:1},$w=["fontStyle","fontWeight","fontSize","fontFamily"];function Z7(e){return typeof e=="string"&&(e.indexOf("px")!==-1||e.indexOf("rem")!==-1||e.indexOf("em")!==-1)?e:isNaN(+e)?Jy+"px":e+"px"}function Hw(e,t){for(var r=0;r<$w.length;r++){var n=$w[r],i=t[n];i!=null&&(e[n]=i)}}function Q7(e){return e.fontSize!=null||e.fontFamily||e.fontWeight}function J7(e){return zw(e),R(e.rich,zw),e}function zw(e){if(e){e.font=hP.makeFont(e);var t=e.align;t==="middle"&&(t="center"),e.align=t==null||K7[t]?t:"left";var r=e.verticalAlign;r==="center"&&(r="middle"),e.verticalAlign=r==null||X7[r]?r:"top";var n=e.padding;n&&(e.padding=_2(e.padding))}}function Vw(e,t){return e==null||t<=0||e==="transparent"||e==="none"?null:e.image||e.colorStops?"#000":e}function Ww(e){return e==null||e==="none"?null:e.image||e.colorStops?"#000":e}function Gw(e,t,r){return t==="right"?e-r[1]:t==="center"?e+r[3]/2-r[1]/2:e+r[3]}function Uw(e){var t=e.text;return t!=null&&(t+=""),t}function Kv(e){return!!(e.backgroundColor||e.lineHeight||e.borderWidth&&e.borderColor)}const mr=hP;var dt=Et(),eY=function(e,t,r,n){if(n){var i=dt(n);i.dataIndex=r,i.dataType=t,i.seriesIndex=e,n.type==="group"&&n.traverse(function(a){var o=dt(a);o.seriesIndex=e,o.dataIndex=r,o.dataType=t})}},Yw=1,jw={},vP=Et(),g0=Et(),pP=0,m0=1,y0=2,Jn=["emphasis","blur","select"],Ed=["normal","emphasis","blur","select"],tY=10,rY=9,co="highlight",Uc="downplay",Ql="select",Yc="unselect",Jl="toggleSelect";function zo(e){return e!=null&&e!=="none"}var qw=new af(100);function Kw(e){if(Ee(e)){var t=qw.get(e);return t||(t=vw(e,-.1),qw.put(e,t)),t}else if(yh(e)){var r=ue({},e);return r.colorStops=Ne(e.colorStops,function(n){return{offset:n.offset,color:vw(n.color,-.1)}}),r}return e}function Th(e,t,r){e.onHoverStateChange&&(e.hoverState||0)!==r&&e.onHoverStateChange(t),e.hoverState=r}function gP(e){Th(e,"emphasis",y0)}function mP(e){e.hoverState===y0&&Th(e,"normal",pP)}function _0(e){Th(e,"blur",m0)}function yP(e){e.hoverState===m0&&Th(e,"normal",pP)}function nY(e){e.selected=!0}function iY(e){e.selected=!1}function Xw(e,t,r){t(e,r)}function Li(e,t,r){Xw(e,t,r),e.isGroup&&e.traverse(function(n){Xw(n,t,r)})}function aY(e,t,r,n){for(var i=e.style,a={},o=0;o=0,a=!1;if(e instanceof vt){var o=vP(e),s=i&&o.selectFill||o.normalFill,l=i&&o.selectStroke||o.normalStroke;if(zo(s)||zo(l)){n=n||{};var u=n.style||{};u.fill==="inherit"?(a=!0,n=ue({},n),u=ue({},u),u.fill=s):!zo(u.fill)&&zo(s)?(a=!0,n=ue({},n),u=ue({},u),u.fill=Kw(s)):!zo(u.stroke)&&zo(l)&&(a||(n=ue({},n),u=ue({},u)),u.stroke=Kw(l)),n.style=u}}if(n&&n.z2==null){a||(n=ue({},n));var f=e.z2EmphasisLift;n.z2=e.z2+(f??tY)}return n}function sY(e,t,r){if(r&&r.z2==null){r=ue({},r);var n=e.z2SelectLift;r.z2=e.z2+(n??rY)}return r}function lY(e,t,r){var n=ot(e.currentStates,t)>=0,i=e.style.opacity,a=n?null:aY(e,["opacity"],t,{opacity:1});r=r||{};var o=r.style||{};return o.opacity==null&&(r=ue({},r),o=ue({opacity:n?i:a.opacity*.1},o),r.style=o),r}function Xv(e,t){var r=this.states[e];if(this.style){if(e==="emphasis")return oY(this,e,t,r);if(e==="blur")return lY(this,e,r);if(e==="select")return sY(this,e,r)}return r}function uY(e){e.stateProxy=Xv;var t=e.getTextContent(),r=e.getTextGuideLine();t&&(t.stateProxy=Xv),r&&(r.stateProxy=Xv)}function Zw(e,t){!SP(e,t)&&!e.__highByOuter&&Li(e,gP)}function Qw(e,t){!SP(e,t)&&!e.__highByOuter&&Li(e,mP)}function am(e,t){e.__highByOuter|=1<<(t||0),Li(e,gP)}function om(e,t){!(e.__highByOuter&=~(1<<(t||0)))&&Li(e,mP)}function fY(e){Li(e,_0)}function _P(e){Li(e,yP)}function bP(e){Li(e,nY)}function wP(e){Li(e,iY)}function SP(e,t){return e.__highDownSilentOnTouch&&t.zrByTouch}function xP(e){var t=e.getModel(),r=[],n=[];t.eachComponent(function(i,a){var o=g0(a),s=i==="series",l=s?e.getViewOfSeriesModel(a):e.getViewOfComponentModel(a);!s&&n.push(l),o.isBlured&&(l.group.traverse(function(u){yP(u)}),s&&r.push(a)),o.isBlured=!1}),R(n,function(i){i&&i.toggleBlurSeries&&i.toggleBlurSeries(r,!1,t)})}function sm(e,t,r,n){var i=n.getModel();r=r||"coordinateSystem";function a(u,f){for(var c=0;c0){var s={dataIndex:o,seriesIndex:r.seriesIndex};a!=null&&(s.dataType=a),t.push(s)}})}),t}function um(e,t,r){MP(e,!0),Li(e,uY),mY(e,t,r)}function gY(e){MP(e,!1)}function CP(e,t,r,n){n?gY(e):um(e,t,r)}function mY(e,t,r){var n=dt(e);t!=null?(n.focus=t,n.blurScope=r):n.focus&&(n.focus=null)}var eS=["emphasis","blur","select"],yY={itemStyle:"getItemStyle",lineStyle:"getLineStyle",areaStyle:"getAreaStyle"};function TP(e,t,r,n){r=r||"itemStyle";for(var i=0;i1&&(o*=Zv(v),s*=Zv(v));var p=(i===a?-1:1)*Zv((o*o*(s*s)-o*o*(d*d)-s*s*(h*h))/(o*o*(d*d)+s*s*(h*h)))||0,m=p*o*d/s,g=p*-s*h/o,y=(e+r)/2+jf(c)*m-Yf(c)*g,_=(t+n)/2+Yf(c)*m+jf(c)*g,b=iS([1,0],[(h-m)/o,(d-g)/s]),x=[(h-m)/o,(d-g)/s],w=[(-1*h-m)/o,(-1*d-g)/s],S=iS(x,w);if(dm(x,w)<=-1&&(S=ll),dm(x,w)>=1&&(S=0),S<0){var C=Math.round(S/ll*1e6)/1e6;S=ll*2+C%2*ll}f.addData(u,y,_,o,s,b,S,c,a)}var CY=/([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig,TY=/-?([0-9]*\.)?[0-9]+([eE]-?[0-9]+)?/g;function MY(e){var t=new bo;if(!e)return t;var r=0,n=0,i=r,a=n,o,s=bo.CMD,l=e.match(CY);if(!l)return t;for(var u=0;uO*O+N*N&&(C=A,M=P),{cx:C,cy:M,x0:-f,y0:-c,x1:C*(i/x-1),y1:M*(i/x-1)}}function RY(e){var t;if(ye(e)){var r=e.length;if(!r)return e;r===1?t=[e[0],e[0],0,0]:r===2?t=[e[0],e[0],e[1],e[1]]:r===3?t=e.concat(e[2]):t=e}else t=[e,e,e,e];return t}function kY(e,t){var r,n=Al(t.r,0),i=Al(t.r0||0,0),a=n>0,o=i>0;if(!(!a&&!o)){if(a||(n=i,i=0),i>n){var s=n;n=i,i=s}var l=t.startAngle,u=t.endAngle;if(!(isNaN(l)||isNaN(u))){var f=t.cx,c=t.cy,h=!!t.clockwise,d=oS(u-l),v=d>Qv&&d%Qv;if(v>mn&&(d=v),!(n>mn))e.moveTo(f,c);else if(d>Qv-mn)e.moveTo(f+n*Wo(l),c+n*ka(l)),e.arc(f,c,n,l,u,!h),i>mn&&(e.moveTo(f+i*Wo(u),c+i*ka(u)),e.arc(f,c,i,u,l,h));else{var p=void 0,m=void 0,g=void 0,y=void 0,_=void 0,b=void 0,x=void 0,w=void 0,S=void 0,C=void 0,M=void 0,A=void 0,P=void 0,E=void 0,L=void 0,O=void 0,N=n*Wo(l),H=n*ka(l),V=i*Wo(u),U=i*ka(u),F=d>mn;if(F){var z=t.cornerRadius;z&&(r=RY(z),p=r[0],m=r[1],g=r[2],y=r[3]);var ee=oS(n-i)/2;if(_=$n(ee,g),b=$n(ee,y),x=$n(ee,p),w=$n(ee,m),M=S=Al(_,b),A=C=Al(x,w),(S>mn||C>mn)&&(P=n*Wo(u),E=n*ka(u),L=i*Wo(l),O=i*ka(l),dmn){var K=$n(g,M),Q=$n(y,M),oe=qf(L,O,N,H,n,K,h),pe=qf(P,E,V,U,n,Q,h);e.moveTo(f+oe.cx+oe.x0,c+oe.cy+oe.y0),M0&&e.arc(f+oe.cx,c+oe.cy,K,rr(oe.y0,oe.x0),rr(oe.y1,oe.x1),!h),e.arc(f,c,n,rr(oe.cy+oe.y1,oe.cx+oe.x1),rr(pe.cy+pe.y1,pe.cx+pe.x1),!h),Q>0&&e.arc(f+pe.cx,c+pe.cy,Q,rr(pe.y1,pe.x1),rr(pe.y0,pe.x0),!h))}else e.moveTo(f+N,c+H),e.arc(f,c,n,l,u,!h);if(!(i>mn)||!F)e.lineTo(f+V,c+U);else if(A>mn){var K=$n(p,A),Q=$n(m,A),oe=qf(V,U,P,E,i,-Q,h),pe=qf(N,H,L,O,i,-K,h);e.lineTo(f+oe.cx+oe.x0,c+oe.cy+oe.y0),A0&&e.arc(f+oe.cx,c+oe.cy,Q,rr(oe.y0,oe.x0),rr(oe.y1,oe.x1),!h),e.arc(f,c,i,rr(oe.cy+oe.y1,oe.cx+oe.x1),rr(pe.cy+pe.y1,pe.cx+pe.x1),h),K>0&&e.arc(f+pe.cx,c+pe.cy,K,rr(pe.y1,pe.x1),rr(pe.y0,pe.x0),!h))}else e.lineTo(f+V,c+U),e.arc(f,c,i,u,l,h)}e.closePath()}}}var NY=function(){function e(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0,this.cornerRadius=0}return e}(),RP=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.getDefaultShape=function(){return new NY},t.prototype.buildPath=function(r,n){kY(r,n)},t.prototype.isZeroArea=function(){return this.shape.startAngle===this.shape.endAngle||this.shape.r===this.shape.r0},t}(vt);RP.prototype.type="sector";const Eo=RP;var BY=function(){function e(){this.cx=0,this.cy=0,this.r=0,this.r0=0}return e}(),kP=function(e){ge(t,e);function t(r){return e.call(this,r)||this}return t.prototype.getDefaultShape=function(){return new BY},t.prototype.buildPath=function(r,n){var i=n.cx,a=n.cy,o=Math.PI*2;r.moveTo(i+n.r,a),r.arc(i,a,n.r,0,o,!1),r.moveTo(i+n.r0,a),r.arc(i,a,n.r0,0,o,!0)},t}(vt);kP.prototype.type="ring";const NP=kP;function FY(e,t,r,n){var i=[],a=[],o=[],s=[],l,u,f,c;if(n){f=[1/0,1/0],c=[-1/0,-1/0];for(var h=0,d=e.length;h=2){if(n){var a=FY(i,n,r,t.smoothConstraint);e.moveTo(i[0][0],i[0][1]);for(var o=i.length,s=0;s<(r?o:o-1);s++){var l=a[s*2],u=a[s*2+1],f=i[(s+1)%o];e.bezierCurveTo(l[0],l[1],u[0],u[1],f[0],f[1])}}else{e.moveTo(i[0][0],i[0][1]);for(var s=1,c=i.length;sBa[1]){if(s=!1,a)return s;var f=Math.abs(Ba[0]-Na[1]),c=Math.abs(Na[0]-Ba[1]);Math.min(f,c)>i.len()&&(f0){var c=f.duration,h=f.delay,d=f.easing,v={duration:c,delay:h||0,easing:d,done:a,force:!!a||!!o,setToFinal:!u,scope:e,during:o};s?t.animateFrom(r,v):t.animateTo(r,v)}else t.stopAnimation(),!s&&t.attr(r),o&&o(1),a&&a()}function Or(e,t,r,n,i,a){x0("update",e,t,r,n,i,a)}function Wr(e,t,r,n,i,a){x0("enter",e,t,r,n,i,a)}function ds(e){if(!e.__zr)return!0;for(var t=0;tMath.abs(a[1])?a[0]>0?"right":"left":a[1]>0?"bottom":"top"}function uS(e){return!e.isGroup}function dj(e){return e.shape!=null}function XP(e,t,r){if(!e||!t)return;function n(o){var s={};return o.traverse(function(l){uS(l)&&l.anid&&(s[l.anid]=l)}),s}function i(o){var s={x:o.x,y:o.y,rotation:o.rotation};return dj(o)&&(s.shape=ue({},o.shape)),s}var a=n(e);t.traverse(function(o){if(uS(o)&&o.anid){var s=a[o.anid];if(s){var l=i(o);o.attr(i(s)),Or(o,l,r,dt(o).dataIndex)}}})}function hj(e,t){return Ne(e,function(r){var n=r[0];n=Id(n,t.x),n=Od(n,t.x+t.width);var i=r[1];return i=Id(i,t.y),i=Od(i,t.y+t.height),[n,i]})}function vj(e,t){var r=Id(e.x,t.x),n=Od(e.x+e.width,t.x+t.width),i=Id(e.y,t.y),a=Od(e.y+e.height,t.y+t.height);if(n>=r&&a>=i)return{x:r,y:i,width:n-r,height:a-i}}function M0(e,t,r){var n=ue({rectHover:!0},t),i=n.style={strokeNoScale:!0};if(r=r||{x:-1,y:-1,width:2,height:2},e)return e.indexOf("image://")===0?(i.image=e.slice(8),ht(i,r),new Ys(n)):C0(e.replace("path://",""),n,r,"center")}function pj(e,t,r,n,i){for(var a=0,o=i[i.length-1];a1)return!1;var m=Jv(d,v,f,c)/h;return!(m<0||m>1)}function Jv(e,t,r,n){return e*n-r*t}function gj(e){return e<=1e-6&&e>=-1e-6}function A0(e){var t=e.itemTooltipOption,r=e.componentModel,n=e.itemName,i=Ee(t)?{formatter:t}:t,a=r.mainType,o=r.componentIndex,s={componentType:a,name:n,$vars:["name"]};s[a+"Index"]=o;var l=e.formatterParamsExtra;l&&R(Ct(l),function(f){Ds(s,f)||(s[f]=l[f],s.$vars.push(f))});var u=dt(e.el);u.componentMainType=a,u.componentIndex=o,u.tooltipConfig={name:n,option:ht({content:n,formatterParams:s},i)}}function fS(e,t){var r;e.isGroup&&(r=t(e)),r||e.traverse(t)}function P0(e,t){if(e)if(ye(e))for(var r=0;r=0&&s.push(l)}),s}}function rE(e,t){return st(st({},e,!0),t,!0)}const Oj={time:{month:["January","February","March","April","May","June","July","August","September","October","November","December"],monthAbbr:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayOfWeek:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayOfWeekAbbr:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},legend:{selector:{all:"All",inverse:"Inv"}},toolbox:{brush:{title:{rect:"Box Select",polygon:"Lasso Select",lineX:"Horizontally Select",lineY:"Vertically Select",keep:"Keep Selections",clear:"Clear Selections"}},dataView:{title:"Data View",lang:["Data View","Close","Refresh"]},dataZoom:{title:{zoom:"Zoom",back:"Zoom Reset"}},magicType:{title:{line:"Switch to Line Chart",bar:"Switch to Bar Chart",stack:"Stack",tiled:"Tile"}},restore:{title:"Restore"},saveAsImage:{title:"Save as Image",lang:["Right Click to Save Image"]}},series:{typeNames:{pie:"Pie chart",bar:"Bar chart",line:"Line chart",scatter:"Scatter plot",effectScatter:"Ripple scatter plot",radar:"Radar chart",tree:"Tree",treemap:"Treemap",boxplot:"Boxplot",candlestick:"Candlestick",k:"K line chart",heatmap:"Heat map",map:"Map",parallel:"Parallel coordinate map",lines:"Line graph",graph:"Relationship graph",sankey:"Sankey diagram",funnel:"Funnel chart",gauge:"Gauge",pictorialBar:"Pictorial bar",themeRiver:"Theme River Map",sunburst:"Sunburst"}},aria:{general:{withTitle:'This is a chart about "{title}"',withoutTitle:"This is a chart"},series:{single:{prefix:"",withName:" with type {seriesType} named {seriesName}.",withoutName:" with type {seriesType}."},multiple:{prefix:". It consists of {seriesCount} series count.",withName:" The {seriesId} series is a {seriesType} representing {seriesName}.",withoutName:" The {seriesId} series is a {seriesType}.",separator:{middle:"",end:""}}},data:{allData:"The data is as follows: ",partialData:"The first {displayCnt} items are: ",withName:"the data for {name} is {value}",withoutName:"{value}",separator:{middle:", ",end:". "}}}},Rj={time:{month:["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"],monthAbbr:["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"],dayOfWeek:["星期日","星期一","星期二","星期三","星期四","星期五","星期六"],dayOfWeekAbbr:["日","一","二","三","四","五","六"]},legend:{selector:{all:"全选",inverse:"反选"}},toolbox:{brush:{title:{rect:"矩形选择",polygon:"圈选",lineX:"横向选择",lineY:"纵向选择",keep:"保持选择",clear:"清除选择"}},dataView:{title:"数据视图",lang:["数据视图","关闭","刷新"]},dataZoom:{title:{zoom:"区域缩放",back:"区域缩放还原"}},magicType:{title:{line:"切换为折线图",bar:"切换为柱状图",stack:"切换为堆叠",tiled:"切换为平铺"}},restore:{title:"还原"},saveAsImage:{title:"保存为图片",lang:["右键另存为图片"]}},series:{typeNames:{pie:"饼图",bar:"柱状图",line:"折线图",scatter:"散点图",effectScatter:"涟漪散点图",radar:"雷达图",tree:"树图",treemap:"矩形树图",boxplot:"箱型图",candlestick:"K线图",k:"K线图",heatmap:"热力图",map:"地图",parallel:"平行坐标图",lines:"线图",graph:"关系图",sankey:"桑基图",funnel:"漏斗图",gauge:"仪表盘图",pictorialBar:"象形柱图",themeRiver:"主题河流图",sunburst:"旭日图"}},aria:{general:{withTitle:"这是一个关于“{title}”的图表。",withoutTitle:"这是一个图表,"},series:{single:{prefix:"",withName:"图表类型是{seriesType},表示{seriesName}。",withoutName:"图表类型是{seriesType}。"},multiple:{prefix:"它由{seriesCount}个图表系列组成。",withName:"第{seriesId}个系列是一个表示{seriesName}的{seriesType},",withoutName:"第{seriesId}个系列是一个{seriesType},",separator:{middle:";",end:"。"}}},data:{allData:"其数据是——",partialData:"其中,前{displayCnt}项是——",withName:"{name}的数据是{value}",withoutName:"{value}",separator:{middle:",",end:""}}}};var Rd="ZH",L0="EN",Ou=L0,jc={},D0={},nE=He.domSupported?function(){var e=(document.documentElement.lang||navigator.language||navigator.browserLanguage).toUpperCase();return e.indexOf(Rd)>-1?Rd:Ou}():Ou;function iE(e,t){e=e.toUpperCase(),D0[e]=new sr(t),jc[e]=t}function kj(e){if(Ee(e)){var t=jc[e.toUpperCase()]||{};return e===Rd||e===L0?tt(t):st(tt(t),tt(jc[Ou]),!1)}else return st(tt(e),tt(jc[Ou]),!1)}function Nj(e){return D0[e]}function Bj(){return D0[Ou]}iE(L0,Oj);iE(Rd,Rj);var I0=1e3,O0=I0*60,tu=O0*60,on=tu*24,gS=on*365,Pl={year:"{yyyy}",month:"{MMM}",day:"{d}",hour:"{HH}:{mm}",minute:"{HH}:{mm}",second:"{HH}:{mm}:{ss}",millisecond:"{HH}:{mm}:{ss} {SSS}",none:"{yyyy}-{MM}-{dd} {HH}:{mm}:{ss} {SSS}"},Zf="{yyyy}-{MM}-{dd}",mS={year:"{yyyy}",month:"{yyyy}-{MM}",day:Zf,hour:Zf+" "+Pl.hour,minute:Zf+" "+Pl.minute,second:Zf+" "+Pl.second,millisecond:Pl.none},rp=["year","month","day","hour","minute","second","millisecond"],aE=["year","half-year","quarter","month","week","half-week","day","half-day","quarter-day","hour","minute","second","millisecond"];function Bi(e,t){return e+="","0000".substr(0,t-e.length)+e}function hs(e){switch(e){case"half-year":case"quarter":return"month";case"week":case"half-week":return"day";case"half-day":case"quarter-day":return"hour";default:return e}}function Fj(e){return e===hs(e)}function $j(e){switch(e){case"year":case"month":return"day";case"millisecond":return"millisecond";default:return"second"}}function Ph(e,t,r,n){var i=Ti(e),a=i[R0(r)](),o=i[vs(r)]()+1,s=Math.floor((o-1)/3)+1,l=i[Eh(r)](),u=i["get"+(r?"UTC":"")+"Day"](),f=i[Ru(r)](),c=(f-1)%12+1,h=i[Lh(r)](),d=i[Dh(r)](),v=i[Ih(r)](),p=n instanceof sr?n:Nj(n||nE)||Bj(),m=p.getModel("time"),g=m.get("month"),y=m.get("monthAbbr"),_=m.get("dayOfWeek"),b=m.get("dayOfWeekAbbr");return(t||"").replace(/{yyyy}/g,a+"").replace(/{yy}/g,Bi(a%100+"",2)).replace(/{Q}/g,s+"").replace(/{MMMM}/g,g[o-1]).replace(/{MMM}/g,y[o-1]).replace(/{MM}/g,Bi(o,2)).replace(/{M}/g,o+"").replace(/{dd}/g,Bi(l,2)).replace(/{d}/g,l+"").replace(/{eeee}/g,_[u]).replace(/{ee}/g,b[u]).replace(/{e}/g,u+"").replace(/{HH}/g,Bi(f,2)).replace(/{H}/g,f+"").replace(/{hh}/g,Bi(c+"",2)).replace(/{h}/g,c+"").replace(/{mm}/g,Bi(h,2)).replace(/{m}/g,h+"").replace(/{ss}/g,Bi(d,2)).replace(/{s}/g,d+"").replace(/{SSS}/g,Bi(v,3)).replace(/{S}/g,v+"")}function Hj(e,t,r,n,i){var a=null;if(Ee(r))a=r;else if(Ye(r))a=r(e.value,t,{level:e.level});else{var o=ue({},Pl);if(e.level>0)for(var s=0;s=0;--s)if(l[u]){a=l[u];break}a=a||o.none}if(ye(a)){var c=e.level==null?0:e.level>=0?e.level:a.length+e.level;c=Math.min(c,a.length-1),a=a[c]}}return Ph(new Date(e.value),a,i,n)}function oE(e,t){var r=Ti(e),n=r[vs(t)]()+1,i=r[Eh(t)](),a=r[Ru(t)](),o=r[Lh(t)](),s=r[Dh(t)](),l=r[Ih(t)](),u=l===0,f=u&&s===0,c=f&&o===0,h=c&&a===0,d=h&&i===1,v=d&&n===1;return v?"year":d?"month":h?"day":c?"hour":f?"minute":u?"second":"millisecond"}function yS(e,t,r){var n=Tt(e)?Ti(e):e;switch(t=t||oE(e,r),t){case"year":return n[R0(r)]();case"half-year":return n[vs(r)]()>=6?1:0;case"quarter":return Math.floor((n[vs(r)]()+1)/4);case"month":return n[vs(r)]();case"day":return n[Eh(r)]();case"half-day":return n[Ru(r)]()/24;case"hour":return n[Ru(r)]();case"minute":return n[Lh(r)]();case"second":return n[Dh(r)]();case"millisecond":return n[Ih(r)]()}}function R0(e){return e?"getUTCFullYear":"getFullYear"}function vs(e){return e?"getUTCMonth":"getMonth"}function Eh(e){return e?"getUTCDate":"getDate"}function Ru(e){return e?"getUTCHours":"getHours"}function Lh(e){return e?"getUTCMinutes":"getMinutes"}function Dh(e){return e?"getUTCSeconds":"getSeconds"}function Ih(e){return e?"getUTCMilliseconds":"getMilliseconds"}function zj(e){return e?"setUTCFullYear":"setFullYear"}function sE(e){return e?"setUTCMonth":"setMonth"}function lE(e){return e?"setUTCDate":"setDate"}function uE(e){return e?"setUTCHours":"setHours"}function fE(e){return e?"setUTCMinutes":"setMinutes"}function cE(e){return e?"setUTCSeconds":"setSeconds"}function dE(e){return e?"setUTCMilliseconds":"setMilliseconds"}function hE(e){if(!F9(e))return Ee(e)?e:"-";var t=(e+"").split(".");return t[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(t.length>1?"."+t[1]:"")}function vE(e,t){return e=(e||"").toLowerCase().replace(/-(.)/g,function(r,n){return n.toUpperCase()}),t&&e&&(e=e.charAt(0).toUpperCase()+e.slice(1)),e}var Oh=_2;function pm(e,t,r){var n="{yyyy}-{MM}-{dd} {HH}:{mm}:{ss}";function i(f){return f&&Gn(f)?f:"-"}function a(f){return!!(f!=null&&!isNaN(f)&&isFinite(f))}var o=t==="time",s=e instanceof Date;if(o||s){var l=o?Ti(e):e;if(isNaN(+l)){if(s)return"-"}else return Ph(l,n,r)}if(t==="ordinal")return kg(e)?i(e):Tt(e)&&a(e)?e+"":"-";var u=Pd(e);return a(u)?hE(u):kg(e)?i(e):typeof e=="boolean"?e+"":"-"}var _S=["a","b","c","d","e","f","g"],np=function(e,t){return"{"+e+(t??"")+"}"};function pE(e,t,r){ye(t)||(t=[t]);var n=t.length;if(!n)return"";for(var i=t[0].$vars||[],a=0;a':'';var o=r.markerId||"markerX";return{renderMode:a,content:"{"+o+"|} ",style:i==="subItem"?{width:4,height:4,borderRadius:2,backgroundColor:n}:{width:10,height:10,borderRadius:5,backgroundColor:n}}}function ku(e,t){return t=t||"transparent",Ee(e)?e:Re(e)&&e.colorStops&&(e.colorStops[0]||{}).color||t}function bS(e,t){if(t==="_blank"||t==="blank"){var r=window.open();r.opener=null,r.location.href=e}else window.open(e,t)}var qc=R,Wj=["left","right","top","bottom","width","height"],Qf=[["width","left","right"],["height","top","bottom"]];function k0(e,t,r,n,i){var a=0,o=0;n==null&&(n=1/0),i==null&&(i=1/0);var s=0;t.eachChild(function(l,u){var f=l.getBoundingRect(),c=t.childAt(u+1),h=c&&c.getBoundingRect(),d,v;if(e==="horizontal"){var p=f.width+(h?-h.x+f.x:0);d=a+p,d>n||l.newline?(a=0,d=p,o+=s+r,s=f.height):s=Math.max(s,f.height)}else{var m=f.height+(h?-h.y+f.y:0);v=o+m,v>i||l.newline?(a+=s+r,o=0,v=m,s=f.width):s=Math.max(s,f.width)}l.newline||(l.x=a,l.y=o,l.markRedraw(),e==="horizontal"?a=d+r:o=v+r)})}var ru=k0;Rt(k0,"vertical");Rt(k0,"horizontal");function Is(e,t,r){r=Oh(r||0);var n=t.width,i=t.height,a=yt(e.left,n),o=yt(e.top,i),s=yt(e.right,n),l=yt(e.bottom,i),u=yt(e.width,n),f=yt(e.height,i),c=r[2]+r[0],h=r[1]+r[3],d=e.aspect;switch(isNaN(u)&&(u=n-s-h-a),isNaN(f)&&(f=i-l-c-o),d!=null&&(isNaN(u)&&isNaN(f)&&(d>n/i?u=n*.8:f=i*.8),isNaN(u)&&(u=d*f),isNaN(f)&&(f=u/d)),isNaN(a)&&(a=n-s-u-h),isNaN(o)&&(o=i-l-f-c),e.left||e.right){case"center":a=n/2-u/2-r[3];break;case"right":a=n-u-h;break}switch(e.top||e.bottom){case"middle":case"center":o=i/2-f/2-r[0];break;case"bottom":o=i-f-c;break}a=a||0,o=o||0,isNaN(u)&&(u=n-h-a-(s||0)),isNaN(f)&&(f=i-c-o-(l||0));var v=new nt(a+r[3],o+r[0],u,f);return v.margin=r,v}function Nu(e){var t=e.layoutMode||e.constructor.layoutMode;return Re(t)?t:t?{type:t}:null}function Os(e,t,r){var n=r&&r.ignoreSize;!ye(n)&&(n=[n,n]);var i=o(Qf[0],0),a=o(Qf[1],1);u(Qf[0],e,i),u(Qf[1],e,a);function o(f,c){var h={},d=0,v={},p=0,m=2;if(qc(f,function(_){v[_]=e[_]}),qc(f,function(_){s(t,_)&&(h[_]=v[_]=t[_]),l(h,_)&&d++,l(v,_)&&p++}),n[c])return l(t,f[1])?v[f[2]]=null:l(t,f[2])&&(v[f[1]]=null),v;if(p===m||!d)return v;if(d>=m)return h;for(var g=0;g=0;l--)s=st(s,i[l],!0);n.defaultOption=s}return n.defaultOption},t.prototype.getReferringComponents=function(r,n){var i=r+"Index",a=r+"Id";return lf(this.ecModel,r,{index:this.get(i,!0),id:this.get(a,!0)},n)},t.prototype.getBoxLayoutParams=function(){var r=this;return{left:r.get("left"),top:r.get("top"),right:r.get("right"),bottom:r.get("bottom"),width:r.get("width"),height:r.get("height")}},t.prototype.getZLevelKey=function(){return""},t.prototype.setZLevel=function(r){this.option.zlevel=r},t.protoInitialize=function(){var r=t.prototype;r.type="component",r.id="",r.name="",r.mainType="",r.subType="",r.componentIndex=0}(),t}(sr);tP(js,sr);Sh(js);Dj(js);Ij(js,Yj);function Yj(e){var t=[];return R(js.getClassesByMainType(e),function(r){t=t.concat(r.dependencies||r.prototype.dependencies||[])}),t=Ne(t,function(r){return Un(r).main}),e!=="dataset"&&ot(t,"dataset")<=0&&t.unshift("dataset"),t}const Mt=js;var gE="";typeof navigator<"u"&&(gE=navigator.platform||"");var Go="rgba(0, 0, 0, 0.2)";const jj={darkMode:"auto",colorBy:"series",color:["#5470c6","#91cc75","#fac858","#ee6666","#73c0de","#3ba272","#fc8452","#9a60b4","#ea7ccc"],gradientColor:["#f6efa6","#d88273","#bf444c"],aria:{decal:{decals:[{color:Go,dashArrayX:[1,0],dashArrayY:[2,5],symbolSize:1,rotation:Math.PI/6},{color:Go,symbol:"circle",dashArrayX:[[8,8],[0,8,8,0]],dashArrayY:[6,0],symbolSize:.8},{color:Go,dashArrayX:[1,0],dashArrayY:[4,3],rotation:-Math.PI/4},{color:Go,dashArrayX:[[6,6],[0,6,6,0]],dashArrayY:[6,0]},{color:Go,dashArrayX:[[1,0],[1,6]],dashArrayY:[1,0,6,0],rotation:Math.PI/4},{color:Go,symbol:"triangle",dashArrayX:[[9,9],[0,9,9,0]],dashArrayY:[7,2],symbolSize:.75}]}},textStyle:{fontFamily:gE.match(/^Win/)?"Microsoft YaHei":"sans-serif",fontSize:12,fontStyle:"normal",fontWeight:"normal"},blendMode:null,stateAnimation:{duration:300,easing:"cubicOut"},animation:"auto",animationDuration:1e3,animationDurationUpdate:500,animationEasing:"cubicInOut",animationEasingUpdate:"cubicInOut",animationThreshold:2e3,progressiveThreshold:3e3,progressive:400,hoverLayerThreshold:3e3,useUTC:!1};var mE=je(["tooltip","label","itemName","itemId","itemGroupId","seriesName"]),hn="original",Rr="arrayRows",Rn="objectRows",ai="keyedColumns",aa="typedArray",yE="unknown",yi="column",qs="row",Xt={Must:1,Might:2,Not:3},_E=Et();function qj(e){_E(e).datasetMap=je()}function Kj(e,t,r){var n={},i=N0(t);if(!i||!e)return n;var a=[],o=[],s=t.ecModel,l=_E(s).datasetMap,u=i.uid+"_"+r.seriesLayoutBy,f,c;e=e.slice(),R(e,function(p,m){var g=Re(p)?p:e[m]={name:p};g.type==="ordinal"&&f==null&&(f=m,c=v(g)),n[g.name]=[]});var h=l.get(u)||l.set(u,{categoryWayDim:c,valueWayDim:0});R(e,function(p,m){var g=p.name,y=v(p);if(f==null){var _=h.valueWayDim;d(n[g],_,y),d(o,_,y),h.valueWayDim+=y}else if(f===m)d(n[g],0,y),d(a,0,y);else{var _=h.categoryWayDim;d(n[g],_,y),d(o,_,y),h.categoryWayDim+=y}});function d(p,m,g){for(var y=0;yt)return e[n];return e[r-1]}function tq(e,t,r,n,i,a,o){a=a||e;var s=t(a),l=s.paletteIdx||0,u=s.paletteNameMap=s.paletteNameMap||{};if(u.hasOwnProperty(i))return u[i];var f=o==null||!n?r:eq(n,o);if(f=f||r,!(!f||!f.length)){var c=f[l];return i&&(u[i]=c),s.paletteIdx=(l+1)%f.length,c}}function rq(e,t){t(e).paletteIdx=0,t(e).paletteNameMap={}}var Jf,ul,SS,xS="\0_ec_inner",nq=1,F0=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.init=function(r,n,i,a,o,s){a=a||{},this.option=null,this._theme=new sr(a),this._locale=new sr(o),this._optionManager=s},t.prototype.setOption=function(r,n,i){var a=MS(n);this._optionManager.setOption(r,i,a),this._resetOption(null,a)},t.prototype.resetOption=function(r,n){return this._resetOption(r,MS(n))},t.prototype._resetOption=function(r,n){var i=!1,a=this._optionManager;if(!r||r==="recreate"){var o=a.mountOption(r==="recreate");!this.option||r==="recreate"?SS(this,o):(this.restoreData(),this._mergeOption(o,n)),i=!0}if((r==="timeline"||r==="media")&&this.restoreData(),!r||r==="recreate"||r==="timeline"){var s=a.getTimelineOption(this);s&&(i=!0,this._mergeOption(s,n))}if(!r||r==="recreate"||r==="media"){var l=a.getMediaOption(this);l.length&&R(l,function(u){i=!0,this._mergeOption(u,n)},this)}return i},t.prototype.mergeOption=function(r){this._mergeOption(r,null)},t.prototype._mergeOption=function(r,n){var i=this.option,a=this._componentsMap,o=this._componentsCount,s=[],l=je(),u=n&&n.replaceMergeMainTypeMap;qj(this),R(r,function(c,h){c!=null&&(Mt.hasClass(h)?h&&(s.push(h),l.set(h,!0)):i[h]=i[h]==null?tt(c):st(i[h],c,!0))}),u&&u.each(function(c,h){Mt.hasClass(h)&&!l.get(h)&&(s.push(h),l.set(h,!0))}),Mt.topologicalTravel(s,Mt.getAllClassMainTypes(),f,this);function f(c){var h=Jj(this,c,pr(r[c])),d=a.get(c),v=d?u&&u.get(c)?"replaceMerge":"normalMerge":"replaceAll",p=z9(d,h,v);q9(p,c,Mt),i[c]=null,a.set(c,null),o.set(c,0);var m=[],g=[],y=0,_;R(p,function(b,x){var w=b.existing,S=b.newOption;if(!S)w&&(w.mergeOption({},this),w.optionUpdated({},!1));else{var C=c==="series",M=Mt.getClass(c,b.keyInfo.subType,!C);if(!M)return;if(c==="tooltip"){if(_)return;_=!0}if(w&&w.constructor===M)w.name=b.keyInfo.name,w.mergeOption(S,this),w.optionUpdated(S,!1);else{var A=ue({componentIndex:x},b.keyInfo);w=new M(S,this,this,A),ue(w,A),b.brandNew&&(w.__requireNewView=!0),w.init(S,this,this),w.optionUpdated(null,!0)}}w?(m.push(w.option),g.push(w),y++):(m.push(void 0),g.push(void 0))},this),i[c]=m,a.set(c,g),o.set(c,y),c==="series"&&Jf(this)}this._seriesIndices||Jf(this)},t.prototype.getOption=function(){var r=tt(this.option);return R(r,function(n,i){if(Mt.hasClass(i)){for(var a=pr(n),o=a.length,s=!1,l=o-1;l>=0;l--)a[l]&&!Lu(a[l])?s=!0:(a[l]=null,!s&&o--);a.length=o,r[i]=a}}),delete r[xS],r},t.prototype.getTheme=function(){return this._theme},t.prototype.getLocaleModel=function(){return this._locale},t.prototype.setUpdatePayload=function(r){this._payload=r},t.prototype.getUpdatePayload=function(){return this._payload},t.prototype.getComponent=function(r,n){var i=this._componentsMap.get(r);if(i){var a=i[n||0];if(a)return a;if(n==null){for(var o=0;o=t:r==="max"?e<=t:e===t}function hq(e,t){return e.join(",")===t.join(",")}const vq=uq;var vn=R,Bu=Re,AS=["areaStyle","lineStyle","nodeStyle","linkStyle","chordStyle","label","labelLine"];function ap(e){var t=e&&e.itemStyle;if(t)for(var r=0,n=AS.length;r=0;m--){var g=e[m];if(s||(v=g.data.rawIndexOf(g.stackedByDimension,d)),v>=0){var y=g.data.getByRawIndex(g.stackResultDimension,v);if(l==="all"||l==="positive"&&y>0||l==="negative"&&y<0||l==="samesign"&&h>=0&&y>0||l==="samesign"&&h<=0&&y<0){h=k9(h,y),p=y;break}}}return n[0]=h,n[1]=p,n})})}var kh=function(){function e(t){this.data=t.data||(t.sourceFormat===ai?{}:[]),this.sourceFormat=t.sourceFormat||yE,this.seriesLayoutBy=t.seriesLayoutBy||yi,this.startIndex=t.startIndex||0,this.dimensionsDetectedCount=t.dimensionsDetectedCount,this.metaRawOption=t.metaRawOption;var r=this.dimensionsDefine=t.dimensionsDefine;if(r)for(var n=0;np&&(p=_)}d[0]=v,d[1]=p}},i=function(){return this._data?this._data.length/this._dimSize:0};RS=(t={},t[Rr+"_"+yi]={pure:!0,appendData:a},t[Rr+"_"+qs]={pure:!0,appendData:function(){throw new Error('Do not support appendData when set seriesLayoutBy: "row".')}},t[Rn]={pure:!0,appendData:a},t[ai]={pure:!0,appendData:function(o){var s=this._data;R(o,function(l,u){for(var f=s[u]||(s[u]=[]),c=0;c<(l||[]).length;c++)f.push(l[c])})}},t[hn]={appendData:a},t[aa]={persistent:!1,pure:!0,appendData:function(o){this._data=o},clean:function(){this._offset+=this.count(),this._data=null}},t);function a(o){for(var s=0;s=0&&(p=o.interpolatedValue[m])}return p!=null?p+"":""})}},e.prototype.getRawValue=function(t,r){return Rs(this.getData(r),t)},e.prototype.formatTooltip=function(t,r,n){},e}();function FS(e){var t,r;return Re(e)?e.type&&(r=e):t=e,{text:t,frag:r}}function nu(e){return new Iq(e)}var Iq=function(){function e(t){t=t||{},this._reset=t.reset,this._plan=t.plan,this._count=t.count,this._onDirty=t.onDirty,this._dirty=!0}return e.prototype.perform=function(t){var r=this._upstream,n=t&&t.skip;if(this._dirty&&r){var i=this.context;i.data=i.outputData=r.context.outputData}this.__pipeline&&(this.__pipeline.currentTask=this);var a;this._plan&&!n&&(a=this._plan(this.context));var o=f(this._modBy),s=this._modDataCount||0,l=f(t&&t.modBy),u=t&&t.modDataCount||0;(o!==l||s!==u)&&(a="reset");function f(y){return!(y>=1)&&(y=1),y}var c;(this._dirty||a==="reset")&&(this._dirty=!1,c=this._doReset(n)),this._modBy=l,this._modDataCount=u;var h=t&&t.step;if(r?this._dueEnd=r._outputDueEnd:this._dueEnd=this._count?this._count(this.context):1/0,this._progress){var d=this._dueIndex,v=Math.min(h!=null?this._dueIndex+h:1/0,this._dueEnd);if(!n&&(c||d1&&n>0?s:o}};return a;function o(){return t=e?null:li?-this._resultLT:0},e}(),Rq=function(){function e(){}return e.prototype.getRawData=function(){throw new Error("not supported")},e.prototype.getRawDataItem=function(t){throw new Error("not supported")},e.prototype.cloneRawData=function(){},e.prototype.getDimensionInfo=function(t){},e.prototype.cloneAllDimensionInfo=function(){},e.prototype.count=function(){},e.prototype.retrieveValue=function(t,r){},e.prototype.retrieveValueFromItem=function(t,r){},e.prototype.convertValue=function(t,r){return Kc(t,r)},e}();function kq(e,t){var r=new Rq,n=e.data,i=r.sourceFormat=e.sourceFormat,a=e.startIndex,o="";e.seriesLayoutBy!==yi&&Cr(o);var s=[],l={},u=e.dimensionsDefine;if(u)R(u,function(p,m){var g=p.name,y={index:m,name:g,displayName:p.displayName};if(s.push(y),g!=null){var _="";Ds(l,g)&&Cr(_),l[g]=y}});else for(var f=0;f65535?Wq:Gq}function Uo(){return[1/0,-1/0]}function Uq(e){var t=e.constructor;return t===Array?e.slice():new t(e)}function zS(e,t,r,n,i){var a=OE[r||"float"];if(i){var o=e[t],s=o&&o.length;if(s!==n){for(var l=new a(n),u=0;um[1]&&(m[1]=p)}return this._rawCount=this._count=l,{start:s,end:l}},e.prototype._initDataFromProvider=function(t,r,n){for(var i=this._provider,a=this._chunks,o=this._dimensions,s=o.length,l=this._rawExtent,u=Ne(o,function(y){return y.property}),f=0;fg[1]&&(g[1]=m)}}!i.persistent&&i.clean&&i.clean(),this._rawCount=this._count=r,this._extent=[]},e.prototype.count=function(){return this._count},e.prototype.get=function(t,r){if(!(r>=0&&r=0&&r=this._rawCount||t<0)return-1;if(!this._indices)return t;var r=this._indices,n=r[t];if(n!=null&&nt)a=o-1;else return o}return-1},e.prototype.indicesOfNearest=function(t,r,n){var i=this._chunks,a=i[t],o=[];if(!a)return o;n==null&&(n=1/0);for(var s=1/0,l=-1,u=0,f=0,c=this.count();f=0&&l<0)&&(s=v,l=d,u=0),d===l&&(o[u++]=f))}return o.length=u,o},e.prototype.getIndices=function(){var t,r=this._indices;if(r){var n=r.constructor,i=this._count;if(n===Array){t=new n(i);for(var a=0;a=c&&y<=h||isNaN(y))&&(l[u++]=p),p++}v=!0}else if(a===2){for(var m=d[i[0]],_=d[i[1]],b=t[i[1]][0],x=t[i[1]][1],g=0;g=c&&y<=h||isNaN(y))&&(w>=b&&w<=x||isNaN(w))&&(l[u++]=p),p++}v=!0}}if(!v)if(a===1)for(var g=0;g=c&&y<=h||isNaN(y))&&(l[u++]=S)}else for(var g=0;gt[A][1])&&(C=!1)}C&&(l[u++]=r.getRawIndex(g))}return ug[1]&&(g[1]=m)}}}},e.prototype.lttbDownSample=function(t,r){var n=this.clone([t],!0),i=n._chunks,a=i[t],o=this.count(),s=0,l=Math.floor(1/r),u=this.getRawIndex(0),f,c,h,d=new(cl(this._rawCount))(Math.min((Math.ceil(o/l)+2)*2,o));d[s++]=u;for(var v=1;vf&&(f=c,h=b)}P>0&&Pf-v&&(l=f-v,s.length=l);for(var p=0;pc[1]&&(c[1]=g),h[d++]=y}return a._count=d,a._indices=h,a._updateGetRawIdx(),a},e.prototype.each=function(t,r){if(this._count)for(var n=t.length,i=this._chunks,a=0,o=this.count();al&&(l=c)}return o=[s,l],this._extent[t]=o,o},e.prototype.getRawDataItem=function(t){var r=this.getRawIndex(t);if(this._provider.persistent)return this._provider.getItem(r);for(var n=[],i=this._chunks,a=0;a=0?this._indices[t]:-1},e.prototype._updateGetRawIdx=function(){this.getRawIndex=this._indices?this._getRawIdx:this._getRawIdxIdentity},e.internalField=function(){function t(r,n,i,a){return Kc(r[a],this._dimensions[a])}lp={arrayRows:t,objectRows:function(r,n,i,a){return Kc(r[n],this._dimensions[a])},keyedColumns:t,original:function(r,n,i,a){var o=r&&(r.value==null?r:r.value);return Kc(o instanceof Array?o[a]:o,this._dimensions[a])},typedArray:function(r,n,i,a){return r[a]}}}(),e}(),Yq=function(){function e(t){this._sourceList=[],this._storeList=[],this._upstreamSignList=[],this._versionSignBase=0,this._dirty=!0,this._sourceHost=t}return e.prototype.dirty=function(){this._setLocalSource([],[]),this._storeList=[],this._dirty=!0},e.prototype._setLocalSource=function(t,r){this._sourceList=t,this._upstreamSignList=r,this._versionSignBase++,this._versionSignBase>9e10&&(this._versionSignBase=0)},e.prototype._getVersionSign=function(){return this._sourceHost.uid+"_"+this._versionSignBase},e.prototype.prepareSource=function(){this._isDirty()&&(this._createSource(),this._dirty=!1)},e.prototype._createSource=function(){this._setLocalSource([],[]);var t=this._sourceHost,r=this._getUpstreamSourceManagers(),n=!!r.length,i,a;if(ec(t)){var o=t,s=void 0,l=void 0,u=void 0;if(n){var f=r[0];f.prepareSource(),u=f.getSource(),s=u.data,l=u.sourceFormat,a=[f._getVersionSign()]}else s=o.get("data",!0),l=Gr(s)?aa:hn,a=[];var c=this._getSourceMetaRawOption()||{},h=u&&u.metaRawOption||{},d=Ze(c.seriesLayoutBy,h.seriesLayoutBy)||null,v=Ze(c.sourceHeader,h.sourceHeader),p=Ze(c.dimensions,h.dimensions),m=d!==h.seriesLayoutBy||!!v!=!!h.sourceHeader||p;i=m?[gm(s,{seriesLayoutBy:d,sourceHeader:v,dimensions:p},l)]:[]}else{var g=t;if(n){var y=this._applyTransform(r);i=y.sourceList,a=y.upstreamSignList}else{var _=g.get("source",!0);i=[gm(_,this._getSourceMetaRawOption(),null)],a=[]}}this._setLocalSource(i,a)},e.prototype._applyTransform=function(t){var r=this._sourceHost,n=r.get("transform",!0),i=r.get("fromTransformResult",!0);if(i!=null){var a="";t.length!==1&&VS(a)}var o,s=[],l=[];return R(t,function(u){u.prepareSource();var f=u.getSource(i||0),c="";i!=null&&!f&&VS(c),s.push(f),l.push(u._getVersionSign())}),n?o=zq(n,s,{datasetIndex:r.componentIndex}):i!=null&&(o=[Cq(s[0])]),{sourceList:o,upstreamSignList:l}},e.prototype._isDirty=function(){if(this._dirty)return!0;for(var t=this._getUpstreamSourceManagers(),r=0;r1||r>0&&!e.noHeader;return R(e.blocks,function(i){var a=BE(i);a>=t&&(t=a+ +(n&&(!a||ym(i)&&!i.noHeader)))}),t}return 0}function Kq(e,t,r,n){var i=t.noHeader,a=Zq(BE(t)),o=[],s=t.blocks||[];Ci(!s||ye(s)),s=s||[];var l=e.orderMode;if(t.sortBlocks&&l){s=s.slice();var u={valueAsc:"asc",valueDesc:"desc"};if(Es(u,l)){var f=new Oq(u[l],null);s.sort(function(v,p){return f.evaluate(v.sortParam,p.sortParam)})}else l==="seriesDesc"&&s.reverse()}R(s,function(v,p){var m=t.valueFormatter,g=NE(v)(m?ue(ue({},e),{valueFormatter:m}):e,v,p>0?a.html:0,n);g!=null&&o.push(g)});var c=e.renderMode==="richText"?o.join(a.richText):_m(o.join(""),i?r:a.html);if(i)return c;var h=pm(t.header,"ordinal",e.useUTC),d=kE(n,e.renderMode).nameStyle;return e.renderMode==="richText"?FE(e,h,d)+a.richText+c:_m('
'+tn(h)+"
"+c,r)}function Xq(e,t,r,n){var i=e.renderMode,a=t.noName,o=t.noValue,s=!t.markerType,l=t.name,u=e.useUTC,f=t.valueFormatter||e.valueFormatter||function(b){return b=ye(b)?b:[b],Ne(b,function(x,w){return pm(x,ye(d)?d[w]:d,u)})};if(!(a&&o)){var c=s?"":e.markupStyleCreator.makeTooltipMarker(t.markerType,t.markerColor||"#333",i),h=a?"":pm(l,"ordinal",u),d=t.valueType,v=o?[]:f(t.value),p=!s||!a,m=!s&&a,g=kE(n,i),y=g.nameStyle,_=g.valueStyle;return i==="richText"?(s?"":c)+(a?"":FE(e,h,y))+(o?"":eK(e,v,p,m,_)):_m((s?"":c)+(a?"":Qq(h,!s,y))+(o?"":Jq(v,p,m,_)),r)}}function WS(e,t,r,n,i,a){if(e){var o=NE(e),s={useUTC:i,renderMode:r,orderMode:n,markupStyleCreator:t,valueFormatter:e.valueFormatter};return o(s,e,0,a)}}function Zq(e){return{html:jq[e],richText:qq[e]}}function _m(e,t){var r='
',n="margin: "+t+"px 0 0";return'
'+e+r+"
"}function Qq(e,t,r){var n=t?"margin-left:2px":"";return''+tn(e)+""}function Jq(e,t,r,n){var i=r?"10px":"20px",a=t?"float:right;margin-left:"+i:"";return e=ye(e)?e:[e],''+Ne(e,function(o){return tn(o)}).join("  ")+""}function FE(e,t,r){return e.markupStyleCreator.wrapRichTextStyle(t,r)}function eK(e,t,r,n,i){var a=[i],o=n?10:20;return r&&a.push({padding:[0,0,0,o],align:"right"}),e.markupStyleCreator.wrapRichTextStyle(ye(t)?t.join(" "):t,a)}function tK(e,t){var r=e.getData().getItemVisual(t,"style"),n=r[e.visualDrawType];return ku(n)}function $E(e,t){var r=e.get("padding");return r??(t==="richText"?[8,10]:10)}var up=function(){function e(){this.richTextStyles={},this._nextStyleNameId=K2()}return e.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},e.prototype.makeTooltipMarker=function(t,r,n){var i=n==="richText"?this._generateStyleName():null,a=Vj({color:r,type:t,renderMode:n,markerId:i});return Ee(a)?a:(this.richTextStyles[i]=a.style,a.content)},e.prototype.wrapRichTextStyle=function(t,r){var n={};ye(r)?R(r,function(a){return ue(n,a)}):ue(n,r);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},e}();function rK(e){var t=e.series,r=e.dataIndex,n=e.multipleSeries,i=t.getData(),a=i.mapDimensionsAll("defaultedTooltip"),o=a.length,s=t.getRawValue(r),l=ye(s),u=tK(t,r),f,c,h,d;if(o>1||l&&!o){var v=nK(s,t,r,a,u);f=v.inlineValues,c=v.inlineValueTypes,h=v.blocks,d=v.inlineValues[0]}else if(o){var p=i.getDimensionInfo(a[0]);d=f=Is(i,r,a[0]),c=p.type}else d=f=l?s[0]:s;var m=h0(t),g=m&&t.name||"",y=i.getName(r),_=n?g:y;return Fu("section",{header:g,noHeader:n||!m,sortParam:d,blocks:[Fu("nameValue",{markerType:"item",markerColor:u,name:_,noName:!Gn(_),value:f,valueType:c})].concat(h||[])})}function nK(e,t,r,n,i){var a=t.getData(),o=ca(e,function(c,h,d){var v=a.getDimensionInfo(d);return c=c||v&&v.tooltip!==!1&&v.displayName!=null},!1),s=[],l=[],u=[];n.length?R(n,function(c){f(Is(a,r,c),c)}):R(e,f);function f(c,h){var d=a.getDimensionInfo(h);!d||d.otherDims.tooltip===!1||(o?u.push(Fu("nameValue",{markerType:"subItem",markerColor:i,name:d.displayName,value:c,valueType:d.type})):(s.push(c),l.push(d.type)))}return{inlineValues:s,inlineValueTypes:l,blocks:u}}var Fi=Et();function tc(e,t){return e.getName(t)||e.getId(t)}var iK="__universalTransitionEnabled",Bh=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r._selectedDataIndicesMap={},r}return t.prototype.init=function(r,n,i){this.seriesIndex=this.componentIndex,this.dataTask=nu({count:oK,reset:sK}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(r,i);var a=Fi(this).sourceManager=new Yq(this);a.prepareSource();var o=this.getInitialData(r,i);US(o,this),this.dataTask.context.data=o,Fi(this).dataBeforeProcessed=o,GS(this),this._initSelectedMapFromData(o)},t.prototype.mergeDefaultAndTheme=function(r,n){var i=Nu(this),a=i?Rh(r):{},o=this.subType;Mt.hasClass(o)&&(o+="Series"),st(r,n.getTheme().get(this.subType)),st(r,this.getDefaultOption()),em(r,"label",["show"]),this.fillDataTextStyle(r.data),i&&Ds(r,a,i)},t.prototype.mergeOption=function(r,n){r=st(this.option,r,!0),this.fillDataTextStyle(r.data);var i=Nu(this);i&&Ds(this.option,r,i);var a=Fi(this).sourceManager;a.dirty(),a.prepareSource();var o=this.getInitialData(r,n);US(o,this),this.dataTask.dirty(),this.dataTask.context.data=o,Fi(this).dataBeforeProcessed=o,GS(this),this._initSelectedMapFromData(o)},t.prototype.fillDataTextStyle=function(r){if(r&&!Gr(r))for(var n=["show"],i=0;ithis.getShallow("animationThreshold")&&(n=!1),!!n},t.prototype.restoreData=function(){this.dataTask.dirty()},t.prototype.getColorFromPalette=function(r,n,i){var a=this.ecModel,o=B0.prototype.getColorFromPalette.call(this,r,n,i);return o||(o=a.getColorFromPalette(r,n,i)),o},t.prototype.coordDimToDataDim=function(r){return this.getRawData().mapDimensionsAll(r)},t.prototype.getProgressive=function(){return this.get("progressive")},t.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},t.prototype.select=function(r,n){this._innerSelect(this.getData(n),r)},t.prototype.unselect=function(r,n){var i=this.option.selectedMap;if(i){var a=this.option.selectedMode,o=this.getData(n);if(a==="series"||i==="all"){this.option.selectedMap={},this._selectedDataIndicesMap={};return}for(var s=0;s=0&&i.push(o)}return i},t.prototype.isSelected=function(r,n){var i=this.option.selectedMap;if(!i)return!1;var a=this.getData(n);return(i==="all"||i[tc(a,r)])&&!a.getItemModel(r).get(["select","disabled"])},t.prototype.isUniversalTransitionEnabled=function(){if(this[iK])return!0;var r=this.option.universalTransition;return r?r===!0?!0:r&&r.enabled:!1},t.prototype._innerSelect=function(r,n){var i,a,o=this.option,s=o.selectedMode,l=n.length;if(!(!s||!l)){if(s==="series")o.selectedMap="all";else if(s==="multiple"){Re(o.selectedMap)||(o.selectedMap={});for(var u=o.selectedMap,f=0;f0&&this._innerSelect(r,n)}},t.registerClass=function(r){return Mt.registerClass(r)},t.protoInitialize=function(){var r=t.prototype;r.type="series.__base__",r.seriesIndex=0,r.ignoreStyleOnData=!1,r.hasSymbolVisual=!1,r.defaultSymbol="circle",r.visualStyleAccessPath="itemStyle",r.visualDrawType="fill"}(),t}(Mt);ni(Bh,Dq);ni(Bh,B0);tP(Bh,Mt);function GS(e){var t=e.name;h0(e)||(e.name=aK(e)||t)}function aK(e){var t=e.getRawData(),r=t.mapDimensionsAll("seriesName"),n=[];return R(r,function(i){var a=t.getDimensionInfo(i);a.displayName&&n.push(a.displayName)}),n.join(" ")}function oK(e){return e.model.getRawData().count()}function sK(e){var t=e.model;return t.setData(t.getRawData().cloneShallow()),lK}function lK(e,t){t.outputData&&e.end>t.outputData.count()&&t.model.getRawData().cloneShallow(t.outputData)}function US(e,t){R(vU(e.CHANGABLE_METHODS,e.DOWNSAMPLE_METHODS),function(r){e.wrapMethod(r,Ot(uK,t))})}function uK(e,t){var r=bm(e);return r&&r.setOutputEnd((t||this).count()),t}function bm(e){var t=(e.ecModel||{}).scheduler,r=t&&t.getPipeline(e.uid);if(r){var n=r.currentTask;if(n){var i=n.agentStubMap;i&&(n=i.get(e.uid))}return n}}const So=Bh;var G0=function(){function e(){this.group=new Ur,this.uid=Ah("viewComponent")}return e.prototype.init=function(t,r){},e.prototype.render=function(t,r,n,i){},e.prototype.dispose=function(t,r){},e.prototype.updateView=function(t,r,n,i){},e.prototype.updateLayout=function(t,r,n,i){},e.prototype.updateVisual=function(t,r,n,i){},e.prototype.toggleBlurSeries=function(t,r,n){},e.prototype.eachRendered=function(t){var r=this.group;r&&r.traverse(t)},e}();p0(G0);Sh(G0);const Mi=G0;function HE(){var e=Et();return function(t){var r=e(t),n=t.pipelineContext,i=!!r.large,a=!!r.progressiveRender,o=r.large=!!(n&&n.large),s=r.progressiveRender=!!(n&&n.progressiveRender);return(i!==o||a!==s)&&"reset"}}var zE=Et(),fK=HE(),U0=function(){function e(){this.group=new Ur,this.uid=Ah("viewChart"),this.renderTask=nu({plan:cK,reset:dK}),this.renderTask.context={view:this}}return e.prototype.init=function(t,r){},e.prototype.render=function(t,r,n,i){},e.prototype.highlight=function(t,r,n,i){var a=t.getData(i&&i.dataType);a&&jS(a,i,"emphasis")},e.prototype.downplay=function(t,r,n,i){var a=t.getData(i&&i.dataType);a&&jS(a,i,"normal")},e.prototype.remove=function(t,r){this.group.removeAll()},e.prototype.dispose=function(t,r){},e.prototype.updateView=function(t,r,n,i){this.render(t,r,n,i)},e.prototype.updateLayout=function(t,r,n,i){this.render(t,r,n,i)},e.prototype.updateVisual=function(t,r,n,i){this.render(t,r,n,i)},e.prototype.eachRendered=function(t){P0(this.group,t)},e.markUpdateMethod=function(t,r){zE(t).updateMethod=r},e.protoInitialize=function(){var t=e.prototype;t.type="chart"}(),e}();function YS(e,t,r){e&&fm(e)&&(t==="emphasis"?am:om)(e,r)}function jS(e,t,r){var n=sf(e,t),i=t&&t.highlightKey!=null?_Y(t.highlightKey):null;n!=null?R(pr(n),function(a){YS(e.getItemGraphicEl(a),r,i)}):e.eachItemGraphicEl(function(a){YS(a,r,i)})}p0(U0);Sh(U0);function cK(e){return fK(e.model)}function dK(e){var t=e.model,r=e.ecModel,n=e.api,i=e.payload,a=t.pipelineContext.progressiveRender,o=e.view,s=i&&zE(i).updateMethod,l=a?"incrementalPrepareRender":s&&o[s]?s:"render";return l!=="render"&&o[l](t,r,n,i),hK[l]}var hK={incrementalPrepareRender:{progress:function(e,t){t.view.incrementalRender(e,t.model,t.ecModel,t.api,t.payload)}},render:{forceFirstProgress:!0,progress:function(e,t){t.view.render(t.model,t.ecModel,t.api,t.payload)}}};const ho=U0;var kd="\0__throttleOriginMethod",qS="\0__throttleRate",KS="\0__throttleType";function Y0(e,t,r){var n,i=0,a=0,o=null,s,l,u,f;t=t||0;function c(){a=new Date().getTime(),o=null,e.apply(l,u||[])}var h=function(){for(var d=[],v=0;v=0?c():o=setTimeout(c,-s),i=n};return h.clear=function(){o&&(clearTimeout(o),o=null)},h.debounceNextCall=function(d){f=d},h}function VE(e,t,r,n){var i=e[t];if(i){var a=i[kd]||i,o=i[KS],s=i[qS];if(s!==r||o!==n){if(r==null||!n)return e[t]=a;i=e[t]=Y0(a,r,n==="debounce"),i[kd]=a,i[KS]=n,i[qS]=r}return i}}function wm(e,t){var r=e[t];r&&r[kd]&&(r.clear&&r.clear(),e[t]=r[kd])}var XS=Et(),ZS={itemStyle:Du(tE,!0),lineStyle:Du(eE,!0)},vK={lineStyle:"stroke",itemStyle:"fill"};function WE(e,t){var r=e.visualStyleMapper||ZS[t];return r||(console.warn("Unknown style type '"+t+"'."),ZS.itemStyle)}function GE(e,t){var r=e.visualDrawType||vK[t];return r||(console.warn("Unknown style type '"+t+"'."),"fill")}var pK={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){var r=e.getData(),n=e.visualStyleAccessPath||"itemStyle",i=e.getModel(n),a=WE(e,n),o=a(i),s=i.getShallow("decal");s&&(r.setVisual("decal",s),s.dirty=!0);var l=GE(e,n),u=o[l],f=Ye(u)?u:null,c=o.fill==="auto"||o.stroke==="auto";if(!o[l]||f||c){var h=e.getColorFromPalette(e.name,null,t.getSeriesCount());o[l]||(o[l]=h,r.setVisual("colorFromPalette",!0)),o.fill=o.fill==="auto"||Ye(o.fill)?h:o.fill,o.stroke=o.stroke==="auto"||Ye(o.stroke)?h:o.stroke}if(r.setVisual("style",o),r.setVisual("drawType",l),!t.isSeriesFiltered(e)&&f)return r.setVisual("colorFromPalette",!1),{dataEach:function(d,v){var p=e.getDataParams(v),m=ue({},o);m[l]=f(p),d.setItemVisual(v,"style",m)}}}},dl=new sr,gK={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){if(!(e.ignoreStyleOnData||t.isSeriesFiltered(e))){var r=e.getData(),n=e.visualStyleAccessPath||"itemStyle",i=WE(e,n),a=r.getVisual("drawType");return{dataEach:r.hasItemOption?function(o,s){var l=o.getRawDataItem(s);if(l&&l[n]){dl.option=l[n];var u=i(dl),f=o.ensureUniqueItemVisual(s,"style");ue(f,u),dl.option.decal&&(o.setItemVisual(s,"decal",dl.option.decal),dl.option.decal.dirty=!0),a in u&&o.setItemVisual(s,"colorFromPalette",!1)}}:null}}}},mK={performRawSeries:!0,overallReset:function(e){var t=je();e.eachSeries(function(r){var n=r.getColorBy();if(!r.isColorBySeries()){var i=r.type+"-"+n,a=t.get(i);a||(a={},t.set(i,a)),XS(r).scope=a}}),e.eachSeries(function(r){if(!(r.isColorBySeries()||e.isSeriesFiltered(r))){var n=r.getRawData(),i={},a=r.getData(),o=XS(r).scope,s=r.visualStyleAccessPath||"itemStyle",l=GE(r,s);a.each(function(u){var f=a.getRawIndex(u);i[f]=u}),n.each(function(u){var f=i[u],c=a.getItemVisual(f,"colorFromPalette");if(c){var h=a.ensureUniqueItemVisual(f,"style"),d=n.getName(u)||u+"",v=n.count();h[l]=r.getColorFromPalette(d,o,v)}})}})}},rc=Math.PI;function yK(e,t){t=t||{},ht(t,{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var r=new Ur,n=new Gt({style:{fill:t.maskColor},zlevel:t.zlevel,z:1e4});r.add(n);var i=new mr({style:{text:t.text,fill:t.textColor,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,fontFamily:t.fontFamily},zlevel:t.zlevel,z:10001}),a=new Gt({style:{fill:"none"},textContent:i,textConfig:{position:"right",distance:10},zlevel:t.zlevel,z:10001});r.add(a);var o;return t.showSpinner&&(o=new S0({shape:{startAngle:-rc/2,endAngle:-rc/2+.1,r:t.spinnerRadius},style:{stroke:t.color,lineCap:"round",lineWidth:t.lineWidth},zlevel:t.zlevel,z:10001}),o.animateShape(!0).when(1e3,{endAngle:rc*3/2}).start("circularInOut"),o.animateShape(!0).when(1e3,{startAngle:rc*3/2}).delay(300).start("circularInOut"),r.add(o)),r.resize=function(){var s=i.getBoundingRect().width,l=t.showSpinner?t.spinnerRadius:0,u=(e.getWidth()-l*2-(t.showSpinner&&s?10:0)-s)/2-(t.showSpinner&&s?0:5+s/2)+(t.showSpinner?0:s/2)+(s?0:l),f=e.getHeight()/2;t.showSpinner&&o.setShape({cx:u,cy:f}),a.setShape({x:u-l,y:f-l,width:l*2,height:l*2}),n.setShape({x:0,y:0,width:e.getWidth(),height:e.getHeight()})},r.resize(),r}var UE=function(){function e(t,r,n,i){this._stageTaskMap=je(),this.ecInstance=t,this.api=r,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}return e.prototype.restoreData=function(t,r){t.restoreData(r),this._stageTaskMap.each(function(n){var i=n.overallTask;i&&i.dirty()})},e.prototype.getPerformArgs=function(t,r){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,a=!r&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex,o=a?n.step:null,s=i&&i.modDataCount,l=s!=null?Math.ceil(s/o):null;return{step:o,modBy:l,modDataCount:s}}},e.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},e.prototype.updateStreamModes=function(t,r){var n=this._pipelineMap.get(t.uid),i=t.getData(),a=i.count(),o=n.progressiveEnabled&&r.incrementalPrepareRender&&a>=n.threshold,s=t.get("large")&&a>=t.get("largeThreshold"),l=t.get("progressiveChunkMode")==="mod"?a:null;t.pipelineContext=n.context={progressiveRender:o,modDataCount:l,large:s}},e.prototype.restorePipelines=function(t){var r=this,n=r._pipelineMap=je();t.eachSeries(function(i){var a=i.getProgressive(),o=i.uid;n.set(o,{id:o,head:null,tail:null,threshold:i.getProgressiveThreshold(),progressiveEnabled:a&&!(i.preventIncremental&&i.preventIncremental()),blockIndex:-1,step:Math.round(a||700),count:0}),r._pipe(i,i.dataTask)})},e.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,r=this.api.getModel(),n=this.api;R(this._allHandlers,function(i){var a=t.get(i.uid)||t.set(i.uid,{}),o="";Ci(!(i.reset&&i.overallReset),o),i.reset&&this._createSeriesStageTask(i,a,r,n),i.overallReset&&this._createOverallStageTask(i,a,r,n)},this)},e.prototype.prepareView=function(t,r,n,i){var a=t.renderTask,o=a.context;o.model=r,o.ecModel=n,o.api=i,a.__block=!t.incrementalPrepareRender,this._pipe(r,a)},e.prototype.performDataProcessorTasks=function(t,r){this._performStageTasks(this._dataProcessorHandlers,t,r,{block:!0})},e.prototype.performVisualTasks=function(t,r,n){this._performStageTasks(this._visualHandlers,t,r,n)},e.prototype._performStageTasks=function(t,r,n,i){i=i||{};var a=!1,o=this;R(t,function(l,u){if(!(i.visualType&&i.visualType!==l.visualType)){var f=o._stageTaskMap.get(l.uid),c=f.seriesTaskMap,h=f.overallTask;if(h){var d,v=h.agentStubMap;v.each(function(m){s(i,m)&&(m.dirty(),d=!0)}),d&&h.dirty(),o.updatePayload(h,n);var p=o.getPerformArgs(h,i.block);v.each(function(m){m.perform(p)}),h.perform(p)&&(a=!0)}else c&&c.each(function(m,g){s(i,m)&&m.dirty();var y=o.getPerformArgs(m,i.block);y.skip=!l.performRawSeries&&r.isSeriesFiltered(m.context.model),o.updatePayload(m,n),m.perform(y)&&(a=!0)})}});function s(l,u){return l.setDirty&&(!l.dirtyMap||l.dirtyMap.get(u.__pipeline.id))}this.unfinished=a||this.unfinished},e.prototype.performSeriesTasks=function(t){var r;t.eachSeries(function(n){r=n.dataTask.perform()||r}),this.unfinished=r||this.unfinished},e.prototype.plan=function(){this._pipelineMap.each(function(t){var r=t.tail;do{if(r.__block){t.blockIndex=r.__idxInPipeline;break}r=r.getUpstream()}while(r)})},e.prototype.updatePayload=function(t,r){r!=="remain"&&(t.context.payload=r)},e.prototype._createSeriesStageTask=function(t,r,n,i){var a=this,o=r.seriesTaskMap,s=r.seriesTaskMap=je(),l=t.seriesType,u=t.getTargetSeries;t.createOnAllSeries?n.eachRawSeries(f):l?n.eachRawSeriesByType(l,f):u&&u(n,i).each(f);function f(c){var h=c.uid,d=s.set(h,o&&o.get(h)||nu({plan:xK,reset:CK,count:MK}));d.context={model:c,ecModel:n,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:a},a._pipe(c,d)}},e.prototype._createOverallStageTask=function(t,r,n,i){var a=this,o=r.overallTask=r.overallTask||nu({reset:_K});o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:a};var s=o.agentStubMap,l=o.agentStubMap=je(),u=t.seriesType,f=t.getTargetSeries,c=!0,h=!1,d="";Ci(!t.createOnAllSeries,d),u?n.eachRawSeriesByType(u,v):f?f(n,i).each(v):(c=!1,R(n.getSeries(),v));function v(p){var m=p.uid,g=l.set(m,s&&s.get(m)||(h=!0,nu({reset:bK,onDirty:SK})));g.context={model:p,overallProgress:c},g.agent=o,g.__block=c,a._pipe(p,g)}h&&o.dirty()},e.prototype._pipe=function(t,r){var n=t.uid,i=this._pipelineMap.get(n);!i.head&&(i.head=r),i.tail&&i.tail.pipe(r),i.tail=r,r.__idxInPipeline=i.count++,r.__pipeline=i},e.wrapStageHandler=function(t,r){return Ye(t)&&(t={overallReset:t,seriesType:AK(t)}),t.uid=Ah("stageHandler"),r&&(t.visualType=r),t},e}();function _K(e){e.overallReset(e.ecModel,e.api,e.payload)}function bK(e){return e.overallProgress&&wK}function wK(){this.agent.dirty(),this.getDownstream().dirty()}function SK(){this.agent&&this.agent.dirty()}function xK(e){return e.plan?e.plan(e.model,e.ecModel,e.api,e.payload):null}function CK(e){e.useClearVisual&&e.data.clearAllVisual();var t=e.resetDefines=pr(e.reset(e.model,e.ecModel,e.api,e.payload));return t.length>1?Ne(t,function(r,n){return YE(n)}):TK}var TK=YE(0);function YE(e){return function(t,r){var n=r.data,i=r.resetDefines[e];if(i&&i.dataEach)for(var a=t.start;a0&&d===u.length-h.length){var v=u.slice(0,d);v!=="data"&&(r.mainType=v,r[h.toLowerCase()]=l,f=!0)}}s.hasOwnProperty(u)&&(n[u]=l,f=!0),f||(i[u]=l)})}return{cptQuery:r,dataQuery:n,otherQuery:i}},e.prototype.filter=function(t,r){var n=this.eventInfo;if(!n)return!0;var i=n.targetEl,a=n.packedEvent,o=n.model,s=n.view;if(!o||!s)return!0;var l=r.cptQuery,u=r.dataQuery;return f(l,o,"mainType")&&f(l,o,"subType")&&f(l,o,"index","componentIndex")&&f(l,o,"name")&&f(l,o,"id")&&f(u,a,"name")&&f(u,a,"dataIndex")&&f(u,a,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(t,r.otherQuery,i,a));function f(c,h,d,v){return c[d]==null||h[v||d]===c[d]}},e.prototype.afterTrigger=function(){this.eventInfo=null},e}(),Sm=["symbol","symbolSize","symbolRotate","symbolOffset"],tx=Sm.concat(["symbolKeepAspect"]),DK={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){var r=e.getData();if(e.legendIcon&&r.setVisual("legendIcon",e.legendIcon),!e.hasSymbolVisual)return;for(var n={},i={},a=!1,o=0;o=0&&ro(l)?l:.5;var u=e.createRadialGradient(o,s,0,o,s,l);return u}function Cm(e,t,r){for(var n=t.type==="radial"?XK(e,t,r):KK(e,t,r),i=t.colorStops,a=0;a0)?null:e==="dashed"?[4*t,2*t]:e==="dotted"?[t]:Tt(e)?[e]:ye(e)?e:null}function XE(e){var t=e.style,r=t.lineDash&&t.lineWidth>0&&QK(t.lineDash,t.lineWidth),n=t.lineDashOffset;if(r){var i=t.strokeNoScale&&e.getLineScale?e.getLineScale():1;i&&i!==1&&(r=Ne(r,function(a){return a/i}),n/=i)}return[r,n]}var JK=new bo(!0);function Bd(e){var t=e.stroke;return!(t==null||t==="none"||!(e.lineWidth>0))}function rx(e){return typeof e=="string"&&e!=="none"}function Fd(e){var t=e.fill;return t!=null&&t!=="none"}function nx(e,t){if(t.fillOpacity!=null&&t.fillOpacity!==1){var r=e.globalAlpha;e.globalAlpha=t.fillOpacity*t.opacity,e.fill(),e.globalAlpha=r}else e.fill()}function ix(e,t){if(t.strokeOpacity!=null&&t.strokeOpacity!==1){var r=e.globalAlpha;e.globalAlpha=t.strokeOpacity*t.opacity,e.stroke(),e.globalAlpha=r}else e.stroke()}function Tm(e,t,r){var n=rP(t.image,t.__image,r);if(xh(n)){var i=e.createPattern(n,t.repeat||"repeat");if(typeof DOMMatrix=="function"&&i&&i.setTransform){var a=new DOMMatrix;a.translateSelf(t.x||0,t.y||0),a.rotateSelf(0,0,(t.rotation||0)*pU),a.scaleSelf(t.scaleX||1,t.scaleY||1),i.setTransform(a)}return i}}function eX(e,t,r,n){var i,a=Bd(r),o=Fd(r),s=r.strokePercent,l=s<1,u=!t.path;(!t.silent||l)&&u&&t.createPathProxy();var f=t.path||JK,c=t.__dirty;if(!n){var h=r.fill,d=r.stroke,v=o&&!!h.colorStops,p=a&&!!d.colorStops,m=o&&!!h.image,g=a&&!!d.image,y=void 0,_=void 0,b=void 0,x=void 0,w=void 0;(v||p)&&(w=t.getBoundingRect()),v&&(y=c?Cm(e,h,w):t.__canvasFillGradient,t.__canvasFillGradient=y),p&&(_=c?Cm(e,d,w):t.__canvasStrokeGradient,t.__canvasStrokeGradient=_),m&&(b=c||!t.__canvasFillPattern?Tm(e,h,t):t.__canvasFillPattern,t.__canvasFillPattern=b),g&&(x=c||!t.__canvasStrokePattern?Tm(e,d,t):t.__canvasStrokePattern,t.__canvasStrokePattern=b),v?e.fillStyle=y:m&&(b?e.fillStyle=b:o=!1),p?e.strokeStyle=_:g&&(x?e.strokeStyle=x:a=!1)}var S=t.getGlobalScale();f.setScale(S[0],S[1],t.segmentIgnoreThreshold);var C,M;e.setLineDash&&r.lineDash&&(i=XE(t),C=i[0],M=i[1]);var A=!0;(u||c&Xo)&&(f.setDPR(e.dpr),l?f.setContext(null):(f.setContext(e),A=!1),f.reset(),t.buildPath(f,t.shape,n),f.toStatic(),t.pathUpdated()),A&&f.rebuildPath(e,l?s:1),C&&(e.setLineDash(C),e.lineDashOffset=M),n||(r.strokeFirst?(a&&ix(e,r),o&&nx(e,r)):(o&&nx(e,r),a&&ix(e,r))),C&&e.setLineDash([])}function tX(e,t,r){var n=t.__image=rP(r.image,t.__image,t,t.onload);if(!(!n||!xh(n))){var i=r.x||0,a=r.y||0,o=t.getWidth(),s=t.getHeight(),l=n.width/n.height;if(o==null&&s!=null?o=s*l:s==null&&o!=null?s=o/l:o==null&&s==null&&(o=n.width,s=n.height),r.sWidth&&r.sHeight){var u=r.sx||0,f=r.sy||0;e.drawImage(n,u,f,r.sWidth,r.sHeight,i,a,o,s)}else if(r.sx&&r.sy){var u=r.sx,f=r.sy,c=o-u,h=s-f;e.drawImage(n,u,f,c,h,i,a,o,s)}else e.drawImage(n,i,a,o,s)}}function rX(e,t,r){var n,i=r.text;if(i!=null&&(i+=""),i){e.font=r.font||_o,e.textAlign=r.textAlign,e.textBaseline=r.textBaseline;var a=void 0,o=void 0;e.setLineDash&&r.lineDash&&(n=XE(t),a=n[0],o=n[1]),a&&(e.setLineDash(a),e.lineDashOffset=o),r.strokeFirst?(Bd(r)&&e.strokeText(i,r.x,r.y),Fd(r)&&e.fillText(i,r.x,r.y)):(Fd(r)&&e.fillText(i,r.x,r.y),Bd(r)&&e.strokeText(i,r.x,r.y)),a&&e.setLineDash([])}}var ax=["shadowBlur","shadowOffsetX","shadowOffsetY"],ox=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function ZE(e,t,r,n,i){var a=!1;if(!n&&(r=r||{},t===r))return!1;if(n||t.opacity!==r.opacity){Tr(e,i),a=!0;var o=Math.max(Math.min(t.opacity,1),0);e.globalAlpha=isNaN(o)?fo.opacity:o}(n||t.blend!==r.blend)&&(a||(Tr(e,i),a=!0),e.globalCompositeOperation=t.blend||fo.blend);for(var s=0;s0&&r.unfinished);r.unfinished||this._zr.flush()}}},t.prototype.getDom=function(){return this._dom},t.prototype.getId=function(){return this.id},t.prototype.getZr=function(){return this._zr},t.prototype.isSSR=function(){return this._ssr},t.prototype.setOption=function(r,n,i){if(!this[nr]){if(this._disposed){this.id;return}var a,o,s;if(Re(n)&&(i=n.lazyUpdate,a=n.silent,o=n.replaceMerge,s=n.transition,n=n.notMerge),this[nr]=!0,!this._model||n){var l=new vq(this._api),u=this._theme,f=this._model=new F0;f.scheduler=this._scheduler,f.ssr=this._ssr,f.init(null,null,null,u,this._locale,l)}this._model.setOption(r,{replaceMerge:o},Pm);var c={seriesTransition:s,optionChanged:!0};if(i)this[br]={silent:a,updateParams:c},this[nr]=!1,this.getZr().wakeUp();else{try{Uo(this),$i.update.call(this,null,c)}catch(h){throw this[br]=null,this[nr]=!1,h}this._ssr||this._zr.flush(),this[br]=null,this[nr]=!1,hl.call(this,a),vl.call(this,a)}}},t.prototype.setTheme=function(){},t.prototype.getModel=function(){return this._model},t.prototype.getOption=function(){return this._model&&this._model.getOption()},t.prototype.getWidth=function(){return this._zr.getWidth()},t.prototype.getHeight=function(){return this._zr.getHeight()},t.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||He.hasGlobalWindow&&window.devicePixelRatio||1},t.prototype.getRenderedCanvas=function(r){return this.renderToCanvas(r)},t.prototype.renderToCanvas=function(r){r=r||{};var n=this._zr.painter;return n.getRenderedCanvas({backgroundColor:r.backgroundColor||this._model.get("backgroundColor"),pixelRatio:r.pixelRatio||this.getDevicePixelRatio()})},t.prototype.renderToSVGString=function(r){r=r||{};var n=this._zr.painter;return n.renderToString({useViewBox:r.useViewBox})},t.prototype.getSvgDataURL=function(){if(He.svgSupported){var r=this._zr,n=r.storage.getDisplayList();return R(n,function(i){i.stopAnimation(null,!0)}),r.painter.toDataURL()}},t.prototype.getDataURL=function(r){if(this._disposed){this.id;return}r=r||{};var n=r.excludeComponents,i=this._model,a=[],o=this;R(n,function(l){i.eachComponent({mainType:l},function(u){var f=o._componentsMap[u.__viewId];f.group.ignore||(a.push(f),f.group.ignore=!0)})});var s=this._zr.painter.getType()==="svg"?this.getSvgDataURL():this.renderToCanvas(r).toDataURL("image/"+(r&&r.type||"png"));return R(a,function(l){l.group.ignore=!1}),s},t.prototype.getConnectedDataURL=function(r){if(this._disposed){this.id;return}var n=r.type==="svg",i=this.group,a=Math.min,o=Math.max,s=1/0;if(Sx[i]){var l=s,u=s,f=-s,c=-s,h=[],d=r&&r.pixelRatio||this.getDevicePixelRatio();R(au,function(_,b){if(_.group===i){var x=n?_.getZr().painter.getSvgDom().innerHTML:_.renderToCanvas(tt(r)),w=_.getDom().getBoundingClientRect();l=a(w.left,l),u=a(w.top,u),f=o(w.right,f),c=o(w.bottom,c),h.push({dom:x,left:w.left,top:w.top})}}),l*=d,u*=d,f*=d,c*=d;var v=f-l,p=c-u,m=Vs.createCanvas(),g=Tw(m,{renderer:n?"svg":"canvas"});if(g.resize({width:v,height:p}),n){var y="";return R(h,function(_){var b=_.left-l,x=_.top-u;y+=''+_.dom+""}),g.painter.getSvgRoot().innerHTML=y,r.connectedBackgroundColor&&g.painter.setBackgroundColor(r.connectedBackgroundColor),g.refreshImmediately(),g.painter.toDataURL()}else return r.connectedBackgroundColor&&g.add(new Gt({shape:{x:0,y:0,width:v,height:p},style:{fill:r.connectedBackgroundColor}})),R(h,function(_){var b=new Gs({style:{x:_.left*d-l,y:_.top*d-u,image:_.dom}});g.add(b)}),g.refreshImmediately(),m.toDataURL("image/"+(r&&r.type||"png"))}else return this.getDataURL(r)},t.prototype.convertToPixel=function(r,n){return vp(this,"convertToPixel",r,n)},t.prototype.convertFromPixel=function(r,n){return vp(this,"convertFromPixel",r,n)},t.prototype.containPixel=function(r,n){if(this._disposed){this.id;return}var i=this._model,a,o=Bv(i,r);return R(o,function(s,l){l.indexOf("Models")>=0&&R(s,function(u){var f=u.coordinateSystem;if(f&&f.containPoint)a=a||!!f.containPoint(n);else if(l==="seriesModels"){var c=this._chartsMap[u.__viewId];c&&c.containPoint&&(a=a||c.containPoint(n,u))}},this)},this),!!a},t.prototype.getVisual=function(r,n){var i=this._model,a=Bv(i,r,{defaultMainType:"series"}),o=a.seriesModel,s=o.getData(),l=a.hasOwnProperty("dataIndexInside")?a.dataIndexInside:a.hasOwnProperty("dataIndex")?s.indexOfRawIndex(a.dataIndex):null;return l!=null?OK(s,l,n):RK(s,n)},t.prototype.getViewOfComponentModel=function(r){return this._componentsMap[r.__viewId]},t.prototype.getViewOfSeriesModel=function(r){return this._chartsMap[r.__viewId]},t.prototype._initEvents=function(){var r=this;R(PX,function(n){var i=function(a){var o=r.getModel(),s=a.target,l,u=n==="globalout";if(u?l={}:s&&Ll(s,function(v){var p=dt(v);if(p&&p.dataIndex!=null){var m=p.dataModel||o.getSeriesByIndex(p.seriesIndex);return l=m&&m.getDataParams(p.dataIndex,p.dataType,s)||{},!0}else if(p.eventData)return l=ue({},p.eventData),!0},!0),l){var f=l.componentType,c=l.componentIndex;(f==="markLine"||f==="markPoint"||f==="markArea")&&(f="series",c=l.seriesIndex);var h=f&&c!=null&&o.getComponent(f,c),d=h&&r[h.mainType==="series"?"_chartsMap":"_componentsMap"][h.__viewId];l.event=a,l.type=n,r._$eventProcessor.eventInfo={targetEl:s,packedEvent:l,model:h,view:d},r.trigger(n,l)}};i.zrEventfulCallAtLast=!0,r._zr.on(n,i,r)}),R(iu,function(n,i){r._messageCenter.on(i,function(a){this.trigger(i,a)},r)}),R(["selectchanged"],function(n){r._messageCenter.on(n,function(i){this.trigger(n,i)},r)}),NK(this._messageCenter,this,this._api)},t.prototype.isDisposed=function(){return this._disposed},t.prototype.clear=function(){if(this._disposed){this.id;return}this.setOption({series:[]},!0)},t.prototype.dispose=function(){if(this._disposed){this.id;return}this._disposed=!0;var r=this.getDom();r&&J2(this.getDom(),X0,"");var n=this,i=n._api,a=n._model;R(n._componentsViews,function(o){o.dispose(a,i)}),R(n._chartsViews,function(o){o.dispose(a,i)}),n._zr.dispose(),n._dom=n._model=n._chartsMap=n._componentsMap=n._chartsViews=n._componentsViews=n._scheduler=n._api=n._zr=n._throttledZrFlush=n._theme=n._coordSysMgr=n._messageCenter=null,delete au[n.id]},t.prototype.resize=function(r){if(!this[nr]){if(this._disposed){this.id;return}this._zr.resize(r);var n=this._model;if(this._loadingFX&&this._loadingFX.resize(),!!n){var i=n.resetOption("media"),a=r&&r.silent;this[br]&&(a==null&&(a=this[br].silent),i=!0,this[br]=null),this[nr]=!0;try{i&&Uo(this),$i.update.call(this,{type:"resize",animation:ue({duration:0},r&&r.animation)})}catch(o){throw this[nr]=!1,o}this[nr]=!1,hl.call(this,a),vl.call(this,a)}}},t.prototype.showLoading=function(r,n){if(this._disposed){this.id;return}if(Re(r)&&(n=r,r=""),r=r||"default",this.hideLoading(),!!Em[r]){var i=Em[r](this._api,n),a=this._zr;this._loadingFX=i,a.add(i)}},t.prototype.hideLoading=function(){if(this._disposed){this.id;return}this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},t.prototype.makeActionFromEvent=function(r){var n=ue({},r);return n.type=iu[r.type],n},t.prototype.dispatchAction=function(r,n){if(this._disposed){this.id;return}if(Re(n)||(n={silent:!!n}),!!$d[r.type]&&this._model){if(this[nr]){this._pendingActions.push(r);return}var i=n.silent;gp.call(this,r,i);var a=n.flush;a?this._zr.flush():a!==!1&&He.browser.weChat&&this._throttledZrFlush(),hl.call(this,i),vl.call(this,i)}},t.prototype.updateLabelLayout=function(){_n.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},t.prototype.appendData=function(r){if(this._disposed){this.id;return}var n=r.seriesIndex,i=this.getModel(),a=i.getSeriesByIndex(n);a.appendData(r),this._scheduler.unfinished=!0,this.getZr().wakeUp()},t.internalField=function(){Uo=function(c){var h=c._scheduler;h.restorePipelines(c._model),h.prepareStageTasks(),hp(c,!0),hp(c,!1),h.plan()},hp=function(c,h){for(var d=c._model,v=c._scheduler,p=h?c._componentsViews:c._chartsViews,m=h?c._componentsMap:c._chartsMap,g=c._zr,y=c._api,_=0;_h.get("hoverLayerThreshold")&&!He.node&&!He.worker&&h.eachSeries(function(m){if(!m.preventUsingHoverLayer){var g=c._chartsMap[m.__viewId];g.__alive&&g.eachRendered(function(y){y.states.emphasis&&(y.states.emphasis.hoverLayer=!0)})}})}function o(c,h){var d=c.get("blendMode")||null;h.eachRendered(function(v){v.isGroup||(v.style.blend=d)})}function s(c,h){if(!c.preventAutoZ){var d=c.get("z")||0,v=c.get("zlevel")||0;h.eachRendered(function(p){return l(p,d,v,-1/0),!0})}}function l(c,h,d,v){var p=c.getTextContent(),m=c.getTextGuideLine(),g=c.isGroup;if(g)for(var y=c.childrenRef(),_=0;_0?{duration:p,delay:d.get("delay"),easing:d.get("easing")}:null;h.eachRendered(function(g){if(g.states&&g.states.emphasis){if(fs(g))return;if(g instanceof vt&&bY(g),g.__dirty){var y=g.prevStates;y&&g.useStates(y)}if(v){g.stateTransition=m;var _=g.getTextContent(),b=g.getTextGuideLine();_&&(_.stateTransition=m),b&&(b.stateTransition=m)}g.__dirty&&i(g)}})}_x=function(c){return new(function(h){ge(d,h);function d(){return h!==null&&h.apply(this,arguments)||this}return d.prototype.getCoordinateSystems=function(){return c._coordSysMgr.getCoordinateSystems()},d.prototype.getComponentByElement=function(v){for(;v;){var p=v.__ecComponentInfo;if(p!=null)return c._model.getComponent(p.mainType,p.index);v=v.parent}},d.prototype.enterEmphasis=function(v,p){am(v,p),qr(c)},d.prototype.leaveEmphasis=function(v,p){om(v,p),qr(c)},d.prototype.enterBlur=function(v){fY(v),qr(c)},d.prototype.leaveBlur=function(v){_P(v),qr(c)},d.prototype.enterSelect=function(v){bP(v),qr(c)},d.prototype.leaveSelect=function(v){wP(v),qr(c)},d.prototype.getModel=function(){return c.getModel()},d.prototype.getViewOfComponentModel=function(v){return c.getViewOfComponentModel(v)},d.prototype.getViewOfSeriesModel=function(v){return c.getViewOfSeriesModel(v)},d}(SE))(c)},dL=function(c){function h(d,v){for(var p=0;p=0)){xx.push(r);var a=UE.wrapStageHandler(r,i);a.__prio=t,a.__raw=r,e.push(a)}}function yL(e,t){Em[e]=t}function kX(e,t,r){var n=hX("registerMap");n&&n(e,t,r)}var NX=Hq;Do(q0,pK);Do(Fh,gK);Do(Fh,mK);Do(q0,DK);Do(Fh,IK);Do(oL,fX);gL(CE);mL(gX,Sq);yL("default",yK);js({type:co,event:co,update:co},Er);js({type:Uc,event:Uc,update:Uc},Er);js({type:Ql,event:Ql,update:Ql},Er);js({type:Yc,event:Yc,update:Yc},Er);js({type:Jl,event:Jl,update:Jl},Er);pL("light",PK);pL("dark",EK);function pl(e){return e==null?0:e.length||1}function Cx(e){return e}var BX=function(){function e(t,r,n,i,a,o){this._old=t,this._new=r,this._oldKeyGetter=n||Cx,this._newKeyGetter=i||Cx,this.context=a,this._diffModeMultiple=o==="multiple"}return e.prototype.add=function(t){return this._add=t,this},e.prototype.update=function(t){return this._update=t,this},e.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},e.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},e.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},e.prototype.remove=function(t){return this._remove=t,this},e.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},e.prototype._executeOneToOne=function(){var t=this._old,r=this._new,n={},i=new Array(t.length),a=new Array(r.length);this._initIndexMap(t,null,i,"_oldKeyGetter"),this._initIndexMap(r,n,a,"_newKeyGetter");for(var o=0;o1){var f=l.shift();l.length===1&&(n[s]=l[0]),this._update&&this._update(f,o)}else u===1?(n[s]=null,this._update&&this._update(l,o)):this._remove&&this._remove(o)}this._performRestAdd(a,n)},e.prototype._executeMultiple=function(){var t=this._old,r=this._new,n={},i={},a=[],o=[];this._initIndexMap(t,n,a,"_oldKeyGetter"),this._initIndexMap(r,i,o,"_newKeyGetter");for(var s=0;s1&&h===1)this._updateManyToOne&&this._updateManyToOne(f,u),i[l]=null;else if(c===1&&h>1)this._updateOneToMany&&this._updateOneToMany(f,u),i[l]=null;else if(c===1&&h===1)this._update&&this._update(f,u),i[l]=null;else if(c>1&&h>1)this._updateManyToMany&&this._updateManyToMany(f,u),i[l]=null;else if(c>1)for(var d=0;d1)for(var s=0;s30}var gl=Re,Hi=Ne,UX=typeof Int32Array>"u"?Array:Int32Array,YX="e\0\0",Tx=-1,jX=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],qX=["_approximateExtent"],Mx,lc,ml,yl,_p,uc,bp,CL=function(){function e(t,r){this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","lttbDownSample"];var n,i=!1;bL(t)?(n=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(i=!0,n=t),n=n||["x","y"];for(var a={},o=[],s={},l=!1,u={},f=0;f=r)){var n=this._store,i=n.getProvider();this._updateOrdinalMeta();var a=this._nameList,o=this._idList,s=i.getSource().sourceFormat,l=s===hn;if(l&&!i.pure)for(var u=[],f=t;f0},e.prototype.ensureUniqueItemVisual=function(t,r){var n=this._itemVisuals,i=n[t];i||(i=n[t]={});var a=i[r];return a==null&&(a=this.getVisual(r),ye(a)?a=a.slice():gl(a)&&(a=ue({},a)),i[r]=a),a},e.prototype.setItemVisual=function(t,r,n){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,gl(r)?ue(i,r):i[r]=n},e.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},e.prototype.setLayout=function(t,r){gl(t)?ue(this._layout,t):this._layout[t]=r},e.prototype.getLayout=function(t){return this._layout[t]},e.prototype.getItemLayout=function(t){return this._itemLayouts[t]},e.prototype.setItemLayout=function(t,r,n){this._itemLayouts[t]=n?ue(this._itemLayouts[t]||{},r):r},e.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},e.prototype.setItemGraphicEl=function(t,r){var n=this.hostModel&&this.hostModel.seriesIndex;eY(n,this.dataType,t,r),this._graphicEls[t]=r},e.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},e.prototype.eachItemGraphicEl=function(t,r){R(this._graphicEls,function(n,i){n&&t&&t.call(r,n,i)})},e.prototype.cloneShallow=function(t){return t||(t=new e(this._schema?this._schema:Hi(this.dimensions,this._getDimInfo,this),this.hostModel)),_p(t,this),t._store=this._store,t},e.prototype.wrapMethod=function(t,r){var n=this[t];Ye(n)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var i=n.apply(this,arguments);return r.apply(this,[i].concat(n0(arguments)))})},e.internalField=function(){Mx=function(t){var r=t._invertedIndicesMap;R(r,function(n,i){var a=t._dimInfos[i],o=a.ordinalMeta,s=t._store;if(o){n=r[i]=new UX(o.categories.length);for(var l=0;l1&&(l+="__ec__"+f),i[r]=l}}}(),e}();function TL(e,t){H0(e)||(e=z0(e)),t=t||{};var r=t.coordDimensions||[],n=t.dimensionsDefine||e.dimensionsDefine||[],i=je(),a=[],o=XX(e,r,n,t.dimensionsCount),s=t.canOmitUnusedDimensions&&xL(o),l=n===e.dimensionsDefine,u=l?SL(e):wL(n),f=t.encodeDefine;!f&&t.encodeDefaulter&&(f=t.encodeDefaulter(e,o));for(var c=je(f),h=new IE(o),d=0;d0&&(n.name=i+(a-1)),a++,t.set(i,a)}}function XX(e,t,r,n){var i=Math.max(e.dimensionsDetectedCount||1,t.length,r.length,n||0);return R(t,function(a){var o;Re(a)&&(o=a.dimsDef)&&(i=Math.max(i,o.length))}),i}function ZX(e,t,r){if(r||t.hasKey(e)){for(var n=0;t.hasKey(e+n);)n++;e+=n}return t.set(e,!0),e}var QX=function(){function e(t){this.coordSysDims=[],this.axisMap=je(),this.categoryAxisMap=je(),this.coordSysName=t}return e}();function JX(e){var t=e.get("coordinateSystem"),r=new QX(t),n=eZ[t];if(n)return n(e,r,r.axisMap,r.categoryAxisMap),r}var eZ={cartesian2d:function(e,t,r,n){var i=e.getReferringComponents("xAxis",Tn).models[0],a=e.getReferringComponents("yAxis",Tn).models[0];t.coordSysDims=["x","y"],r.set("x",i),r.set("y",a),Yo(i)&&(n.set("x",i),t.firstCategoryDimIndex=0),Yo(a)&&(n.set("y",a),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},singleAxis:function(e,t,r,n){var i=e.getReferringComponents("singleAxis",Tn).models[0];t.coordSysDims=["single"],r.set("single",i),Yo(i)&&(n.set("single",i),t.firstCategoryDimIndex=0)},polar:function(e,t,r,n){var i=e.getReferringComponents("polar",Tn).models[0],a=i.findAxisModel("radiusAxis"),o=i.findAxisModel("angleAxis");t.coordSysDims=["radius","angle"],r.set("radius",a),r.set("angle",o),Yo(a)&&(n.set("radius",a),t.firstCategoryDimIndex=0),Yo(o)&&(n.set("angle",o),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},geo:function(e,t,r,n){t.coordSysDims=["lng","lat"]},parallel:function(e,t,r,n){var i=e.ecModel,a=i.getComponent("parallel",e.get("parallelIndex")),o=t.coordSysDims=a.dimensions.slice();R(a.parallelAxisIndex,function(s,l){var u=i.getComponent("parallelAxis",s),f=o[l];r.set(f,u),Yo(u)&&(n.set(f,u),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=l))})}};function Yo(e){return e.get("type")==="category"}function tZ(e,t,r){r=r||{};var n=r.byIndex,i=r.stackedCoordDimension,a,o,s;rZ(t)?a=t:(o=t.schema,a=o.dimensions,s=t.store);var l=!!(e&&e.get("stack")),u,f,c,h;if(R(a,function(y,_){Ee(y)&&(a[_]=y={name:y}),l&&!y.isExtraCoord&&(!n&&!u&&y.ordinalMeta&&(u=y),!f&&y.type!=="ordinal"&&y.type!=="time"&&(!i||i===y.coordDim)&&(f=y))}),f&&!n&&!u&&(n=!0),f){c="__\0ecstackresult_"+e.id,h="__\0ecstackedover_"+e.id,u&&(u.createInvertedIndices=!0);var d=f.coordDim,v=f.type,p=0;R(a,function(y){y.coordDim===d&&p++});var m={name:c,coordDim:d,coordDimIndex:p,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:a.length},g={name:h,coordDim:h,coordDimIndex:p+1,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:a.length+1};o?(s&&(m.storeDimIndex=s.ensureCalculationDimension(h,v),g.storeDimIndex=s.ensureCalculationDimension(c,v)),o.appendCalculationDimension(m),o.appendCalculationDimension(g)):(a.push(m),a.push(g))}return{stackedDimension:f&&f.name,stackedByDimension:u&&u.name,isStackedByIndex:n,stackedOverDimension:h,stackResultDimension:c}}function rZ(e){return!bL(e.schema)}function ML(e,t){return!!t&&t===e.getCalculationInfo("stackedDimension")}function nZ(e,t){return ML(e,t)?e.getCalculationInfo("stackResultDimension"):t}function iZ(e,t){var r=e.get("coordinateSystem"),n=$0.get(r),i;return t&&t.coordSysDims&&(i=Ne(t.coordSysDims,function(a){var o={name:a},s=t.axisMap.get(a);if(s){var l=s.get("type");o.type=zX(l)}return o})),i||(i=n&&(n.getDimensionsInfo?n.getDimensionsInfo():n.dimensions.slice())||["x","y"]),i}function aZ(e,t,r){var n,i;return r&&R(e,function(a,o){var s=a.coordDim,l=r.categoryAxisMap.get(s);l&&(n==null&&(n=o),a.ordinalMeta=l.getOrdinalMeta(),t&&(a.createInvertedIndices=!0)),a.otherDims.itemName!=null&&(i=!0)}),!i&&n!=null&&(e[n].otherDims.itemName=0),n}function AL(e,t,r){r=r||{};var n=t.getSourceManager(),i,a=!1;e?(a=!0,i=z0(e)):(i=n.getSource(),a=i.sourceFormat===hn);var o=JX(t),s=iZ(t,o),l=r.useEncodeDefaulter,u=Ye(l)?l:l?Ot(Kj,s,t):null,f={coordDimensions:s,generateCoord:r.generateCoord,encodeDefine:t.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!a},c=TL(i,f),h=aZ(c.dimensions,r.createInvertedIndices,o),d=a?null:n.getSharedDataStore(c),v=tZ(t,{schema:c,store:d}),p=new CL(c,t);p.setCalculationInfo(v);var m=h!=null&&oZ(i)?function(g,y,_,b){return b===h?_:this.defaultDimValueGetter(g,y,_,b)}:null;return p.hasItemOption=!1,p.initData(a?i:d,null,m),p}function oZ(e){if(e.sourceFormat===hn){var t=sZ(e.data||[]);return!ye(of(t))}}function sZ(e){for(var t=0;tr[1]&&(r[1]=t[1])},e.prototype.unionExtentFromData=function(t,r){this.unionExtent(t.getApproximateExtent(r))},e.prototype.getExtent=function(){return this._extent.slice()},e.prototype.setExtent=function(t,r){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(r)||(n[1]=r)},e.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},e.prototype.isBlank=function(){return this._isBlank},e.prototype.setBlank=function(t){this._isBlank=t},e}();Sh(oi);var lZ=0,Lm=function(){function e(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++lZ}return e.createByAxisModel=function(t){var r=t.option,n=r.data,i=n&&Ne(n,uZ);return new e({categories:i,needCollect:!i,deduplication:r.dedplication!==!1})},e.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},e.prototype.parseAndCollect=function(t){var r,n=this._needCollect;if(!Ee(t)&&!n)return t;if(n&&!this._deduplication)return r=this.categories.length,this.categories[r]=t,r;var i=this._getOrCreateMap();return r=i.get(t),r==null&&(n?(r=this.categories.length,this.categories[r]=t,i.set(t,r)):r=NaN),r},e.prototype._getOrCreateMap=function(){return this._map||(this._map=je(this.categories))},e}();function uZ(e){return Re(e)&&e.value!=null?e.value:e+""}function Dm(e){return e.type==="interval"||e.type==="log"}function fZ(e,t,r,n){var i={},a=e[1]-e[0],o=i.interval=q2(a/t,!0);r!=null&&on&&(o=i.interval=n);var s=i.intervalPrecision=PL(o),l=i.niceTickExtent=[Ft(Math.ceil(e[0]/o)*o,s),Ft(Math.floor(e[1]/o)*o,s)];return cZ(l,e),i}function wp(e){var t=Math.pow(10,d0(e)),r=e/t;return r?r===2?r=3:r===3?r=5:r*=2:r=1,Ft(r*t)}function PL(e){return vi(e)+2}function Ax(e,t,r){e[t]=Math.max(Math.min(e[t],r[1]),r[0])}function cZ(e,t){!isFinite(e[0])&&(e[0]=t[0]),!isFinite(e[1])&&(e[1]=t[1]),Ax(e,0,t),Ax(e,1,t),e[0]>e[1]&&(e[0]=e[1])}function $h(e,t){return e>=t[0]&&e<=t[1]}function Hh(e,t){return t[1]===t[0]?.5:(e-t[0])/(t[1]-t[0])}function zh(e,t){return e*(t[1]-t[0])+t[0]}var EL=function(e){ge(t,e);function t(r){var n=e.call(this,r)||this;n.type="ordinal";var i=n.getSetting("ordinalMeta");return i||(i=new Lm({})),ye(i)&&(i=new Lm({categories:Ne(i,function(a){return Re(a)?a.value:a})})),n._ordinalMeta=i,n._extent=n.getSetting("extent")||[0,i.categories.length-1],n}return t.prototype.parse=function(r){return r==null?NaN:Ee(r)?this._ordinalMeta.getOrdinal(r):Math.round(r)},t.prototype.contain=function(r){return r=this.parse(r),$h(r,this._extent)&&this._ordinalMeta.categories[r]!=null},t.prototype.normalize=function(r){return r=this._getTickNumber(this.parse(r)),Hh(r,this._extent)},t.prototype.scale=function(r){return r=Math.round(zh(r,this._extent)),this.getRawOrdinalNumber(r)},t.prototype.getTicks=function(){for(var r=[],n=this._extent,i=n[0];i<=n[1];)r.push({value:i}),i++;return r},t.prototype.getMinorTicks=function(r){},t.prototype.setSortInfo=function(r){if(r==null){this._ordinalNumbersByTick=this._ticksByOrdinalNumber=null;return}for(var n=r.ordinalNumbers,i=this._ordinalNumbersByTick=[],a=this._ticksByOrdinalNumber=[],o=0,s=this._ordinalMeta.categories.length,l=Math.min(s,n.length);o=0&&r=0&&r=r},t.prototype.getOrdinalMeta=function(){return this._ordinalMeta},t.prototype.calcNiceTicks=function(){},t.prototype.calcNiceExtent=function(){},t.type="ordinal",t}(oi);oi.registerClass(EL);const LL=EL;var za=Ft,DL=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type="interval",r._interval=0,r._intervalPrecision=2,r}return t.prototype.parse=function(r){return r},t.prototype.contain=function(r){return $h(r,this._extent)},t.prototype.normalize=function(r){return Hh(r,this._extent)},t.prototype.scale=function(r){return zh(r,this._extent)},t.prototype.setExtent=function(r,n){var i=this._extent;isNaN(r)||(i[0]=parseFloat(r)),isNaN(n)||(i[1]=parseFloat(n))},t.prototype.unionExtent=function(r){var n=this._extent;r[0]n[1]&&(n[1]=r[1]),this.setExtent(n[0],n[1])},t.prototype.getInterval=function(){return this._interval},t.prototype.setInterval=function(r){this._interval=r,this._niceExtent=this._extent.slice(),this._intervalPrecision=PL(r)},t.prototype.getTicks=function(r){var n=this._interval,i=this._extent,a=this._niceExtent,o=this._intervalPrecision,s=[];if(!n)return s;var l=1e4;i[0]l)return[];var f=s.length?s[s.length-1].value:a[1];return i[1]>f&&(r?s.push({value:za(f+n,o)}):s.push({value:i[1]})),s},t.prototype.getMinorTicks=function(r){for(var n=this.getTicks(!0),i=[],a=this.getExtent(),o=1;oa[0]&&d0&&(a=a===null?s:Math.min(a,s))}r[n]=a}}return r}function RL(e){var t=vZ(e),r=[];return R(e,function(n){var i=n.coordinateSystem,a=i.getBaseAxis(),o=a.getExtent(),s;if(a.type==="category")s=a.getBandWidth();else if(a.type==="value"||a.type==="time"){var l=a.dim+"_"+a.index,u=t[l],f=Math.abs(o[1]-o[0]),c=a.scale.getExtent(),h=Math.abs(c[1]-c[0]);s=u?f/h*u:f}else{var d=n.getData();s=Math.abs(o[1]-o[0])/d.count()}var v=yt(n.get("barWidth"),s),p=yt(n.get("barMaxWidth"),s),m=yt(n.get("barMinWidth")||(NL(n)?.5:1),s),g=n.get("barGap"),y=n.get("barCategoryGap");r.push({bandWidth:s,barWidth:v,barMaxWidth:p,barMinWidth:m,barGap:g,barCategoryGap:y,axisKey:t_(a),stackId:e_(n)})}),pZ(r)}function pZ(e){var t={};R(e,function(n,i){var a=n.axisKey,o=n.bandWidth,s=t[a]||{bandWidth:o,remainedWidth:o,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},l=s.stacks;t[a]=s;var u=n.stackId;l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var f=n.barWidth;f&&!l[u].width&&(l[u].width=f,f=Math.min(s.remainedWidth,f),s.remainedWidth-=f);var c=n.barMaxWidth;c&&(l[u].maxWidth=c);var h=n.barMinWidth;h&&(l[u].minWidth=h);var d=n.barGap;d!=null&&(s.gap=d);var v=n.barCategoryGap;v!=null&&(s.categoryGap=v)});var r={};return R(t,function(n,i){r[i]={};var a=n.stacks,o=n.bandWidth,s=n.categoryGap;if(s==null){var l=Ct(a).length;s=Math.max(35-l*4,15)+"%"}var u=yt(s,o),f=yt(n.gap,1),c=n.remainedWidth,h=n.autoWidthCount,d=(c-u)/(h+(h-1)*f);d=Math.max(d,0),R(a,function(g){var y=g.maxWidth,_=g.minWidth;if(g.width){var b=g.width;y&&(b=Math.min(b,y)),_&&(b=Math.max(b,_)),g.width=b,c-=b+f*b,h--}else{var b=d;y&&yb&&(b=_),b!==d&&(g.width=b,c-=b+f*b,h--)}}),d=(c-u)/(h+(h-1)*f),d=Math.max(d,0);var v=0,p;R(a,function(g,y){g.width||(g.width=d),p=g,v+=g.width*(1+f)}),p&&(v-=p.width*f);var m=-v/2;R(a,function(g,y){r[i][y]=r[i][y]||{bandWidth:o,offset:m,width:g.width},m+=g.width*(1+f)})}),r}function gZ(e,t,r){if(e&&t){var n=e[t_(t)];return n!=null&&r!=null?n[e_(r)]:n}}function mZ(e,t){var r=OL(e,t),n=RL(r);R(r,function(i){var a=i.getData(),o=i.coordinateSystem,s=o.getBaseAxis(),l=e_(i),u=n[t_(s)][l],f=u.offset,c=u.width;a.setLayout({bandWidth:u.bandWidth,offset:f,size:c})})}function yZ(e){return{seriesType:e,plan:HE(),reset:function(t){if(kL(t)){var r=t.getData(),n=t.coordinateSystem,i=n.getBaseAxis(),a=n.getOtherAxis(i),o=r.getDimensionIndex(r.mapDimension(a.dim)),s=r.getDimensionIndex(r.mapDimension(i.dim)),l=t.get("showBackground",!0),u=r.mapDimension(a.dim),f=r.getCalculationInfo("stackResultDimension"),c=ML(r,u)&&!!r.getCalculationInfo("stackedOnSeries"),h=a.isHorizontal(),d=_Z(i,a),v=NL(t),p=t.get("barMinHeight")||0,m=f&&r.getDimensionIndex(f),g=r.getLayout("size"),y=r.getLayout("offset");return{progress:function(_,b){for(var x=_.count,w=v&&Sp(x*3),S=v&&l&&Sp(x*3),C=v&&Sp(x),M=n.master.getRect(),A=h?M.width:M.height,P,E=b.getStore(),L=0;(P=_.next())!=null;){var O=E.get(c?m:o,P),N=E.get(s,P),H=d,V=void 0;c&&(V=+O-E.get(o,P));var U=void 0,F=void 0,z=void 0,te=void 0;if(h){var J=n.dataToPoint([O,N]);if(c){var me=n.dataToPoint([V,N]);H=me[0]}U=H,F=J[1]+y,z=J[0]-H,te=g,Math.abs(z)>>1;e[i][1]i&&(this._approxInterval=i);var s=fc.length,l=Math.min(bZ(fc,this._approxInterval,0,s),s-1);this._interval=fc[l][1],this._minLevelUnit=fc[Math.max(l-1,0)][0]},t.prototype.parse=function(r){return Tt(r)?r:+Ti(r)},t.prototype.contain=function(r){return $h(this.parse(r),this._extent)},t.prototype.normalize=function(r){return Hh(this.parse(r),this._extent)},t.prototype.scale=function(r){return zh(r,this._extent)},t.type="time",t}(df),fc=[["second",I0],["minute",O0],["hour",tu],["quarter-day",tu*6],["half-day",tu*12],["day",on*1.2],["half-week",on*3.5],["week",on*7],["month",on*31],["quarter",on*95],["half-year",gS/2],["year",gS]];function wZ(e,t,r,n){var i=Ti(t),a=Ti(r),o=function(v){return yS(i,v,n)===yS(a,v,n)},s=function(){return o("year")},l=function(){return s()&&o("month")},u=function(){return l()&&o("day")},f=function(){return u()&&o("hour")},c=function(){return f()&&o("minute")},h=function(){return c()&&o("second")},d=function(){return h()&&o("millisecond")};switch(e){case"year":return s();case"month":return l();case"day":return u();case"hour":return f();case"minute":return c();case"second":return h();case"millisecond":return d()}}function SZ(e,t){return e/=on,e>16?16:e>7.5?7:e>3.5?4:e>1.5?2:1}function xZ(e){var t=30*on;return e/=t,e>6?6:e>3?3:e>2?2:1}function CZ(e){return e/=tu,e>12?12:e>6?6:e>3.5?4:e>2?2:1}function Px(e,t){return e/=t?O0:I0,e>30?30:e>20?20:e>15?15:e>10?10:e>5?5:e>2?2:1}function TZ(e){return q2(e,!0)}function MZ(e,t,r){var n=new Date(e);switch(cs(t)){case"year":case"month":n[sE(r)](0);case"day":n[lE(r)](1);case"hour":n[uE(r)](0);case"minute":n[fE(r)](0);case"second":n[cE(r)](0),n[dE(r)](0)}return n.getTime()}function AZ(e,t,r,n){var i=1e4,a=aE,o=0;function s(A,P,E,L,O,N,H){for(var V=new Date(P),U=P,F=V[L]();U1&&N===0&&E.unshift({value:E[0].value-U})}}for(var N=0;N=n[0]&&y<=n[1]&&c++)}var _=(n[1]-n[0])/t;if(c>_*1.5&&h>_/1.5||(u.push(m),c>_||e===a[d]))break}f=[]}}}for(var b=jt(Ne(u,function(A){return jt(A,function(P){return P.value>=n[0]&&P.value<=n[1]&&!P.notAdd})}),function(A){return A.length>0}),x=[],w=b.length-1,d=0;d0;)a*=10;var s=[Ft(DZ(n[0]/a)*a),Ft(LZ(n[1]/a)*a)];this._interval=a,this._niceExtent=s}},t.prototype.calcNiceExtent=function(r){ou.calcNiceExtent.call(this,r),this._fixMin=r.fixMin,this._fixMax=r.fixMax},t.prototype.parse=function(r){return r},t.prototype.contain=function(r){return r=pn(r)/pn(this.base),$h(r,this._extent)},t.prototype.normalize=function(r){return r=pn(r)/pn(this.base),Hh(r,this._extent)},t.prototype.scale=function(r){return r=zh(r,this._extent),cc(this.base,r)},t.type="log",t}(oi),FL=r_.prototype;FL.getMinorTicks=ou.getMinorTicks;FL.getLabel=ou.getLabel;function dc(e,t){return EZ(e,vi(t))}oi.registerClass(r_);const IZ=r_;var OZ=function(){function e(t,r,n){this._prepareParams(t,r,n)}return e.prototype._prepareParams=function(t,r,n){n[1]0&&l>0&&!u&&(s=0),s<0&&l<0&&!f&&(l=0));var h=this._determinedMin,d=this._determinedMax;return h!=null&&(s=h,u=!0),d!=null&&(l=d,f=!0),{min:s,max:l,minFixed:u,maxFixed:f,isBlank:c}},e.prototype.modifyDataMinMax=function(t,r){this[kZ[t]]=r},e.prototype.setDeterminedMinMax=function(t,r){var n=RZ[t];this[n]=r},e.prototype.freeze=function(){this.frozen=!0},e}(),RZ={min:"_determinedMin",max:"_determinedMax"},kZ={min:"_dataMin",max:"_dataMax"};function NZ(e,t,r){var n=e.rawExtentInfo;return n||(n=new OZ(e,t,r),e.rawExtentInfo=n,n)}function hc(e,t){return t==null?null:bd(t)?NaN:e.parse(t)}function $L(e,t){var r=e.type,n=NZ(e,t,e.getExtent()).calculate();e.setBlank(n.isBlank);var i=n.min,a=n.max,o=t.ecModel;if(o&&r==="time"){var s=OL("bar",o),l=!1;if(R(s,function(c){l=l||c.getBaseAxis()===t.axis}),l){var u=RL(s),f=BZ(i,a,t,u);i=f.min,a=f.max}}return{extent:[i,a],fixMin:n.minFixed,fixMax:n.maxFixed}}function BZ(e,t,r,n){var i=r.axis.getExtent(),a=i[1]-i[0],o=gZ(n,r.axis);if(o===void 0)return{min:e,max:t};var s=1/0;R(o,function(d){s=Math.min(d.offset,s)});var l=-1/0;R(o,function(d){l=Math.max(d.offset+d.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,f=t-e,c=1-(s+l)/a,h=f/c-f;return t+=h*(l/u),e-=h*(s/u),{min:e,max:t}}function Lx(e,t){var r=t,n=$L(e,r),i=n.extent,a=r.get("splitNumber");e instanceof IZ&&(e.base=r.get("logBase"));var o=e.type,s=r.get("interval"),l=o==="interval"||o==="time";e.setExtent(i[0],i[1]),e.calcNiceExtent({splitNumber:a,fixMin:n.fixMin,fixMax:n.fixMax,minInterval:l?r.get("minInterval"):null,maxInterval:l?r.get("maxInterval"):null}),s!=null&&e.setInterval&&e.setInterval(s)}function FZ(e,t){if(t=t||e.get("type"),t)switch(t){case"category":return new LL({ordinalMeta:e.getOrdinalMeta?e.getOrdinalMeta():e.getCategories(),extent:[1/0,-1/0]});case"time":return new PZ({locale:e.ecModel.getLocaleModel(),useUTC:e.ecModel.get("useUTC")});default:return new(oi.getClass(t)||df)}}function $Z(e){var t=e.scale.getExtent(),r=t[0],n=t[1];return!(r>0&&n>0||r<0&&n<0)}function hf(e){var t=e.getLabelModel().get("formatter"),r=e.type==="category"?e.scale.getExtent()[0]:null;return e.scale.type==="time"?function(n){return function(i,a){return e.scale.getFormattedLabel(i,a,n)}}(t):Ee(t)?function(n){return function(i){var a=e.scale.getLabel(i),o=n.replace("{value}",a??"");return o}}(t):Ye(t)?function(n){return function(i,a){return r!=null&&(a=i.value-r),n(n_(e,i),a,i.level!=null?{level:i.level}:null)}}(t):function(n){return e.scale.getLabel(n)}}function n_(e,t){return e.type==="category"?e.scale.getLabel(t):t.value}function HZ(e){var t=e.model,r=e.scale;if(!(!t.get(["axisLabel","show"])||r.isBlank())){var n,i,a=r.getExtent();r instanceof LL?i=r.count():(n=r.getTicks(),i=n.length);var o=e.getLabelModel(),s=hf(e),l,u=1;i>40&&(u=Math.ceil(i/40));for(var f=0;f=0||(Dx.push(e),Ye(e)&&(e={install:e}),e.install(GZ))}var zu=Et();function UZ(e){return e.type==="category"?jZ(e):KZ(e)}function YZ(e,t){return e.type==="category"?qZ(e,t):{ticks:Ne(e.scale.getTicks(),function(r){return r.value})}}function jZ(e){var t=e.getLabelModel(),r=zL(e,t);return!t.get("show")||e.scale.isBlank()?{labels:[],labelCategoryInterval:r.labelCategoryInterval}:r}function zL(e,t){var r=VL(e,"labels"),n=i_(t),i=WL(r,n);if(i)return i;var a,o;return Ye(n)?a=YL(e,n):(o=n==="auto"?XZ(e):n,a=UL(e,o)),GL(r,n,{labels:a,labelCategoryInterval:o})}function qZ(e,t){var r=VL(e,"ticks"),n=i_(t),i=WL(r,n);if(i)return i;var a,o;if((!t.get("show")||e.scale.isBlank())&&(a=[]),Ye(n))a=YL(e,n,!0);else if(n==="auto"){var s=zL(e,e.getLabelModel());o=s.labelCategoryInterval,a=Ne(s.labels,function(l){return l.tickValue})}else o=n,a=UL(e,o,!0);return GL(r,n,{ticks:a,tickCategoryInterval:o})}function KZ(e){var t=e.scale.getTicks(),r=hf(e);return{labels:Ne(t,function(n,i){return{level:n.level,formattedLabel:r(n,i),rawLabel:e.scale.getLabel(n),tickValue:n.value}})}}function VL(e,t){return zu(e)[t]||(zu(e)[t]=[])}function WL(e,t){for(var r=0;r40&&(s=Math.max(1,Math.floor(o/40)));for(var l=a[0],u=e.dataToCoord(l+1)-e.dataToCoord(l),f=Math.abs(u*Math.cos(n)),c=Math.abs(u*Math.sin(n)),h=0,d=0;l<=a[1];l+=s){var v=0,p=0,m=u0(r({value:l}),t.font,"center","top");v=m.width*1.3,p=m.height*1.3,h=Math.max(h,v,7),d=Math.max(d,p,7)}var g=h/f,y=d/c;isNaN(g)&&(g=1/0),isNaN(y)&&(y=1/0);var _=Math.max(0,Math.floor(Math.min(g,y))),b=zu(e.model),x=e.getExtent(),w=b.lastAutoInterval,S=b.lastTickCount;return w!=null&&S!=null&&Math.abs(w-_)<=1&&Math.abs(S-o)<=1&&w>_&&b.axisExtent0===x[0]&&b.axisExtent1===x[1]?_=w:(b.lastTickCount=o,b.lastAutoInterval=_,b.axisExtent0=x[0],b.axisExtent1=x[1]),_}function QZ(e){var t=e.getLabelModel();return{axisRotate:e.getRotate?e.getRotate():e.isHorizontal&&!e.isHorizontal()?90:0,labelRotate:t.get("rotate")||0,font:t.getFont()}}function UL(e,t,r){var n=hf(e),i=e.scale,a=i.getExtent(),o=e.getLabelModel(),s=[],l=Math.max((t||0)+1,1),u=a[0],f=i.count();u!==0&&l>1&&f/l>2&&(u=Math.round(Math.ceil(u/l)*l));var c=HL(e),h=o.get("showMinLabel")||c,d=o.get("showMaxLabel")||c;h&&u!==a[0]&&p(a[0]);for(var v=u;v<=a[1];v+=l)p(v);d&&v-l!==a[1]&&p(a[1]);function p(m){var g={value:m};s.push(r?m:{formattedLabel:n(g),rawLabel:i.getLabel(g),tickValue:m})}return s}function YL(e,t,r){var n=e.scale,i=hf(e),a=[];return R(n.getTicks(),function(o){var s=n.getLabel(o),l=o.value;t(o.value,s)&&a.push(r?l:{formattedLabel:i(o),rawLabel:s,tickValue:l})}),a}var Ix=[0,1],JZ=function(){function e(t,r,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=r,this._extent=n||[0,0]}return e.prototype.contain=function(t){var r=this._extent,n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return t>=n&&t<=i},e.prototype.containData=function(t){return this.scale.contain(t)},e.prototype.getExtent=function(){return this._extent.slice()},e.prototype.getPixelPrecision=function(t){return O9(t||this.scale.getExtent(),this._extent)},e.prototype.setExtent=function(t,r){var n=this._extent;n[0]=t,n[1]=r},e.prototype.dataToCoord=function(t,r){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&i.type==="ordinal"&&(n=n.slice(),Ox(n,i.count())),Jg(t,Ix,n,r)},e.prototype.coordToData=function(t,r){var n=this._extent,i=this.scale;this.onBand&&i.type==="ordinal"&&(n=n.slice(),Ox(n,i.count()));var a=Jg(t,n,Ix,r);return this.scale.scale(a)},e.prototype.pointToData=function(t,r){},e.prototype.getTicksCoords=function(t){t=t||{};var r=t.tickModel||this.getTickModel(),n=YZ(this,r),i=n.ticks,a=Ne(i,function(s){return{coord:this.dataToCoord(this.scale.type==="ordinal"?this.scale.getRawOrdinalNumber(s):s),tickValue:s}},this),o=r.get("alignWithLabel");return eQ(this,a,o,t.clamp),a},e.prototype.getMinorTicksCoords=function(){if(this.scale.type==="ordinal")return[];var t=this.model.getModel("minorTick"),r=t.get("splitNumber");r>0&&r<100||(r=5);var n=this.scale.getMinorTicks(r),i=Ne(n,function(a){return Ne(a,function(o){return{coord:this.dataToCoord(o),tickValue:o}},this)},this);return i},e.prototype.getViewLabels=function(){return UZ(this).labels},e.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},e.prototype.getTickModel=function(){return this.model.getModel("axisTick")},e.prototype.getBandWidth=function(){var t=this._extent,r=this.scale.getExtent(),n=r[1]-r[0]+(this.onBand?1:0);n===0&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},e.prototype.calculateCategoryInterval=function(){return ZZ(this)},e}();function Ox(e,t){var r=e[1]-e[0],n=t,i=r/n/2;e[0]+=i,e[1]-=i}function eQ(e,t,r,n){var i=t.length;if(!e.onBand||r||!i)return;var a=e.getExtent(),o,s;if(i===1)t[0].coord=a[0],o=t[1]={coord:a[1]};else{var l=t[i-1].tickValue-t[0].tickValue,u=(t[i-1].coord-t[0].coord)/l;R(t,function(d){d.coord-=u/2});var f=e.scale.getExtent();s=1+f[1]-t[i-1].tickValue,o={coord:t[i-1].coord+u*s},t.push(o)}var c=a[0]>a[1];h(t[0].coord,a[0])&&(n?t[0].coord=a[0]:t.shift()),n&&h(a[0],t[0].coord)&&t.unshift({coord:a[0]}),h(a[1],o.coord)&&(n?o.coord=a[1]:t.pop()),n&&h(o.coord,a[1])&&t.push({coord:a[1]});function h(d,v){return d=Ft(d),v=Ft(v),c?d>v:di&&(i+=_l);var d=Math.atan2(s,o);if(d<0&&(d+=_l),d>=n&&d<=i||d+_l>=n&&d+_l<=i)return l[0]=f,l[1]=c,u-r;var v=r*Math.cos(n)+e,p=r*Math.sin(n)+t,m=r*Math.cos(i)+e,g=r*Math.sin(i)+t,y=(v-o)*(v-o)+(p-s)*(p-s),_=(m-o)*(m-o)+(g-s)*(g-s);return y<_?(l[0]=v,l[1]=p,Math.sqrt(y)):(l[0]=m,l[1]=g,Math.sqrt(_))}function zd(e,t,r,n,i,a,o,s){var l=i-e,u=a-t,f=r-e,c=n-t,h=Math.sqrt(f*f+c*c);f/=h,c/=h;var d=l*f+u*c,v=d/h;s&&(v=Math.min(Math.max(v,0),1)),v*=h;var p=o[0]=e+v*f,m=o[1]=t+v*c;return Math.sqrt((p-i)*(p-i)+(m-a)*(m-a))}function jL(e,t,r,n,i,a,o){r<0&&(e=e+r,r=-r),n<0&&(t=t+n,n=-n);var s=e+r,l=t+n,u=o[0]=Math.min(Math.max(i,e),s),f=o[1]=Math.min(Math.max(a,t),l);return Math.sqrt((u-i)*(u-i)+(f-a)*(f-a))}var bn=[];function aQ(e,t,r){var n=jL(t.x,t.y,t.width,t.height,e.x,e.y,bn);return r.set(bn[0],bn[1]),n}function oQ(e,t,r){for(var n=0,i=0,a=0,o=0,s,l,u=1/0,f=t.data,c=e.x,h=e.y,d=0;d0){t=t/180*Math.PI,Mn.fromArray(e[0]),ut.fromArray(e[1]),Lt.fromArray(e[2]),Fe.sub(Yn,Mn,ut),Fe.sub(Wn,Lt,ut);var r=Yn.len(),n=Wn.len();if(!(r<.001||n<.001)){Yn.scale(1/r),Wn.scale(1/n);var i=Yn.dot(Wn),a=Math.cos(t);if(a1&&Fe.copy(dr,Lt),dr.toArray(e[1])}}}}function sQ(e,t,r){if(r<=180&&r>0){r=r/180*Math.PI,Mn.fromArray(e[0]),ut.fromArray(e[1]),Lt.fromArray(e[2]),Fe.sub(Yn,ut,Mn),Fe.sub(Wn,Lt,ut);var n=Yn.len(),i=Wn.len();if(!(n<.001||i<.001)){Yn.scale(1/n),Wn.scale(1/i);var a=Yn.dot(t),o=Math.cos(r);if(a=l)Fe.copy(dr,Lt);else{dr.scaleAndAdd(Wn,s/Math.tan(Math.PI/2-f));var c=Lt.x!==ut.x?(dr.x-ut.x)/(Lt.x-ut.x):(dr.y-ut.y)/(Lt.y-ut.y);if(isNaN(c))return;c<0?Fe.copy(dr,ut):c>1&&Fe.copy(dr,Lt)}dr.toArray(e[1])}}}}function kx(e,t,r,n){var i=r==="normal",a=i?e:e.ensureState(r);a.ignore=t;var o=n.get("smooth");o&&o===!0&&(o=.3),a.shape=a.shape||{},o>0&&(a.shape.smooth=o);var s=n.getModel("lineStyle").getLineStyle();i?e.useStyle(s):a.style=s}function lQ(e,t){var r=t.smooth,n=t.points;if(n)if(e.moveTo(n[0][0],n[0][1]),r>0&&n.length>=3){var i=Fg(n[0],n[1]),a=Fg(n[1],n[2]);if(!i||!a){e.lineTo(n[1][0],n[1][1]),e.lineTo(n[2][0],n[2][1]);return}var o=Math.min(i,a)*r,s=gv([],n[1],n[0],o/i),l=gv([],n[1],n[2],o/a),u=gv([],s,l,.5);e.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),e.bezierCurveTo(l[0],l[1],l[0],l[1],n[2][0],n[2][1])}else for(var f=1;f0&&a&&x(-f/o,0,o);var p=e[0],m=e[o-1],g,y;_(),g<0&&w(-g,.8),y<0&&w(y,.8),_(),b(g,y,1),b(y,g,-1),_(),g<0&&S(-g),y<0&&S(y);function _(){g=p.rect[t]-n,y=i-m.rect[t]-m.rect[r]}function b(C,M,A){if(C<0){var P=Math.min(M,-C);if(P>0){x(P*A,0,o);var E=P+C;E<0&&w(-E*A,1)}else w(-C*A,1)}}function x(C,M,A){C!==0&&(u=!0);for(var P=M;P0)for(var E=0;E0;E--){var H=A[E-1]*N;x(-H,E,o)}}}function S(C){var M=C<0?-1:1;C=Math.abs(C);for(var A=Math.ceil(C/(o-1)),P=0;P0?x(A,0,P+1):x(-A,o-P-1,o),C-=A,C<=0)return}return u}function uQ(e,t,r,n){return QL(e,"x","width",t,r,n)}function JL(e,t,r,n){return QL(e,"y","height",t,r,n)}function eD(e){var t=[];e.sort(function(p,m){return m.priority-p.priority});var r=new nt(0,0,0,0);function n(p){if(!p.ignore){var m=p.ensureState("emphasis");m.ignore==null&&(m.ignore=!1)}p.ignore=!0}for(var i=0;i=0&&n.attr(a.oldLayoutSelect),ot(h,"emphasis")>=0&&n.attr(a.oldLayoutEmphasis)),Or(n,u,r,l)}else if(n.attr(u),!cf(n).valueAnimation){var c=Ze(n.style.opacity,1);n.style.opacity=0,Wr(n,{style:{opacity:c}},r,l)}if(a.oldLayout=u,n.states.select){var d=a.oldLayoutSelect={};vc(d,u,pc),vc(d,n.states.select,pc)}if(n.states.emphasis){var v=a.oldLayoutEmphasis={};vc(v,u,pc),vc(v,n.states.emphasis,pc)}Sj(n,l,f,r,r)}if(i&&!i.ignore&&!i.invisible){var a=dQ(i),o=a.oldLayout,p={points:i.shape.points};o?(i.attr({shape:o}),Or(i,{shape:p},r)):(i.setShape(p),i.style.strokePercent=0,Wr(i,{style:{strokePercent:1}},r)),a.oldLayout=p}},e}(),Cp=Et();function vQ(e){e.registerUpdateLifecycle("series:beforeupdate",function(t,r,n){var i=Cp(r).labelManager;i||(i=Cp(r).labelManager=new hQ),i.clearLabels()}),e.registerUpdateLifecycle("series:layoutlabels",function(t,r,n){var i=Cp(r).labelManager;n.updatedSeries.forEach(function(a){i.addLabelsOfSeries(r.getViewOfSeriesModel(a))}),i.updateLayoutConfig(r),i.layout(r),i.processLabelsOverall()})}function pQ(e,t){var r=e.mapDimensionsAll("defaultedLabel"),n=r.length;if(n===1){var i=Is(e,t,r[0]);return i!=null?i+"":null}else if(n){for(var a=[],o=0;o=0&&n.push(t[a])}return n.join(" ")}function mQ(e,t,r,n,i){var a=e.getArea(),o=a.x,s=a.y,l=a.width,u=a.height,f=r.get(["lineStyle","width"])||2;o-=f/2,s-=f/2,l+=f,u+=f,o=Math.floor(o),l=Math.round(l);var c=new Gt({shape:{x:o,y:s,width:l,height:u}});if(t){var h=e.getBaseAxis(),d=h.isHorizontal(),v=h.inverse;d?(v&&(c.shape.x+=l),c.shape.width=0):(v||(c.shape.y+=u),c.shape.height=0);var p=Ye(i)?function(m){i(m,c)}:null;Wr(c,{shape:{width:l,height:u,x:o,y:s}},r,null,n,p)}return c}function yQ(e,t,r){var n=e.getArea(),i=Ft(n.r0,1),a=Ft(n.r,1),o=new Eo({shape:{cx:Ft(e.cx,1),cy:Ft(e.cy,1),r0:i,r:a,startAngle:n.startAngle,endAngle:n.endAngle,clockwise:n.clockwise}});if(t){var s=e.getBaseAxis().dim==="angle";s?o.shape.endAngle=n.startAngle:o.shape.r=i,Wr(o,{shape:{endAngle:n.endAngle,r:a}},r)}return o}function _Q(e,t,r,n,i){if(e){if(e.type==="polar")return yQ(e,t,r);if(e.type==="cartesian2d")return mQ(e,t,r,n,i)}else return null;return null}function tD(e,t){return e.type===t}var bQ={average:function(e){for(var t=0,r=0,n=0;nt&&(t=e[r]);return isFinite(t)?t:NaN},min:function(e){for(var t=1/0,r=0;r10&&o.type==="cartesian2d"&&a){var l=o.getBaseAxis(),u=o.getOtherAxis(l),f=l.getExtent(),c=n.getDevicePixelRatio(),h=Math.abs(f[1]-f[0])*(c||1),d=Math.round(s/h);if(isFinite(d)&&d>1){a==="lttb"&&t.setData(i.lttbDownSample(i.mapDimension(u.dim),1/d));var v=void 0;Ee(a)?v=bQ[a]:Ye(a)&&(v=a),v&&t.setData(i.downSample(i.mapDimension(u.dim),1/d,v,wQ))}}}}}var Im=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.getInitialData=function(r,n){return AL(null,this,{useEncodeDefaulter:!0})},t.prototype.getMarkerPosition=function(r,n,i){var a=this.coordinateSystem;if(a&&a.clampData){var o=a.clampData(r),s=a.dataToPoint(o);if(i)R(a.getAxes(),function(h,d){if(h.type==="category"&&n!=null){var v=h.getTicksCoords(),p=o[d],m=n[d]==="x1"||n[d]==="y1";if(m&&(p+=1),v.length<2)return;if(v.length===2){s[d]=h.toGlobalCoord(h.getExtent()[m?1:0]);return}for(var g=void 0,y=void 0,_=1,b=0;bp){y=(x+g)/2;break}b===1&&(_=w-v[0].tickValue)}y==null&&(g?g&&(y=v[v.length-1].coord):y=v[0].coord),s[d]=h.toGlobalCoord(y)}});else{var l=this.getData(),u=l.getLayout("offset"),f=l.getLayout("size"),c=a.getBaseAxis().isHorizontal()?0:1;s[c]+=u+f/2}return s}return[NaN,NaN]},t.type="series.__base_bar__",t.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},t}(So);So.registerClass(Im);var xQ=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.getInitialData=function(){return AL(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},t.prototype.getProgressive=function(){return this.get("large")?this.get("progressive"):!1},t.prototype.getProgressiveThreshold=function(){var r=this.get("progressiveThreshold"),n=this.get("largeThreshold");return n>r&&(r=n),r},t.prototype.brushSelector=function(r,n,i){return i.rect(n.getItemLayout(r))},t.type="series.bar",t.dependencies=["grid","polar"],t.defaultOption=rE(Im.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),t}(Im);const CQ=xQ;var TQ=function(){function e(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0}return e}(),Bx=function(e){ge(t,e);function t(r){var n=e.call(this,r)||this;return n.type="sausage",n}return t.prototype.getDefaultShape=function(){return new TQ},t.prototype.buildPath=function(r,n){var i=n.cx,a=n.cy,o=Math.max(n.r0||0,0),s=Math.max(n.r,0),l=(s-o)*.5,u=o+l,f=n.startAngle,c=n.endAngle,h=n.clockwise,d=Math.PI*2,v=h?c-fMath.PI/2&&fs)return!0;s=c}return!1},t.prototype._isOrderDifferentInView=function(r,n){for(var i=n.scale,a=i.getExtent(),o=Math.max(0,a[0]),s=Math.min(a[1],i.getOrdinalMeta().categories.length-1);o<=s;++o)if(r.ordinalNumbers[o]!==i.getRawOrdinalNumber(o))return!0},t.prototype._updateSortWithinSameData=function(r,n,i,a){if(this._isOrderChangedWithinSameData(r,n,i)){var o=this._dataSort(r,i,n);this._isOrderDifferentInView(o,i)&&(this._removeOnRenderedListener(a),a.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",axisId:i.index,sortInfo:o}))}},t.prototype._dispatchInitSort=function(r,n,i){var a=n.baseAxis,o=this._dataSort(r,a,function(s){return r.get(r.mapDimension(n.otherAxis.dim),s)});i.dispatchAction({type:"changeAxisOrder",componentType:a.dim+"Axis",isInitSort:!0,axisId:a.index,sortInfo:o})},t.prototype.remove=function(r,n){this._clear(this._model),this._removeOnRenderedListener(n)},t.prototype.dispose=function(r,n){this._removeOnRenderedListener(n)},t.prototype._removeOnRenderedListener=function(r){this._onRendered&&(r.getZr().off("rendered",this._onRendered),this._onRendered=null)},t.prototype._clear=function(r){var n=this.group,i=this._data;r&&r.isAnimationEnabled()&&i&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],i.eachItemGraphicEl(function(a){Dd(a,r,dt(a).dataIndex)})):n.removeAll(),this._data=null,this._isFirstFrame=!0},t.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},t.type="bar",t}(ho),Fx={cartesian2d:function(e,t){var r=t.width<0?-1:1,n=t.height<0?-1:1;r<0&&(t.x+=t.width,t.width=-t.width),n<0&&(t.y+=t.height,t.height=-t.height);var i=e.x+e.width,a=e.y+e.height,o=Tp(t.x,e.x),s=Mp(t.x+t.width,i),l=Tp(t.y,e.y),u=Mp(t.y+t.height,a),f=si?s:o,t.y=c&&l>a?u:l,t.width=f?0:s-o,t.height=c?0:u-l,r<0&&(t.x+=t.width,t.width=-t.width),n<0&&(t.y+=t.height,t.height=-t.height),f||c},polar:function(e,t){var r=t.r0<=t.r?1:-1;if(r<0){var n=t.r;t.r=t.r0,t.r0=n}var i=Mp(t.r,e.r),a=Tp(t.r0,e.r0);t.r=i,t.r0=a;var o=i-a<0;if(r<0){var n=t.r;t.r=t.r0,t.r0=n}return o}},$x={cartesian2d:function(e,t,r,n,i,a,o,s,l){var u=new Gt({shape:ue({},n),z2:1});if(u.__dataIndex=r,u.name="item",a){var f=u.shape,c=i?"height":"width";f[c]=0}return u},polar:function(e,t,r,n,i,a,o,s,l){var u=!i&&l?Bx:Eo,f=new u({shape:n,z2:1});f.name="item";var c=rD(i);if(f.calculateTextPosition=MQ(c,{isRoundCap:u===Bx}),a){var h=f.shape,d=i?"r":"endAngle",v={};h[d]=i?n.r0:n.startAngle,v[d]=n[d],(s?Or:Wr)(f,{shape:v},a)}return f}};function LQ(e,t){var r=e.get("realtimeSort",!0),n=t.getBaseAxis();if(r&&n.type==="category"&&t.type==="cartesian2d")return{baseAxis:n,otherAxis:t.getOtherAxis(n)}}function Hx(e,t,r,n,i,a,o,s){var l,u;a?(u={x:n.x,width:n.width},l={y:n.y,height:n.height}):(u={y:n.y,height:n.height},l={x:n.x,width:n.width}),s||(o?Or:Wr)(r,{shape:l},t,i,null);var f=t?e.baseAxis.model:null;(o?Or:Wr)(r,{shape:u},f,i)}function zx(e,t){for(var r=0;r0?1:-1,o=n.height>0?1:-1;return{x:n.x+a*i/2,y:n.y+o*i/2,width:n.width-a*i,height:n.height-o*i}},polar:function(e,t,r){var n=e.getItemLayout(t);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle,clockwise:n.clockwise}}};function OQ(e){return e.startAngle!=null&&e.endAngle!=null&&e.startAngle===e.endAngle}function rD(e){return function(t){var r=t?"Arc":"Angle";return function(n){switch(n){case"start":case"insideStart":case"end":case"insideEnd":return n+r;default:return n}}}(e)}function Wx(e,t,r,n,i,a,o,s){var l=t.getItemVisual(r,"style");if(s){if(!a.get("roundCap")){var f=e.shape,c=Dl(n.getModel("itemStyle"),f,!0);ue(f,c),e.setShape(f)}}else{var u=n.get(["itemStyle","borderRadius"])||0;e.setShape("r",u)}e.useStyle(l);var h=n.getShallow("cursor");h&&e.attr("cursor",h);var d=s?o?i.r>=i.r0?"endArc":"startArc":i.endAngle>=i.startAngle?"endAngle":"startAngle":o?i.height>=0?"bottom":"top":i.width>=0?"right":"left",v=JP(n);E0(e,v,{labelFetcher:a,labelDataIndex:r,defaultText:pQ(a.getData(),r),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:d});var p=e.getTextContent();if(s&&p){var m=n.get(["label","position"]);e.textConfig.inside=m==="middle"?!0:null,AQ(e,m==="outside"?d:m,rD(o),n.get(["label","rotate"]))}wj(p,v,a.getRawValue(r),function(y){return gQ(t,y)});var g=n.getModel(["emphasis"]);CP(e,g.get("focus"),g.get("blurScope"),g.get("disabled")),TP(e,n),OQ(i)&&(e.style.fill="none",e.style.stroke="none",R(e.states,function(y){y.style&&(y.style.fill=y.style.stroke="none")}))}function RQ(e,t){var r=e.get(["itemStyle","borderColor"]);if(!r||r==="none")return 0;var n=e.get(["itemStyle","borderWidth"])||0,i=isNaN(t.width)?Number.MAX_VALUE:Math.abs(t.width),a=isNaN(t.height)?Number.MAX_VALUE:Math.abs(t.height);return Math.min(n,i,a)}var kQ=function(){function e(){}return e}(),Gx=function(e){ge(t,e);function t(r){var n=e.call(this,r)||this;return n.type="largeBar",n}return t.prototype.getDefaultShape=function(){return new kQ},t.prototype.buildPath=function(r,n){for(var i=n.points,a=this.baseDimIdx,o=1-this.baseDimIdx,s=[],l=[],u=this.barWidth,f=0;f=0?r:null},30,!1);function NQ(e,t,r){for(var n=e.baseDimIdx,i=1-n,a=e.shape.points,o=e.largeDataIndices,s=[],l=[],u=e.barWidth,f=0,c=a.length/3;f=s[0]&&t<=s[0]+l[0]&&r>=s[1]&&r<=s[1]+l[1])return o[f]}return-1}function nD(e,t,r){if(tD(r,"cartesian2d")){var n=t,i=r.getArea();return{x:e?n.x:i.x,y:e?i.y:n.y,width:e?n.width:i.width,height:e?i.height:n.height}}else{var i=r.getArea(),a=t;return{cx:i.cx,cy:i.cy,r0:e?i.r0:a.r0,r:e?i.r:a.r,startAngle:e?a.startAngle:0,endAngle:e?a.endAngle:Math.PI*2}}}function BQ(e,t,r){var n=e.type==="polar"?Eo:Gt;return new n({shape:nD(t,r,e),silent:!0,z2:0})}const FQ=EQ;function $Q(e){e.registerChartView(FQ),e.registerSeriesModel(CQ),e.registerLayout(e.PRIORITY.VISUAL.LAYOUT,Ot(mZ,"bar")),e.registerLayout(e.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,yZ("bar")),e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC,SQ("bar")),e.registerAction({type:"changeAxisOrder",event:"changeAxisOrder",update:"update"},function(t,r){var n=t.componentType||"series";r.eachComponent({mainType:n,query:t},function(i){t.sortInfo&&i.axis.setCategorySortInfo(t.sortInfo)})})}var _c=Math.PI*2,jx=Math.PI/180;function iD(e,t){return Ls(e.getBoxLayoutParams(),{width:t.getWidth(),height:t.getHeight()})}function aD(e,t){var r=iD(e,t),n=e.get("center"),i=e.get("radius");ye(i)||(i=[0,i]);var a=yt(r.width,t.getWidth()),o=yt(r.height,t.getHeight()),s=Math.min(a,o),l=yt(i[0],s/2),u=yt(i[1],s/2),f,c,h=e.coordinateSystem;if(h){var d=h.dataToPoint(n);f=d[0]||0,c=d[1]||0}else ye(n)||(n=[n,n]),f=yt(n[0],a)+r.x,c=yt(n[1],o)+r.y;return{cx:f,cy:c,r0:l,r:u}}function HQ(e,t,r){t.eachSeriesByType(e,function(n){var i=n.getData(),a=i.mapDimension("value"),o=iD(n,r),s=aD(n,r),l=s.cx,u=s.cy,f=s.r,c=s.r0,h=-n.get("startAngle")*jx,d=n.get("minAngle")*jx,v=0;i.each(a,function(A){!isNaN(A)&&v++});var p=i.getSum(a),m=Math.PI/(p||v)*2,g=n.get("clockwise"),y=n.get("roseType"),_=n.get("stillShowZeroSum"),b=i.getDataExtent(a);b[0]=0;var x=_c,w=0,S=h,C=g?1:-1;if(i.setLayout({viewRect:o,r:f}),i.each(a,function(A,P){var E;if(isNaN(A)){i.setItemLayout(P,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:g,cx:l,cy:u,r0:c,r:y?NaN:f});return}y!=="area"?E=p===0&&_?m:A*m:E=_c/v,Er?g:m,x=Math.abs(_.label.y-r);if(x>=b.maxY){var w=_.label.x-t-_.len2*i,S=n+_.len,C=Math.abs(w)e.unconstrainedWidth?null:d:null;n.setStyle("width",v)}var p=n.getBoundingRect();a.width=p.width;var m=(n.style.margin||0)+2.1;a.height=p.height+m,a.y-=(a.height-c)/2}}}function Ap(e){return e.position==="center"}function GQ(e){var t=e.getData(),r=[],n,i,a=!1,o=(e.get("minShowLabelAngle")||0)*VQ,s=t.getLayout("viewRect"),l=t.getLayout("r"),u=s.width,f=s.x,c=s.y,h=s.height;function d(w){w.ignore=!0}function v(w){if(!w.ignore)return!0;for(var S in w.states)if(w.states[S].ignore===!1)return!0;return!1}t.each(function(w){var S=t.getItemGraphicEl(w),C=S.shape,M=S.getTextContent(),A=S.getTextGuideLine(),P=t.getItemModel(w),E=P.getModel("label"),L=E.get("position")||P.get(["emphasis","label","position"]),O=E.get("distanceToLabelLine"),N=E.get("alignTo"),H=yt(E.get("edgeDistance"),u),V=E.get("bleedMargin"),U=P.getModel("labelLine"),F=U.get("length");F=yt(F,u);var z=U.get("length2");if(z=yt(z,u),Math.abs(C.endAngle-C.startAngle)0?"right":"left":J>0?"left":"right"}var W=Math.PI,X=0,q=E.get("rotate");if(Tt(q))X=q*(W/180);else if(L==="center")X=0;else if(q==="radial"||q===!0){var le=J<0?-te+W:-te;X=le}else if(q==="tangential"&&L!=="outside"&&L!=="outer"){var fe=Math.atan2(J,me);fe<0&&(fe=W*2+fe);var ae=me>0;ae&&(fe=W+fe),X=fe-W}if(a=!!X,M.x=Se,M.y=$e,M.rotation=X,M.setStyle({verticalAlign:"middle"}),Y){M.setStyle({align:B});var he=M.states.select;he&&(he.x+=M.x,he.y+=M.y)}else{var se=M.getBoundingRect().clone();se.applyTransform(M.getComputedTransform());var ne=(M.style.margin||0)+2.1;se.y-=ne/2,se.height+=ne,r.push({label:M,labelLine:A,position:L,len:F,len2:z,minTurnAngle:U.get("minTurnAngle"),maxSurfaceAngle:U.get("maxSurfaceAngle"),surfaceNormal:new Fe(J,me),linePoints:Ie,textAlign:B,labelDistance:O,labelAlignTo:N,edgeDistance:H,bleedMargin:V,rect:se,unconstrainedWidth:se.width,labelStyleWidth:M.style.width})}S.setTextConfig({inside:Y})}}),!a&&e.get("avoidLabelOverlap")&&WQ(r,n,i,l,u,h,f,c);for(var p=0;p0){for(var f=o.getItemLayout(0),c=1;isNaN(f&&f.startAngle)&&c=a.r0}},t.type="pie",t}(ho);const jQ=YQ;function qQ(e,t,r){t=ye(t)&&{coordDimensions:t}||ue({encodeDefine:e.getEncode()},t);var n=e.getSource(),i=TL(n,t).dimensions,a=new CL(i,e);return a.initData(n,r),a}var KQ=function(){function e(t,r){this._getDataWithEncodedVisual=t,this._getRawData=r}return e.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},e.prototype.containName=function(t){var r=this._getRawData();return r.indexOfName(t)>=0},e.prototype.indexOfName=function(t){var r=this._getDataWithEncodedVisual();return r.indexOfName(t)},e.prototype.getItemVisual=function(t,r){var n=this._getDataWithEncodedVisual();return n.getItemVisual(t,r)},e}();const XQ=KQ;var ZQ=Et(),QQ=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.init=function(r){e.prototype.init.apply(this,arguments),this.legendVisualProvider=new XQ(xt(this.getData,this),xt(this.getRawData,this)),this._defaultLabelLine(r)},t.prototype.mergeOption=function(){e.prototype.mergeOption.apply(this,arguments)},t.prototype.getInitialData=function(){return qQ(this,{coordDimensions:["value"],encodeDefaulter:Ot(Xj,this)})},t.prototype.getDataParams=function(r){var n=this.getData(),i=ZQ(n),a=i.seats;if(!a){var o=[];n.each(n.mapDimension("value"),function(l){o.push(l)}),a=i.seats=R9(o,n.hostModel.get("percentPrecision"))}var s=e.prototype.getDataParams.call(this,r);return s.percent=a[r]||0,s.$vars.push("percent"),s},t.prototype._defaultLabelLine=function(r){em(r,"labelLine",["show"]);var n=r.labelLine,i=r.emphasis.labelLine;n.show=n.show&&r.label.show,i.show=i.show&&r.emphasis.label.show},t.type="series.pie",t.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},t}(So);const JQ=QQ;function eJ(e){return{seriesType:e,reset:function(t,r){var n=t.getData();n.filterSelf(function(i){var a=n.mapDimension("value"),o=n.get(a,i);return!(Tt(o)&&!isNaN(o)&&o<0)})}}}function tJ(e){e.registerChartView(jQ),e.registerSeriesModel(JQ),kK("pie",e.registerAction),e.registerLayout(Ot(HQ,"pie")),e.registerProcessor(zQ("pie")),e.registerProcessor(eJ("pie"))}var rJ=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.type="grid",t.dependencies=["xAxis","yAxis"],t.layoutMode="box",t.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},t}(Mt);const nJ=rJ;var Om=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Tn).models[0]},t.type="cartesian2dAxis",t}(Mt);ni(Om,WZ);var sD={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},iJ=st({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},sD),a_=st({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},sD),aJ=st({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},a_),oJ=ht({logBase:10},a_);const sJ={category:iJ,value:a_,time:aJ,log:oJ};var lJ={value:1,category:1,time:1,log:1};function Kx(e,t,r,n){R(lJ,function(i,a){var o=st(st({},sJ[a],!0),n,!0),s=function(l){ge(u,l);function u(){var f=l!==null&&l.apply(this,arguments)||this;return f.type=t+"Axis."+a,f}return u.prototype.mergeDefaultAndTheme=function(f,c){var h=Nu(this),d=h?Rh(f):{},v=c.getTheme();st(f,v.get(a+"Axis")),st(f,this.getDefaultOption()),f.type=Xx(f),h&&Ds(f,d,h)},u.prototype.optionUpdated=function(){var f=this.option;f.type==="category"&&(this.__ordinalMeta=Lm.createByAxisModel(this))},u.prototype.getCategories=function(f){var c=this.option;if(c.type==="category")return f?c.data:this.__ordinalMeta.categories},u.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},u.type=t+"Axis."+a,u.defaultOption=o,u}(r);e.registerComponentModel(s)}),e.registerSubTypeDefaulter(t+"Axis",Xx)}function Xx(e){return e.type||(e.data?"category":"value")}var uJ=function(){function e(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return e.prototype.getAxis=function(t){return this._axes[t]},e.prototype.getAxes=function(){return Ne(this._dimList,function(t){return this._axes[t]},this)},e.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),jt(this.getAxes(),function(r){return r.scale.type===t})},e.prototype.addAxis=function(t){var r=t.dim;this._axes[r]=t,this._dimList.push(r)},e}();const fJ=uJ;var Rm=["x","y"];function Zx(e){return e.type==="interval"||e.type==="time"}var cJ=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type="cartesian2d",r.dimensions=Rm,r}return t.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var r=this.getAxis("x").scale,n=this.getAxis("y").scale;if(!(!Zx(r)||!Zx(n))){var i=r.getExtent(),a=n.getExtent(),o=this.dataToPoint([i[0],a[0]]),s=this.dataToPoint([i[1],a[1]]),l=i[1]-i[0],u=a[1]-a[0];if(!(!l||!u)){var f=(s[0]-o[0])/l,c=(s[1]-o[1])/u,h=o[0]-i[0]*f,d=o[1]-a[0]*c,v=this._transform=[f,0,0,c,h,d];this._invTransform=bh([],v)}}},t.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},t.prototype.containPoint=function(r){var n=this.getAxis("x"),i=this.getAxis("y");return n.contain(n.toLocalCoord(r[0]))&&i.contain(i.toLocalCoord(r[1]))},t.prototype.containData=function(r){return this.getAxis("x").containData(r[0])&&this.getAxis("y").containData(r[1])},t.prototype.containZone=function(r,n){var i=this.dataToPoint(r),a=this.dataToPoint(n),o=this.getArea(),s=new nt(i[0],i[1],a[0]-i[0],a[1]-i[1]);return o.intersect(s)},t.prototype.dataToPoint=function(r,n,i){i=i||[];var a=r[0],o=r[1];if(this._transform&&a!=null&&isFinite(a)&&o!=null&&isFinite(o))return un(i,r,this._transform);var s=this.getAxis("x"),l=this.getAxis("y");return i[0]=s.toGlobalCoord(s.dataToCoord(a,n)),i[1]=l.toGlobalCoord(l.dataToCoord(o,n)),i},t.prototype.clampData=function(r,n){var i=this.getAxis("x").scale,a=this.getAxis("y").scale,o=i.getExtent(),s=a.getExtent(),l=i.parse(r[0]),u=a.parse(r[1]);return n=n||[],n[0]=Math.min(Math.max(Math.min(o[0],o[1]),l),Math.max(o[0],o[1])),n[1]=Math.min(Math.max(Math.min(s[0],s[1]),u),Math.max(s[0],s[1])),n},t.prototype.pointToData=function(r,n){var i=[];if(this._invTransform)return un(i,r,this._invTransform);var a=this.getAxis("x"),o=this.getAxis("y");return i[0]=a.coordToData(a.toLocalCoord(r[0]),n),i[1]=o.coordToData(o.toLocalCoord(r[1]),n),i},t.prototype.getOtherAxis=function(r){return this.getAxis(r.dim==="x"?"y":"x")},t.prototype.getArea=function(){var r=this.getAxis("x").getGlobalExtent(),n=this.getAxis("y").getGlobalExtent(),i=Math.min(r[0],r[1]),a=Math.min(n[0],n[1]),o=Math.max(r[0],r[1])-i,s=Math.max(n[0],n[1])-a;return new nt(i,a,o,s)},t}(fJ),dJ=function(e){ge(t,e);function t(r,n,i,a,o){var s=e.call(this,r,n,i)||this;return s.index=0,s.type=a||"value",s.position=o||"bottom",s}return t.prototype.isHorizontal=function(){var r=this.position;return r==="top"||r==="bottom"},t.prototype.getGlobalExtent=function(r){var n=this.getExtent();return n[0]=this.toGlobalCoord(n[0]),n[1]=this.toGlobalCoord(n[1]),r&&n[0]>n[1]&&n.reverse(),n},t.prototype.pointToData=function(r,n){return this.coordToData(this.toLocalCoord(r[this.dim==="x"?0:1]),n)},t.prototype.setCategorySortInfo=function(r){if(this.type!=="category")return!1;this.model.option.categorySortInfo=r,this.scale.setSortInfo(r)},t}(tQ);const hJ=dJ;function km(e,t,r){r=r||{};var n=e.coordinateSystem,i=t.axis,a={},o=i.getAxesOnZeroOf()[0],s=i.position,l=o?"onZero":s,u=i.dim,f=n.getRect(),c=[f.x,f.x+f.width,f.y,f.y+f.height],h={left:0,right:1,top:0,bottom:1,onZero:2},d=t.get("offset")||0,v=u==="x"?[c[2]-d,c[3]+d]:[c[0]-d,c[1]+d];if(o){var p=o.toGlobalCoord(o.dataToCoord(0));v[h.onZero]=Math.max(Math.min(p,v[1]),v[0])}a.position=[u==="y"?v[h[l]]:c[0],u==="x"?v[h[l]]:c[3]],a.rotation=Math.PI/2*(u==="x"?0:1);var m={top:-1,bottom:1,left:-1,right:1};a.labelDirection=a.tickDirection=a.nameDirection=m[s],a.labelOffset=o?v[h[s]]-v[h.onZero]:0,t.get(["axisTick","inside"])&&(a.tickDirection=-a.tickDirection),Au(r.labelInside,t.get(["axisLabel","inside"]))&&(a.labelDirection=-a.labelDirection);var g=t.get(["axisLabel","rotate"]);return a.labelRotate=l==="top"?-g:g,a.z2=1,a}function Qx(e){return e.get("coordinateSystem")==="cartesian2d"}function Jx(e){var t={xAxisModel:null,yAxisModel:null};return R(t,function(r,n){var i=n.replace(/Model$/,""),a=e.getReferringComponents(i,Tn).models[0];t[n]=a}),t}var Pp=Math.log;function vJ(e,t,r){var n=df.prototype,i=n.getTicks.call(r),a=n.getTicks.call(r,!0),o=i.length-1,s=n.getInterval.call(r),l=$L(e,t),u=l.extent,f=l.fixMin,c=l.fixMax;if(e.type==="log"){var h=Pp(e.base);u=[Pp(u[0])/h,Pp(u[1])/h]}e.setExtent(u[0],u[1]),e.calcNiceExtent({splitNumber:o,fixMin:f,fixMax:c});var d=n.getExtent.call(e);f&&(u[0]=d[0]),c&&(u[1]=d[1]);var v=n.getInterval.call(e),p=u[0],m=u[1];if(f&&c)v=(m-p)/o;else if(f)for(m=u[0]+v*o;mu[0]&&isFinite(p)&&isFinite(u[0]);)v=wp(v),p=u[1]-v*o;else{var g=e.getTicks().length-1;g>o&&(v=wp(v));var y=v*o;m=Math.ceil(u[1]/v)*v,p=Ft(m-y),p<0&&u[0]>=0?(p=0,m=Ft(y)):m>0&&u[1]<=0&&(m=0,p=-Ft(y))}var _=(i[0].value-a[0].value)/s,b=(i[o].value-a[o].value)/s;n.setExtent.call(e,p+v*_,m+v*b),n.setInterval.call(e,v),(_||b)&&n.setNiceExtent.call(e,p+v,m-v)}var pJ=function(){function e(t,r,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=Rm,this._initCartesian(t,r,n),this.model=t}return e.prototype.getRect=function(){return this._rect},e.prototype.update=function(t,r){var n=this._axesMap;this._updateScale(t,this.model);function i(o){var s,l=Ct(o),u=l.length;if(u){for(var f=[],c=u-1;c>=0;c--){var h=+l[c],d=o[h],v=d.model,p=d.scale;Dm(p)&&v.get("alignTicks")&&v.get("interval")==null?f.push(d):(Lx(p,v),Dm(p)&&(s=d))}f.length&&(s||(s=f.pop(),Lx(s.scale,s.model)),R(f,function(m){vJ(m.scale,m.model,s.scale)}))}}i(n.x),i(n.y);var a={};R(n.x,function(o){eC(n,"y",o,a)}),R(n.y,function(o){eC(n,"x",o,a)}),this.resize(this.model,r)},e.prototype.resize=function(t,r,n){var i=t.getBoxLayoutParams(),a=!n&&t.get("containLabel"),o=Ls(i,{width:r.getWidth(),height:r.getHeight()});this._rect=o;var s=this._axesList;l(),a&&(R(s,function(u){if(!u.model.get(["axisLabel","inside"])){var f=HZ(u);if(f){var c=u.isHorizontal()?"height":"width",h=u.model.get(["axisLabel","margin"]);o[c]-=f[c]+h,u.position==="top"?o.y+=f.height+h:u.position==="left"&&(o.x+=f.width+h)}}}),l()),R(this._coordsList,function(u){u.calcAffineTransform()});function l(){R(s,function(u){var f=u.isHorizontal(),c=f?[0,o.width]:[0,o.height],h=u.inverse?1:0;u.setExtent(c[h],c[1-h]),gJ(u,f?o.x:o.y)})}},e.prototype.getAxis=function(t,r){var n=this._axesMap[t];if(n!=null)return n[r||0]},e.prototype.getAxes=function(){return this._axesList.slice()},e.prototype.getCartesian=function(t,r){if(t!=null&&r!=null){var n="x"+t+"y"+r;return this._coordsMap[n]}Re(t)&&(r=t.yAxisIndex,t=t.xAxisIndex);for(var i=0,a=this._coordsList;i0?"top":"bottom",a="center"):Ad(i-ea)?(o=n>0?"bottom":"top",a="center"):(o="middle",i>0&&i0?"right":"left":a=n>0?"left":"right"),{rotation:i,textAlign:a,textVerticalAlign:o}},e.makeAxisEventDataBase=function(t){var r={componentType:t.mainType,componentIndex:t.componentIndex};return r[t.mainType+"Index"]=t.componentIndex,r},e.isLabelSilent=function(t){var r=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||r&&r.show)},e}(),rC={axisLine:function(e,t,r,n){var i=t.get(["axisLine","show"]);if(i==="auto"&&e.handleAutoShown&&(i=e.handleAutoShown("axisLine")),!!i){var a=t.axis.getExtent(),o=n.transform,s=[a[0],0],l=[a[1],0],u=s[0]>l[0];o&&(un(s,s,o),un(l,l,o));var f=ue({lineCap:"round"},t.getModel(["axisLine","lineStyle"]).getLineStyle()),c=new wo({shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:f,strokeContainThreshold:e.strokeContainThreshold||5,silent:!0,z2:1});Iu(c.shape,c.style.lineWidth),c.anid="line",r.add(c);var h=t.get(["axisLine","symbol"]);if(h!=null){var d=t.get(["axisLine","symbolSize"]);Ee(h)&&(h=[h,h]),(Ee(d)||Tt(d))&&(d=[d,d]);var v=qK(t.get(["axisLine","symbolOffset"])||0,d),p=d[0],m=d[1];R([{rotate:e.rotation+Math.PI/2,offset:v[0],r:0},{rotate:e.rotation-Math.PI/2,offset:v[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],function(g,y){if(h[y]!=="none"&&h[y]!=null){var _=j0(h[y],-p/2,-m/2,p,m,f.stroke,!0),b=g.r+g.offset,x=u?l:s;_.attr({rotation:g.rotate,x:x[0]+b*Math.cos(e.rotation),y:x[1]-b*Math.sin(e.rotation),silent:!0,z2:11}),r.add(_)}})}}},axisTickLabel:function(e,t,r,n){var i=bJ(r,n,t,e),a=SJ(r,n,t,e);if(_J(t,a,i),wJ(r,n,t,e.tickDirection),t.get(["axisLabel","hideOverlap"])){var o=ZL(Ne(a,function(s){return{label:s,priority:s.z2,defaultAttr:{ignore:s.ignore}}}));eD(o)}},axisName:function(e,t,r,n){var i=Au(e.axisName,t.get("name"));if(i){var a=t.get("nameLocation"),o=e.nameDirection,s=t.getModel("nameTextStyle"),l=t.get("nameGap")||0,u=t.axis.getExtent(),f=u[0]>u[1]?-1:1,c=[a==="start"?u[0]-f*l:a==="end"?u[1]+f*l:(u[0]+u[1])/2,iC(a)?e.labelOffset+o*l:0],h,d=t.get("nameRotate");d!=null&&(d=d*ea/180);var v;iC(a)?h=vo.innerTextLayout(e.rotation,d??e.rotation,o):(h=yJ(e.rotation,a,d||0,u),v=e.axisNameAvailableWidth,v!=null&&(v=Math.abs(v/Math.sin(h.rotation)),!isFinite(v)&&(v=null)));var p=s.getFont(),m=t.get("nameTruncate",!0)||{},g=m.ellipsis,y=Au(e.nameTruncateMaxWidth,m.maxWidth,v),_=new mr({x:c[0],y:c[1],rotation:h.rotation,silent:vo.isLabelSilent(t),style:ha(s,{text:i,font:p,overflow:"truncate",width:y,ellipsis:g,fill:s.getTextColor()||t.get(["axisLine","lineStyle","color"]),align:s.get("align")||h.textAlign,verticalAlign:s.get("verticalAlign")||h.textVerticalAlign}),z2:1});if(A0({el:_,componentModel:t,itemName:i}),_.__fullText=i,_.anid="name",t.get("triggerEvent")){var b=vo.makeAxisEventDataBase(t);b.targetType="axisName",b.name=i,dt(_).eventData=b}n.add(_),_.updateTransform(),r.add(_),_.decomposeTransform()}}};function yJ(e,t,r,n){var i=j2(r-e),a,o,s=n[0]>n[1],l=t==="start"&&!s||t!=="start"&&s;return Ad(i-ea/2)?(o=l?"bottom":"top",a="center"):Ad(i-ea*1.5)?(o=l?"top":"bottom",a="center"):(o="middle",iea/2?a=l?"left":"right":a=l?"right":"left"),{rotation:i,textAlign:a,textVerticalAlign:o}}function _J(e,t,r){if(!HL(e.axis)){var n=e.get(["axisLabel","showMinLabel"]),i=e.get(["axisLabel","showMaxLabel"]);t=t||[],r=r||[];var a=t[0],o=t[1],s=t[t.length-1],l=t[t.length-2],u=r[0],f=r[1],c=r[r.length-1],h=r[r.length-2];n===!1?(Kr(a),Kr(u)):nC(a,o)&&(n?(Kr(o),Kr(f)):(Kr(a),Kr(u))),i===!1?(Kr(s),Kr(c)):nC(l,s)&&(i?(Kr(l),Kr(h)):(Kr(s),Kr(c)))}}function Kr(e){e&&(e.ignore=!0)}function nC(e,t){var r=e&&e.getBoundingRect().clone(),n=t&&t.getBoundingRect().clone();if(!(!r||!n)){var i=a0([]);return o0(i,i,-e.rotation),r.applyTransform(ls([],i,e.getLocalTransform())),n.applyTransform(ls([],i,t.getLocalTransform())),r.intersect(n)}}function iC(e){return e==="middle"||e==="center"}function lD(e,t,r,n,i){for(var a=[],o=[],s=[],l=0;l=0||e===t}function PJ(e){var t=o_(e);if(t){var r=t.axisPointerModel,n=t.axis.scale,i=r.option,a=r.get("status"),o=r.get("value");o!=null&&(o=n.parse(o));var s=Nm(r);a==null&&(i.status=s?"show":"hide");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(o==null||o>l[1])&&(o=l[1]),o=s)}}for(var c=this.__startIndex;c15)break}}O.prevElClipPaths&&g.restore()};if(y)if(y.length===0)C=m.__endIndex;else for(var A=d.dpr,P=0;P0&&t>i[0]){for(l=0;lt);l++);s=n[i[l]]}if(i.splice(l+1,0,t),n[t]=r,!r.virtual)if(s){var u=s.dom;u.nextSibling?o.insertBefore(r.dom,u.nextSibling):o.appendChild(r.dom)}else o.firstChild?o.insertBefore(r.dom,o.firstChild):o.appendChild(r.dom);r.__painter=this}},e.prototype.eachLayer=function(t,r){for(var n=this._zlevelList,i=0;i0?bc:0),this._needsManuallyCompositing),f.__builtin__||r0("ZLevel "+u+" has been used by unkown layer "+f.id),f!==a&&(f.__used=!0,f.__startIndex!==l&&(f.__dirty=!0),f.__startIndex=l,f.incremental?f.__drawIndex=-1:f.__drawIndex=l,r(l),a=f),i.__dirty&Br&&!i.__inHover&&(f.__dirty=!0,f.incremental&&f.__drawIndex<0&&(f.__drawIndex=l))}r(l),this.eachBuiltinLayer(function(c,h){!c.__used&&c.getElementCount()>0&&(c.__dirty=!0,c.__startIndex=c.__endIndex=c.__drawIndex=0),c.__dirty&&c.__drawIndex<0&&(c.__drawIndex=c.__startIndex)})},e.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},e.prototype._clearLayer=function(t){t.clear()},e.prototype.setBackgroundColor=function(t){this._backgroundColor=t,R(this._layers,function(r){r.setUnpainted()})},e.prototype.configLayer=function(t,r){if(r){var n=this._layerConfig;n[t]?st(n[t],r,!0):n[t]=r;for(var i=0;is)return!0;if(o){var l=o_(t).seriesDataCount,u=i.getExtent();return Math.abs(u[0]-u[1])/l>s}return!1}return n===!0},e.prototype.makeElOption=function(t,r,n,i,a){},e.prototype.createPointerEl=function(t,r,n,i){var a=r.pointer;if(a){var o=Ka(t).pointerEl=new mj[a.type](uC(r.pointer));t.add(o)}},e.prototype.createLabelEl=function(t,r,n,i){if(r.label){var a=Ka(t).labelEl=new mr(uC(r.label));t.add(a),cC(a,i)}},e.prototype.updatePointerEl=function(t,r,n){var i=Ka(t).pointerEl;i&&r.pointer&&(i.setStyle(r.pointer.style),n(i,{shape:r.pointer.shape}))},e.prototype.updateLabelEl=function(t,r,n,i){var a=Ka(t).labelEl;a&&(a.setStyle(r.label.style),n(a,{x:r.label.x,y:r.label.y}),cC(a,i))},e.prototype._renderHandle=function(t){if(!(this._dragging||!this.updateHandleTransform)){var r=this._axisPointerModel,n=this._api.getZr(),i=this._handle,a=r.getModel("handle"),o=r.get("status");if(!a.get("show")||!o||o==="hide"){i&&n.remove(i),this._handle=null;return}var s;this._handle||(s=!0,i=this._handle=M0(a.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(u){C2(u.event)},onmousedown:Ip(this._onHandleDragMove,this,0,0),drift:Ip(this._onHandleDragMove,this),ondragend:Ip(this._onHandleDragEnd,this)}),n.add(i)),dC(i,r,!1),i.setStyle(a.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var l=a.get("size");ye(l)||(l=[l,l]),i.scaleX=l[0]/2,i.scaleY=l[1]/2,VE(this,"_doDispatchAxisPointer",a.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,s)}},e.prototype._moveHandleToValue=function(t,r){fC(this._axisPointerModel,!r&&this._moveAnimation,this._handle,Op(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},e.prototype._onHandleDragMove=function(t,r){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(Op(n),[t,r],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(Op(i)),Ka(n).lastProp=null,this._doDispatchAxisPointer()}},e.prototype._doDispatchAxisPointer=function(){var t=this._handle;if(t){var r=this._payloadInfo,n=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:r.cursorPoint[0],y:r.cursorPoint[1],tooltipOption:r.tooltipOption,axesInfo:[{axisDim:n.axis.dim,axisIndex:n.componentIndex}]})}},e.prototype._onHandleDragEnd=function(){this._dragging=!1;var t=this._handle;if(t){var r=this._axisPointerModel.get("value");this._moveHandleToValue(r),this._api.dispatchAction({type:"hideTip"})}},e.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var r=t.getZr(),n=this._group,i=this._handle;r&&n&&(this._lastGraphicKey=null,n&&r.remove(n),i&&r.remove(i),this._group=null,this._handle=null,this._payloadInfo=null),wm(this,"_doDispatchAxisPointer")},e.prototype.doClear=function(){},e.prototype.buildLabel=function(t,r,n){return n=n||0,{x:t[n],y:t[1-n],width:r[n],height:r[1-n]}},e}();function fC(e,t,r,n){hD(Ka(r).lastProp,n)||(Ka(r).lastProp=n,t?Or(r,n,e):(r.stopAnimation(),r.attr(n)))}function hD(e,t){if(Re(e)&&Re(t)){var r=!0;return R(t,function(n,i){r=r&&hD(e[i],n)}),!!r}else return e===t}function cC(e,t){e[t.get(["label","show"])?"show":"hide"]()}function Op(e){return{x:e.x||0,y:e.y||0,rotation:e.rotation||0}}function dC(e,t,r){var n=t.get("z"),i=t.get("zlevel");e&&e.traverse(function(a){a.type!=="group"&&(n!=null&&(a.z=n),i!=null&&(a.zlevel=i),a.silent=r)})}const YJ=UJ;function jJ(e){var t=e.get("type"),r=e.getModel(t+"Style"),n;return t==="line"?(n=r.getLineStyle(),n.fill=null):t==="shadow"&&(n=r.getAreaStyle(),n.stroke=null),n}function qJ(e,t,r,n,i){var a=r.get("value"),o=vD(a,t.axis,t.ecModel,r.get("seriesDataIndices"),{precision:r.get(["label","precision"]),formatter:r.get(["label","formatter"])}),s=r.getModel("label"),l=Oh(s.get("padding")||0),u=s.getFont(),f=u0(o,u),c=i.position,h=f.width+l[1]+l[3],d=f.height+l[0]+l[2],v=i.align;v==="right"&&(c[0]-=h),v==="center"&&(c[0]-=h/2);var p=i.verticalAlign;p==="bottom"&&(c[1]-=d),p==="middle"&&(c[1]-=d/2),KJ(c,h,d,n);var m=s.get("backgroundColor");(!m||m==="auto")&&(m=t.get(["axisLine","lineStyle","color"])),e.label={x:c[0],y:c[1],style:ha(s,{text:o,font:u,fill:s.getTextColor(),padding:l,backgroundColor:m}),z2:10}}function KJ(e,t,r,n){var i=n.getWidth(),a=n.getHeight();e[0]=Math.min(e[0]+t,i)-t,e[1]=Math.min(e[1]+r,a)-r,e[0]=Math.max(e[0],0),e[1]=Math.max(e[1],0)}function vD(e,t,r,n,i){e=t.scale.parse(e);var a=t.scale.getLabel({value:e},{precision:i.precision}),o=i.formatter;if(o){var s={value:n_(t,{value:e}),axisDimension:t.dim,axisIndex:t.index,seriesData:[]};R(n,function(l){var u=r.getSeriesByIndex(l.seriesIndex),f=l.dataIndexInside,c=u&&u.getDataParams(f);c&&s.seriesData.push(c)}),Ee(o)?a=o.replace("{value}",a):Ye(o)&&(a=o(s))}return a}function pD(e,t,r){var n=Pu();return o0(n,n,r.rotation),Vg(n,n,r.position),T0([e.dataToCoord(t),(r.labelOffset||0)+(r.labelDirection||1)*(r.labelMargin||0)],n)}function XJ(e,t,r,n,i,a){var o=uD.innerTextLayout(r.rotation,0,r.labelDirection);r.labelMargin=i.get(["label","margin"]),qJ(t,n,i,a,{position:pD(n.axis,e,r),align:o.textAlign,verticalAlign:o.textVerticalAlign})}function ZJ(e,t,r){return r=r||0,{x1:e[r],y1:e[1-r],x2:t[r],y2:t[1-r]}}function QJ(e,t,r){return r=r||0,{x:e[r],y:e[1-r],width:t[r],height:t[1-r]}}var JJ=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.makeElOption=function(r,n,i,a,o){var s=i.axis,l=s.grid,u=a.get("type"),f=hC(l,s).getOtherAxis(s).getGlobalExtent(),c=s.toGlobalCoord(s.dataToCoord(n,!0));if(u&&u!=="none"){var h=jJ(a),d=eee[u](s,c,f);d.style=h,r.graphicKey=d.type,r.pointer=d}var v=km(l.model,i);XJ(n,r,v,i,a,o)},t.prototype.getHandleTransform=function(r,n,i){var a=km(n.axis.grid.model,n,{labelInside:!1});a.labelMargin=i.get(["handle","margin"]);var o=pD(n.axis,r,a);return{x:o[0],y:o[1],rotation:a.rotation+(a.labelDirection<0?Math.PI:0)}},t.prototype.updateHandleTransform=function(r,n,i,a){var o=i.axis,s=o.grid,l=o.getGlobalExtent(!0),u=hC(s,o).getOtherAxis(o).getGlobalExtent(),f=o.dim==="x"?0:1,c=[r.x,r.y];c[f]+=n[f],c[f]=Math.min(l[1],c[f]),c[f]=Math.max(l[0],c[f]);var h=(u[1]+u[0])/2,d=[h,h];d[f]=c[f];var v=[{verticalAlign:"middle"},{align:"center"}];return{x:c[0],y:c[1],rotation:r.rotation,cursorPoint:d,tooltipOption:v[f]}},t}(YJ);function hC(e,t){var r={};return r[t.dim+"AxisIndex"]=t.index,e.getCartesian(r)}var eee={line:function(e,t,r){var n=ZJ([t,r[0]],[t,r[1]],vC(e));return{type:"Line",subPixelOptimize:!0,shape:n}},shadow:function(e,t,r){var n=Math.max(1,e.getBandWidth()),i=r[1]-r[0];return{type:"Rect",shape:QJ([t-n/2,r[0]],[n,i],vC(e))}}};function vC(e){return e.dim==="x"?0:1}const tee=JJ;var ree=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.type="axisPointer",t.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},t}(Mt);const nee=ree;var gi=Et(),iee=R;function gD(e,t,r){if(!He.node){var n=t.getZr();gi(n).records||(gi(n).records={}),aee(n,t);var i=gi(n).records[e]||(gi(n).records[e]={});i.handler=r}}function aee(e,t){if(gi(e).initialized)return;gi(e).initialized=!0,r("click",Ot(pC,"click")),r("mousemove",Ot(pC,"mousemove")),r("globalout",see);function r(n,i){e.on(n,function(a){var o=lee(t);iee(gi(e).records,function(s){s&&i(s,a,o.dispatchAction)}),oee(o.pendings,t)})}}function oee(e,t){var r=e.showTip.length,n=e.hideTip.length,i;r?i=e.showTip[r-1]:n&&(i=e.hideTip[n-1]),i&&(i.dispatchAction=null,t.dispatchAction(i))}function see(e,t,r){e.handler("leave",null,r)}function pC(e,t,r,n){t.handler(e,r,n)}function lee(e){var t={showTip:[],hideTip:[]},r=function(n){var i=t[n.type];i?i.push(n):(n.dispatchAction=r,e.dispatchAction(n))};return{dispatchAction:r,pendings:t}}function Fm(e,t){if(!He.node){var r=t.getZr(),n=(gi(r).records||{})[e];n&&(gi(r).records[e]=null)}}var uee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.render=function(r,n,i){var a=n.getComponent("tooltip"),o=r.get("triggerOn")||a&&a.get("triggerOn")||"mousemove|click";gD("axisPointer",i,function(s,l,u){o!=="none"&&(s==="leave"||o.indexOf(s)>=0)&&u({type:"updateAxisPointer",currTrigger:s,x:l&&l.offsetX,y:l&&l.offsetY})})},t.prototype.remove=function(r,n){Fm("axisPointer",n)},t.prototype.dispose=function(r,n){Fm("axisPointer",n)},t.type="axisPointer",t}(Mi);const fee=uee;function mD(e,t){var r=[],n=e.seriesIndex,i;if(n==null||!(i=t.getSeriesByIndex(n)))return{point:[]};var a=i.getData(),o=sf(a,e);if(o==null||o<0||ye(o))return{point:[]};var s=a.getItemGraphicEl(o),l=i.coordinateSystem;if(i.getTooltipPosition)r=i.getTooltipPosition(o)||[];else if(l&&l.dataToPoint)if(e.isStacked){var u=l.getBaseAxis(),f=l.getOtherAxis(u),c=f.dim,h=u.dim,d=c==="x"||c==="radius"?1:0,v=a.mapDimension(h),p=[];p[d]=a.get(v,o),p[1-d]=a.get(a.getCalculationInfo("stackResultDimension"),o),r=l.dataToPoint(p)||[]}else r=l.dataToPoint(a.getValues(Ne(l.dimensions,function(g){return a.mapDimension(g)}),o))||[];else if(s){var m=s.getBoundingRect().clone();m.applyTransform(s.transform),r=[m.x+m.width/2,m.y+m.height/2]}return{point:r,el:s}}var gC=Et();function cee(e,t,r){var n=e.currTrigger,i=[e.x,e.y],a=e,o=e.dispatchAction||xt(r.dispatchAction,r),s=t.getComponent("axisPointer").coordSysAxesInfo;if(s){Zc(i)&&(i=mD({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},t).point);var l=Zc(i),u=a.axesInfo,f=s.axesInfo,c=n==="leave"||Zc(i),h={},d={},v={list:[],map:{}},p={showPointer:Ot(hee,d),showTooltip:Ot(vee,v)};R(s.coordSysMap,function(g,y){var _=l||g.containPoint(i);R(s.coordSysAxesInfo[y],function(b,x){var w=b.axis,S=yee(u,b);if(!c&&_&&(!u||S)){var C=S&&S.value;C==null&&!l&&(C=w.pointToData(i)),C!=null&&mC(b,C,p,!1,h)}})});var m={};return R(f,function(g,y){var _=g.linkGroup;_&&!d[y]&&R(_.axesInfo,function(b,x){var w=d[x];if(b!==g&&w){var S=w.value;_.mapper&&(S=g.axis.scale.parse(_.mapper(S,yC(b),yC(g)))),m[g.key]=S}})}),R(m,function(g,y){mC(f[y],g,p,!0,h)}),pee(d,f,h),gee(v,i,e,o),mee(f,o,r),h}}function mC(e,t,r,n,i){var a=e.axis;if(!(a.scale.isBlank()||!a.containData(t))){if(!e.involveSeries){r.showPointer(e,t);return}var o=dee(t,e),s=o.payloadBatch,l=o.snapToValue;s[0]&&i.seriesIndex==null&&ue(i,s[0]),!n&&e.snap&&a.containData(l)&&l!=null&&(t=l),r.showPointer(e,t,s),r.showTooltip(e,o,l)}}function dee(e,t){var r=t.axis,n=r.dim,i=e,a=[],o=Number.MAX_VALUE,s=-1;return R(t.seriesModels,function(l,u){var f=l.getData().mapDimensionsAll(n),c,h;if(l.getAxisTooltipData){var d=l.getAxisTooltipData(f,e,r);h=d.dataIndices,c=d.nestestValue}else{if(h=l.getData().indicesOfNearest(f[0],e,r.type==="category"?.5:null),!h.length)return;c=l.getData().get(f[0],h[0])}if(!(c==null||!isFinite(c))){var v=e-c,p=Math.abs(v);p<=o&&((p=0&&s<0)&&(o=p,s=v,i=c,a.length=0),R(h,function(m){a.push({seriesIndex:l.seriesIndex,dataIndexInside:m,dataIndex:l.getData().getRawIndex(m)})}))}}),{payloadBatch:a,snapToValue:i}}function hee(e,t,r,n){e[t.key]={value:r,payloadBatch:n}}function vee(e,t,r,n){var i=r.payloadBatch,a=t.axis,o=a.model,s=t.axisPointerModel;if(!(!t.triggerTooltip||!i.length)){var l=t.coordSys.model,u=Vu(l),f=e.map[u];f||(f=e.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},e.list.push(f)),f.dataByAxis.push({axisDim:a.dim,axisIndex:o.componentIndex,axisType:o.type,axisId:o.id,value:n,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:i.slice()})}}function pee(e,t,r){var n=r.axesInfo=[];R(t,function(i,a){var o=i.axisPointerModel.option,s=e[a];s?(!i.useHandle&&(o.status="show"),o.value=s.value,o.seriesDataIndices=(s.payloadBatch||[]).slice()):!i.useHandle&&(o.status="hide"),o.status==="show"&&n.push({axisDim:i.axis.dim,axisIndex:i.axis.model.componentIndex,value:o.value})})}function gee(e,t,r,n){if(Zc(t)||!e.list.length){n({type:"hideTip"});return}var i=((e.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:t[0],y:t[1],tooltipOption:r.tooltipOption,position:r.position,dataIndexInside:i.dataIndexInside,dataIndex:i.dataIndex,seriesIndex:i.seriesIndex,dataByCoordSys:e.list})}function mee(e,t,r){var n=r.getZr(),i="axisPointerLastHighlights",a=gC(n)[i]||{},o=gC(n)[i]={};R(e,function(u,f){var c=u.axisPointerModel.option;c.status==="show"&&u.triggerEmphasis&&R(c.seriesDataIndices,function(h){var d=h.seriesIndex+" | "+h.dataIndex;o[d]=h})});var s=[],l=[];R(a,function(u,f){!o[f]&&l.push(u)}),R(o,function(u,f){!a[f]&&s.push(u)}),l.length&&r.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&r.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}function yee(e,t){for(var r=0;r<(e||[]).length;r++){var n=e[r];if(t.axis.dim===n.axisDim&&t.axis.model.componentIndex===n.axisIndex)return n}}function yC(e){var t=e.axis.model,r={},n=r.axisDim=e.axis.dim;return r.axisIndex=r[n+"AxisIndex"]=t.componentIndex,r.axisName=r[n+"AxisName"]=t.name,r.axisId=r[n+"AxisId"]=t.id,r}function Zc(e){return!e||e[0]==null||isNaN(e[0])||e[1]==null||isNaN(e[1])}function yD(e){fD.registerAxisPointerClass("CartesianAxisPointer",tee),e.registerComponentModel(nee),e.registerComponentView(fee),e.registerPreprocessor(function(t){if(t){(!t.axisPointer||t.axisPointer.length===0)&&(t.axisPointer={});var r=t.axisPointer.link;r&&!ye(r)&&(t.axisPointer.link=[r])}}),e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC,function(t,r){t.getComponent("axisPointer").coordSysAxesInfo=xJ(t,r)}),e.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},cee)}function _ee(e){va(BJ),va(yD)}function bee(e,t){var r=Oh(t.get("padding")),n=t.getItemStyle(["color","opacity"]);return n.fill=t.get("backgroundColor"),e=new Gt({shape:{x:e.x-r[3],y:e.y-r[0],width:e.width+r[1]+r[3],height:e.height+r[0]+r[2],r:t.get("borderRadius")},style:n,silent:!0,z2:-1}),e}var wee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.type="tooltip",t.dependencies=["axisPointer"],t.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},t}(Mt);const See=wee;function _D(e){var t=e.get("confine");return t!=null?!!t:e.get("renderMode")==="richText"}function bD(e){if(He.domSupported){for(var t=document.documentElement.style,r=0,n=e.length;r-1?(s+="top:50%",l+="translateY(-50%) rotate("+(u=a==="left"?-225:-45)+"deg)"):(s+="left:50%",l+="translateX(-50%) rotate("+(u=a==="top"?225:45)+"deg)");var f=u*Math.PI/180,c=o+i,h=c*Math.abs(Math.cos(f))+c*Math.abs(Math.sin(f)),d=Math.round(((h-Math.SQRT2*i)/2+Math.SQRT2*i-(h-c)/2)*100)/100;s+=";"+a+":-"+d+"px";var v=t+" solid "+i+"px;",p=["position:absolute;width:"+o+"px;height:"+o+"px;z-index:-1;",s+";"+l+";","border-bottom:"+v,"border-right:"+v,"background-color:"+n+";"];return'
'}function Eee(e,t){var r="cubic-bezier(0.23,1,0.32,1)",n=" "+e/2+"s "+r,i="opacity"+n+",visibility"+n;return t||(n=" "+e+"s "+r,i+=He.transformSupported?","+s_+n:",left"+n+",top"+n),Tee+":"+i}function _C(e,t,r){var n=e.toFixed(0)+"px",i=t.toFixed(0)+"px";if(!He.transformSupported)return r?"top:"+i+";left:"+n+";":[["top",i],["left",n]];var a=He.transform3dSupported,o="translate"+(a?"3d":"")+"("+n+","+i+(a?",0":"")+")";return r?"top:0;left:0;"+s_+":"+o+";":[["top",0],["left",0],[wD,o]]}function Lee(e){var t=[],r=e.get("fontSize"),n=e.getTextColor();n&&t.push("color:"+n),t.push("font:"+e.getFont()),r&&t.push("line-height:"+Math.round(r*3/2)+"px");var i=e.get("textShadowColor"),a=e.get("textShadowBlur")||0,o=e.get("textShadowOffsetX")||0,s=e.get("textShadowOffsetY")||0;return i&&a&&t.push("text-shadow:"+o+"px "+s+"px "+a+"px "+i),R(["decoration","align"],function(l){var u=e.get(l);u&&t.push("text-"+l+":"+u)}),t.join(";")}function Dee(e,t,r){var n=[],i=e.get("transitionDuration"),a=e.get("backgroundColor"),o=e.get("shadowBlur"),s=e.get("shadowColor"),l=e.get("shadowOffsetX"),u=e.get("shadowOffsetY"),f=e.getModel("textStyle"),c=$E(e,"html"),h=l+"px "+u+"px "+o+"px "+s;return n.push("box-shadow:"+h),t&&i&&n.push(Eee(i,r)),a&&n.push("background-color:"+a),R(["width","color","radius"],function(d){var v="border-"+d,p=vE(v),m=e.get(p);m!=null&&n.push(v+":"+m+(d==="color"?"":"px"))}),n.push(Lee(f)),c!=null&&n.push("padding:"+Oh(c).join("px ")+"px"),n.join(";")+";"}function bC(e,t,r,n,i){var a=t&&t.painter;if(r){var o=a&&a.getViewportRoot();o&&TU(e,o,document.body,n,i)}else{e[0]=n,e[1]=i;var s=a&&a.getViewportRootOffset();s&&(e[0]+=s.offsetLeft,e[1]+=s.offsetTop)}e[2]=e[0]/t.getWidth(),e[3]=e[1]/t.getHeight()}var Iee=function(){function e(t,r,n){if(this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!0,this._alwaysShowContent=!1,this._firstShow=!0,this._longHide=!0,He.wxa)return null;var i=document.createElement("div");i.domBelongToZr=!0,this.el=i;var a=this._zr=r.getZr(),o=this._appendToBody=n&&n.appendToBody;bC(this._styleCoord,a,o,r.getWidth()/2,r.getHeight()/2),o?document.body.appendChild(i):t.appendChild(i),this._container=t;var s=this;i.onmouseenter=function(){s._enterable&&(clearTimeout(s._hideTimeout),s._show=!0),s._inContent=!0},i.onmousemove=function(l){if(l=l||window.event,!s._enterable){var u=a.handler,f=a.painter.getViewportRoot();Qr(f,l,!0),u.dispatch("mousemove",l)}},i.onmouseleave=function(){s._inContent=!1,s._enterable&&s._show&&s.hideLater(s._hideDelay)}}return e.prototype.update=function(t){var r=this._container,n=Cee(r,"position"),i=r.style;i.position!=="absolute"&&n!=="absolute"&&(i.position="relative");var a=t.get("alwaysShowContent");a&&this._moveIfResized(),this._alwaysShowContent=a,this.el.className=t.get("className")||""},e.prototype.show=function(t,r){clearTimeout(this._hideTimeout),clearTimeout(this._longHideTimeout);var n=this.el,i=n.style,a=this._styleCoord;n.innerHTML?i.cssText=Mee+Dee(t,!this._firstShow,this._longHide)+_C(a[0],a[1],!0)+("border-color:"+ku(r)+";")+(t.get("extraCssText")||"")+(";pointer-events:"+(this._enterable?"auto":"none")):i.display="none",this._show=!0,this._firstShow=!1,this._longHide=!1},e.prototype.setContent=function(t,r,n,i,a){var o=this.el;if(t==null){o.innerHTML="";return}var s="";if(Ee(a)&&n.get("trigger")==="item"&&!_D(n)&&(s=Pee(n,i,a)),Ee(t))o.innerHTML=t+s;else if(t){o.innerHTML="",ye(t)||(t=[t]);for(var l=0;l=0?this._tryShow(a,o):i==="leave"&&this._hide(o))},this))},t.prototype._keepShow=function(){var r=this._tooltipModel,n=this._ecModel,i=this._api,a=r.get("triggerOn");if(this._lastX!=null&&this._lastY!=null&&a!=="none"&&a!=="click"){var o=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){!i.isDisposed()&&o.manuallyShowTip(r,n,i,{x:o._lastX,y:o._lastY,dataByCoordSys:o._lastDataByCoordSys})})}},t.prototype.manuallyShowTip=function(r,n,i,a){if(!(a.from===this.uid||He.node||!i.getDom())){var o=xC(a,i);this._ticket="";var s=a.dataByCoordSys,l=Hee(a,n,i);if(l){var u=l.el.getBoundingRect().clone();u.applyTransform(l.el.transform),this._tryShow({offsetX:u.x+u.width/2,offsetY:u.y+u.height/2,target:l.el,position:a.position,positionDefault:"bottom"},o)}else if(a.tooltip&&a.x!=null&&a.y!=null){var f=kee;f.x=a.x,f.y=a.y,f.update(),dt(f).tooltipConfig={name:null,option:a.tooltip},this._tryShow({offsetX:a.x,offsetY:a.y,target:f},o)}else if(s)this._tryShow({offsetX:a.x,offsetY:a.y,position:a.position,dataByCoordSys:s,tooltipOption:a.tooltipOption},o);else if(a.seriesIndex!=null){if(this._manuallyAxisShowTip(r,n,i,a))return;var c=mD(a,n),h=c.point[0],d=c.point[1];h!=null&&d!=null&&this._tryShow({offsetX:h,offsetY:d,target:c.el,position:a.position,positionDefault:"bottom"},o)}else a.x!=null&&a.y!=null&&(i.dispatchAction({type:"updateAxisPointer",x:a.x,y:a.y}),this._tryShow({offsetX:a.x,offsetY:a.y,position:a.position,target:i.getZr().findHover(a.x,a.y).target},o))}},t.prototype.manuallyHideTip=function(r,n,i,a){var o=this._tooltipContent;this._tooltipModel&&o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,a.from!==this.uid&&this._hide(xC(a,i))},t.prototype._manuallyAxisShowTip=function(r,n,i,a){var o=a.seriesIndex,s=a.dataIndex,l=n.getComponent("axisPointer").coordSysAxesInfo;if(!(o==null||s==null||l==null)){var u=n.getSeriesByIndex(o);if(u){var f=u.getData(),c=bl([f.getItemModel(s),u,(u.coordinateSystem||{}).model],this._tooltipModel);if(c.get("trigger")==="axis")return i.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:s,position:a.position}),!0}}},t.prototype._tryShow=function(r,n){var i=r.target,a=this._tooltipModel;if(a){this._lastX=r.offsetX,this._lastY=r.offsetY;var o=r.dataByCoordSys;if(o&&o.length)this._showAxisTooltip(o,r);else if(i){this._lastDataByCoordSys=null;var s,l;Ll(i,function(u){if(dt(u).dataIndex!=null)return s=u,!0;if(dt(u).tooltipConfig!=null)return l=u,!0},!0),s?this._showSeriesItemTooltip(r,s,n):l?this._showComponentItemTooltip(r,l,n):this._hide(n)}else this._lastDataByCoordSys=null,this._hide(n)}},t.prototype._showOrMove=function(r,n){var i=r.get("showDelay");n=xt(n,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(n,i):n()},t.prototype._showAxisTooltip=function(r,n){var i=this._ecModel,a=this._tooltipModel,o=[n.offsetX,n.offsetY],s=bl([n.tooltipOption],a),l=this._renderMode,u=[],f=Fu("section",{blocks:[],noHeader:!0}),c=[],h=new up;R(r,function(y){R(y.dataByAxis,function(_){var b=i.getComponent(_.axisDim+"Axis",_.axisIndex),x=_.value;if(!(!b||x==null)){var w=vD(x,b.axis,i,_.seriesDataIndices,_.valueLabelOpt),S=Fu("section",{header:w,noHeader:!Gn(w),sortBlocks:!0,blocks:[]});f.blocks.push(S),R(_.seriesDataIndices,function(C){var M=i.getSeriesByIndex(C.seriesIndex),A=C.dataIndexInside,P=M.getDataParams(A);if(!(P.dataIndex<0)){P.axisDim=_.axisDim,P.axisIndex=_.axisIndex,P.axisType=_.axisType,P.axisId=_.axisId,P.axisValue=n_(b.axis,{value:x}),P.axisValueLabel=w,P.marker=h.makeTooltipMarker("item",ku(P.color),l);var E=FS(M.formatTooltip(A,!0,null)),L=E.frag;if(L){var O=bl([M],a).get("valueFormatter");S.blocks.push(O?ue({valueFormatter:O},L):L)}E.text&&c.push(E.text),u.push(P)}})}})}),f.blocks.reverse(),c.reverse();var d=n.position,v=s.get("order"),p=WS(f,h,l,v,i.get("useUTC"),s.get("textStyle"));p&&c.unshift(p);var m=l==="richText"?` +`];function Fu(e,t){return t.type=e,t}function ym(e){return e.type==="section"}function NE(e){return ym(e)?Kq:Xq}function BE(e){if(ym(e)){var t=0,r=e.blocks.length,n=r>1||r>0&&!e.noHeader;return R(e.blocks,function(i){var a=BE(i);a>=t&&(t=a+ +(n&&(!a||ym(i)&&!i.noHeader)))}),t}return 0}function Kq(e,t,r,n){var i=t.noHeader,a=Zq(BE(t)),o=[],s=t.blocks||[];Ci(!s||ye(s)),s=s||[];var l=e.orderMode;if(t.sortBlocks&&l){s=s.slice();var u={valueAsc:"asc",valueDesc:"desc"};if(Ds(u,l)){var f=new Oq(u[l],null);s.sort(function(v,p){return f.evaluate(v.sortParam,p.sortParam)})}else l==="seriesDesc"&&s.reverse()}R(s,function(v,p){var m=t.valueFormatter,g=NE(v)(m?ue(ue({},e),{valueFormatter:m}):e,v,p>0?a.html:0,n);g!=null&&o.push(g)});var c=e.renderMode==="richText"?o.join(a.richText):_m(o.join(""),i?r:a.html);if(i)return c;var h=pm(t.header,"ordinal",e.useUTC),d=kE(n,e.renderMode).nameStyle;return e.renderMode==="richText"?FE(e,h,d)+a.richText+c:_m('
'+tn(h)+"
"+c,r)}function Xq(e,t,r,n){var i=e.renderMode,a=t.noName,o=t.noValue,s=!t.markerType,l=t.name,u=e.useUTC,f=t.valueFormatter||e.valueFormatter||function(b){return b=ye(b)?b:[b],Ne(b,function(x,w){return pm(x,ye(d)?d[w]:d,u)})};if(!(a&&o)){var c=s?"":e.markupStyleCreator.makeTooltipMarker(t.markerType,t.markerColor||"#333",i),h=a?"":pm(l,"ordinal",u),d=t.valueType,v=o?[]:f(t.value),p=!s||!a,m=!s&&a,g=kE(n,i),y=g.nameStyle,_=g.valueStyle;return i==="richText"?(s?"":c)+(a?"":FE(e,h,y))+(o?"":eK(e,v,p,m,_)):_m((s?"":c)+(a?"":Qq(h,!s,y))+(o?"":Jq(v,p,m,_)),r)}}function WS(e,t,r,n,i,a){if(e){var o=NE(e),s={useUTC:i,renderMode:r,orderMode:n,markupStyleCreator:t,valueFormatter:e.valueFormatter};return o(s,e,0,a)}}function Zq(e){return{html:jq[e],richText:qq[e]}}function _m(e,t){var r='
',n="margin: "+t+"px 0 0";return'
'+e+r+"
"}function Qq(e,t,r){var n=t?"margin-left:2px":"";return''+tn(e)+""}function Jq(e,t,r,n){var i=r?"10px":"20px",a=t?"float:right;margin-left:"+i:"";return e=ye(e)?e:[e],''+Ne(e,function(o){return tn(o)}).join("  ")+""}function FE(e,t,r){return e.markupStyleCreator.wrapRichTextStyle(t,r)}function eK(e,t,r,n,i){var a=[i],o=n?10:20;return r&&a.push({padding:[0,0,0,o],align:"right"}),e.markupStyleCreator.wrapRichTextStyle(ye(t)?t.join(" "):t,a)}function tK(e,t){var r=e.getData().getItemVisual(t,"style"),n=r[e.visualDrawType];return ku(n)}function $E(e,t){var r=e.get("padding");return r??(t==="richText"?[8,10]:10)}var up=function(){function e(){this.richTextStyles={},this._nextStyleNameId=K2()}return e.prototype._generateStyleName=function(){return"__EC_aUTo_"+this._nextStyleNameId++},e.prototype.makeTooltipMarker=function(t,r,n){var i=n==="richText"?this._generateStyleName():null,a=Vj({color:r,type:t,renderMode:n,markerId:i});return Ee(a)?a:(this.richTextStyles[i]=a.style,a.content)},e.prototype.wrapRichTextStyle=function(t,r){var n={};ye(r)?R(r,function(a){return ue(n,a)}):ue(n,r);var i=this._generateStyleName();return this.richTextStyles[i]=n,"{"+i+"|"+t+"}"},e}();function rK(e){var t=e.series,r=e.dataIndex,n=e.multipleSeries,i=t.getData(),a=i.mapDimensionsAll("defaultedTooltip"),o=a.length,s=t.getRawValue(r),l=ye(s),u=tK(t,r),f,c,h,d;if(o>1||l&&!o){var v=nK(s,t,r,a,u);f=v.inlineValues,c=v.inlineValueTypes,h=v.blocks,d=v.inlineValues[0]}else if(o){var p=i.getDimensionInfo(a[0]);d=f=Rs(i,r,a[0]),c=p.type}else d=f=l?s[0]:s;var m=h0(t),g=m&&t.name||"",y=i.getName(r),_=n?g:y;return Fu("section",{header:g,noHeader:n||!m,sortParam:d,blocks:[Fu("nameValue",{markerType:"item",markerColor:u,name:_,noName:!Gn(_),value:f,valueType:c})].concat(h||[])})}function nK(e,t,r,n,i){var a=t.getData(),o=ca(e,function(c,h,d){var v=a.getDimensionInfo(d);return c=c||v&&v.tooltip!==!1&&v.displayName!=null},!1),s=[],l=[],u=[];n.length?R(n,function(c){f(Rs(a,r,c),c)}):R(e,f);function f(c,h){var d=a.getDimensionInfo(h);!d||d.otherDims.tooltip===!1||(o?u.push(Fu("nameValue",{markerType:"subItem",markerColor:i,name:d.displayName,value:c,valueType:d.type})):(s.push(c),l.push(d.type)))}return{inlineValues:s,inlineValueTypes:l,blocks:u}}var Fi=Et();function tc(e,t){return e.getName(t)||e.getId(t)}var iK="__universalTransitionEnabled",Bh=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r._selectedDataIndicesMap={},r}return t.prototype.init=function(r,n,i){this.seriesIndex=this.componentIndex,this.dataTask=nu({count:oK,reset:sK}),this.dataTask.context={model:this},this.mergeDefaultAndTheme(r,i);var a=Fi(this).sourceManager=new Yq(this);a.prepareSource();var o=this.getInitialData(r,i);US(o,this),this.dataTask.context.data=o,Fi(this).dataBeforeProcessed=o,GS(this),this._initSelectedMapFromData(o)},t.prototype.mergeDefaultAndTheme=function(r,n){var i=Nu(this),a=i?Rh(r):{},o=this.subType;Mt.hasClass(o)&&(o+="Series"),st(r,n.getTheme().get(this.subType)),st(r,this.getDefaultOption()),em(r,"label",["show"]),this.fillDataTextStyle(r.data),i&&Os(r,a,i)},t.prototype.mergeOption=function(r,n){r=st(this.option,r,!0),this.fillDataTextStyle(r.data);var i=Nu(this);i&&Os(this.option,r,i);var a=Fi(this).sourceManager;a.dirty(),a.prepareSource();var o=this.getInitialData(r,n);US(o,this),this.dataTask.dirty(),this.dataTask.context.data=o,Fi(this).dataBeforeProcessed=o,GS(this),this._initSelectedMapFromData(o)},t.prototype.fillDataTextStyle=function(r){if(r&&!Gr(r))for(var n=["show"],i=0;ithis.getShallow("animationThreshold")&&(n=!1),!!n},t.prototype.restoreData=function(){this.dataTask.dirty()},t.prototype.getColorFromPalette=function(r,n,i){var a=this.ecModel,o=B0.prototype.getColorFromPalette.call(this,r,n,i);return o||(o=a.getColorFromPalette(r,n,i)),o},t.prototype.coordDimToDataDim=function(r){return this.getRawData().mapDimensionsAll(r)},t.prototype.getProgressive=function(){return this.get("progressive")},t.prototype.getProgressiveThreshold=function(){return this.get("progressiveThreshold")},t.prototype.select=function(r,n){this._innerSelect(this.getData(n),r)},t.prototype.unselect=function(r,n){var i=this.option.selectedMap;if(i){var a=this.option.selectedMode,o=this.getData(n);if(a==="series"||i==="all"){this.option.selectedMap={},this._selectedDataIndicesMap={};return}for(var s=0;s=0&&i.push(o)}return i},t.prototype.isSelected=function(r,n){var i=this.option.selectedMap;if(!i)return!1;var a=this.getData(n);return(i==="all"||i[tc(a,r)])&&!a.getItemModel(r).get(["select","disabled"])},t.prototype.isUniversalTransitionEnabled=function(){if(this[iK])return!0;var r=this.option.universalTransition;return r?r===!0?!0:r&&r.enabled:!1},t.prototype._innerSelect=function(r,n){var i,a,o=this.option,s=o.selectedMode,l=n.length;if(!(!s||!l)){if(s==="series")o.selectedMap="all";else if(s==="multiple"){Re(o.selectedMap)||(o.selectedMap={});for(var u=o.selectedMap,f=0;f0&&this._innerSelect(r,n)}},t.registerClass=function(r){return Mt.registerClass(r)},t.protoInitialize=function(){var r=t.prototype;r.type="series.__base__",r.seriesIndex=0,r.ignoreStyleOnData=!1,r.hasSymbolVisual=!1,r.defaultSymbol="circle",r.visualStyleAccessPath="itemStyle",r.visualDrawType="fill"}(),t}(Mt);ni(Bh,Dq);ni(Bh,B0);tP(Bh,Mt);function GS(e){var t=e.name;h0(e)||(e.name=aK(e)||t)}function aK(e){var t=e.getRawData(),r=t.mapDimensionsAll("seriesName"),n=[];return R(r,function(i){var a=t.getDimensionInfo(i);a.displayName&&n.push(a.displayName)}),n.join(" ")}function oK(e){return e.model.getRawData().count()}function sK(e){var t=e.model;return t.setData(t.getRawData().cloneShallow()),lK}function lK(e,t){t.outputData&&e.end>t.outputData.count()&&t.model.getRawData().cloneShallow(t.outputData)}function US(e,t){R(vU(e.CHANGABLE_METHODS,e.DOWNSAMPLE_METHODS),function(r){e.wrapMethod(r,Rt(uK,t))})}function uK(e,t){var r=bm(e);return r&&r.setOutputEnd((t||this).count()),t}function bm(e){var t=(e.ecModel||{}).scheduler,r=t&&t.getPipeline(e.uid);if(r){var n=r.currentTask;if(n){var i=n.agentStubMap;i&&(n=i.get(e.uid))}return n}}const So=Bh;var G0=function(){function e(){this.group=new Ur,this.uid=Ah("viewComponent")}return e.prototype.init=function(t,r){},e.prototype.render=function(t,r,n,i){},e.prototype.dispose=function(t,r){},e.prototype.updateView=function(t,r,n,i){},e.prototype.updateLayout=function(t,r,n,i){},e.prototype.updateVisual=function(t,r,n,i){},e.prototype.toggleBlurSeries=function(t,r,n){},e.prototype.eachRendered=function(t){var r=this.group;r&&r.traverse(t)},e}();p0(G0);Sh(G0);const Mi=G0;function HE(){var e=Et();return function(t){var r=e(t),n=t.pipelineContext,i=!!r.large,a=!!r.progressiveRender,o=r.large=!!(n&&n.large),s=r.progressiveRender=!!(n&&n.progressiveRender);return(i!==o||a!==s)&&"reset"}}var zE=Et(),fK=HE(),U0=function(){function e(){this.group=new Ur,this.uid=Ah("viewChart"),this.renderTask=nu({plan:cK,reset:dK}),this.renderTask.context={view:this}}return e.prototype.init=function(t,r){},e.prototype.render=function(t,r,n,i){},e.prototype.highlight=function(t,r,n,i){var a=t.getData(i&&i.dataType);a&&jS(a,i,"emphasis")},e.prototype.downplay=function(t,r,n,i){var a=t.getData(i&&i.dataType);a&&jS(a,i,"normal")},e.prototype.remove=function(t,r){this.group.removeAll()},e.prototype.dispose=function(t,r){},e.prototype.updateView=function(t,r,n,i){this.render(t,r,n,i)},e.prototype.updateLayout=function(t,r,n,i){this.render(t,r,n,i)},e.prototype.updateVisual=function(t,r,n,i){this.render(t,r,n,i)},e.prototype.eachRendered=function(t){P0(this.group,t)},e.markUpdateMethod=function(t,r){zE(t).updateMethod=r},e.protoInitialize=function(){var t=e.prototype;t.type="chart"}(),e}();function YS(e,t,r){e&&fm(e)&&(t==="emphasis"?am:om)(e,r)}function jS(e,t,r){var n=sf(e,t),i=t&&t.highlightKey!=null?_Y(t.highlightKey):null;n!=null?R(pr(n),function(a){YS(e.getItemGraphicEl(a),r,i)}):e.eachItemGraphicEl(function(a){YS(a,r,i)})}p0(U0);Sh(U0);function cK(e){return fK(e.model)}function dK(e){var t=e.model,r=e.ecModel,n=e.api,i=e.payload,a=t.pipelineContext.progressiveRender,o=e.view,s=i&&zE(i).updateMethod,l=a?"incrementalPrepareRender":s&&o[s]?s:"render";return l!=="render"&&o[l](t,r,n,i),hK[l]}var hK={incrementalPrepareRender:{progress:function(e,t){t.view.incrementalRender(e,t.model,t.ecModel,t.api,t.payload)}},render:{forceFirstProgress:!0,progress:function(e,t){t.view.render(t.model,t.ecModel,t.api,t.payload)}}};const ho=U0;var kd="\0__throttleOriginMethod",qS="\0__throttleRate",KS="\0__throttleType";function Y0(e,t,r){var n,i=0,a=0,o=null,s,l,u,f;t=t||0;function c(){a=new Date().getTime(),o=null,e.apply(l,u||[])}var h=function(){for(var d=[],v=0;v=0?c():o=setTimeout(c,-s),i=n};return h.clear=function(){o&&(clearTimeout(o),o=null)},h.debounceNextCall=function(d){f=d},h}function VE(e,t,r,n){var i=e[t];if(i){var a=i[kd]||i,o=i[KS],s=i[qS];if(s!==r||o!==n){if(r==null||!n)return e[t]=a;i=e[t]=Y0(a,r,n==="debounce"),i[kd]=a,i[KS]=n,i[qS]=r}return i}}function wm(e,t){var r=e[t];r&&r[kd]&&(r.clear&&r.clear(),e[t]=r[kd])}var XS=Et(),ZS={itemStyle:Du(tE,!0),lineStyle:Du(eE,!0)},vK={lineStyle:"stroke",itemStyle:"fill"};function WE(e,t){var r=e.visualStyleMapper||ZS[t];return r||(console.warn("Unknown style type '"+t+"'."),ZS.itemStyle)}function GE(e,t){var r=e.visualDrawType||vK[t];return r||(console.warn("Unknown style type '"+t+"'."),"fill")}var pK={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){var r=e.getData(),n=e.visualStyleAccessPath||"itemStyle",i=e.getModel(n),a=WE(e,n),o=a(i),s=i.getShallow("decal");s&&(r.setVisual("decal",s),s.dirty=!0);var l=GE(e,n),u=o[l],f=Ye(u)?u:null,c=o.fill==="auto"||o.stroke==="auto";if(!o[l]||f||c){var h=e.getColorFromPalette(e.name,null,t.getSeriesCount());o[l]||(o[l]=h,r.setVisual("colorFromPalette",!0)),o.fill=o.fill==="auto"||Ye(o.fill)?h:o.fill,o.stroke=o.stroke==="auto"||Ye(o.stroke)?h:o.stroke}if(r.setVisual("style",o),r.setVisual("drawType",l),!t.isSeriesFiltered(e)&&f)return r.setVisual("colorFromPalette",!1),{dataEach:function(d,v){var p=e.getDataParams(v),m=ue({},o);m[l]=f(p),d.setItemVisual(v,"style",m)}}}},dl=new sr,gK={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){if(!(e.ignoreStyleOnData||t.isSeriesFiltered(e))){var r=e.getData(),n=e.visualStyleAccessPath||"itemStyle",i=WE(e,n),a=r.getVisual("drawType");return{dataEach:r.hasItemOption?function(o,s){var l=o.getRawDataItem(s);if(l&&l[n]){dl.option=l[n];var u=i(dl),f=o.ensureUniqueItemVisual(s,"style");ue(f,u),dl.option.decal&&(o.setItemVisual(s,"decal",dl.option.decal),dl.option.decal.dirty=!0),a in u&&o.setItemVisual(s,"colorFromPalette",!1)}}:null}}}},mK={performRawSeries:!0,overallReset:function(e){var t=je();e.eachSeries(function(r){var n=r.getColorBy();if(!r.isColorBySeries()){var i=r.type+"-"+n,a=t.get(i);a||(a={},t.set(i,a)),XS(r).scope=a}}),e.eachSeries(function(r){if(!(r.isColorBySeries()||e.isSeriesFiltered(r))){var n=r.getRawData(),i={},a=r.getData(),o=XS(r).scope,s=r.visualStyleAccessPath||"itemStyle",l=GE(r,s);a.each(function(u){var f=a.getRawIndex(u);i[f]=u}),n.each(function(u){var f=i[u],c=a.getItemVisual(f,"colorFromPalette");if(c){var h=a.ensureUniqueItemVisual(f,"style"),d=n.getName(u)||u+"",v=n.count();h[l]=r.getColorFromPalette(d,o,v)}})}})}},rc=Math.PI;function yK(e,t){t=t||{},ht(t,{text:"loading",textColor:"#000",fontSize:12,fontWeight:"normal",fontStyle:"normal",fontFamily:"sans-serif",maskColor:"rgba(255, 255, 255, 0.8)",showSpinner:!0,color:"#5470c6",spinnerRadius:10,lineWidth:5,zlevel:0});var r=new Ur,n=new Gt({style:{fill:t.maskColor},zlevel:t.zlevel,z:1e4});r.add(n);var i=new mr({style:{text:t.text,fill:t.textColor,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,fontFamily:t.fontFamily},zlevel:t.zlevel,z:10001}),a=new Gt({style:{fill:"none"},textContent:i,textConfig:{position:"right",distance:10},zlevel:t.zlevel,z:10001});r.add(a);var o;return t.showSpinner&&(o=new S0({shape:{startAngle:-rc/2,endAngle:-rc/2+.1,r:t.spinnerRadius},style:{stroke:t.color,lineCap:"round",lineWidth:t.lineWidth},zlevel:t.zlevel,z:10001}),o.animateShape(!0).when(1e3,{endAngle:rc*3/2}).start("circularInOut"),o.animateShape(!0).when(1e3,{startAngle:rc*3/2}).delay(300).start("circularInOut"),r.add(o)),r.resize=function(){var s=i.getBoundingRect().width,l=t.showSpinner?t.spinnerRadius:0,u=(e.getWidth()-l*2-(t.showSpinner&&s?10:0)-s)/2-(t.showSpinner&&s?0:5+s/2)+(t.showSpinner?0:s/2)+(s?0:l),f=e.getHeight()/2;t.showSpinner&&o.setShape({cx:u,cy:f}),a.setShape({x:u-l,y:f-l,width:l*2,height:l*2}),n.setShape({x:0,y:0,width:e.getWidth(),height:e.getHeight()})},r.resize(),r}var UE=function(){function e(t,r,n,i){this._stageTaskMap=je(),this.ecInstance=t,this.api=r,n=this._dataProcessorHandlers=n.slice(),i=this._visualHandlers=i.slice(),this._allHandlers=n.concat(i)}return e.prototype.restoreData=function(t,r){t.restoreData(r),this._stageTaskMap.each(function(n){var i=n.overallTask;i&&i.dirty()})},e.prototype.getPerformArgs=function(t,r){if(t.__pipeline){var n=this._pipelineMap.get(t.__pipeline.id),i=n.context,a=!r&&n.progressiveEnabled&&(!i||i.progressiveRender)&&t.__idxInPipeline>n.blockIndex,o=a?n.step:null,s=i&&i.modDataCount,l=s!=null?Math.ceil(s/o):null;return{step:o,modBy:l,modDataCount:s}}},e.prototype.getPipeline=function(t){return this._pipelineMap.get(t)},e.prototype.updateStreamModes=function(t,r){var n=this._pipelineMap.get(t.uid),i=t.getData(),a=i.count(),o=n.progressiveEnabled&&r.incrementalPrepareRender&&a>=n.threshold,s=t.get("large")&&a>=t.get("largeThreshold"),l=t.get("progressiveChunkMode")==="mod"?a:null;t.pipelineContext=n.context={progressiveRender:o,modDataCount:l,large:s}},e.prototype.restorePipelines=function(t){var r=this,n=r._pipelineMap=je();t.eachSeries(function(i){var a=i.getProgressive(),o=i.uid;n.set(o,{id:o,head:null,tail:null,threshold:i.getProgressiveThreshold(),progressiveEnabled:a&&!(i.preventIncremental&&i.preventIncremental()),blockIndex:-1,step:Math.round(a||700),count:0}),r._pipe(i,i.dataTask)})},e.prototype.prepareStageTasks=function(){var t=this._stageTaskMap,r=this.api.getModel(),n=this.api;R(this._allHandlers,function(i){var a=t.get(i.uid)||t.set(i.uid,{}),o="";Ci(!(i.reset&&i.overallReset),o),i.reset&&this._createSeriesStageTask(i,a,r,n),i.overallReset&&this._createOverallStageTask(i,a,r,n)},this)},e.prototype.prepareView=function(t,r,n,i){var a=t.renderTask,o=a.context;o.model=r,o.ecModel=n,o.api=i,a.__block=!t.incrementalPrepareRender,this._pipe(r,a)},e.prototype.performDataProcessorTasks=function(t,r){this._performStageTasks(this._dataProcessorHandlers,t,r,{block:!0})},e.prototype.performVisualTasks=function(t,r,n){this._performStageTasks(this._visualHandlers,t,r,n)},e.prototype._performStageTasks=function(t,r,n,i){i=i||{};var a=!1,o=this;R(t,function(l,u){if(!(i.visualType&&i.visualType!==l.visualType)){var f=o._stageTaskMap.get(l.uid),c=f.seriesTaskMap,h=f.overallTask;if(h){var d,v=h.agentStubMap;v.each(function(m){s(i,m)&&(m.dirty(),d=!0)}),d&&h.dirty(),o.updatePayload(h,n);var p=o.getPerformArgs(h,i.block);v.each(function(m){m.perform(p)}),h.perform(p)&&(a=!0)}else c&&c.each(function(m,g){s(i,m)&&m.dirty();var y=o.getPerformArgs(m,i.block);y.skip=!l.performRawSeries&&r.isSeriesFiltered(m.context.model),o.updatePayload(m,n),m.perform(y)&&(a=!0)})}});function s(l,u){return l.setDirty&&(!l.dirtyMap||l.dirtyMap.get(u.__pipeline.id))}this.unfinished=a||this.unfinished},e.prototype.performSeriesTasks=function(t){var r;t.eachSeries(function(n){r=n.dataTask.perform()||r}),this.unfinished=r||this.unfinished},e.prototype.plan=function(){this._pipelineMap.each(function(t){var r=t.tail;do{if(r.__block){t.blockIndex=r.__idxInPipeline;break}r=r.getUpstream()}while(r)})},e.prototype.updatePayload=function(t,r){r!=="remain"&&(t.context.payload=r)},e.prototype._createSeriesStageTask=function(t,r,n,i){var a=this,o=r.seriesTaskMap,s=r.seriesTaskMap=je(),l=t.seriesType,u=t.getTargetSeries;t.createOnAllSeries?n.eachRawSeries(f):l?n.eachRawSeriesByType(l,f):u&&u(n,i).each(f);function f(c){var h=c.uid,d=s.set(h,o&&o.get(h)||nu({plan:xK,reset:CK,count:MK}));d.context={model:c,ecModel:n,api:i,useClearVisual:t.isVisual&&!t.isLayout,plan:t.plan,reset:t.reset,scheduler:a},a._pipe(c,d)}},e.prototype._createOverallStageTask=function(t,r,n,i){var a=this,o=r.overallTask=r.overallTask||nu({reset:_K});o.context={ecModel:n,api:i,overallReset:t.overallReset,scheduler:a};var s=o.agentStubMap,l=o.agentStubMap=je(),u=t.seriesType,f=t.getTargetSeries,c=!0,h=!1,d="";Ci(!t.createOnAllSeries,d),u?n.eachRawSeriesByType(u,v):f?f(n,i).each(v):(c=!1,R(n.getSeries(),v));function v(p){var m=p.uid,g=l.set(m,s&&s.get(m)||(h=!0,nu({reset:bK,onDirty:SK})));g.context={model:p,overallProgress:c},g.agent=o,g.__block=c,a._pipe(p,g)}h&&o.dirty()},e.prototype._pipe=function(t,r){var n=t.uid,i=this._pipelineMap.get(n);!i.head&&(i.head=r),i.tail&&i.tail.pipe(r),i.tail=r,r.__idxInPipeline=i.count++,r.__pipeline=i},e.wrapStageHandler=function(t,r){return Ye(t)&&(t={overallReset:t,seriesType:AK(t)}),t.uid=Ah("stageHandler"),r&&(t.visualType=r),t},e}();function _K(e){e.overallReset(e.ecModel,e.api,e.payload)}function bK(e){return e.overallProgress&&wK}function wK(){this.agent.dirty(),this.getDownstream().dirty()}function SK(){this.agent&&this.agent.dirty()}function xK(e){return e.plan?e.plan(e.model,e.ecModel,e.api,e.payload):null}function CK(e){e.useClearVisual&&e.data.clearAllVisual();var t=e.resetDefines=pr(e.reset(e.model,e.ecModel,e.api,e.payload));return t.length>1?Ne(t,function(r,n){return YE(n)}):TK}var TK=YE(0);function YE(e){return function(t,r){var n=r.data,i=r.resetDefines[e];if(i&&i.dataEach)for(var a=t.start;a0&&d===u.length-h.length){var v=u.slice(0,d);v!=="data"&&(r.mainType=v,r[h.toLowerCase()]=l,f=!0)}}s.hasOwnProperty(u)&&(n[u]=l,f=!0),f||(i[u]=l)})}return{cptQuery:r,dataQuery:n,otherQuery:i}},e.prototype.filter=function(t,r){var n=this.eventInfo;if(!n)return!0;var i=n.targetEl,a=n.packedEvent,o=n.model,s=n.view;if(!o||!s)return!0;var l=r.cptQuery,u=r.dataQuery;return f(l,o,"mainType")&&f(l,o,"subType")&&f(l,o,"index","componentIndex")&&f(l,o,"name")&&f(l,o,"id")&&f(u,a,"name")&&f(u,a,"dataIndex")&&f(u,a,"dataType")&&(!s.filterForExposedEvent||s.filterForExposedEvent(t,r.otherQuery,i,a));function f(c,h,d,v){return c[d]==null||h[v||d]===c[d]}},e.prototype.afterTrigger=function(){this.eventInfo=null},e}(),Sm=["symbol","symbolSize","symbolRotate","symbolOffset"],tx=Sm.concat(["symbolKeepAspect"]),DK={createOnAllSeries:!0,performRawSeries:!0,reset:function(e,t){var r=e.getData();if(e.legendIcon&&r.setVisual("legendIcon",e.legendIcon),!e.hasSymbolVisual)return;for(var n={},i={},a=!1,o=0;o=0&&ro(l)?l:.5;var u=e.createRadialGradient(o,s,0,o,s,l);return u}function Cm(e,t,r){for(var n=t.type==="radial"?XK(e,t,r):KK(e,t,r),i=t.colorStops,a=0;a0)?null:e==="dashed"?[4*t,2*t]:e==="dotted"?[t]:Tt(e)?[e]:ye(e)?e:null}function XE(e){var t=e.style,r=t.lineDash&&t.lineWidth>0&&QK(t.lineDash,t.lineWidth),n=t.lineDashOffset;if(r){var i=t.strokeNoScale&&e.getLineScale?e.getLineScale():1;i&&i!==1&&(r=Ne(r,function(a){return a/i}),n/=i)}return[r,n]}var JK=new bo(!0);function Bd(e){var t=e.stroke;return!(t==null||t==="none"||!(e.lineWidth>0))}function rx(e){return typeof e=="string"&&e!=="none"}function Fd(e){var t=e.fill;return t!=null&&t!=="none"}function nx(e,t){if(t.fillOpacity!=null&&t.fillOpacity!==1){var r=e.globalAlpha;e.globalAlpha=t.fillOpacity*t.opacity,e.fill(),e.globalAlpha=r}else e.fill()}function ix(e,t){if(t.strokeOpacity!=null&&t.strokeOpacity!==1){var r=e.globalAlpha;e.globalAlpha=t.strokeOpacity*t.opacity,e.stroke(),e.globalAlpha=r}else e.stroke()}function Tm(e,t,r){var n=rP(t.image,t.__image,r);if(xh(n)){var i=e.createPattern(n,t.repeat||"repeat");if(typeof DOMMatrix=="function"&&i&&i.setTransform){var a=new DOMMatrix;a.translateSelf(t.x||0,t.y||0),a.rotateSelf(0,0,(t.rotation||0)*pU),a.scaleSelf(t.scaleX||1,t.scaleY||1),i.setTransform(a)}return i}}function eX(e,t,r,n){var i,a=Bd(r),o=Fd(r),s=r.strokePercent,l=s<1,u=!t.path;(!t.silent||l)&&u&&t.createPathProxy();var f=t.path||JK,c=t.__dirty;if(!n){var h=r.fill,d=r.stroke,v=o&&!!h.colorStops,p=a&&!!d.colorStops,m=o&&!!h.image,g=a&&!!d.image,y=void 0,_=void 0,b=void 0,x=void 0,w=void 0;(v||p)&&(w=t.getBoundingRect()),v&&(y=c?Cm(e,h,w):t.__canvasFillGradient,t.__canvasFillGradient=y),p&&(_=c?Cm(e,d,w):t.__canvasStrokeGradient,t.__canvasStrokeGradient=_),m&&(b=c||!t.__canvasFillPattern?Tm(e,h,t):t.__canvasFillPattern,t.__canvasFillPattern=b),g&&(x=c||!t.__canvasStrokePattern?Tm(e,d,t):t.__canvasStrokePattern,t.__canvasStrokePattern=b),v?e.fillStyle=y:m&&(b?e.fillStyle=b:o=!1),p?e.strokeStyle=_:g&&(x?e.strokeStyle=x:a=!1)}var S=t.getGlobalScale();f.setScale(S[0],S[1],t.segmentIgnoreThreshold);var C,M;e.setLineDash&&r.lineDash&&(i=XE(t),C=i[0],M=i[1]);var A=!0;(u||c&Qo)&&(f.setDPR(e.dpr),l?f.setContext(null):(f.setContext(e),A=!1),f.reset(),t.buildPath(f,t.shape,n),f.toStatic(),t.pathUpdated()),A&&f.rebuildPath(e,l?s:1),C&&(e.setLineDash(C),e.lineDashOffset=M),n||(r.strokeFirst?(a&&ix(e,r),o&&nx(e,r)):(o&&nx(e,r),a&&ix(e,r))),C&&e.setLineDash([])}function tX(e,t,r){var n=t.__image=rP(r.image,t.__image,t,t.onload);if(!(!n||!xh(n))){var i=r.x||0,a=r.y||0,o=t.getWidth(),s=t.getHeight(),l=n.width/n.height;if(o==null&&s!=null?o=s*l:s==null&&o!=null?s=o/l:o==null&&s==null&&(o=n.width,s=n.height),r.sWidth&&r.sHeight){var u=r.sx||0,f=r.sy||0;e.drawImage(n,u,f,r.sWidth,r.sHeight,i,a,o,s)}else if(r.sx&&r.sy){var u=r.sx,f=r.sy,c=o-u,h=s-f;e.drawImage(n,u,f,c,h,i,a,o,s)}else e.drawImage(n,i,a,o,s)}}function rX(e,t,r){var n,i=r.text;if(i!=null&&(i+=""),i){e.font=r.font||_o,e.textAlign=r.textAlign,e.textBaseline=r.textBaseline;var a=void 0,o=void 0;e.setLineDash&&r.lineDash&&(n=XE(t),a=n[0],o=n[1]),a&&(e.setLineDash(a),e.lineDashOffset=o),r.strokeFirst?(Bd(r)&&e.strokeText(i,r.x,r.y),Fd(r)&&e.fillText(i,r.x,r.y)):(Fd(r)&&e.fillText(i,r.x,r.y),Bd(r)&&e.strokeText(i,r.x,r.y)),a&&e.setLineDash([])}}var ax=["shadowBlur","shadowOffsetX","shadowOffsetY"],ox=[["lineCap","butt"],["lineJoin","miter"],["miterLimit",10]];function ZE(e,t,r,n,i){var a=!1;if(!n&&(r=r||{},t===r))return!1;if(n||t.opacity!==r.opacity){Tr(e,i),a=!0;var o=Math.max(Math.min(t.opacity,1),0);e.globalAlpha=isNaN(o)?fo.opacity:o}(n||t.blend!==r.blend)&&(a||(Tr(e,i),a=!0),e.globalCompositeOperation=t.blend||fo.blend);for(var s=0;s0&&r.unfinished);r.unfinished||this._zr.flush()}}},t.prototype.getDom=function(){return this._dom},t.prototype.getId=function(){return this.id},t.prototype.getZr=function(){return this._zr},t.prototype.isSSR=function(){return this._ssr},t.prototype.setOption=function(r,n,i){if(!this[nr]){if(this._disposed){this.id;return}var a,o,s;if(Re(n)&&(i=n.lazyUpdate,a=n.silent,o=n.replaceMerge,s=n.transition,n=n.notMerge),this[nr]=!0,!this._model||n){var l=new vq(this._api),u=this._theme,f=this._model=new F0;f.scheduler=this._scheduler,f.ssr=this._ssr,f.init(null,null,null,u,this._locale,l)}this._model.setOption(r,{replaceMerge:o},Pm);var c={seriesTransition:s,optionChanged:!0};if(i)this[br]={silent:a,updateParams:c},this[nr]=!1,this.getZr().wakeUp();else{try{jo(this),$i.update.call(this,null,c)}catch(h){throw this[br]=null,this[nr]=!1,h}this._ssr||this._zr.flush(),this[br]=null,this[nr]=!1,hl.call(this,a),vl.call(this,a)}}},t.prototype.setTheme=function(){},t.prototype.getModel=function(){return this._model},t.prototype.getOption=function(){return this._model&&this._model.getOption()},t.prototype.getWidth=function(){return this._zr.getWidth()},t.prototype.getHeight=function(){return this._zr.getHeight()},t.prototype.getDevicePixelRatio=function(){return this._zr.painter.dpr||He.hasGlobalWindow&&window.devicePixelRatio||1},t.prototype.getRenderedCanvas=function(r){return this.renderToCanvas(r)},t.prototype.renderToCanvas=function(r){r=r||{};var n=this._zr.painter;return n.getRenderedCanvas({backgroundColor:r.backgroundColor||this._model.get("backgroundColor"),pixelRatio:r.pixelRatio||this.getDevicePixelRatio()})},t.prototype.renderToSVGString=function(r){r=r||{};var n=this._zr.painter;return n.renderToString({useViewBox:r.useViewBox})},t.prototype.getSvgDataURL=function(){if(He.svgSupported){var r=this._zr,n=r.storage.getDisplayList();return R(n,function(i){i.stopAnimation(null,!0)}),r.painter.toDataURL()}},t.prototype.getDataURL=function(r){if(this._disposed){this.id;return}r=r||{};var n=r.excludeComponents,i=this._model,a=[],o=this;R(n,function(l){i.eachComponent({mainType:l},function(u){var f=o._componentsMap[u.__viewId];f.group.ignore||(a.push(f),f.group.ignore=!0)})});var s=this._zr.painter.getType()==="svg"?this.getSvgDataURL():this.renderToCanvas(r).toDataURL("image/"+(r&&r.type||"png"));return R(a,function(l){l.group.ignore=!1}),s},t.prototype.getConnectedDataURL=function(r){if(this._disposed){this.id;return}var n=r.type==="svg",i=this.group,a=Math.min,o=Math.max,s=1/0;if(Sx[i]){var l=s,u=s,f=-s,c=-s,h=[],d=r&&r.pixelRatio||this.getDevicePixelRatio();R(au,function(_,b){if(_.group===i){var x=n?_.getZr().painter.getSvgDom().innerHTML:_.renderToCanvas(tt(r)),w=_.getDom().getBoundingClientRect();l=a(w.left,l),u=a(w.top,u),f=o(w.right,f),c=o(w.bottom,c),h.push({dom:x,left:w.left,top:w.top})}}),l*=d,u*=d,f*=d,c*=d;var v=f-l,p=c-u,m=Gs.createCanvas(),g=Tw(m,{renderer:n?"svg":"canvas"});if(g.resize({width:v,height:p}),n){var y="";return R(h,function(_){var b=_.left-l,x=_.top-u;y+=''+_.dom+""}),g.painter.getSvgRoot().innerHTML=y,r.connectedBackgroundColor&&g.painter.setBackgroundColor(r.connectedBackgroundColor),g.refreshImmediately(),g.painter.toDataURL()}else return r.connectedBackgroundColor&&g.add(new Gt({shape:{x:0,y:0,width:v,height:p},style:{fill:r.connectedBackgroundColor}})),R(h,function(_){var b=new Ys({style:{x:_.left*d-l,y:_.top*d-u,image:_.dom}});g.add(b)}),g.refreshImmediately(),m.toDataURL("image/"+(r&&r.type||"png"))}else return this.getDataURL(r)},t.prototype.convertToPixel=function(r,n){return vp(this,"convertToPixel",r,n)},t.prototype.convertFromPixel=function(r,n){return vp(this,"convertFromPixel",r,n)},t.prototype.containPixel=function(r,n){if(this._disposed){this.id;return}var i=this._model,a,o=Bv(i,r);return R(o,function(s,l){l.indexOf("Models")>=0&&R(s,function(u){var f=u.coordinateSystem;if(f&&f.containPoint)a=a||!!f.containPoint(n);else if(l==="seriesModels"){var c=this._chartsMap[u.__viewId];c&&c.containPoint&&(a=a||c.containPoint(n,u))}},this)},this),!!a},t.prototype.getVisual=function(r,n){var i=this._model,a=Bv(i,r,{defaultMainType:"series"}),o=a.seriesModel,s=o.getData(),l=a.hasOwnProperty("dataIndexInside")?a.dataIndexInside:a.hasOwnProperty("dataIndex")?s.indexOfRawIndex(a.dataIndex):null;return l!=null?OK(s,l,n):RK(s,n)},t.prototype.getViewOfComponentModel=function(r){return this._componentsMap[r.__viewId]},t.prototype.getViewOfSeriesModel=function(r){return this._chartsMap[r.__viewId]},t.prototype._initEvents=function(){var r=this;R(PX,function(n){var i=function(a){var o=r.getModel(),s=a.target,l,u=n==="globalout";if(u?l={}:s&&Ll(s,function(v){var p=dt(v);if(p&&p.dataIndex!=null){var m=p.dataModel||o.getSeriesByIndex(p.seriesIndex);return l=m&&m.getDataParams(p.dataIndex,p.dataType,s)||{},!0}else if(p.eventData)return l=ue({},p.eventData),!0},!0),l){var f=l.componentType,c=l.componentIndex;(f==="markLine"||f==="markPoint"||f==="markArea")&&(f="series",c=l.seriesIndex);var h=f&&c!=null&&o.getComponent(f,c),d=h&&r[h.mainType==="series"?"_chartsMap":"_componentsMap"][h.__viewId];l.event=a,l.type=n,r._$eventProcessor.eventInfo={targetEl:s,packedEvent:l,model:h,view:d},r.trigger(n,l)}};i.zrEventfulCallAtLast=!0,r._zr.on(n,i,r)}),R(iu,function(n,i){r._messageCenter.on(i,function(a){this.trigger(i,a)},r)}),R(["selectchanged"],function(n){r._messageCenter.on(n,function(i){this.trigger(n,i)},r)}),NK(this._messageCenter,this,this._api)},t.prototype.isDisposed=function(){return this._disposed},t.prototype.clear=function(){if(this._disposed){this.id;return}this.setOption({series:[]},!0)},t.prototype.dispose=function(){if(this._disposed){this.id;return}this._disposed=!0;var r=this.getDom();r&&J2(this.getDom(),X0,"");var n=this,i=n._api,a=n._model;R(n._componentsViews,function(o){o.dispose(a,i)}),R(n._chartsViews,function(o){o.dispose(a,i)}),n._zr.dispose(),n._dom=n._model=n._chartsMap=n._componentsMap=n._chartsViews=n._componentsViews=n._scheduler=n._api=n._zr=n._throttledZrFlush=n._theme=n._coordSysMgr=n._messageCenter=null,delete au[n.id]},t.prototype.resize=function(r){if(!this[nr]){if(this._disposed){this.id;return}this._zr.resize(r);var n=this._model;if(this._loadingFX&&this._loadingFX.resize(),!!n){var i=n.resetOption("media"),a=r&&r.silent;this[br]&&(a==null&&(a=this[br].silent),i=!0,this[br]=null),this[nr]=!0;try{i&&jo(this),$i.update.call(this,{type:"resize",animation:ue({duration:0},r&&r.animation)})}catch(o){throw this[nr]=!1,o}this[nr]=!1,hl.call(this,a),vl.call(this,a)}}},t.prototype.showLoading=function(r,n){if(this._disposed){this.id;return}if(Re(r)&&(n=r,r=""),r=r||"default",this.hideLoading(),!!Em[r]){var i=Em[r](this._api,n),a=this._zr;this._loadingFX=i,a.add(i)}},t.prototype.hideLoading=function(){if(this._disposed){this.id;return}this._loadingFX&&this._zr.remove(this._loadingFX),this._loadingFX=null},t.prototype.makeActionFromEvent=function(r){var n=ue({},r);return n.type=iu[r.type],n},t.prototype.dispatchAction=function(r,n){if(this._disposed){this.id;return}if(Re(n)||(n={silent:!!n}),!!$d[r.type]&&this._model){if(this[nr]){this._pendingActions.push(r);return}var i=n.silent;gp.call(this,r,i);var a=n.flush;a?this._zr.flush():a!==!1&&He.browser.weChat&&this._throttledZrFlush(),hl.call(this,i),vl.call(this,i)}},t.prototype.updateLabelLayout=function(){_n.trigger("series:layoutlabels",this._model,this._api,{updatedSeries:[]})},t.prototype.appendData=function(r){if(this._disposed){this.id;return}var n=r.seriesIndex,i=this.getModel(),a=i.getSeriesByIndex(n);a.appendData(r),this._scheduler.unfinished=!0,this.getZr().wakeUp()},t.internalField=function(){jo=function(c){var h=c._scheduler;h.restorePipelines(c._model),h.prepareStageTasks(),hp(c,!0),hp(c,!1),h.plan()},hp=function(c,h){for(var d=c._model,v=c._scheduler,p=h?c._componentsViews:c._chartsViews,m=h?c._componentsMap:c._chartsMap,g=c._zr,y=c._api,_=0;_h.get("hoverLayerThreshold")&&!He.node&&!He.worker&&h.eachSeries(function(m){if(!m.preventUsingHoverLayer){var g=c._chartsMap[m.__viewId];g.__alive&&g.eachRendered(function(y){y.states.emphasis&&(y.states.emphasis.hoverLayer=!0)})}})}function o(c,h){var d=c.get("blendMode")||null;h.eachRendered(function(v){v.isGroup||(v.style.blend=d)})}function s(c,h){if(!c.preventAutoZ){var d=c.get("z")||0,v=c.get("zlevel")||0;h.eachRendered(function(p){return l(p,d,v,-1/0),!0})}}function l(c,h,d,v){var p=c.getTextContent(),m=c.getTextGuideLine(),g=c.isGroup;if(g)for(var y=c.childrenRef(),_=0;_0?{duration:p,delay:d.get("delay"),easing:d.get("easing")}:null;h.eachRendered(function(g){if(g.states&&g.states.emphasis){if(ds(g))return;if(g instanceof vt&&bY(g),g.__dirty){var y=g.prevStates;y&&g.useStates(y)}if(v){g.stateTransition=m;var _=g.getTextContent(),b=g.getTextGuideLine();_&&(_.stateTransition=m),b&&(b.stateTransition=m)}g.__dirty&&i(g)}})}_x=function(c){return new(function(h){ge(d,h);function d(){return h!==null&&h.apply(this,arguments)||this}return d.prototype.getCoordinateSystems=function(){return c._coordSysMgr.getCoordinateSystems()},d.prototype.getComponentByElement=function(v){for(;v;){var p=v.__ecComponentInfo;if(p!=null)return c._model.getComponent(p.mainType,p.index);v=v.parent}},d.prototype.enterEmphasis=function(v,p){am(v,p),qr(c)},d.prototype.leaveEmphasis=function(v,p){om(v,p),qr(c)},d.prototype.enterBlur=function(v){fY(v),qr(c)},d.prototype.leaveBlur=function(v){_P(v),qr(c)},d.prototype.enterSelect=function(v){bP(v),qr(c)},d.prototype.leaveSelect=function(v){wP(v),qr(c)},d.prototype.getModel=function(){return c.getModel()},d.prototype.getViewOfComponentModel=function(v){return c.getViewOfComponentModel(v)},d.prototype.getViewOfSeriesModel=function(v){return c.getViewOfSeriesModel(v)},d}(SE))(c)},dL=function(c){function h(d,v){for(var p=0;p=0)){xx.push(r);var a=UE.wrapStageHandler(r,i);a.__prio=t,a.__raw=r,e.push(a)}}function yL(e,t){Em[e]=t}function kX(e,t,r){var n=hX("registerMap");n&&n(e,t,r)}var NX=Hq;Do(q0,pK);Do(Fh,gK);Do(Fh,mK);Do(q0,DK);Do(Fh,IK);Do(oL,fX);gL(CE);mL(gX,Sq);yL("default",yK);Ks({type:co,event:co,update:co},Er);Ks({type:Uc,event:Uc,update:Uc},Er);Ks({type:Ql,event:Ql,update:Ql},Er);Ks({type:Yc,event:Yc,update:Yc},Er);Ks({type:Jl,event:Jl,update:Jl},Er);pL("light",PK);pL("dark",EK);function pl(e){return e==null?0:e.length||1}function Cx(e){return e}var BX=function(){function e(t,r,n,i,a,o){this._old=t,this._new=r,this._oldKeyGetter=n||Cx,this._newKeyGetter=i||Cx,this.context=a,this._diffModeMultiple=o==="multiple"}return e.prototype.add=function(t){return this._add=t,this},e.prototype.update=function(t){return this._update=t,this},e.prototype.updateManyToOne=function(t){return this._updateManyToOne=t,this},e.prototype.updateOneToMany=function(t){return this._updateOneToMany=t,this},e.prototype.updateManyToMany=function(t){return this._updateManyToMany=t,this},e.prototype.remove=function(t){return this._remove=t,this},e.prototype.execute=function(){this[this._diffModeMultiple?"_executeMultiple":"_executeOneToOne"]()},e.prototype._executeOneToOne=function(){var t=this._old,r=this._new,n={},i=new Array(t.length),a=new Array(r.length);this._initIndexMap(t,null,i,"_oldKeyGetter"),this._initIndexMap(r,n,a,"_newKeyGetter");for(var o=0;o1){var f=l.shift();l.length===1&&(n[s]=l[0]),this._update&&this._update(f,o)}else u===1?(n[s]=null,this._update&&this._update(l,o)):this._remove&&this._remove(o)}this._performRestAdd(a,n)},e.prototype._executeMultiple=function(){var t=this._old,r=this._new,n={},i={},a=[],o=[];this._initIndexMap(t,n,a,"_oldKeyGetter"),this._initIndexMap(r,i,o,"_newKeyGetter");for(var s=0;s1&&h===1)this._updateManyToOne&&this._updateManyToOne(f,u),i[l]=null;else if(c===1&&h>1)this._updateOneToMany&&this._updateOneToMany(f,u),i[l]=null;else if(c===1&&h===1)this._update&&this._update(f,u),i[l]=null;else if(c>1&&h>1)this._updateManyToMany&&this._updateManyToMany(f,u),i[l]=null;else if(c>1)for(var d=0;d1)for(var s=0;s30}var gl=Re,Hi=Ne,UX=typeof Int32Array>"u"?Array:Int32Array,YX="e\0\0",Tx=-1,jX=["hasItemOption","_nameList","_idList","_invertedIndicesMap","_dimSummary","userOutput","_rawData","_dimValueGetter","_nameDimIdx","_idDimIdx","_nameRepeatCount"],qX=["_approximateExtent"],Mx,lc,ml,yl,_p,uc,bp,CL=function(){function e(t,r){this.type="list",this._dimOmitted=!1,this._nameList=[],this._idList=[],this._visual={},this._layout={},this._itemVisuals=[],this._itemLayouts=[],this._graphicEls=[],this._approximateExtent={},this._calculationInfo={},this.hasItemOption=!1,this.TRANSFERABLE_METHODS=["cloneShallow","downSample","lttbDownSample","map"],this.CHANGABLE_METHODS=["filterSelf","selectRange"],this.DOWNSAMPLE_METHODS=["downSample","lttbDownSample"];var n,i=!1;bL(t)?(n=t.dimensions,this._dimOmitted=t.isDimensionOmitted(),this._schema=t):(i=!0,n=t),n=n||["x","y"];for(var a={},o=[],s={},l=!1,u={},f=0;f=r)){var n=this._store,i=n.getProvider();this._updateOrdinalMeta();var a=this._nameList,o=this._idList,s=i.getSource().sourceFormat,l=s===hn;if(l&&!i.pure)for(var u=[],f=t;f0},e.prototype.ensureUniqueItemVisual=function(t,r){var n=this._itemVisuals,i=n[t];i||(i=n[t]={});var a=i[r];return a==null&&(a=this.getVisual(r),ye(a)?a=a.slice():gl(a)&&(a=ue({},a)),i[r]=a),a},e.prototype.setItemVisual=function(t,r,n){var i=this._itemVisuals[t]||{};this._itemVisuals[t]=i,gl(r)?ue(i,r):i[r]=n},e.prototype.clearAllVisual=function(){this._visual={},this._itemVisuals=[]},e.prototype.setLayout=function(t,r){gl(t)?ue(this._layout,t):this._layout[t]=r},e.prototype.getLayout=function(t){return this._layout[t]},e.prototype.getItemLayout=function(t){return this._itemLayouts[t]},e.prototype.setItemLayout=function(t,r,n){this._itemLayouts[t]=n?ue(this._itemLayouts[t]||{},r):r},e.prototype.clearItemLayouts=function(){this._itemLayouts.length=0},e.prototype.setItemGraphicEl=function(t,r){var n=this.hostModel&&this.hostModel.seriesIndex;eY(n,this.dataType,t,r),this._graphicEls[t]=r},e.prototype.getItemGraphicEl=function(t){return this._graphicEls[t]},e.prototype.eachItemGraphicEl=function(t,r){R(this._graphicEls,function(n,i){n&&t&&t.call(r,n,i)})},e.prototype.cloneShallow=function(t){return t||(t=new e(this._schema?this._schema:Hi(this.dimensions,this._getDimInfo,this),this.hostModel)),_p(t,this),t._store=this._store,t},e.prototype.wrapMethod=function(t,r){var n=this[t];Ye(n)&&(this.__wrappedMethods=this.__wrappedMethods||[],this.__wrappedMethods.push(t),this[t]=function(){var i=n.apply(this,arguments);return r.apply(this,[i].concat(n0(arguments)))})},e.internalField=function(){Mx=function(t){var r=t._invertedIndicesMap;R(r,function(n,i){var a=t._dimInfos[i],o=a.ordinalMeta,s=t._store;if(o){n=r[i]=new UX(o.categories.length);for(var l=0;l1&&(l+="__ec__"+f),i[r]=l}}}(),e}();function TL(e,t){H0(e)||(e=z0(e)),t=t||{};var r=t.coordDimensions||[],n=t.dimensionsDefine||e.dimensionsDefine||[],i=je(),a=[],o=XX(e,r,n,t.dimensionsCount),s=t.canOmitUnusedDimensions&&xL(o),l=n===e.dimensionsDefine,u=l?SL(e):wL(n),f=t.encodeDefine;!f&&t.encodeDefaulter&&(f=t.encodeDefaulter(e,o));for(var c=je(f),h=new IE(o),d=0;d0&&(n.name=i+(a-1)),a++,t.set(i,a)}}function XX(e,t,r,n){var i=Math.max(e.dimensionsDetectedCount||1,t.length,r.length,n||0);return R(t,function(a){var o;Re(a)&&(o=a.dimsDef)&&(i=Math.max(i,o.length))}),i}function ZX(e,t,r){if(r||t.hasKey(e)){for(var n=0;t.hasKey(e+n);)n++;e+=n}return t.set(e,!0),e}var QX=function(){function e(t){this.coordSysDims=[],this.axisMap=je(),this.categoryAxisMap=je(),this.coordSysName=t}return e}();function JX(e){var t=e.get("coordinateSystem"),r=new QX(t),n=eZ[t];if(n)return n(e,r,r.axisMap,r.categoryAxisMap),r}var eZ={cartesian2d:function(e,t,r,n){var i=e.getReferringComponents("xAxis",Tn).models[0],a=e.getReferringComponents("yAxis",Tn).models[0];t.coordSysDims=["x","y"],r.set("x",i),r.set("y",a),qo(i)&&(n.set("x",i),t.firstCategoryDimIndex=0),qo(a)&&(n.set("y",a),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},singleAxis:function(e,t,r,n){var i=e.getReferringComponents("singleAxis",Tn).models[0];t.coordSysDims=["single"],r.set("single",i),qo(i)&&(n.set("single",i),t.firstCategoryDimIndex=0)},polar:function(e,t,r,n){var i=e.getReferringComponents("polar",Tn).models[0],a=i.findAxisModel("radiusAxis"),o=i.findAxisModel("angleAxis");t.coordSysDims=["radius","angle"],r.set("radius",a),r.set("angle",o),qo(a)&&(n.set("radius",a),t.firstCategoryDimIndex=0),qo(o)&&(n.set("angle",o),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=1))},geo:function(e,t,r,n){t.coordSysDims=["lng","lat"]},parallel:function(e,t,r,n){var i=e.ecModel,a=i.getComponent("parallel",e.get("parallelIndex")),o=t.coordSysDims=a.dimensions.slice();R(a.parallelAxisIndex,function(s,l){var u=i.getComponent("parallelAxis",s),f=o[l];r.set(f,u),qo(u)&&(n.set(f,u),t.firstCategoryDimIndex==null&&(t.firstCategoryDimIndex=l))})}};function qo(e){return e.get("type")==="category"}function tZ(e,t,r){r=r||{};var n=r.byIndex,i=r.stackedCoordDimension,a,o,s;rZ(t)?a=t:(o=t.schema,a=o.dimensions,s=t.store);var l=!!(e&&e.get("stack")),u,f,c,h;if(R(a,function(y,_){Ee(y)&&(a[_]=y={name:y}),l&&!y.isExtraCoord&&(!n&&!u&&y.ordinalMeta&&(u=y),!f&&y.type!=="ordinal"&&y.type!=="time"&&(!i||i===y.coordDim)&&(f=y))}),f&&!n&&!u&&(n=!0),f){c="__\0ecstackresult_"+e.id,h="__\0ecstackedover_"+e.id,u&&(u.createInvertedIndices=!0);var d=f.coordDim,v=f.type,p=0;R(a,function(y){y.coordDim===d&&p++});var m={name:c,coordDim:d,coordDimIndex:p,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:a.length},g={name:h,coordDim:h,coordDimIndex:p+1,type:v,isExtraCoord:!0,isCalculationCoord:!0,storeDimIndex:a.length+1};o?(s&&(m.storeDimIndex=s.ensureCalculationDimension(h,v),g.storeDimIndex=s.ensureCalculationDimension(c,v)),o.appendCalculationDimension(m),o.appendCalculationDimension(g)):(a.push(m),a.push(g))}return{stackedDimension:f&&f.name,stackedByDimension:u&&u.name,isStackedByIndex:n,stackedOverDimension:h,stackResultDimension:c}}function rZ(e){return!bL(e.schema)}function ML(e,t){return!!t&&t===e.getCalculationInfo("stackedDimension")}function nZ(e,t){return ML(e,t)?e.getCalculationInfo("stackResultDimension"):t}function iZ(e,t){var r=e.get("coordinateSystem"),n=$0.get(r),i;return t&&t.coordSysDims&&(i=Ne(t.coordSysDims,function(a){var o={name:a},s=t.axisMap.get(a);if(s){var l=s.get("type");o.type=zX(l)}return o})),i||(i=n&&(n.getDimensionsInfo?n.getDimensionsInfo():n.dimensions.slice())||["x","y"]),i}function aZ(e,t,r){var n,i;return r&&R(e,function(a,o){var s=a.coordDim,l=r.categoryAxisMap.get(s);l&&(n==null&&(n=o),a.ordinalMeta=l.getOrdinalMeta(),t&&(a.createInvertedIndices=!0)),a.otherDims.itemName!=null&&(i=!0)}),!i&&n!=null&&(e[n].otherDims.itemName=0),n}function AL(e,t,r){r=r||{};var n=t.getSourceManager(),i,a=!1;e?(a=!0,i=z0(e)):(i=n.getSource(),a=i.sourceFormat===hn);var o=JX(t),s=iZ(t,o),l=r.useEncodeDefaulter,u=Ye(l)?l:l?Rt(Kj,s,t):null,f={coordDimensions:s,generateCoord:r.generateCoord,encodeDefine:t.getEncode(),encodeDefaulter:u,canOmitUnusedDimensions:!a},c=TL(i,f),h=aZ(c.dimensions,r.createInvertedIndices,o),d=a?null:n.getSharedDataStore(c),v=tZ(t,{schema:c,store:d}),p=new CL(c,t);p.setCalculationInfo(v);var m=h!=null&&oZ(i)?function(g,y,_,b){return b===h?_:this.defaultDimValueGetter(g,y,_,b)}:null;return p.hasItemOption=!1,p.initData(a?i:d,null,m),p}function oZ(e){if(e.sourceFormat===hn){var t=sZ(e.data||[]);return!ye(of(t))}}function sZ(e){for(var t=0;tr[1]&&(r[1]=t[1])},e.prototype.unionExtentFromData=function(t,r){this.unionExtent(t.getApproximateExtent(r))},e.prototype.getExtent=function(){return this._extent.slice()},e.prototype.setExtent=function(t,r){var n=this._extent;isNaN(t)||(n[0]=t),isNaN(r)||(n[1]=r)},e.prototype.isInExtentRange=function(t){return this._extent[0]<=t&&this._extent[1]>=t},e.prototype.isBlank=function(){return this._isBlank},e.prototype.setBlank=function(t){this._isBlank=t},e}();Sh(oi);var lZ=0,Lm=function(){function e(t){this.categories=t.categories||[],this._needCollect=t.needCollect,this._deduplication=t.deduplication,this.uid=++lZ}return e.createByAxisModel=function(t){var r=t.option,n=r.data,i=n&&Ne(n,uZ);return new e({categories:i,needCollect:!i,deduplication:r.dedplication!==!1})},e.prototype.getOrdinal=function(t){return this._getOrCreateMap().get(t)},e.prototype.parseAndCollect=function(t){var r,n=this._needCollect;if(!Ee(t)&&!n)return t;if(n&&!this._deduplication)return r=this.categories.length,this.categories[r]=t,r;var i=this._getOrCreateMap();return r=i.get(t),r==null&&(n?(r=this.categories.length,this.categories[r]=t,i.set(t,r)):r=NaN),r},e.prototype._getOrCreateMap=function(){return this._map||(this._map=je(this.categories))},e}();function uZ(e){return Re(e)&&e.value!=null?e.value:e+""}function Dm(e){return e.type==="interval"||e.type==="log"}function fZ(e,t,r,n){var i={},a=e[1]-e[0],o=i.interval=q2(a/t,!0);r!=null&&on&&(o=i.interval=n);var s=i.intervalPrecision=PL(o),l=i.niceTickExtent=[$t(Math.ceil(e[0]/o)*o,s),$t(Math.floor(e[1]/o)*o,s)];return cZ(l,e),i}function wp(e){var t=Math.pow(10,d0(e)),r=e/t;return r?r===2?r=3:r===3?r=5:r*=2:r=1,$t(r*t)}function PL(e){return vi(e)+2}function Ax(e,t,r){e[t]=Math.max(Math.min(e[t],r[1]),r[0])}function cZ(e,t){!isFinite(e[0])&&(e[0]=t[0]),!isFinite(e[1])&&(e[1]=t[1]),Ax(e,0,t),Ax(e,1,t),e[0]>e[1]&&(e[0]=e[1])}function $h(e,t){return e>=t[0]&&e<=t[1]}function Hh(e,t){return t[1]===t[0]?.5:(e-t[0])/(t[1]-t[0])}function zh(e,t){return e*(t[1]-t[0])+t[0]}var EL=function(e){ge(t,e);function t(r){var n=e.call(this,r)||this;n.type="ordinal";var i=n.getSetting("ordinalMeta");return i||(i=new Lm({})),ye(i)&&(i=new Lm({categories:Ne(i,function(a){return Re(a)?a.value:a})})),n._ordinalMeta=i,n._extent=n.getSetting("extent")||[0,i.categories.length-1],n}return t.prototype.parse=function(r){return r==null?NaN:Ee(r)?this._ordinalMeta.getOrdinal(r):Math.round(r)},t.prototype.contain=function(r){return r=this.parse(r),$h(r,this._extent)&&this._ordinalMeta.categories[r]!=null},t.prototype.normalize=function(r){return r=this._getTickNumber(this.parse(r)),Hh(r,this._extent)},t.prototype.scale=function(r){return r=Math.round(zh(r,this._extent)),this.getRawOrdinalNumber(r)},t.prototype.getTicks=function(){for(var r=[],n=this._extent,i=n[0];i<=n[1];)r.push({value:i}),i++;return r},t.prototype.getMinorTicks=function(r){},t.prototype.setSortInfo=function(r){if(r==null){this._ordinalNumbersByTick=this._ticksByOrdinalNumber=null;return}for(var n=r.ordinalNumbers,i=this._ordinalNumbersByTick=[],a=this._ticksByOrdinalNumber=[],o=0,s=this._ordinalMeta.categories.length,l=Math.min(s,n.length);o=0&&r=0&&r=r},t.prototype.getOrdinalMeta=function(){return this._ordinalMeta},t.prototype.calcNiceTicks=function(){},t.prototype.calcNiceExtent=function(){},t.type="ordinal",t}(oi);oi.registerClass(EL);const LL=EL;var za=$t,DL=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type="interval",r._interval=0,r._intervalPrecision=2,r}return t.prototype.parse=function(r){return r},t.prototype.contain=function(r){return $h(r,this._extent)},t.prototype.normalize=function(r){return Hh(r,this._extent)},t.prototype.scale=function(r){return zh(r,this._extent)},t.prototype.setExtent=function(r,n){var i=this._extent;isNaN(r)||(i[0]=parseFloat(r)),isNaN(n)||(i[1]=parseFloat(n))},t.prototype.unionExtent=function(r){var n=this._extent;r[0]n[1]&&(n[1]=r[1]),this.setExtent(n[0],n[1])},t.prototype.getInterval=function(){return this._interval},t.prototype.setInterval=function(r){this._interval=r,this._niceExtent=this._extent.slice(),this._intervalPrecision=PL(r)},t.prototype.getTicks=function(r){var n=this._interval,i=this._extent,a=this._niceExtent,o=this._intervalPrecision,s=[];if(!n)return s;var l=1e4;i[0]l)return[];var f=s.length?s[s.length-1].value:a[1];return i[1]>f&&(r?s.push({value:za(f+n,o)}):s.push({value:i[1]})),s},t.prototype.getMinorTicks=function(r){for(var n=this.getTicks(!0),i=[],a=this.getExtent(),o=1;oa[0]&&d0&&(a=a===null?s:Math.min(a,s))}r[n]=a}}return r}function RL(e){var t=vZ(e),r=[];return R(e,function(n){var i=n.coordinateSystem,a=i.getBaseAxis(),o=a.getExtent(),s;if(a.type==="category")s=a.getBandWidth();else if(a.type==="value"||a.type==="time"){var l=a.dim+"_"+a.index,u=t[l],f=Math.abs(o[1]-o[0]),c=a.scale.getExtent(),h=Math.abs(c[1]-c[0]);s=u?f/h*u:f}else{var d=n.getData();s=Math.abs(o[1]-o[0])/d.count()}var v=yt(n.get("barWidth"),s),p=yt(n.get("barMaxWidth"),s),m=yt(n.get("barMinWidth")||(NL(n)?.5:1),s),g=n.get("barGap"),y=n.get("barCategoryGap");r.push({bandWidth:s,barWidth:v,barMaxWidth:p,barMinWidth:m,barGap:g,barCategoryGap:y,axisKey:t_(a),stackId:e_(n)})}),pZ(r)}function pZ(e){var t={};R(e,function(n,i){var a=n.axisKey,o=n.bandWidth,s=t[a]||{bandWidth:o,remainedWidth:o,autoWidthCount:0,categoryGap:null,gap:"20%",stacks:{}},l=s.stacks;t[a]=s;var u=n.stackId;l[u]||s.autoWidthCount++,l[u]=l[u]||{width:0,maxWidth:0};var f=n.barWidth;f&&!l[u].width&&(l[u].width=f,f=Math.min(s.remainedWidth,f),s.remainedWidth-=f);var c=n.barMaxWidth;c&&(l[u].maxWidth=c);var h=n.barMinWidth;h&&(l[u].minWidth=h);var d=n.barGap;d!=null&&(s.gap=d);var v=n.barCategoryGap;v!=null&&(s.categoryGap=v)});var r={};return R(t,function(n,i){r[i]={};var a=n.stacks,o=n.bandWidth,s=n.categoryGap;if(s==null){var l=Ct(a).length;s=Math.max(35-l*4,15)+"%"}var u=yt(s,o),f=yt(n.gap,1),c=n.remainedWidth,h=n.autoWidthCount,d=(c-u)/(h+(h-1)*f);d=Math.max(d,0),R(a,function(g){var y=g.maxWidth,_=g.minWidth;if(g.width){var b=g.width;y&&(b=Math.min(b,y)),_&&(b=Math.max(b,_)),g.width=b,c-=b+f*b,h--}else{var b=d;y&&yb&&(b=_),b!==d&&(g.width=b,c-=b+f*b,h--)}}),d=(c-u)/(h+(h-1)*f),d=Math.max(d,0);var v=0,p;R(a,function(g,y){g.width||(g.width=d),p=g,v+=g.width*(1+f)}),p&&(v-=p.width*f);var m=-v/2;R(a,function(g,y){r[i][y]=r[i][y]||{bandWidth:o,offset:m,width:g.width},m+=g.width*(1+f)})}),r}function gZ(e,t,r){if(e&&t){var n=e[t_(t)];return n!=null&&r!=null?n[e_(r)]:n}}function mZ(e,t){var r=OL(e,t),n=RL(r);R(r,function(i){var a=i.getData(),o=i.coordinateSystem,s=o.getBaseAxis(),l=e_(i),u=n[t_(s)][l],f=u.offset,c=u.width;a.setLayout({bandWidth:u.bandWidth,offset:f,size:c})})}function yZ(e){return{seriesType:e,plan:HE(),reset:function(t){if(kL(t)){var r=t.getData(),n=t.coordinateSystem,i=n.getBaseAxis(),a=n.getOtherAxis(i),o=r.getDimensionIndex(r.mapDimension(a.dim)),s=r.getDimensionIndex(r.mapDimension(i.dim)),l=t.get("showBackground",!0),u=r.mapDimension(a.dim),f=r.getCalculationInfo("stackResultDimension"),c=ML(r,u)&&!!r.getCalculationInfo("stackedOnSeries"),h=a.isHorizontal(),d=_Z(i,a),v=NL(t),p=t.get("barMinHeight")||0,m=f&&r.getDimensionIndex(f),g=r.getLayout("size"),y=r.getLayout("offset");return{progress:function(_,b){for(var x=_.count,w=v&&Sp(x*3),S=v&&l&&Sp(x*3),C=v&&Sp(x),M=n.master.getRect(),A=h?M.width:M.height,P,E=b.getStore(),L=0;(P=_.next())!=null;){var O=E.get(c?m:o,P),N=E.get(s,P),H=d,V=void 0;c&&(V=+O-E.get(o,P));var U=void 0,F=void 0,z=void 0,ee=void 0;if(h){var J=n.dataToPoint([O,N]);if(c){var me=n.dataToPoint([V,N]);H=me[0]}U=H,F=J[1]+y,z=J[0]-H,ee=g,Math.abs(z)>>1;e[i][1]i&&(this._approxInterval=i);var s=fc.length,l=Math.min(bZ(fc,this._approxInterval,0,s),s-1);this._interval=fc[l][1],this._minLevelUnit=fc[Math.max(l-1,0)][0]},t.prototype.parse=function(r){return Tt(r)?r:+Ti(r)},t.prototype.contain=function(r){return $h(this.parse(r),this._extent)},t.prototype.normalize=function(r){return Hh(this.parse(r),this._extent)},t.prototype.scale=function(r){return zh(r,this._extent)},t.type="time",t}(df),fc=[["second",I0],["minute",O0],["hour",tu],["quarter-day",tu*6],["half-day",tu*12],["day",on*1.2],["half-week",on*3.5],["week",on*7],["month",on*31],["quarter",on*95],["half-year",gS/2],["year",gS]];function wZ(e,t,r,n){var i=Ti(t),a=Ti(r),o=function(v){return yS(i,v,n)===yS(a,v,n)},s=function(){return o("year")},l=function(){return s()&&o("month")},u=function(){return l()&&o("day")},f=function(){return u()&&o("hour")},c=function(){return f()&&o("minute")},h=function(){return c()&&o("second")},d=function(){return h()&&o("millisecond")};switch(e){case"year":return s();case"month":return l();case"day":return u();case"hour":return f();case"minute":return c();case"second":return h();case"millisecond":return d()}}function SZ(e,t){return e/=on,e>16?16:e>7.5?7:e>3.5?4:e>1.5?2:1}function xZ(e){var t=30*on;return e/=t,e>6?6:e>3?3:e>2?2:1}function CZ(e){return e/=tu,e>12?12:e>6?6:e>3.5?4:e>2?2:1}function Px(e,t){return e/=t?O0:I0,e>30?30:e>20?20:e>15?15:e>10?10:e>5?5:e>2?2:1}function TZ(e){return q2(e,!0)}function MZ(e,t,r){var n=new Date(e);switch(hs(t)){case"year":case"month":n[sE(r)](0);case"day":n[lE(r)](1);case"hour":n[uE(r)](0);case"minute":n[fE(r)](0);case"second":n[cE(r)](0),n[dE(r)](0)}return n.getTime()}function AZ(e,t,r,n){var i=1e4,a=aE,o=0;function s(A,P,E,L,O,N,H){for(var V=new Date(P),U=P,F=V[L]();U1&&N===0&&E.unshift({value:E[0].value-U})}}for(var N=0;N=n[0]&&y<=n[1]&&c++)}var _=(n[1]-n[0])/t;if(c>_*1.5&&h>_/1.5||(u.push(m),c>_||e===a[d]))break}f=[]}}}for(var b=jt(Ne(u,function(A){return jt(A,function(P){return P.value>=n[0]&&P.value<=n[1]&&!P.notAdd})}),function(A){return A.length>0}),x=[],w=b.length-1,d=0;d0;)a*=10;var s=[$t(DZ(n[0]/a)*a),$t(LZ(n[1]/a)*a)];this._interval=a,this._niceExtent=s}},t.prototype.calcNiceExtent=function(r){ou.calcNiceExtent.call(this,r),this._fixMin=r.fixMin,this._fixMax=r.fixMax},t.prototype.parse=function(r){return r},t.prototype.contain=function(r){return r=pn(r)/pn(this.base),$h(r,this._extent)},t.prototype.normalize=function(r){return r=pn(r)/pn(this.base),Hh(r,this._extent)},t.prototype.scale=function(r){return r=zh(r,this._extent),cc(this.base,r)},t.type="log",t}(oi),FL=r_.prototype;FL.getMinorTicks=ou.getMinorTicks;FL.getLabel=ou.getLabel;function dc(e,t){return EZ(e,vi(t))}oi.registerClass(r_);const IZ=r_;var OZ=function(){function e(t,r,n){this._prepareParams(t,r,n)}return e.prototype._prepareParams=function(t,r,n){n[1]0&&l>0&&!u&&(s=0),s<0&&l<0&&!f&&(l=0));var h=this._determinedMin,d=this._determinedMax;return h!=null&&(s=h,u=!0),d!=null&&(l=d,f=!0),{min:s,max:l,minFixed:u,maxFixed:f,isBlank:c}},e.prototype.modifyDataMinMax=function(t,r){this[kZ[t]]=r},e.prototype.setDeterminedMinMax=function(t,r){var n=RZ[t];this[n]=r},e.prototype.freeze=function(){this.frozen=!0},e}(),RZ={min:"_determinedMin",max:"_determinedMax"},kZ={min:"_dataMin",max:"_dataMax"};function NZ(e,t,r){var n=e.rawExtentInfo;return n||(n=new OZ(e,t,r),e.rawExtentInfo=n,n)}function hc(e,t){return t==null?null:bd(t)?NaN:e.parse(t)}function $L(e,t){var r=e.type,n=NZ(e,t,e.getExtent()).calculate();e.setBlank(n.isBlank);var i=n.min,a=n.max,o=t.ecModel;if(o&&r==="time"){var s=OL("bar",o),l=!1;if(R(s,function(c){l=l||c.getBaseAxis()===t.axis}),l){var u=RL(s),f=BZ(i,a,t,u);i=f.min,a=f.max}}return{extent:[i,a],fixMin:n.minFixed,fixMax:n.maxFixed}}function BZ(e,t,r,n){var i=r.axis.getExtent(),a=i[1]-i[0],o=gZ(n,r.axis);if(o===void 0)return{min:e,max:t};var s=1/0;R(o,function(d){s=Math.min(d.offset,s)});var l=-1/0;R(o,function(d){l=Math.max(d.offset+d.width,l)}),s=Math.abs(s),l=Math.abs(l);var u=s+l,f=t-e,c=1-(s+l)/a,h=f/c-f;return t+=h*(l/u),e-=h*(s/u),{min:e,max:t}}function Lx(e,t){var r=t,n=$L(e,r),i=n.extent,a=r.get("splitNumber");e instanceof IZ&&(e.base=r.get("logBase"));var o=e.type,s=r.get("interval"),l=o==="interval"||o==="time";e.setExtent(i[0],i[1]),e.calcNiceExtent({splitNumber:a,fixMin:n.fixMin,fixMax:n.fixMax,minInterval:l?r.get("minInterval"):null,maxInterval:l?r.get("maxInterval"):null}),s!=null&&e.setInterval&&e.setInterval(s)}function FZ(e,t){if(t=t||e.get("type"),t)switch(t){case"category":return new LL({ordinalMeta:e.getOrdinalMeta?e.getOrdinalMeta():e.getCategories(),extent:[1/0,-1/0]});case"time":return new PZ({locale:e.ecModel.getLocaleModel(),useUTC:e.ecModel.get("useUTC")});default:return new(oi.getClass(t)||df)}}function $Z(e){var t=e.scale.getExtent(),r=t[0],n=t[1];return!(r>0&&n>0||r<0&&n<0)}function hf(e){var t=e.getLabelModel().get("formatter"),r=e.type==="category"?e.scale.getExtent()[0]:null;return e.scale.type==="time"?function(n){return function(i,a){return e.scale.getFormattedLabel(i,a,n)}}(t):Ee(t)?function(n){return function(i){var a=e.scale.getLabel(i),o=n.replace("{value}",a??"");return o}}(t):Ye(t)?function(n){return function(i,a){return r!=null&&(a=i.value-r),n(n_(e,i),a,i.level!=null?{level:i.level}:null)}}(t):function(n){return e.scale.getLabel(n)}}function n_(e,t){return e.type==="category"?e.scale.getLabel(t):t.value}function HZ(e){var t=e.model,r=e.scale;if(!(!t.get(["axisLabel","show"])||r.isBlank())){var n,i,a=r.getExtent();r instanceof LL?i=r.count():(n=r.getTicks(),i=n.length);var o=e.getLabelModel(),s=hf(e),l,u=1;i>40&&(u=Math.ceil(i/40));for(var f=0;f=0||(Dx.push(e),Ye(e)&&(e={install:e}),e.install(GZ))}var zu=Et();function UZ(e){return e.type==="category"?jZ(e):KZ(e)}function YZ(e,t){return e.type==="category"?qZ(e,t):{ticks:Ne(e.scale.getTicks(),function(r){return r.value})}}function jZ(e){var t=e.getLabelModel(),r=zL(e,t);return!t.get("show")||e.scale.isBlank()?{labels:[],labelCategoryInterval:r.labelCategoryInterval}:r}function zL(e,t){var r=VL(e,"labels"),n=i_(t),i=WL(r,n);if(i)return i;var a,o;return Ye(n)?a=YL(e,n):(o=n==="auto"?XZ(e):n,a=UL(e,o)),GL(r,n,{labels:a,labelCategoryInterval:o})}function qZ(e,t){var r=VL(e,"ticks"),n=i_(t),i=WL(r,n);if(i)return i;var a,o;if((!t.get("show")||e.scale.isBlank())&&(a=[]),Ye(n))a=YL(e,n,!0);else if(n==="auto"){var s=zL(e,e.getLabelModel());o=s.labelCategoryInterval,a=Ne(s.labels,function(l){return l.tickValue})}else o=n,a=UL(e,o,!0);return GL(r,n,{ticks:a,tickCategoryInterval:o})}function KZ(e){var t=e.scale.getTicks(),r=hf(e);return{labels:Ne(t,function(n,i){return{level:n.level,formattedLabel:r(n,i),rawLabel:e.scale.getLabel(n),tickValue:n.value}})}}function VL(e,t){return zu(e)[t]||(zu(e)[t]=[])}function WL(e,t){for(var r=0;r40&&(s=Math.max(1,Math.floor(o/40)));for(var l=a[0],u=e.dataToCoord(l+1)-e.dataToCoord(l),f=Math.abs(u*Math.cos(n)),c=Math.abs(u*Math.sin(n)),h=0,d=0;l<=a[1];l+=s){var v=0,p=0,m=u0(r({value:l}),t.font,"center","top");v=m.width*1.3,p=m.height*1.3,h=Math.max(h,v,7),d=Math.max(d,p,7)}var g=h/f,y=d/c;isNaN(g)&&(g=1/0),isNaN(y)&&(y=1/0);var _=Math.max(0,Math.floor(Math.min(g,y))),b=zu(e.model),x=e.getExtent(),w=b.lastAutoInterval,S=b.lastTickCount;return w!=null&&S!=null&&Math.abs(w-_)<=1&&Math.abs(S-o)<=1&&w>_&&b.axisExtent0===x[0]&&b.axisExtent1===x[1]?_=w:(b.lastTickCount=o,b.lastAutoInterval=_,b.axisExtent0=x[0],b.axisExtent1=x[1]),_}function QZ(e){var t=e.getLabelModel();return{axisRotate:e.getRotate?e.getRotate():e.isHorizontal&&!e.isHorizontal()?90:0,labelRotate:t.get("rotate")||0,font:t.getFont()}}function UL(e,t,r){var n=hf(e),i=e.scale,a=i.getExtent(),o=e.getLabelModel(),s=[],l=Math.max((t||0)+1,1),u=a[0],f=i.count();u!==0&&l>1&&f/l>2&&(u=Math.round(Math.ceil(u/l)*l));var c=HL(e),h=o.get("showMinLabel")||c,d=o.get("showMaxLabel")||c;h&&u!==a[0]&&p(a[0]);for(var v=u;v<=a[1];v+=l)p(v);d&&v-l!==a[1]&&p(a[1]);function p(m){var g={value:m};s.push(r?m:{formattedLabel:n(g),rawLabel:i.getLabel(g),tickValue:m})}return s}function YL(e,t,r){var n=e.scale,i=hf(e),a=[];return R(n.getTicks(),function(o){var s=n.getLabel(o),l=o.value;t(o.value,s)&&a.push(r?l:{formattedLabel:i(o),rawLabel:s,tickValue:l})}),a}var Ix=[0,1],JZ=function(){function e(t,r,n){this.onBand=!1,this.inverse=!1,this.dim=t,this.scale=r,this._extent=n||[0,0]}return e.prototype.contain=function(t){var r=this._extent,n=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return t>=n&&t<=i},e.prototype.containData=function(t){return this.scale.contain(t)},e.prototype.getExtent=function(){return this._extent.slice()},e.prototype.getPixelPrecision=function(t){return O9(t||this.scale.getExtent(),this._extent)},e.prototype.setExtent=function(t,r){var n=this._extent;n[0]=t,n[1]=r},e.prototype.dataToCoord=function(t,r){var n=this._extent,i=this.scale;return t=i.normalize(t),this.onBand&&i.type==="ordinal"&&(n=n.slice(),Ox(n,i.count())),Jg(t,Ix,n,r)},e.prototype.coordToData=function(t,r){var n=this._extent,i=this.scale;this.onBand&&i.type==="ordinal"&&(n=n.slice(),Ox(n,i.count()));var a=Jg(t,n,Ix,r);return this.scale.scale(a)},e.prototype.pointToData=function(t,r){},e.prototype.getTicksCoords=function(t){t=t||{};var r=t.tickModel||this.getTickModel(),n=YZ(this,r),i=n.ticks,a=Ne(i,function(s){return{coord:this.dataToCoord(this.scale.type==="ordinal"?this.scale.getRawOrdinalNumber(s):s),tickValue:s}},this),o=r.get("alignWithLabel");return eQ(this,a,o,t.clamp),a},e.prototype.getMinorTicksCoords=function(){if(this.scale.type==="ordinal")return[];var t=this.model.getModel("minorTick"),r=t.get("splitNumber");r>0&&r<100||(r=5);var n=this.scale.getMinorTicks(r),i=Ne(n,function(a){return Ne(a,function(o){return{coord:this.dataToCoord(o),tickValue:o}},this)},this);return i},e.prototype.getViewLabels=function(){return UZ(this).labels},e.prototype.getLabelModel=function(){return this.model.getModel("axisLabel")},e.prototype.getTickModel=function(){return this.model.getModel("axisTick")},e.prototype.getBandWidth=function(){var t=this._extent,r=this.scale.getExtent(),n=r[1]-r[0]+(this.onBand?1:0);n===0&&(n=1);var i=Math.abs(t[1]-t[0]);return Math.abs(i)/n},e.prototype.calculateCategoryInterval=function(){return ZZ(this)},e}();function Ox(e,t){var r=e[1]-e[0],n=t,i=r/n/2;e[0]+=i,e[1]-=i}function eQ(e,t,r,n){var i=t.length;if(!e.onBand||r||!i)return;var a=e.getExtent(),o,s;if(i===1)t[0].coord=a[0],o=t[1]={coord:a[1]};else{var l=t[i-1].tickValue-t[0].tickValue,u=(t[i-1].coord-t[0].coord)/l;R(t,function(d){d.coord-=u/2});var f=e.scale.getExtent();s=1+f[1]-t[i-1].tickValue,o={coord:t[i-1].coord+u*s},t.push(o)}var c=a[0]>a[1];h(t[0].coord,a[0])&&(n?t[0].coord=a[0]:t.shift()),n&&h(a[0],t[0].coord)&&t.unshift({coord:a[0]}),h(a[1],o.coord)&&(n?o.coord=a[1]:t.pop()),n&&h(o.coord,a[1])&&t.push({coord:a[1]});function h(d,v){return d=$t(d),v=$t(v),c?d>v:di&&(i+=_l);var d=Math.atan2(s,o);if(d<0&&(d+=_l),d>=n&&d<=i||d+_l>=n&&d+_l<=i)return l[0]=f,l[1]=c,u-r;var v=r*Math.cos(n)+e,p=r*Math.sin(n)+t,m=r*Math.cos(i)+e,g=r*Math.sin(i)+t,y=(v-o)*(v-o)+(p-s)*(p-s),_=(m-o)*(m-o)+(g-s)*(g-s);return y<_?(l[0]=v,l[1]=p,Math.sqrt(y)):(l[0]=m,l[1]=g,Math.sqrt(_))}function zd(e,t,r,n,i,a,o,s){var l=i-e,u=a-t,f=r-e,c=n-t,h=Math.sqrt(f*f+c*c);f/=h,c/=h;var d=l*f+u*c,v=d/h;s&&(v=Math.min(Math.max(v,0),1)),v*=h;var p=o[0]=e+v*f,m=o[1]=t+v*c;return Math.sqrt((p-i)*(p-i)+(m-a)*(m-a))}function jL(e,t,r,n,i,a,o){r<0&&(e=e+r,r=-r),n<0&&(t=t+n,n=-n);var s=e+r,l=t+n,u=o[0]=Math.min(Math.max(i,e),s),f=o[1]=Math.min(Math.max(a,t),l);return Math.sqrt((u-i)*(u-i)+(f-a)*(f-a))}var bn=[];function aQ(e,t,r){var n=jL(t.x,t.y,t.width,t.height,e.x,e.y,bn);return r.set(bn[0],bn[1]),n}function oQ(e,t,r){for(var n=0,i=0,a=0,o=0,s,l,u=1/0,f=t.data,c=e.x,h=e.y,d=0;d0){t=t/180*Math.PI,Mn.fromArray(e[0]),ut.fromArray(e[1]),Lt.fromArray(e[2]),Fe.sub(Yn,Mn,ut),Fe.sub(Wn,Lt,ut);var r=Yn.len(),n=Wn.len();if(!(r<.001||n<.001)){Yn.scale(1/r),Wn.scale(1/n);var i=Yn.dot(Wn),a=Math.cos(t);if(a1&&Fe.copy(dr,Lt),dr.toArray(e[1])}}}}function sQ(e,t,r){if(r<=180&&r>0){r=r/180*Math.PI,Mn.fromArray(e[0]),ut.fromArray(e[1]),Lt.fromArray(e[2]),Fe.sub(Yn,ut,Mn),Fe.sub(Wn,Lt,ut);var n=Yn.len(),i=Wn.len();if(!(n<.001||i<.001)){Yn.scale(1/n),Wn.scale(1/i);var a=Yn.dot(t),o=Math.cos(r);if(a=l)Fe.copy(dr,Lt);else{dr.scaleAndAdd(Wn,s/Math.tan(Math.PI/2-f));var c=Lt.x!==ut.x?(dr.x-ut.x)/(Lt.x-ut.x):(dr.y-ut.y)/(Lt.y-ut.y);if(isNaN(c))return;c<0?Fe.copy(dr,ut):c>1&&Fe.copy(dr,Lt)}dr.toArray(e[1])}}}}function kx(e,t,r,n){var i=r==="normal",a=i?e:e.ensureState(r);a.ignore=t;var o=n.get("smooth");o&&o===!0&&(o=.3),a.shape=a.shape||{},o>0&&(a.shape.smooth=o);var s=n.getModel("lineStyle").getLineStyle();i?e.useStyle(s):a.style=s}function lQ(e,t){var r=t.smooth,n=t.points;if(n)if(e.moveTo(n[0][0],n[0][1]),r>0&&n.length>=3){var i=Fg(n[0],n[1]),a=Fg(n[1],n[2]);if(!i||!a){e.lineTo(n[1][0],n[1][1]),e.lineTo(n[2][0],n[2][1]);return}var o=Math.min(i,a)*r,s=gv([],n[1],n[0],o/i),l=gv([],n[1],n[2],o/a),u=gv([],s,l,.5);e.bezierCurveTo(s[0],s[1],s[0],s[1],u[0],u[1]),e.bezierCurveTo(l[0],l[1],l[0],l[1],n[2][0],n[2][1])}else for(var f=1;f0&&a&&x(-f/o,0,o);var p=e[0],m=e[o-1],g,y;_(),g<0&&w(-g,.8),y<0&&w(y,.8),_(),b(g,y,1),b(y,g,-1),_(),g<0&&S(-g),y<0&&S(y);function _(){g=p.rect[t]-n,y=i-m.rect[t]-m.rect[r]}function b(C,M,A){if(C<0){var P=Math.min(M,-C);if(P>0){x(P*A,0,o);var E=P+C;E<0&&w(-E*A,1)}else w(-C*A,1)}}function x(C,M,A){C!==0&&(u=!0);for(var P=M;P0)for(var E=0;E0;E--){var H=A[E-1]*N;x(-H,E,o)}}}function S(C){var M=C<0?-1:1;C=Math.abs(C);for(var A=Math.ceil(C/(o-1)),P=0;P0?x(A,0,P+1):x(-A,o-P-1,o),C-=A,C<=0)return}return u}function uQ(e,t,r,n){return QL(e,"x","width",t,r,n)}function JL(e,t,r,n){return QL(e,"y","height",t,r,n)}function eD(e){var t=[];e.sort(function(p,m){return m.priority-p.priority});var r=new nt(0,0,0,0);function n(p){if(!p.ignore){var m=p.ensureState("emphasis");m.ignore==null&&(m.ignore=!1)}p.ignore=!0}for(var i=0;i=0&&n.attr(a.oldLayoutSelect),ot(h,"emphasis")>=0&&n.attr(a.oldLayoutEmphasis)),Or(n,u,r,l)}else if(n.attr(u),!cf(n).valueAnimation){var c=Ze(n.style.opacity,1);n.style.opacity=0,Wr(n,{style:{opacity:c}},r,l)}if(a.oldLayout=u,n.states.select){var d=a.oldLayoutSelect={};vc(d,u,pc),vc(d,n.states.select,pc)}if(n.states.emphasis){var v=a.oldLayoutEmphasis={};vc(v,u,pc),vc(v,n.states.emphasis,pc)}Sj(n,l,f,r,r)}if(i&&!i.ignore&&!i.invisible){var a=dQ(i),o=a.oldLayout,p={points:i.shape.points};o?(i.attr({shape:o}),Or(i,{shape:p},r)):(i.setShape(p),i.style.strokePercent=0,Wr(i,{style:{strokePercent:1}},r)),a.oldLayout=p}},e}(),Cp=Et();function vQ(e){e.registerUpdateLifecycle("series:beforeupdate",function(t,r,n){var i=Cp(r).labelManager;i||(i=Cp(r).labelManager=new hQ),i.clearLabels()}),e.registerUpdateLifecycle("series:layoutlabels",function(t,r,n){var i=Cp(r).labelManager;n.updatedSeries.forEach(function(a){i.addLabelsOfSeries(r.getViewOfSeriesModel(a))}),i.updateLayoutConfig(r),i.layout(r),i.processLabelsOverall()})}function pQ(e,t){var r=e.mapDimensionsAll("defaultedLabel"),n=r.length;if(n===1){var i=Rs(e,t,r[0]);return i!=null?i+"":null}else if(n){for(var a=[],o=0;o=0&&n.push(t[a])}return n.join(" ")}function mQ(e,t,r,n,i){var a=e.getArea(),o=a.x,s=a.y,l=a.width,u=a.height,f=r.get(["lineStyle","width"])||2;o-=f/2,s-=f/2,l+=f,u+=f,o=Math.floor(o),l=Math.round(l);var c=new Gt({shape:{x:o,y:s,width:l,height:u}});if(t){var h=e.getBaseAxis(),d=h.isHorizontal(),v=h.inverse;d?(v&&(c.shape.x+=l),c.shape.width=0):(v||(c.shape.y+=u),c.shape.height=0);var p=Ye(i)?function(m){i(m,c)}:null;Wr(c,{shape:{width:l,height:u,x:o,y:s}},r,null,n,p)}return c}function yQ(e,t,r){var n=e.getArea(),i=$t(n.r0,1),a=$t(n.r,1),o=new Eo({shape:{cx:$t(e.cx,1),cy:$t(e.cy,1),r0:i,r:a,startAngle:n.startAngle,endAngle:n.endAngle,clockwise:n.clockwise}});if(t){var s=e.getBaseAxis().dim==="angle";s?o.shape.endAngle=n.startAngle:o.shape.r=i,Wr(o,{shape:{endAngle:n.endAngle,r:a}},r)}return o}function _Q(e,t,r,n,i){if(e){if(e.type==="polar")return yQ(e,t,r);if(e.type==="cartesian2d")return mQ(e,t,r,n,i)}else return null;return null}function tD(e,t){return e.type===t}var bQ={average:function(e){for(var t=0,r=0,n=0;nt&&(t=e[r]);return isFinite(t)?t:NaN},min:function(e){for(var t=1/0,r=0;r10&&o.type==="cartesian2d"&&a){var l=o.getBaseAxis(),u=o.getOtherAxis(l),f=l.getExtent(),c=n.getDevicePixelRatio(),h=Math.abs(f[1]-f[0])*(c||1),d=Math.round(s/h);if(isFinite(d)&&d>1){a==="lttb"&&t.setData(i.lttbDownSample(i.mapDimension(u.dim),1/d));var v=void 0;Ee(a)?v=bQ[a]:Ye(a)&&(v=a),v&&t.setData(i.downSample(i.mapDimension(u.dim),1/d,v,wQ))}}}}}var Im=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.getInitialData=function(r,n){return AL(null,this,{useEncodeDefaulter:!0})},t.prototype.getMarkerPosition=function(r,n,i){var a=this.coordinateSystem;if(a&&a.clampData){var o=a.clampData(r),s=a.dataToPoint(o);if(i)R(a.getAxes(),function(h,d){if(h.type==="category"&&n!=null){var v=h.getTicksCoords(),p=o[d],m=n[d]==="x1"||n[d]==="y1";if(m&&(p+=1),v.length<2)return;if(v.length===2){s[d]=h.toGlobalCoord(h.getExtent()[m?1:0]);return}for(var g=void 0,y=void 0,_=1,b=0;bp){y=(x+g)/2;break}b===1&&(_=w-v[0].tickValue)}y==null&&(g?g&&(y=v[v.length-1].coord):y=v[0].coord),s[d]=h.toGlobalCoord(y)}});else{var l=this.getData(),u=l.getLayout("offset"),f=l.getLayout("size"),c=a.getBaseAxis().isHorizontal()?0:1;s[c]+=u+f/2}return s}return[NaN,NaN]},t.type="series.__base_bar__",t.defaultOption={z:2,coordinateSystem:"cartesian2d",legendHoverLink:!0,barMinHeight:0,barMinAngle:0,large:!1,largeThreshold:400,progressive:3e3,progressiveChunkMode:"mod"},t}(So);So.registerClass(Im);var xQ=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.getInitialData=function(){return AL(null,this,{useEncodeDefaulter:!0,createInvertedIndices:!!this.get("realtimeSort",!0)||null})},t.prototype.getProgressive=function(){return this.get("large")?this.get("progressive"):!1},t.prototype.getProgressiveThreshold=function(){var r=this.get("progressiveThreshold"),n=this.get("largeThreshold");return n>r&&(r=n),r},t.prototype.brushSelector=function(r,n,i){return i.rect(n.getItemLayout(r))},t.type="series.bar",t.dependencies=["grid","polar"],t.defaultOption=rE(Im.defaultOption,{clip:!0,roundCap:!1,showBackground:!1,backgroundStyle:{color:"rgba(180, 180, 180, 0.2)",borderColor:null,borderWidth:0,borderType:"solid",borderRadius:0,shadowBlur:0,shadowColor:null,shadowOffsetX:0,shadowOffsetY:0,opacity:1},select:{itemStyle:{borderColor:"#212121"}},realtimeSort:!1}),t}(Im);const CQ=xQ;var TQ=function(){function e(){this.cx=0,this.cy=0,this.r0=0,this.r=0,this.startAngle=0,this.endAngle=Math.PI*2,this.clockwise=!0}return e}(),Bx=function(e){ge(t,e);function t(r){var n=e.call(this,r)||this;return n.type="sausage",n}return t.prototype.getDefaultShape=function(){return new TQ},t.prototype.buildPath=function(r,n){var i=n.cx,a=n.cy,o=Math.max(n.r0||0,0),s=Math.max(n.r,0),l=(s-o)*.5,u=o+l,f=n.startAngle,c=n.endAngle,h=n.clockwise,d=Math.PI*2,v=h?c-fMath.PI/2&&fs)return!0;s=c}return!1},t.prototype._isOrderDifferentInView=function(r,n){for(var i=n.scale,a=i.getExtent(),o=Math.max(0,a[0]),s=Math.min(a[1],i.getOrdinalMeta().categories.length-1);o<=s;++o)if(r.ordinalNumbers[o]!==i.getRawOrdinalNumber(o))return!0},t.prototype._updateSortWithinSameData=function(r,n,i,a){if(this._isOrderChangedWithinSameData(r,n,i)){var o=this._dataSort(r,i,n);this._isOrderDifferentInView(o,i)&&(this._removeOnRenderedListener(a),a.dispatchAction({type:"changeAxisOrder",componentType:i.dim+"Axis",axisId:i.index,sortInfo:o}))}},t.prototype._dispatchInitSort=function(r,n,i){var a=n.baseAxis,o=this._dataSort(r,a,function(s){return r.get(r.mapDimension(n.otherAxis.dim),s)});i.dispatchAction({type:"changeAxisOrder",componentType:a.dim+"Axis",isInitSort:!0,axisId:a.index,sortInfo:o})},t.prototype.remove=function(r,n){this._clear(this._model),this._removeOnRenderedListener(n)},t.prototype.dispose=function(r,n){this._removeOnRenderedListener(n)},t.prototype._removeOnRenderedListener=function(r){this._onRendered&&(r.getZr().off("rendered",this._onRendered),this._onRendered=null)},t.prototype._clear=function(r){var n=this.group,i=this._data;r&&r.isAnimationEnabled()&&i&&!this._isLargeDraw?(this._removeBackground(),this._backgroundEls=[],i.eachItemGraphicEl(function(a){Dd(a,r,dt(a).dataIndex)})):n.removeAll(),this._data=null,this._isFirstFrame=!0},t.prototype._removeBackground=function(){this.group.remove(this._backgroundGroup),this._backgroundGroup=null},t.type="bar",t}(ho),Fx={cartesian2d:function(e,t){var r=t.width<0?-1:1,n=t.height<0?-1:1;r<0&&(t.x+=t.width,t.width=-t.width),n<0&&(t.y+=t.height,t.height=-t.height);var i=e.x+e.width,a=e.y+e.height,o=Tp(t.x,e.x),s=Mp(t.x+t.width,i),l=Tp(t.y,e.y),u=Mp(t.y+t.height,a),f=si?s:o,t.y=c&&l>a?u:l,t.width=f?0:s-o,t.height=c?0:u-l,r<0&&(t.x+=t.width,t.width=-t.width),n<0&&(t.y+=t.height,t.height=-t.height),f||c},polar:function(e,t){var r=t.r0<=t.r?1:-1;if(r<0){var n=t.r;t.r=t.r0,t.r0=n}var i=Mp(t.r,e.r),a=Tp(t.r0,e.r0);t.r=i,t.r0=a;var o=i-a<0;if(r<0){var n=t.r;t.r=t.r0,t.r0=n}return o}},$x={cartesian2d:function(e,t,r,n,i,a,o,s,l){var u=new Gt({shape:ue({},n),z2:1});if(u.__dataIndex=r,u.name="item",a){var f=u.shape,c=i?"height":"width";f[c]=0}return u},polar:function(e,t,r,n,i,a,o,s,l){var u=!i&&l?Bx:Eo,f=new u({shape:n,z2:1});f.name="item";var c=rD(i);if(f.calculateTextPosition=MQ(c,{isRoundCap:u===Bx}),a){var h=f.shape,d=i?"r":"endAngle",v={};h[d]=i?n.r0:n.startAngle,v[d]=n[d],(s?Or:Wr)(f,{shape:v},a)}return f}};function LQ(e,t){var r=e.get("realtimeSort",!0),n=t.getBaseAxis();if(r&&n.type==="category"&&t.type==="cartesian2d")return{baseAxis:n,otherAxis:t.getOtherAxis(n)}}function Hx(e,t,r,n,i,a,o,s){var l,u;a?(u={x:n.x,width:n.width},l={y:n.y,height:n.height}):(u={y:n.y,height:n.height},l={x:n.x,width:n.width}),s||(o?Or:Wr)(r,{shape:l},t,i,null);var f=t?e.baseAxis.model:null;(o?Or:Wr)(r,{shape:u},f,i)}function zx(e,t){for(var r=0;r0?1:-1,o=n.height>0?1:-1;return{x:n.x+a*i/2,y:n.y+o*i/2,width:n.width-a*i,height:n.height-o*i}},polar:function(e,t,r){var n=e.getItemLayout(t);return{cx:n.cx,cy:n.cy,r0:n.r0,r:n.r,startAngle:n.startAngle,endAngle:n.endAngle,clockwise:n.clockwise}}};function OQ(e){return e.startAngle!=null&&e.endAngle!=null&&e.startAngle===e.endAngle}function rD(e){return function(t){var r=t?"Arc":"Angle";return function(n){switch(n){case"start":case"insideStart":case"end":case"insideEnd":return n+r;default:return n}}}(e)}function Wx(e,t,r,n,i,a,o,s){var l=t.getItemVisual(r,"style");if(s){if(!a.get("roundCap")){var f=e.shape,c=Dl(n.getModel("itemStyle"),f,!0);ue(f,c),e.setShape(f)}}else{var u=n.get(["itemStyle","borderRadius"])||0;e.setShape("r",u)}e.useStyle(l);var h=n.getShallow("cursor");h&&e.attr("cursor",h);var d=s?o?i.r>=i.r0?"endArc":"startArc":i.endAngle>=i.startAngle?"endAngle":"startAngle":o?i.height>=0?"bottom":"top":i.width>=0?"right":"left",v=JP(n);E0(e,v,{labelFetcher:a,labelDataIndex:r,defaultText:pQ(a.getData(),r),inheritColor:l.fill,defaultOpacity:l.opacity,defaultOutsidePosition:d});var p=e.getTextContent();if(s&&p){var m=n.get(["label","position"]);e.textConfig.inside=m==="middle"?!0:null,AQ(e,m==="outside"?d:m,rD(o),n.get(["label","rotate"]))}wj(p,v,a.getRawValue(r),function(y){return gQ(t,y)});var g=n.getModel(["emphasis"]);CP(e,g.get("focus"),g.get("blurScope"),g.get("disabled")),TP(e,n),OQ(i)&&(e.style.fill="none",e.style.stroke="none",R(e.states,function(y){y.style&&(y.style.fill=y.style.stroke="none")}))}function RQ(e,t){var r=e.get(["itemStyle","borderColor"]);if(!r||r==="none")return 0;var n=e.get(["itemStyle","borderWidth"])||0,i=isNaN(t.width)?Number.MAX_VALUE:Math.abs(t.width),a=isNaN(t.height)?Number.MAX_VALUE:Math.abs(t.height);return Math.min(n,i,a)}var kQ=function(){function e(){}return e}(),Gx=function(e){ge(t,e);function t(r){var n=e.call(this,r)||this;return n.type="largeBar",n}return t.prototype.getDefaultShape=function(){return new kQ},t.prototype.buildPath=function(r,n){for(var i=n.points,a=this.baseDimIdx,o=1-this.baseDimIdx,s=[],l=[],u=this.barWidth,f=0;f=0?r:null},30,!1);function NQ(e,t,r){for(var n=e.baseDimIdx,i=1-n,a=e.shape.points,o=e.largeDataIndices,s=[],l=[],u=e.barWidth,f=0,c=a.length/3;f=s[0]&&t<=s[0]+l[0]&&r>=s[1]&&r<=s[1]+l[1])return o[f]}return-1}function nD(e,t,r){if(tD(r,"cartesian2d")){var n=t,i=r.getArea();return{x:e?n.x:i.x,y:e?i.y:n.y,width:e?n.width:i.width,height:e?i.height:n.height}}else{var i=r.getArea(),a=t;return{cx:i.cx,cy:i.cy,r0:e?i.r0:a.r0,r:e?i.r:a.r,startAngle:e?a.startAngle:0,endAngle:e?a.endAngle:Math.PI*2}}}function BQ(e,t,r){var n=e.type==="polar"?Eo:Gt;return new n({shape:nD(t,r,e),silent:!0,z2:0})}const FQ=EQ;function $Q(e){e.registerChartView(FQ),e.registerSeriesModel(CQ),e.registerLayout(e.PRIORITY.VISUAL.LAYOUT,Rt(mZ,"bar")),e.registerLayout(e.PRIORITY.VISUAL.PROGRESSIVE_LAYOUT,yZ("bar")),e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC,SQ("bar")),e.registerAction({type:"changeAxisOrder",event:"changeAxisOrder",update:"update"},function(t,r){var n=t.componentType||"series";r.eachComponent({mainType:n,query:t},function(i){t.sortInfo&&i.axis.setCategorySortInfo(t.sortInfo)})})}var _c=Math.PI*2,jx=Math.PI/180;function iD(e,t){return Is(e.getBoxLayoutParams(),{width:t.getWidth(),height:t.getHeight()})}function aD(e,t){var r=iD(e,t),n=e.get("center"),i=e.get("radius");ye(i)||(i=[0,i]);var a=yt(r.width,t.getWidth()),o=yt(r.height,t.getHeight()),s=Math.min(a,o),l=yt(i[0],s/2),u=yt(i[1],s/2),f,c,h=e.coordinateSystem;if(h){var d=h.dataToPoint(n);f=d[0]||0,c=d[1]||0}else ye(n)||(n=[n,n]),f=yt(n[0],a)+r.x,c=yt(n[1],o)+r.y;return{cx:f,cy:c,r0:l,r:u}}function HQ(e,t,r){t.eachSeriesByType(e,function(n){var i=n.getData(),a=i.mapDimension("value"),o=iD(n,r),s=aD(n,r),l=s.cx,u=s.cy,f=s.r,c=s.r0,h=-n.get("startAngle")*jx,d=n.get("minAngle")*jx,v=0;i.each(a,function(A){!isNaN(A)&&v++});var p=i.getSum(a),m=Math.PI/(p||v)*2,g=n.get("clockwise"),y=n.get("roseType"),_=n.get("stillShowZeroSum"),b=i.getDataExtent(a);b[0]=0;var x=_c,w=0,S=h,C=g?1:-1;if(i.setLayout({viewRect:o,r:f}),i.each(a,function(A,P){var E;if(isNaN(A)){i.setItemLayout(P,{angle:NaN,startAngle:NaN,endAngle:NaN,clockwise:g,cx:l,cy:u,r0:c,r:y?NaN:f});return}y!=="area"?E=p===0&&_?m:A*m:E=_c/v,Er?g:m,x=Math.abs(_.label.y-r);if(x>=b.maxY){var w=_.label.x-t-_.len2*i,S=n+_.len,C=Math.abs(w)e.unconstrainedWidth?null:d:null;n.setStyle("width",v)}var p=n.getBoundingRect();a.width=p.width;var m=(n.style.margin||0)+2.1;a.height=p.height+m,a.y-=(a.height-c)/2}}}function Ap(e){return e.position==="center"}function GQ(e){var t=e.getData(),r=[],n,i,a=!1,o=(e.get("minShowLabelAngle")||0)*VQ,s=t.getLayout("viewRect"),l=t.getLayout("r"),u=s.width,f=s.x,c=s.y,h=s.height;function d(w){w.ignore=!0}function v(w){if(!w.ignore)return!0;for(var S in w.states)if(w.states[S].ignore===!1)return!0;return!1}t.each(function(w){var S=t.getItemGraphicEl(w),C=S.shape,M=S.getTextContent(),A=S.getTextGuideLine(),P=t.getItemModel(w),E=P.getModel("label"),L=E.get("position")||P.get(["emphasis","label","position"]),O=E.get("distanceToLabelLine"),N=E.get("alignTo"),H=yt(E.get("edgeDistance"),u),V=E.get("bleedMargin"),U=P.getModel("labelLine"),F=U.get("length");F=yt(F,u);var z=U.get("length2");if(z=yt(z,u),Math.abs(C.endAngle-C.startAngle)0?"right":"left":J>0?"left":"right"}var W=Math.PI,X=0,j=E.get("rotate");if(Tt(j))X=j*(W/180);else if(L==="center")X=0;else if(j==="radial"||j===!0){var le=J<0?-ee+W:-ee;X=le}else if(j==="tangential"&&L!=="outside"&&L!=="outer"){var fe=Math.atan2(J,me);fe<0&&(fe=W*2+fe);var ae=me>0;ae&&(fe=W+fe),X=fe-W}if(a=!!X,M.x=we,M.y=$e,M.rotation=X,M.setStyle({verticalAlign:"middle"}),Y){M.setStyle({align:B});var de=M.states.select;de&&(de.x+=M.x,de.y+=M.y)}else{var se=M.getBoundingRect().clone();se.applyTransform(M.getComputedTransform());var ne=(M.style.margin||0)+2.1;se.y-=ne/2,se.height+=ne,r.push({label:M,labelLine:A,position:L,len:F,len2:z,minTurnAngle:U.get("minTurnAngle"),maxSurfaceAngle:U.get("maxSurfaceAngle"),surfaceNormal:new Fe(J,me),linePoints:Ie,textAlign:B,labelDistance:O,labelAlignTo:N,edgeDistance:H,bleedMargin:V,rect:se,unconstrainedWidth:se.width,labelStyleWidth:M.style.width})}S.setTextConfig({inside:Y})}}),!a&&e.get("avoidLabelOverlap")&&WQ(r,n,i,l,u,h,f,c);for(var p=0;p0){for(var f=o.getItemLayout(0),c=1;isNaN(f&&f.startAngle)&&c=a.r0}},t.type="pie",t}(ho);const jQ=YQ;function qQ(e,t,r){t=ye(t)&&{coordDimensions:t}||ue({encodeDefine:e.getEncode()},t);var n=e.getSource(),i=TL(n,t).dimensions,a=new CL(i,e);return a.initData(n,r),a}var KQ=function(){function e(t,r){this._getDataWithEncodedVisual=t,this._getRawData=r}return e.prototype.getAllNames=function(){var t=this._getRawData();return t.mapArray(t.getName)},e.prototype.containName=function(t){var r=this._getRawData();return r.indexOfName(t)>=0},e.prototype.indexOfName=function(t){var r=this._getDataWithEncodedVisual();return r.indexOfName(t)},e.prototype.getItemVisual=function(t,r){var n=this._getDataWithEncodedVisual();return n.getItemVisual(t,r)},e}();const XQ=KQ;var ZQ=Et(),QQ=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.init=function(r){e.prototype.init.apply(this,arguments),this.legendVisualProvider=new XQ(xt(this.getData,this),xt(this.getRawData,this)),this._defaultLabelLine(r)},t.prototype.mergeOption=function(){e.prototype.mergeOption.apply(this,arguments)},t.prototype.getInitialData=function(){return qQ(this,{coordDimensions:["value"],encodeDefaulter:Rt(Xj,this)})},t.prototype.getDataParams=function(r){var n=this.getData(),i=ZQ(n),a=i.seats;if(!a){var o=[];n.each(n.mapDimension("value"),function(l){o.push(l)}),a=i.seats=R9(o,n.hostModel.get("percentPrecision"))}var s=e.prototype.getDataParams.call(this,r);return s.percent=a[r]||0,s.$vars.push("percent"),s},t.prototype._defaultLabelLine=function(r){em(r,"labelLine",["show"]);var n=r.labelLine,i=r.emphasis.labelLine;n.show=n.show&&r.label.show,i.show=i.show&&r.emphasis.label.show},t.type="series.pie",t.defaultOption={z:2,legendHoverLink:!0,colorBy:"data",center:["50%","50%"],radius:[0,"75%"],clockwise:!0,startAngle:90,minAngle:0,minShowLabelAngle:0,selectedOffset:10,percentPrecision:2,stillShowZeroSum:!0,left:0,top:0,right:0,bottom:0,width:null,height:null,label:{rotate:0,show:!0,overflow:"truncate",position:"outer",alignTo:"none",edgeDistance:"25%",bleedMargin:10,distanceToLabelLine:5},labelLine:{show:!0,length:15,length2:15,smooth:!1,minTurnAngle:90,maxSurfaceAngle:90,lineStyle:{width:1,type:"solid"}},itemStyle:{borderWidth:1,borderJoin:"round"},showEmptyCircle:!0,emptyCircleStyle:{color:"lightgray",opacity:1},labelLayout:{hideOverlap:!0},emphasis:{scale:!0,scaleSize:5},avoidLabelOverlap:!0,animationType:"expansion",animationDuration:1e3,animationTypeUpdate:"transition",animationEasingUpdate:"cubicInOut",animationDurationUpdate:500,animationEasing:"cubicInOut"},t}(So);const JQ=QQ;function eJ(e){return{seriesType:e,reset:function(t,r){var n=t.getData();n.filterSelf(function(i){var a=n.mapDimension("value"),o=n.get(a,i);return!(Tt(o)&&!isNaN(o)&&o<0)})}}}function tJ(e){e.registerChartView(jQ),e.registerSeriesModel(JQ),kK("pie",e.registerAction),e.registerLayout(Rt(HQ,"pie")),e.registerProcessor(zQ("pie")),e.registerProcessor(eJ("pie"))}var rJ=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.type="grid",t.dependencies=["xAxis","yAxis"],t.layoutMode="box",t.defaultOption={show:!1,z:0,left:"10%",top:60,right:"10%",bottom:70,containLabel:!1,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},t}(Mt);const nJ=rJ;var Om=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.getCoordSysModel=function(){return this.getReferringComponents("grid",Tn).models[0]},t.type="cartesian2dAxis",t}(Mt);ni(Om,WZ);var sD={show:!0,z:0,inverse:!1,name:"",nameLocation:"end",nameRotate:null,nameTruncate:{maxWidth:null,ellipsis:"...",placeholder:"."},nameTextStyle:{},nameGap:15,silent:!1,triggerEvent:!1,tooltip:{show:!1},axisPointer:{},axisLine:{show:!0,onZero:!0,onZeroAxisIndex:null,lineStyle:{color:"#6E7079",width:1,type:"solid"},symbol:["none","none"],symbolSize:[10,15]},axisTick:{show:!0,inside:!1,length:5,lineStyle:{width:1}},axisLabel:{show:!0,inside:!1,rotate:0,showMinLabel:null,showMaxLabel:null,margin:8,fontSize:12},splitLine:{show:!0,lineStyle:{color:["#E0E6F1"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.2)","rgba(210,219,238,0.2)"]}}},iJ=st({boundaryGap:!0,deduplication:null,splitLine:{show:!1},axisTick:{alignWithLabel:!1,interval:"auto"},axisLabel:{interval:"auto"}},sD),a_=st({boundaryGap:[0,0],axisLine:{show:"auto"},axisTick:{show:"auto"},splitNumber:5,minorTick:{show:!1,splitNumber:5,length:3,lineStyle:{}},minorSplitLine:{show:!1,lineStyle:{color:"#F4F7FD",width:1}}},sD),aJ=st({splitNumber:6,axisLabel:{showMinLabel:!1,showMaxLabel:!1,rich:{primary:{fontWeight:"bold"}}},splitLine:{show:!1}},a_),oJ=ht({logBase:10},a_);const sJ={category:iJ,value:a_,time:aJ,log:oJ};var lJ={value:1,category:1,time:1,log:1};function Kx(e,t,r,n){R(lJ,function(i,a){var o=st(st({},sJ[a],!0),n,!0),s=function(l){ge(u,l);function u(){var f=l!==null&&l.apply(this,arguments)||this;return f.type=t+"Axis."+a,f}return u.prototype.mergeDefaultAndTheme=function(f,c){var h=Nu(this),d=h?Rh(f):{},v=c.getTheme();st(f,v.get(a+"Axis")),st(f,this.getDefaultOption()),f.type=Xx(f),h&&Os(f,d,h)},u.prototype.optionUpdated=function(){var f=this.option;f.type==="category"&&(this.__ordinalMeta=Lm.createByAxisModel(this))},u.prototype.getCategories=function(f){var c=this.option;if(c.type==="category")return f?c.data:this.__ordinalMeta.categories},u.prototype.getOrdinalMeta=function(){return this.__ordinalMeta},u.type=t+"Axis."+a,u.defaultOption=o,u}(r);e.registerComponentModel(s)}),e.registerSubTypeDefaulter(t+"Axis",Xx)}function Xx(e){return e.type||(e.data?"category":"value")}var uJ=function(){function e(t){this.type="cartesian",this._dimList=[],this._axes={},this.name=t||""}return e.prototype.getAxis=function(t){return this._axes[t]},e.prototype.getAxes=function(){return Ne(this._dimList,function(t){return this._axes[t]},this)},e.prototype.getAxesByScale=function(t){return t=t.toLowerCase(),jt(this.getAxes(),function(r){return r.scale.type===t})},e.prototype.addAxis=function(t){var r=t.dim;this._axes[r]=t,this._dimList.push(r)},e}();const fJ=uJ;var Rm=["x","y"];function Zx(e){return e.type==="interval"||e.type==="time"}var cJ=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type="cartesian2d",r.dimensions=Rm,r}return t.prototype.calcAffineTransform=function(){this._transform=this._invTransform=null;var r=this.getAxis("x").scale,n=this.getAxis("y").scale;if(!(!Zx(r)||!Zx(n))){var i=r.getExtent(),a=n.getExtent(),o=this.dataToPoint([i[0],a[0]]),s=this.dataToPoint([i[1],a[1]]),l=i[1]-i[0],u=a[1]-a[0];if(!(!l||!u)){var f=(s[0]-o[0])/l,c=(s[1]-o[1])/u,h=o[0]-i[0]*f,d=o[1]-a[0]*c,v=this._transform=[f,0,0,c,h,d];this._invTransform=bh([],v)}}},t.prototype.getBaseAxis=function(){return this.getAxesByScale("ordinal")[0]||this.getAxesByScale("time")[0]||this.getAxis("x")},t.prototype.containPoint=function(r){var n=this.getAxis("x"),i=this.getAxis("y");return n.contain(n.toLocalCoord(r[0]))&&i.contain(i.toLocalCoord(r[1]))},t.prototype.containData=function(r){return this.getAxis("x").containData(r[0])&&this.getAxis("y").containData(r[1])},t.prototype.containZone=function(r,n){var i=this.dataToPoint(r),a=this.dataToPoint(n),o=this.getArea(),s=new nt(i[0],i[1],a[0]-i[0],a[1]-i[1]);return o.intersect(s)},t.prototype.dataToPoint=function(r,n,i){i=i||[];var a=r[0],o=r[1];if(this._transform&&a!=null&&isFinite(a)&&o!=null&&isFinite(o))return un(i,r,this._transform);var s=this.getAxis("x"),l=this.getAxis("y");return i[0]=s.toGlobalCoord(s.dataToCoord(a,n)),i[1]=l.toGlobalCoord(l.dataToCoord(o,n)),i},t.prototype.clampData=function(r,n){var i=this.getAxis("x").scale,a=this.getAxis("y").scale,o=i.getExtent(),s=a.getExtent(),l=i.parse(r[0]),u=a.parse(r[1]);return n=n||[],n[0]=Math.min(Math.max(Math.min(o[0],o[1]),l),Math.max(o[0],o[1])),n[1]=Math.min(Math.max(Math.min(s[0],s[1]),u),Math.max(s[0],s[1])),n},t.prototype.pointToData=function(r,n){var i=[];if(this._invTransform)return un(i,r,this._invTransform);var a=this.getAxis("x"),o=this.getAxis("y");return i[0]=a.coordToData(a.toLocalCoord(r[0]),n),i[1]=o.coordToData(o.toLocalCoord(r[1]),n),i},t.prototype.getOtherAxis=function(r){return this.getAxis(r.dim==="x"?"y":"x")},t.prototype.getArea=function(){var r=this.getAxis("x").getGlobalExtent(),n=this.getAxis("y").getGlobalExtent(),i=Math.min(r[0],r[1]),a=Math.min(n[0],n[1]),o=Math.max(r[0],r[1])-i,s=Math.max(n[0],n[1])-a;return new nt(i,a,o,s)},t}(fJ),dJ=function(e){ge(t,e);function t(r,n,i,a,o){var s=e.call(this,r,n,i)||this;return s.index=0,s.type=a||"value",s.position=o||"bottom",s}return t.prototype.isHorizontal=function(){var r=this.position;return r==="top"||r==="bottom"},t.prototype.getGlobalExtent=function(r){var n=this.getExtent();return n[0]=this.toGlobalCoord(n[0]),n[1]=this.toGlobalCoord(n[1]),r&&n[0]>n[1]&&n.reverse(),n},t.prototype.pointToData=function(r,n){return this.coordToData(this.toLocalCoord(r[this.dim==="x"?0:1]),n)},t.prototype.setCategorySortInfo=function(r){if(this.type!=="category")return!1;this.model.option.categorySortInfo=r,this.scale.setSortInfo(r)},t}(tQ);const hJ=dJ;function km(e,t,r){r=r||{};var n=e.coordinateSystem,i=t.axis,a={},o=i.getAxesOnZeroOf()[0],s=i.position,l=o?"onZero":s,u=i.dim,f=n.getRect(),c=[f.x,f.x+f.width,f.y,f.y+f.height],h={left:0,right:1,top:0,bottom:1,onZero:2},d=t.get("offset")||0,v=u==="x"?[c[2]-d,c[3]+d]:[c[0]-d,c[1]+d];if(o){var p=o.toGlobalCoord(o.dataToCoord(0));v[h.onZero]=Math.max(Math.min(p,v[1]),v[0])}a.position=[u==="y"?v[h[l]]:c[0],u==="x"?v[h[l]]:c[3]],a.rotation=Math.PI/2*(u==="x"?0:1);var m={top:-1,bottom:1,left:-1,right:1};a.labelDirection=a.tickDirection=a.nameDirection=m[s],a.labelOffset=o?v[h[s]]-v[h.onZero]:0,t.get(["axisTick","inside"])&&(a.tickDirection=-a.tickDirection),Au(r.labelInside,t.get(["axisLabel","inside"]))&&(a.labelDirection=-a.labelDirection);var g=t.get(["axisLabel","rotate"]);return a.labelRotate=l==="top"?-g:g,a.z2=1,a}function Qx(e){return e.get("coordinateSystem")==="cartesian2d"}function Jx(e){var t={xAxisModel:null,yAxisModel:null};return R(t,function(r,n){var i=n.replace(/Model$/,""),a=e.getReferringComponents(i,Tn).models[0];t[n]=a}),t}var Pp=Math.log;function vJ(e,t,r){var n=df.prototype,i=n.getTicks.call(r),a=n.getTicks.call(r,!0),o=i.length-1,s=n.getInterval.call(r),l=$L(e,t),u=l.extent,f=l.fixMin,c=l.fixMax;if(e.type==="log"){var h=Pp(e.base);u=[Pp(u[0])/h,Pp(u[1])/h]}e.setExtent(u[0],u[1]),e.calcNiceExtent({splitNumber:o,fixMin:f,fixMax:c});var d=n.getExtent.call(e);f&&(u[0]=d[0]),c&&(u[1]=d[1]);var v=n.getInterval.call(e),p=u[0],m=u[1];if(f&&c)v=(m-p)/o;else if(f)for(m=u[0]+v*o;mu[0]&&isFinite(p)&&isFinite(u[0]);)v=wp(v),p=u[1]-v*o;else{var g=e.getTicks().length-1;g>o&&(v=wp(v));var y=v*o;m=Math.ceil(u[1]/v)*v,p=$t(m-y),p<0&&u[0]>=0?(p=0,m=$t(y)):m>0&&u[1]<=0&&(m=0,p=-$t(y))}var _=(i[0].value-a[0].value)/s,b=(i[o].value-a[o].value)/s;n.setExtent.call(e,p+v*_,m+v*b),n.setInterval.call(e,v),(_||b)&&n.setNiceExtent.call(e,p+v,m-v)}var pJ=function(){function e(t,r,n){this.type="grid",this._coordsMap={},this._coordsList=[],this._axesMap={},this._axesList=[],this.axisPointerEnabled=!0,this.dimensions=Rm,this._initCartesian(t,r,n),this.model=t}return e.prototype.getRect=function(){return this._rect},e.prototype.update=function(t,r){var n=this._axesMap;this._updateScale(t,this.model);function i(o){var s,l=Ct(o),u=l.length;if(u){for(var f=[],c=u-1;c>=0;c--){var h=+l[c],d=o[h],v=d.model,p=d.scale;Dm(p)&&v.get("alignTicks")&&v.get("interval")==null?f.push(d):(Lx(p,v),Dm(p)&&(s=d))}f.length&&(s||(s=f.pop(),Lx(s.scale,s.model)),R(f,function(m){vJ(m.scale,m.model,s.scale)}))}}i(n.x),i(n.y);var a={};R(n.x,function(o){eC(n,"y",o,a)}),R(n.y,function(o){eC(n,"x",o,a)}),this.resize(this.model,r)},e.prototype.resize=function(t,r,n){var i=t.getBoxLayoutParams(),a=!n&&t.get("containLabel"),o=Is(i,{width:r.getWidth(),height:r.getHeight()});this._rect=o;var s=this._axesList;l(),a&&(R(s,function(u){if(!u.model.get(["axisLabel","inside"])){var f=HZ(u);if(f){var c=u.isHorizontal()?"height":"width",h=u.model.get(["axisLabel","margin"]);o[c]-=f[c]+h,u.position==="top"?o.y+=f.height+h:u.position==="left"&&(o.x+=f.width+h)}}}),l()),R(this._coordsList,function(u){u.calcAffineTransform()});function l(){R(s,function(u){var f=u.isHorizontal(),c=f?[0,o.width]:[0,o.height],h=u.inverse?1:0;u.setExtent(c[h],c[1-h]),gJ(u,f?o.x:o.y)})}},e.prototype.getAxis=function(t,r){var n=this._axesMap[t];if(n!=null)return n[r||0]},e.prototype.getAxes=function(){return this._axesList.slice()},e.prototype.getCartesian=function(t,r){if(t!=null&&r!=null){var n="x"+t+"y"+r;return this._coordsMap[n]}Re(t)&&(r=t.yAxisIndex,t=t.xAxisIndex);for(var i=0,a=this._coordsList;i0?"top":"bottom",a="center"):Ad(i-ea)?(o=n>0?"bottom":"top",a="center"):(o="middle",i>0&&i0?"right":"left":a=n>0?"left":"right"),{rotation:i,textAlign:a,textVerticalAlign:o}},e.makeAxisEventDataBase=function(t){var r={componentType:t.mainType,componentIndex:t.componentIndex};return r[t.mainType+"Index"]=t.componentIndex,r},e.isLabelSilent=function(t){var r=t.get("tooltip");return t.get("silent")||!(t.get("triggerEvent")||r&&r.show)},e}(),rC={axisLine:function(e,t,r,n){var i=t.get(["axisLine","show"]);if(i==="auto"&&e.handleAutoShown&&(i=e.handleAutoShown("axisLine")),!!i){var a=t.axis.getExtent(),o=n.transform,s=[a[0],0],l=[a[1],0],u=s[0]>l[0];o&&(un(s,s,o),un(l,l,o));var f=ue({lineCap:"round"},t.getModel(["axisLine","lineStyle"]).getLineStyle()),c=new wo({shape:{x1:s[0],y1:s[1],x2:l[0],y2:l[1]},style:f,strokeContainThreshold:e.strokeContainThreshold||5,silent:!0,z2:1});Iu(c.shape,c.style.lineWidth),c.anid="line",r.add(c);var h=t.get(["axisLine","symbol"]);if(h!=null){var d=t.get(["axisLine","symbolSize"]);Ee(h)&&(h=[h,h]),(Ee(d)||Tt(d))&&(d=[d,d]);var v=qK(t.get(["axisLine","symbolOffset"])||0,d),p=d[0],m=d[1];R([{rotate:e.rotation+Math.PI/2,offset:v[0],r:0},{rotate:e.rotation-Math.PI/2,offset:v[1],r:Math.sqrt((s[0]-l[0])*(s[0]-l[0])+(s[1]-l[1])*(s[1]-l[1]))}],function(g,y){if(h[y]!=="none"&&h[y]!=null){var _=j0(h[y],-p/2,-m/2,p,m,f.stroke,!0),b=g.r+g.offset,x=u?l:s;_.attr({rotation:g.rotate,x:x[0]+b*Math.cos(e.rotation),y:x[1]-b*Math.sin(e.rotation),silent:!0,z2:11}),r.add(_)}})}}},axisTickLabel:function(e,t,r,n){var i=bJ(r,n,t,e),a=SJ(r,n,t,e);if(_J(t,a,i),wJ(r,n,t,e.tickDirection),t.get(["axisLabel","hideOverlap"])){var o=ZL(Ne(a,function(s){return{label:s,priority:s.z2,defaultAttr:{ignore:s.ignore}}}));eD(o)}},axisName:function(e,t,r,n){var i=Au(e.axisName,t.get("name"));if(i){var a=t.get("nameLocation"),o=e.nameDirection,s=t.getModel("nameTextStyle"),l=t.get("nameGap")||0,u=t.axis.getExtent(),f=u[0]>u[1]?-1:1,c=[a==="start"?u[0]-f*l:a==="end"?u[1]+f*l:(u[0]+u[1])/2,iC(a)?e.labelOffset+o*l:0],h,d=t.get("nameRotate");d!=null&&(d=d*ea/180);var v;iC(a)?h=vo.innerTextLayout(e.rotation,d??e.rotation,o):(h=yJ(e.rotation,a,d||0,u),v=e.axisNameAvailableWidth,v!=null&&(v=Math.abs(v/Math.sin(h.rotation)),!isFinite(v)&&(v=null)));var p=s.getFont(),m=t.get("nameTruncate",!0)||{},g=m.ellipsis,y=Au(e.nameTruncateMaxWidth,m.maxWidth,v),_=new mr({x:c[0],y:c[1],rotation:h.rotation,silent:vo.isLabelSilent(t),style:ha(s,{text:i,font:p,overflow:"truncate",width:y,ellipsis:g,fill:s.getTextColor()||t.get(["axisLine","lineStyle","color"]),align:s.get("align")||h.textAlign,verticalAlign:s.get("verticalAlign")||h.textVerticalAlign}),z2:1});if(A0({el:_,componentModel:t,itemName:i}),_.__fullText=i,_.anid="name",t.get("triggerEvent")){var b=vo.makeAxisEventDataBase(t);b.targetType="axisName",b.name=i,dt(_).eventData=b}n.add(_),_.updateTransform(),r.add(_),_.decomposeTransform()}}};function yJ(e,t,r,n){var i=j2(r-e),a,o,s=n[0]>n[1],l=t==="start"&&!s||t!=="start"&&s;return Ad(i-ea/2)?(o=l?"bottom":"top",a="center"):Ad(i-ea*1.5)?(o=l?"top":"bottom",a="center"):(o="middle",iea/2?a=l?"left":"right":a=l?"right":"left"),{rotation:i,textAlign:a,textVerticalAlign:o}}function _J(e,t,r){if(!HL(e.axis)){var n=e.get(["axisLabel","showMinLabel"]),i=e.get(["axisLabel","showMaxLabel"]);t=t||[],r=r||[];var a=t[0],o=t[1],s=t[t.length-1],l=t[t.length-2],u=r[0],f=r[1],c=r[r.length-1],h=r[r.length-2];n===!1?(Kr(a),Kr(u)):nC(a,o)&&(n?(Kr(o),Kr(f)):(Kr(a),Kr(u))),i===!1?(Kr(s),Kr(c)):nC(l,s)&&(i?(Kr(l),Kr(h)):(Kr(s),Kr(c)))}}function Kr(e){e&&(e.ignore=!0)}function nC(e,t){var r=e&&e.getBoundingRect().clone(),n=t&&t.getBoundingRect().clone();if(!(!r||!n)){var i=a0([]);return o0(i,i,-e.rotation),r.applyTransform(fs([],i,e.getLocalTransform())),n.applyTransform(fs([],i,t.getLocalTransform())),r.intersect(n)}}function iC(e){return e==="middle"||e==="center"}function lD(e,t,r,n,i){for(var a=[],o=[],s=[],l=0;l=0||e===t}function PJ(e){var t=o_(e);if(t){var r=t.axisPointerModel,n=t.axis.scale,i=r.option,a=r.get("status"),o=r.get("value");o!=null&&(o=n.parse(o));var s=Nm(r);a==null&&(i.status=s?"show":"hide");var l=n.getExtent().slice();l[0]>l[1]&&l.reverse(),(o==null||o>l[1])&&(o=l[1]),o=s)}}for(var c=this.__startIndex;c15)break}}O.prevElClipPaths&&g.restore()};if(y)if(y.length===0)C=m.__endIndex;else for(var A=d.dpr,P=0;P0&&t>i[0]){for(l=0;lt);l++);s=n[i[l]]}if(i.splice(l+1,0,t),n[t]=r,!r.virtual)if(s){var u=s.dom;u.nextSibling?o.insertBefore(r.dom,u.nextSibling):o.appendChild(r.dom)}else o.firstChild?o.insertBefore(r.dom,o.firstChild):o.appendChild(r.dom);r.__painter=this}},e.prototype.eachLayer=function(t,r){for(var n=this._zlevelList,i=0;i0?bc:0),this._needsManuallyCompositing),f.__builtin__||r0("ZLevel "+u+" has been used by unkown layer "+f.id),f!==a&&(f.__used=!0,f.__startIndex!==l&&(f.__dirty=!0),f.__startIndex=l,f.incremental?f.__drawIndex=-1:f.__drawIndex=l,r(l),a=f),i.__dirty&Br&&!i.__inHover&&(f.__dirty=!0,f.incremental&&f.__drawIndex<0&&(f.__drawIndex=l))}r(l),this.eachBuiltinLayer(function(c,h){!c.__used&&c.getElementCount()>0&&(c.__dirty=!0,c.__startIndex=c.__endIndex=c.__drawIndex=0),c.__dirty&&c.__drawIndex<0&&(c.__drawIndex=c.__startIndex)})},e.prototype.clear=function(){return this.eachBuiltinLayer(this._clearLayer),this},e.prototype._clearLayer=function(t){t.clear()},e.prototype.setBackgroundColor=function(t){this._backgroundColor=t,R(this._layers,function(r){r.setUnpainted()})},e.prototype.configLayer=function(t,r){if(r){var n=this._layerConfig;n[t]?st(n[t],r,!0):n[t]=r;for(var i=0;is)return!0;if(o){var l=o_(t).seriesDataCount,u=i.getExtent();return Math.abs(u[0]-u[1])/l>s}return!1}return n===!0},e.prototype.makeElOption=function(t,r,n,i,a){},e.prototype.createPointerEl=function(t,r,n,i){var a=r.pointer;if(a){var o=Ka(t).pointerEl=new mj[a.type](uC(r.pointer));t.add(o)}},e.prototype.createLabelEl=function(t,r,n,i){if(r.label){var a=Ka(t).labelEl=new mr(uC(r.label));t.add(a),cC(a,i)}},e.prototype.updatePointerEl=function(t,r,n){var i=Ka(t).pointerEl;i&&r.pointer&&(i.setStyle(r.pointer.style),n(i,{shape:r.pointer.shape}))},e.prototype.updateLabelEl=function(t,r,n,i){var a=Ka(t).labelEl;a&&(a.setStyle(r.label.style),n(a,{x:r.label.x,y:r.label.y}),cC(a,i))},e.prototype._renderHandle=function(t){if(!(this._dragging||!this.updateHandleTransform)){var r=this._axisPointerModel,n=this._api.getZr(),i=this._handle,a=r.getModel("handle"),o=r.get("status");if(!a.get("show")||!o||o==="hide"){i&&n.remove(i),this._handle=null;return}var s;this._handle||(s=!0,i=this._handle=M0(a.get("icon"),{cursor:"move",draggable:!0,onmousemove:function(u){C2(u.event)},onmousedown:Ip(this._onHandleDragMove,this,0,0),drift:Ip(this._onHandleDragMove,this),ondragend:Ip(this._onHandleDragEnd,this)}),n.add(i)),dC(i,r,!1),i.setStyle(a.getItemStyle(null,["color","borderColor","borderWidth","opacity","shadowColor","shadowBlur","shadowOffsetX","shadowOffsetY"]));var l=a.get("size");ye(l)||(l=[l,l]),i.scaleX=l[0]/2,i.scaleY=l[1]/2,VE(this,"_doDispatchAxisPointer",a.get("throttle")||0,"fixRate"),this._moveHandleToValue(t,s)}},e.prototype._moveHandleToValue=function(t,r){fC(this._axisPointerModel,!r&&this._moveAnimation,this._handle,Op(this.getHandleTransform(t,this._axisModel,this._axisPointerModel)))},e.prototype._onHandleDragMove=function(t,r){var n=this._handle;if(n){this._dragging=!0;var i=this.updateHandleTransform(Op(n),[t,r],this._axisModel,this._axisPointerModel);this._payloadInfo=i,n.stopAnimation(),n.attr(Op(i)),Ka(n).lastProp=null,this._doDispatchAxisPointer()}},e.prototype._doDispatchAxisPointer=function(){var t=this._handle;if(t){var r=this._payloadInfo,n=this._axisModel;this._api.dispatchAction({type:"updateAxisPointer",x:r.cursorPoint[0],y:r.cursorPoint[1],tooltipOption:r.tooltipOption,axesInfo:[{axisDim:n.axis.dim,axisIndex:n.componentIndex}]})}},e.prototype._onHandleDragEnd=function(){this._dragging=!1;var t=this._handle;if(t){var r=this._axisPointerModel.get("value");this._moveHandleToValue(r),this._api.dispatchAction({type:"hideTip"})}},e.prototype.clear=function(t){this._lastValue=null,this._lastStatus=null;var r=t.getZr(),n=this._group,i=this._handle;r&&n&&(this._lastGraphicKey=null,n&&r.remove(n),i&&r.remove(i),this._group=null,this._handle=null,this._payloadInfo=null),wm(this,"_doDispatchAxisPointer")},e.prototype.doClear=function(){},e.prototype.buildLabel=function(t,r,n){return n=n||0,{x:t[n],y:t[1-n],width:r[n],height:r[1-n]}},e}();function fC(e,t,r,n){hD(Ka(r).lastProp,n)||(Ka(r).lastProp=n,t?Or(r,n,e):(r.stopAnimation(),r.attr(n)))}function hD(e,t){if(Re(e)&&Re(t)){var r=!0;return R(t,function(n,i){r=r&&hD(e[i],n)}),!!r}else return e===t}function cC(e,t){e[t.get(["label","show"])?"show":"hide"]()}function Op(e){return{x:e.x||0,y:e.y||0,rotation:e.rotation||0}}function dC(e,t,r){var n=t.get("z"),i=t.get("zlevel");e&&e.traverse(function(a){a.type!=="group"&&(n!=null&&(a.z=n),i!=null&&(a.zlevel=i),a.silent=r)})}const YJ=UJ;function jJ(e){var t=e.get("type"),r=e.getModel(t+"Style"),n;return t==="line"?(n=r.getLineStyle(),n.fill=null):t==="shadow"&&(n=r.getAreaStyle(),n.stroke=null),n}function qJ(e,t,r,n,i){var a=r.get("value"),o=vD(a,t.axis,t.ecModel,r.get("seriesDataIndices"),{precision:r.get(["label","precision"]),formatter:r.get(["label","formatter"])}),s=r.getModel("label"),l=Oh(s.get("padding")||0),u=s.getFont(),f=u0(o,u),c=i.position,h=f.width+l[1]+l[3],d=f.height+l[0]+l[2],v=i.align;v==="right"&&(c[0]-=h),v==="center"&&(c[0]-=h/2);var p=i.verticalAlign;p==="bottom"&&(c[1]-=d),p==="middle"&&(c[1]-=d/2),KJ(c,h,d,n);var m=s.get("backgroundColor");(!m||m==="auto")&&(m=t.get(["axisLine","lineStyle","color"])),e.label={x:c[0],y:c[1],style:ha(s,{text:o,font:u,fill:s.getTextColor(),padding:l,backgroundColor:m}),z2:10}}function KJ(e,t,r,n){var i=n.getWidth(),a=n.getHeight();e[0]=Math.min(e[0]+t,i)-t,e[1]=Math.min(e[1]+r,a)-r,e[0]=Math.max(e[0],0),e[1]=Math.max(e[1],0)}function vD(e,t,r,n,i){e=t.scale.parse(e);var a=t.scale.getLabel({value:e},{precision:i.precision}),o=i.formatter;if(o){var s={value:n_(t,{value:e}),axisDimension:t.dim,axisIndex:t.index,seriesData:[]};R(n,function(l){var u=r.getSeriesByIndex(l.seriesIndex),f=l.dataIndexInside,c=u&&u.getDataParams(f);c&&s.seriesData.push(c)}),Ee(o)?a=o.replace("{value}",a):Ye(o)&&(a=o(s))}return a}function pD(e,t,r){var n=Pu();return o0(n,n,r.rotation),Vg(n,n,r.position),T0([e.dataToCoord(t),(r.labelOffset||0)+(r.labelDirection||1)*(r.labelMargin||0)],n)}function XJ(e,t,r,n,i,a){var o=uD.innerTextLayout(r.rotation,0,r.labelDirection);r.labelMargin=i.get(["label","margin"]),qJ(t,n,i,a,{position:pD(n.axis,e,r),align:o.textAlign,verticalAlign:o.textVerticalAlign})}function ZJ(e,t,r){return r=r||0,{x1:e[r],y1:e[1-r],x2:t[r],y2:t[1-r]}}function QJ(e,t,r){return r=r||0,{x:e[r],y:e[1-r],width:t[r],height:t[1-r]}}var JJ=function(e){ge(t,e);function t(){return e!==null&&e.apply(this,arguments)||this}return t.prototype.makeElOption=function(r,n,i,a,o){var s=i.axis,l=s.grid,u=a.get("type"),f=hC(l,s).getOtherAxis(s).getGlobalExtent(),c=s.toGlobalCoord(s.dataToCoord(n,!0));if(u&&u!=="none"){var h=jJ(a),d=eee[u](s,c,f);d.style=h,r.graphicKey=d.type,r.pointer=d}var v=km(l.model,i);XJ(n,r,v,i,a,o)},t.prototype.getHandleTransform=function(r,n,i){var a=km(n.axis.grid.model,n,{labelInside:!1});a.labelMargin=i.get(["handle","margin"]);var o=pD(n.axis,r,a);return{x:o[0],y:o[1],rotation:a.rotation+(a.labelDirection<0?Math.PI:0)}},t.prototype.updateHandleTransform=function(r,n,i,a){var o=i.axis,s=o.grid,l=o.getGlobalExtent(!0),u=hC(s,o).getOtherAxis(o).getGlobalExtent(),f=o.dim==="x"?0:1,c=[r.x,r.y];c[f]+=n[f],c[f]=Math.min(l[1],c[f]),c[f]=Math.max(l[0],c[f]);var h=(u[1]+u[0])/2,d=[h,h];d[f]=c[f];var v=[{verticalAlign:"middle"},{align:"center"}];return{x:c[0],y:c[1],rotation:r.rotation,cursorPoint:d,tooltipOption:v[f]}},t}(YJ);function hC(e,t){var r={};return r[t.dim+"AxisIndex"]=t.index,e.getCartesian(r)}var eee={line:function(e,t,r){var n=ZJ([t,r[0]],[t,r[1]],vC(e));return{type:"Line",subPixelOptimize:!0,shape:n}},shadow:function(e,t,r){var n=Math.max(1,e.getBandWidth()),i=r[1]-r[0];return{type:"Rect",shape:QJ([t-n/2,r[0]],[n,i],vC(e))}}};function vC(e){return e.dim==="x"?0:1}const tee=JJ;var ree=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.type="axisPointer",t.defaultOption={show:"auto",z:50,type:"line",snap:!1,triggerTooltip:!0,triggerEmphasis:!0,value:null,status:null,link:[],animation:null,animationDurationUpdate:200,lineStyle:{color:"#B9BEC9",width:1,type:"dashed"},shadowStyle:{color:"rgba(210,219,238,0.2)"},label:{show:!0,formatter:null,precision:"auto",margin:3,color:"#fff",padding:[5,7,5,7],backgroundColor:"auto",borderColor:null,borderWidth:0,borderRadius:3},handle:{show:!1,icon:"M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z",size:45,margin:50,color:"#333",shadowBlur:3,shadowColor:"#aaa",shadowOffsetX:0,shadowOffsetY:2,throttle:40}},t}(Mt);const nee=ree;var gi=Et(),iee=R;function gD(e,t,r){if(!He.node){var n=t.getZr();gi(n).records||(gi(n).records={}),aee(n,t);var i=gi(n).records[e]||(gi(n).records[e]={});i.handler=r}}function aee(e,t){if(gi(e).initialized)return;gi(e).initialized=!0,r("click",Rt(pC,"click")),r("mousemove",Rt(pC,"mousemove")),r("globalout",see);function r(n,i){e.on(n,function(a){var o=lee(t);iee(gi(e).records,function(s){s&&i(s,a,o.dispatchAction)}),oee(o.pendings,t)})}}function oee(e,t){var r=e.showTip.length,n=e.hideTip.length,i;r?i=e.showTip[r-1]:n&&(i=e.hideTip[n-1]),i&&(i.dispatchAction=null,t.dispatchAction(i))}function see(e,t,r){e.handler("leave",null,r)}function pC(e,t,r,n){t.handler(e,r,n)}function lee(e){var t={showTip:[],hideTip:[]},r=function(n){var i=t[n.type];i?i.push(n):(n.dispatchAction=r,e.dispatchAction(n))};return{dispatchAction:r,pendings:t}}function Fm(e,t){if(!He.node){var r=t.getZr(),n=(gi(r).records||{})[e];n&&(gi(r).records[e]=null)}}var uee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.render=function(r,n,i){var a=n.getComponent("tooltip"),o=r.get("triggerOn")||a&&a.get("triggerOn")||"mousemove|click";gD("axisPointer",i,function(s,l,u){o!=="none"&&(s==="leave"||o.indexOf(s)>=0)&&u({type:"updateAxisPointer",currTrigger:s,x:l&&l.offsetX,y:l&&l.offsetY})})},t.prototype.remove=function(r,n){Fm("axisPointer",n)},t.prototype.dispose=function(r,n){Fm("axisPointer",n)},t.type="axisPointer",t}(Mi);const fee=uee;function mD(e,t){var r=[],n=e.seriesIndex,i;if(n==null||!(i=t.getSeriesByIndex(n)))return{point:[]};var a=i.getData(),o=sf(a,e);if(o==null||o<0||ye(o))return{point:[]};var s=a.getItemGraphicEl(o),l=i.coordinateSystem;if(i.getTooltipPosition)r=i.getTooltipPosition(o)||[];else if(l&&l.dataToPoint)if(e.isStacked){var u=l.getBaseAxis(),f=l.getOtherAxis(u),c=f.dim,h=u.dim,d=c==="x"||c==="radius"?1:0,v=a.mapDimension(h),p=[];p[d]=a.get(v,o),p[1-d]=a.get(a.getCalculationInfo("stackResultDimension"),o),r=l.dataToPoint(p)||[]}else r=l.dataToPoint(a.getValues(Ne(l.dimensions,function(g){return a.mapDimension(g)}),o))||[];else if(s){var m=s.getBoundingRect().clone();m.applyTransform(s.transform),r=[m.x+m.width/2,m.y+m.height/2]}return{point:r,el:s}}var gC=Et();function cee(e,t,r){var n=e.currTrigger,i=[e.x,e.y],a=e,o=e.dispatchAction||xt(r.dispatchAction,r),s=t.getComponent("axisPointer").coordSysAxesInfo;if(s){Zc(i)&&(i=mD({seriesIndex:a.seriesIndex,dataIndex:a.dataIndex},t).point);var l=Zc(i),u=a.axesInfo,f=s.axesInfo,c=n==="leave"||Zc(i),h={},d={},v={list:[],map:{}},p={showPointer:Rt(hee,d),showTooltip:Rt(vee,v)};R(s.coordSysMap,function(g,y){var _=l||g.containPoint(i);R(s.coordSysAxesInfo[y],function(b,x){var w=b.axis,S=yee(u,b);if(!c&&_&&(!u||S)){var C=S&&S.value;C==null&&!l&&(C=w.pointToData(i)),C!=null&&mC(b,C,p,!1,h)}})});var m={};return R(f,function(g,y){var _=g.linkGroup;_&&!d[y]&&R(_.axesInfo,function(b,x){var w=d[x];if(b!==g&&w){var S=w.value;_.mapper&&(S=g.axis.scale.parse(_.mapper(S,yC(b),yC(g)))),m[g.key]=S}})}),R(m,function(g,y){mC(f[y],g,p,!0,h)}),pee(d,f,h),gee(v,i,e,o),mee(f,o,r),h}}function mC(e,t,r,n,i){var a=e.axis;if(!(a.scale.isBlank()||!a.containData(t))){if(!e.involveSeries){r.showPointer(e,t);return}var o=dee(t,e),s=o.payloadBatch,l=o.snapToValue;s[0]&&i.seriesIndex==null&&ue(i,s[0]),!n&&e.snap&&a.containData(l)&&l!=null&&(t=l),r.showPointer(e,t,s),r.showTooltip(e,o,l)}}function dee(e,t){var r=t.axis,n=r.dim,i=e,a=[],o=Number.MAX_VALUE,s=-1;return R(t.seriesModels,function(l,u){var f=l.getData().mapDimensionsAll(n),c,h;if(l.getAxisTooltipData){var d=l.getAxisTooltipData(f,e,r);h=d.dataIndices,c=d.nestestValue}else{if(h=l.getData().indicesOfNearest(f[0],e,r.type==="category"?.5:null),!h.length)return;c=l.getData().get(f[0],h[0])}if(!(c==null||!isFinite(c))){var v=e-c,p=Math.abs(v);p<=o&&((p=0&&s<0)&&(o=p,s=v,i=c,a.length=0),R(h,function(m){a.push({seriesIndex:l.seriesIndex,dataIndexInside:m,dataIndex:l.getData().getRawIndex(m)})}))}}),{payloadBatch:a,snapToValue:i}}function hee(e,t,r,n){e[t.key]={value:r,payloadBatch:n}}function vee(e,t,r,n){var i=r.payloadBatch,a=t.axis,o=a.model,s=t.axisPointerModel;if(!(!t.triggerTooltip||!i.length)){var l=t.coordSys.model,u=Vu(l),f=e.map[u];f||(f=e.map[u]={coordSysId:l.id,coordSysIndex:l.componentIndex,coordSysType:l.type,coordSysMainType:l.mainType,dataByAxis:[]},e.list.push(f)),f.dataByAxis.push({axisDim:a.dim,axisIndex:o.componentIndex,axisType:o.type,axisId:o.id,value:n,valueLabelOpt:{precision:s.get(["label","precision"]),formatter:s.get(["label","formatter"])},seriesDataIndices:i.slice()})}}function pee(e,t,r){var n=r.axesInfo=[];R(t,function(i,a){var o=i.axisPointerModel.option,s=e[a];s?(!i.useHandle&&(o.status="show"),o.value=s.value,o.seriesDataIndices=(s.payloadBatch||[]).slice()):!i.useHandle&&(o.status="hide"),o.status==="show"&&n.push({axisDim:i.axis.dim,axisIndex:i.axis.model.componentIndex,value:o.value})})}function gee(e,t,r,n){if(Zc(t)||!e.list.length){n({type:"hideTip"});return}var i=((e.list[0].dataByAxis[0]||{}).seriesDataIndices||[])[0]||{};n({type:"showTip",escapeConnect:!0,x:t[0],y:t[1],tooltipOption:r.tooltipOption,position:r.position,dataIndexInside:i.dataIndexInside,dataIndex:i.dataIndex,seriesIndex:i.seriesIndex,dataByCoordSys:e.list})}function mee(e,t,r){var n=r.getZr(),i="axisPointerLastHighlights",a=gC(n)[i]||{},o=gC(n)[i]={};R(e,function(u,f){var c=u.axisPointerModel.option;c.status==="show"&&u.triggerEmphasis&&R(c.seriesDataIndices,function(h){var d=h.seriesIndex+" | "+h.dataIndex;o[d]=h})});var s=[],l=[];R(a,function(u,f){!o[f]&&l.push(u)}),R(o,function(u,f){!a[f]&&s.push(u)}),l.length&&r.dispatchAction({type:"downplay",escapeConnect:!0,notBlur:!0,batch:l}),s.length&&r.dispatchAction({type:"highlight",escapeConnect:!0,notBlur:!0,batch:s})}function yee(e,t){for(var r=0;r<(e||[]).length;r++){var n=e[r];if(t.axis.dim===n.axisDim&&t.axis.model.componentIndex===n.axisIndex)return n}}function yC(e){var t=e.axis.model,r={},n=r.axisDim=e.axis.dim;return r.axisIndex=r[n+"AxisIndex"]=t.componentIndex,r.axisName=r[n+"AxisName"]=t.name,r.axisId=r[n+"AxisId"]=t.id,r}function Zc(e){return!e||e[0]==null||isNaN(e[0])||e[1]==null||isNaN(e[1])}function yD(e){fD.registerAxisPointerClass("CartesianAxisPointer",tee),e.registerComponentModel(nee),e.registerComponentView(fee),e.registerPreprocessor(function(t){if(t){(!t.axisPointer||t.axisPointer.length===0)&&(t.axisPointer={});var r=t.axisPointer.link;r&&!ye(r)&&(t.axisPointer.link=[r])}}),e.registerProcessor(e.PRIORITY.PROCESSOR.STATISTIC,function(t,r){t.getComponent("axisPointer").coordSysAxesInfo=xJ(t,r)}),e.registerAction({type:"updateAxisPointer",event:"updateAxisPointer",update:":updateAxisPointer"},cee)}function _ee(e){va(BJ),va(yD)}function bee(e,t){var r=Oh(t.get("padding")),n=t.getItemStyle(["color","opacity"]);return n.fill=t.get("backgroundColor"),e=new Gt({shape:{x:e.x-r[3],y:e.y-r[0],width:e.width+r[1]+r[3],height:e.height+r[0]+r[2],r:t.get("borderRadius")},style:n,silent:!0,z2:-1}),e}var wee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.type="tooltip",t.dependencies=["axisPointer"],t.defaultOption={z:60,show:!0,showContent:!0,trigger:"item",triggerOn:"mousemove|click",alwaysShowContent:!1,displayMode:"single",renderMode:"auto",confine:null,showDelay:0,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:"#fff",shadowBlur:10,shadowColor:"rgba(0, 0, 0, .2)",shadowOffsetX:1,shadowOffsetY:2,borderRadius:4,borderWidth:1,padding:null,extraCssText:"",axisPointer:{type:"line",axis:"auto",animation:"auto",animationDurationUpdate:200,animationEasingUpdate:"exponentialOut",crossStyle:{color:"#999",width:1,type:"dashed",textStyle:{}}},textStyle:{color:"#666",fontSize:14}},t}(Mt);const See=wee;function _D(e){var t=e.get("confine");return t!=null?!!t:e.get("renderMode")==="richText"}function bD(e){if(He.domSupported){for(var t=document.documentElement.style,r=0,n=e.length;r-1?(s+="top:50%",l+="translateY(-50%) rotate("+(u=a==="left"?-225:-45)+"deg)"):(s+="left:50%",l+="translateX(-50%) rotate("+(u=a==="top"?225:45)+"deg)");var f=u*Math.PI/180,c=o+i,h=c*Math.abs(Math.cos(f))+c*Math.abs(Math.sin(f)),d=Math.round(((h-Math.SQRT2*i)/2+Math.SQRT2*i-(h-c)/2)*100)/100;s+=";"+a+":-"+d+"px";var v=t+" solid "+i+"px;",p=["position:absolute;width:"+o+"px;height:"+o+"px;z-index:-1;",s+";"+l+";","border-bottom:"+v,"border-right:"+v,"background-color:"+n+";"];return'
'}function Eee(e,t){var r="cubic-bezier(0.23,1,0.32,1)",n=" "+e/2+"s "+r,i="opacity"+n+",visibility"+n;return t||(n=" "+e+"s "+r,i+=He.transformSupported?","+s_+n:",left"+n+",top"+n),Tee+":"+i}function _C(e,t,r){var n=e.toFixed(0)+"px",i=t.toFixed(0)+"px";if(!He.transformSupported)return r?"top:"+i+";left:"+n+";":[["top",i],["left",n]];var a=He.transform3dSupported,o="translate"+(a?"3d":"")+"("+n+","+i+(a?",0":"")+")";return r?"top:0;left:0;"+s_+":"+o+";":[["top",0],["left",0],[wD,o]]}function Lee(e){var t=[],r=e.get("fontSize"),n=e.getTextColor();n&&t.push("color:"+n),t.push("font:"+e.getFont()),r&&t.push("line-height:"+Math.round(r*3/2)+"px");var i=e.get("textShadowColor"),a=e.get("textShadowBlur")||0,o=e.get("textShadowOffsetX")||0,s=e.get("textShadowOffsetY")||0;return i&&a&&t.push("text-shadow:"+o+"px "+s+"px "+a+"px "+i),R(["decoration","align"],function(l){var u=e.get(l);u&&t.push("text-"+l+":"+u)}),t.join(";")}function Dee(e,t,r){var n=[],i=e.get("transitionDuration"),a=e.get("backgroundColor"),o=e.get("shadowBlur"),s=e.get("shadowColor"),l=e.get("shadowOffsetX"),u=e.get("shadowOffsetY"),f=e.getModel("textStyle"),c=$E(e,"html"),h=l+"px "+u+"px "+o+"px "+s;return n.push("box-shadow:"+h),t&&i&&n.push(Eee(i,r)),a&&n.push("background-color:"+a),R(["width","color","radius"],function(d){var v="border-"+d,p=vE(v),m=e.get(p);m!=null&&n.push(v+":"+m+(d==="color"?"":"px"))}),n.push(Lee(f)),c!=null&&n.push("padding:"+Oh(c).join("px ")+"px"),n.join(";")+";"}function bC(e,t,r,n,i){var a=t&&t.painter;if(r){var o=a&&a.getViewportRoot();o&&TU(e,o,document.body,n,i)}else{e[0]=n,e[1]=i;var s=a&&a.getViewportRootOffset();s&&(e[0]+=s.offsetLeft,e[1]+=s.offsetTop)}e[2]=e[0]/t.getWidth(),e[3]=e[1]/t.getHeight()}var Iee=function(){function e(t,r,n){if(this._show=!1,this._styleCoord=[0,0,0,0],this._enterable=!0,this._alwaysShowContent=!1,this._firstShow=!0,this._longHide=!0,He.wxa)return null;var i=document.createElement("div");i.domBelongToZr=!0,this.el=i;var a=this._zr=r.getZr(),o=this._appendToBody=n&&n.appendToBody;bC(this._styleCoord,a,o,r.getWidth()/2,r.getHeight()/2),o?document.body.appendChild(i):t.appendChild(i),this._container=t;var s=this;i.onmouseenter=function(){s._enterable&&(clearTimeout(s._hideTimeout),s._show=!0),s._inContent=!0},i.onmousemove=function(l){if(l=l||window.event,!s._enterable){var u=a.handler,f=a.painter.getViewportRoot();Qr(f,l,!0),u.dispatch("mousemove",l)}},i.onmouseleave=function(){s._inContent=!1,s._enterable&&s._show&&s.hideLater(s._hideDelay)}}return e.prototype.update=function(t){var r=this._container,n=Cee(r,"position"),i=r.style;i.position!=="absolute"&&n!=="absolute"&&(i.position="relative");var a=t.get("alwaysShowContent");a&&this._moveIfResized(),this._alwaysShowContent=a,this.el.className=t.get("className")||""},e.prototype.show=function(t,r){clearTimeout(this._hideTimeout),clearTimeout(this._longHideTimeout);var n=this.el,i=n.style,a=this._styleCoord;n.innerHTML?i.cssText=Mee+Dee(t,!this._firstShow,this._longHide)+_C(a[0],a[1],!0)+("border-color:"+ku(r)+";")+(t.get("extraCssText")||"")+(";pointer-events:"+(this._enterable?"auto":"none")):i.display="none",this._show=!0,this._firstShow=!1,this._longHide=!1},e.prototype.setContent=function(t,r,n,i,a){var o=this.el;if(t==null){o.innerHTML="";return}var s="";if(Ee(a)&&n.get("trigger")==="item"&&!_D(n)&&(s=Pee(n,i,a)),Ee(t))o.innerHTML=t+s;else if(t){o.innerHTML="",ye(t)||(t=[t]);for(var l=0;l=0?this._tryShow(a,o):i==="leave"&&this._hide(o))},this))},t.prototype._keepShow=function(){var r=this._tooltipModel,n=this._ecModel,i=this._api,a=r.get("triggerOn");if(this._lastX!=null&&this._lastY!=null&&a!=="none"&&a!=="click"){var o=this;clearTimeout(this._refreshUpdateTimeout),this._refreshUpdateTimeout=setTimeout(function(){!i.isDisposed()&&o.manuallyShowTip(r,n,i,{x:o._lastX,y:o._lastY,dataByCoordSys:o._lastDataByCoordSys})})}},t.prototype.manuallyShowTip=function(r,n,i,a){if(!(a.from===this.uid||He.node||!i.getDom())){var o=xC(a,i);this._ticket="";var s=a.dataByCoordSys,l=Hee(a,n,i);if(l){var u=l.el.getBoundingRect().clone();u.applyTransform(l.el.transform),this._tryShow({offsetX:u.x+u.width/2,offsetY:u.y+u.height/2,target:l.el,position:a.position,positionDefault:"bottom"},o)}else if(a.tooltip&&a.x!=null&&a.y!=null){var f=kee;f.x=a.x,f.y=a.y,f.update(),dt(f).tooltipConfig={name:null,option:a.tooltip},this._tryShow({offsetX:a.x,offsetY:a.y,target:f},o)}else if(s)this._tryShow({offsetX:a.x,offsetY:a.y,position:a.position,dataByCoordSys:s,tooltipOption:a.tooltipOption},o);else if(a.seriesIndex!=null){if(this._manuallyAxisShowTip(r,n,i,a))return;var c=mD(a,n),h=c.point[0],d=c.point[1];h!=null&&d!=null&&this._tryShow({offsetX:h,offsetY:d,target:c.el,position:a.position,positionDefault:"bottom"},o)}else a.x!=null&&a.y!=null&&(i.dispatchAction({type:"updateAxisPointer",x:a.x,y:a.y}),this._tryShow({offsetX:a.x,offsetY:a.y,position:a.position,target:i.getZr().findHover(a.x,a.y).target},o))}},t.prototype.manuallyHideTip=function(r,n,i,a){var o=this._tooltipContent;this._tooltipModel&&o.hideLater(this._tooltipModel.get("hideDelay")),this._lastX=this._lastY=this._lastDataByCoordSys=null,a.from!==this.uid&&this._hide(xC(a,i))},t.prototype._manuallyAxisShowTip=function(r,n,i,a){var o=a.seriesIndex,s=a.dataIndex,l=n.getComponent("axisPointer").coordSysAxesInfo;if(!(o==null||s==null||l==null)){var u=n.getSeriesByIndex(o);if(u){var f=u.getData(),c=bl([f.getItemModel(s),u,(u.coordinateSystem||{}).model],this._tooltipModel);if(c.get("trigger")==="axis")return i.dispatchAction({type:"updateAxisPointer",seriesIndex:o,dataIndex:s,position:a.position}),!0}}},t.prototype._tryShow=function(r,n){var i=r.target,a=this._tooltipModel;if(a){this._lastX=r.offsetX,this._lastY=r.offsetY;var o=r.dataByCoordSys;if(o&&o.length)this._showAxisTooltip(o,r);else if(i){this._lastDataByCoordSys=null;var s,l;Ll(i,function(u){if(dt(u).dataIndex!=null)return s=u,!0;if(dt(u).tooltipConfig!=null)return l=u,!0},!0),s?this._showSeriesItemTooltip(r,s,n):l?this._showComponentItemTooltip(r,l,n):this._hide(n)}else this._lastDataByCoordSys=null,this._hide(n)}},t.prototype._showOrMove=function(r,n){var i=r.get("showDelay");n=xt(n,this),clearTimeout(this._showTimout),i>0?this._showTimout=setTimeout(n,i):n()},t.prototype._showAxisTooltip=function(r,n){var i=this._ecModel,a=this._tooltipModel,o=[n.offsetX,n.offsetY],s=bl([n.tooltipOption],a),l=this._renderMode,u=[],f=Fu("section",{blocks:[],noHeader:!0}),c=[],h=new up;R(r,function(y){R(y.dataByAxis,function(_){var b=i.getComponent(_.axisDim+"Axis",_.axisIndex),x=_.value;if(!(!b||x==null)){var w=vD(x,b.axis,i,_.seriesDataIndices,_.valueLabelOpt),S=Fu("section",{header:w,noHeader:!Gn(w),sortBlocks:!0,blocks:[]});f.blocks.push(S),R(_.seriesDataIndices,function(C){var M=i.getSeriesByIndex(C.seriesIndex),A=C.dataIndexInside,P=M.getDataParams(A);if(!(P.dataIndex<0)){P.axisDim=_.axisDim,P.axisIndex=_.axisIndex,P.axisType=_.axisType,P.axisId=_.axisId,P.axisValue=n_(b.axis,{value:x}),P.axisValueLabel=w,P.marker=h.makeTooltipMarker("item",ku(P.color),l);var E=FS(M.formatTooltip(A,!0,null)),L=E.frag;if(L){var O=bl([M],a).get("valueFormatter");S.blocks.push(O?ue({valueFormatter:O},L):L)}E.text&&c.push(E.text),u.push(P)}})}})}),f.blocks.reverse(),c.reverse();var d=n.position,v=s.get("order"),p=WS(f,h,l,v,i.get("useUTC"),s.get("textStyle"));p&&c.unshift(p);var m=l==="richText"?` -`:"
",g=c.join(m);this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(r,u)?this._updatePosition(s,d,o[0],o[1],this._tooltipContent,u):this._showTooltipContent(s,g,u,Math.random()+"",o[0],o[1],d,null,h)})},t.prototype._showSeriesItemTooltip=function(r,n,i){var a=this._ecModel,o=dt(n),s=o.seriesIndex,l=a.getSeriesByIndex(s),u=o.dataModel||l,f=o.dataIndex,c=o.dataType,h=u.getData(c),d=this._renderMode,v=r.positionDefault,p=bl([h.getItemModel(f),u,l&&(l.coordinateSystem||{}).model],this._tooltipModel,v?{position:v}:null),m=p.get("trigger");if(!(m!=null&&m!=="item")){var g=u.getDataParams(f,c),y=new up;g.marker=y.makeTooltipMarker("item",ku(g.color),d);var _=FS(u.formatTooltip(f,!1,c)),b=p.get("order"),x=p.get("valueFormatter"),w=_.frag,S=w?WS(x?ue({valueFormatter:x},w):w,y,d,b,a.get("useUTC"),p.get("textStyle")):_.text,C="item_"+u.name+"_"+f;this._showOrMove(p,function(){this._showTooltipContent(p,S,g,C,r.offsetX,r.offsetY,r.position,r.target,y)}),i({type:"showTip",dataIndexInside:f,dataIndex:h.getRawIndex(f),seriesIndex:s,from:this.uid})}},t.prototype._showComponentItemTooltip=function(r,n,i){var a=dt(n),o=a.tooltipConfig,s=o.option||{};if(Ee(s)){var l=s;s={content:l,formatter:l}}var u=[s],f=this._ecModel.getComponent(a.componentMainType,a.componentIndex);f&&u.push(f),u.push({formatter:s.content});var c=r.positionDefault,h=bl(u,this._tooltipModel,c?{position:c}:null),d=h.get("content"),v=Math.random()+"",p=new up;this._showOrMove(h,function(){var m=tt(h.get("formatterParams")||{});this._showTooltipContent(h,d,m,v,r.offsetX,r.offsetY,r.position,n,p)}),i({type:"showTip",from:this.uid})},t.prototype._showTooltipContent=function(r,n,i,a,o,s,l,u,f){if(this._ticket="",!(!r.get("showContent")||!r.get("show"))){var c=this._tooltipContent;c.setEnterable(r.get("enterable"));var h=r.get("formatter");l=l||r.get("position");var d=n,v=this._getNearestPoint([o,s],i,r.get("trigger"),r.get("borderColor")),p=v.color;if(h)if(Ee(h)){var m=r.ecModel.get("useUTC"),g=ye(i)?i[0]:i,y=g&&g.axisType&&g.axisType.indexOf("time")>=0;d=h,y&&(d=Ph(g.axisValue,d,m)),d=pE(d,i,!0)}else if(Ye(h)){var _=xt(function(b,x){b===this._ticket&&(c.setContent(x,f,r,p,l),this._updatePosition(r,l,o,s,c,i,u))},this);this._ticket=a,d=h(i,a,_)}else d=h;c.setContent(d,f,r,p,l),c.show(r,p),this._updatePosition(r,l,o,s,c,i,u)}},t.prototype._getNearestPoint=function(r,n,i,a){if(i==="axis"||ye(n))return{color:a||(this._renderMode==="html"?"#fff":"none")};if(!ye(n))return{color:a||n.color||n.borderColor}},t.prototype._updatePosition=function(r,n,i,a,o,s,l){var u=this._api.getWidth(),f=this._api.getHeight();n=n||r.get("position");var c=o.getSize(),h=r.get("align"),d=r.get("verticalAlign"),v=l&&l.getBoundingRect().clone();if(l&&v.applyTransform(l.transform),Ye(n)&&(n=n([i,a],s,o.el,v,{viewSize:[u,f],contentSize:c.slice()})),ye(n))i=yt(n[0],u),a=yt(n[1],f);else if(Re(n)){var p=n;p.width=c[0],p.height=c[1];var m=Ls(p,{width:u,height:f});i=m.x,a=m.y,h=null,d=null}else if(Ee(n)&&l){var g=$ee(n,v,c,r.get("borderWidth"));i=g[0],a=g[1]}else{var g=Bee(i,a,o,u,f,h?null:20,d?null:20);i=g[0],a=g[1]}if(h&&(i-=CC(h)?c[0]/2:h==="right"?c[0]:0),d&&(a-=CC(d)?c[1]/2:d==="bottom"?c[1]:0),_D(r)){var g=Fee(i,a,o,u,f);i=g[0],a=g[1]}o.moveTo(i,a)},t.prototype._updateContentNotChangedOnAxis=function(r,n){var i=this._lastDataByCoordSys,a=this._cbParamsList,o=!!i&&i.length===r.length;return o&&R(i,function(s,l){var u=s.dataByAxis||[],f=r[l]||{},c=f.dataByAxis||[];o=o&&u.length===c.length,o&&R(u,function(h,d){var v=c[d]||{},p=h.seriesDataIndices||[],m=v.seriesDataIndices||[];o=o&&h.value===v.value&&h.axisType===v.axisType&&h.axisId===v.axisId&&p.length===m.length,o&&R(p,function(g,y){var _=m[y];o=o&&g.seriesIndex===_.seriesIndex&&g.dataIndex===_.dataIndex}),a&&R(h.seriesDataIndices,function(g){var y=g.seriesIndex,_=n[y],b=a[y];_&&b&&b.data!==_.data&&(o=!1)})})}),this._lastDataByCoordSys=r,this._cbParamsList=n,!!o},t.prototype._hide=function(r){this._lastDataByCoordSys=null,r({type:"hideTip",from:this.uid})},t.prototype.dispose=function(r,n){He.node||!n.getDom()||(wm(this,"_updatePosition"),this._tooltipContent.dispose(),Fm("itemTooltip",n))},t.type="tooltip",t}(Mi);function bl(e,t,r){var n=t.ecModel,i;r?(i=new sr(r,n,n),i=new sr(t.option,i,n)):i=t;for(var a=e.length-1;a>=0;a--){var o=e[a];o&&(o instanceof sr&&(o=o.get("tooltip",!0)),Ee(o)&&(o={formatter:o}),o&&(i=new sr(o,i,n)))}return i}function xC(e,t){return e.dispatchAction||xt(t.dispatchAction,t)}function Bee(e,t,r,n,i,a,o){var s=r.getSize(),l=s[0],u=s[1];return a!=null&&(e+l+a+2>n?e-=l+a:e+=a),o!=null&&(t+u+o>i?t-=u+o:t+=o),[e,t]}function Fee(e,t,r,n,i){var a=r.getSize(),o=a[0],s=a[1];return e=Math.min(e+o,n)-o,t=Math.min(t+s,i)-s,e=Math.max(e,0),t=Math.max(t,0),[e,t]}function $ee(e,t,r,n){var i=r[0],a=r[1],o=Math.ceil(Math.SQRT2*n)+8,s=0,l=0,u=t.width,f=t.height;switch(e){case"inside":s=t.x+u/2-i/2,l=t.y+f/2-a/2;break;case"top":s=t.x+u/2-i/2,l=t.y-a-o;break;case"bottom":s=t.x+u/2-i/2,l=t.y+f+o;break;case"left":s=t.x-i-o,l=t.y+f/2-a/2;break;case"right":s=t.x+u+o,l=t.y+f/2-a/2}return[s,l]}function CC(e){return e==="center"||e==="middle"}function Hee(e,t,r){var n=v0(e).queryOptionMap,i=n.keys()[0];if(!(!i||i==="series")){var a=lf(t,i,n.get(i),{useDefault:!1,enableAll:!1,enableNone:!1}),o=a.models[0];if(o){var s=r.getViewOfComponentModel(o),l;if(s.group.traverse(function(u){var f=dt(u).tooltipConfig;if(f&&f.name===e.name)return l=u,!0}),l)return{componentMainType:i,componentIndex:o.componentIndex,el:l}}}}const zee=Nee;function Vee(e){va(yD),e.registerComponentModel(See),e.registerComponentView(zee),e.registerAction({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},Er),e.registerAction({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},Er)}var Wee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.layoutMode={type:"box",ignoreSize:!0},r}return t.type="title",t.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},t}(Mt),Gee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.render=function(r,n,i){if(this.group.removeAll(),!!r.get("show")){var a=this.group,o=r.getModel("textStyle"),s=r.getModel("subtextStyle"),l=r.get("textAlign"),u=Ze(r.get("textBaseline"),r.get("textVerticalAlign")),f=new mr({style:ha(o,{text:r.get("text"),fill:o.getTextColor()},{disableBox:!0}),z2:10}),c=f.getBoundingRect(),h=r.get("subtext"),d=new mr({style:ha(s,{text:h,fill:s.getTextColor(),y:c.height+r.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),v=r.get("link"),p=r.get("sublink"),m=r.get("triggerEvent",!0);f.silent=!v&&!m,d.silent=!p&&!m,v&&f.on("click",function(){bS(v,"_"+r.get("target"))}),p&&d.on("click",function(){bS(p,"_"+r.get("subtarget"))}),dt(f).eventData=dt(d).eventData=m?{componentType:"title",componentIndex:r.componentIndex}:null,a.add(f),h&&a.add(d);var g=a.getBoundingRect(),y=r.getBoxLayoutParams();y.width=g.width,y.height=g.height;var _=Ls(y,{width:i.getWidth(),height:i.getHeight()},r.get("padding"));l||(l=r.get("left")||r.get("right"),l==="middle"&&(l="center"),l==="right"?_.x+=_.width:l==="center"&&(_.x+=_.width/2)),u||(u=r.get("top")||r.get("bottom"),u==="center"&&(u="middle"),u==="bottom"?_.y+=_.height:u==="middle"&&(_.y+=_.height/2),u=u||"top"),a.x=_.x,a.y=_.y,a.markRedraw();var b={align:l,verticalAlign:u};f.setStyle(b),d.setStyle(b),g=a.getBoundingRect();var x=_.margin,w=r.getItemStyle(["color","opacity"]);w.fill=r.get("backgroundColor");var S=new Gt({shape:{x:g.x-x[3],y:g.y-x[0],width:g.width+x[1]+x[3],height:g.height+x[0]+x[2],r:r.get("borderRadius")},style:w,subPixelOptimize:!0,silent:!0});a.add(S)}},t.type="title",t}(Mi);function Uee(e){e.registerComponentModel(Wee),e.registerComponentView(Gee)}var Yee=function(e,t){if(t==="all")return{type:"all",title:e.getLocaleModel().get(["legend","selector","all"])};if(t==="inverse")return{type:"inverse",title:e.getLocaleModel().get(["legend","selector","inverse"])}},jee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.layoutMode={type:"box",ignoreSize:!0},r}return t.prototype.init=function(r,n,i){this.mergeDefaultAndTheme(r,i),r.selected=r.selected||{},this._updateSelector(r)},t.prototype.mergeOption=function(r,n){e.prototype.mergeOption.call(this,r,n),this._updateSelector(r)},t.prototype._updateSelector=function(r){var n=r.selector,i=this.ecModel;n===!0&&(n=r.selector=["all","inverse"]),ye(n)&&R(n,function(a,o){Ee(a)&&(a={type:a}),n[o]=st(a,Yee(i,a.type))})},t.prototype.optionUpdated=function(){this._updateData(this.ecModel);var r=this._data;if(r[0]&&this.get("selectedMode")==="single"){for(var n=!1,i=0;i=0},t.prototype.getOrient=function(){return this.get("orient")==="vertical"?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},t.type="legend.plain",t.dependencies=["series"],t.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},t}(Mt);const $m=jee;var jo=Ot,Hm=R,wc=Ur,qee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.newlineDisabled=!1,r}return t.prototype.init=function(){this.group.add(this._contentGroup=new wc),this.group.add(this._selectorGroup=new wc),this._isFirstRender=!0},t.prototype.getContentGroup=function(){return this._contentGroup},t.prototype.getSelectorGroup=function(){return this._selectorGroup},t.prototype.render=function(r,n,i){var a=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),!!r.get("show",!0)){var o=r.get("align"),s=r.get("orient");(!o||o==="auto")&&(o=r.get("left")==="right"&&s==="vertical"?"right":"left");var l=r.get("selector",!0),u=r.get("selectorPosition",!0);l&&(!u||u==="auto")&&(u=s==="horizontal"?"end":"start"),this.renderInner(o,r,n,i,l,s,u);var f=r.getBoxLayoutParams(),c={width:i.getWidth(),height:i.getHeight()},h=r.get("padding"),d=Ls(f,c,h),v=this.layoutInner(r,o,d,a,l,u),p=Ls(ht({width:v.width,height:v.height},f),c,h);this.group.x=p.x-v.x,this.group.y=p.y-v.y,this.group.markRedraw(),this.group.add(this._backgroundEl=bee(v,r))}},t.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},t.prototype.renderInner=function(r,n,i,a,o,s,l){var u=this.getContentGroup(),f=je(),c=n.get("selectedMode"),h=[];i.eachRawSeries(function(d){!d.get("legendHoverLink")&&h.push(d.id)}),Hm(n.getData(),function(d,v){var p=d.get("name");if(!this.newlineDisabled&&(p===""||p===` -`)){var m=new wc;m.newline=!0,u.add(m);return}var g=i.getSeriesByName(p)[0];if(!f.get(p))if(g){var y=g.getData(),_=y.getVisual("legendLineStyle")||{},b=y.getVisual("legendIcon"),x=y.getVisual("style"),w=this._createItem(g,p,v,d,n,r,_,x,b,c,a);w.on("click",jo(TC,p,null,a,h)).on("mouseover",jo(zm,g.name,null,a,h)).on("mouseout",jo(Vm,g.name,null,a,h)),f.set(p,!0)}else i.eachRawSeries(function(S){if(!f.get(p)&&S.legendVisualProvider){var C=S.legendVisualProvider;if(!C.containName(p))return;var M=C.indexOfName(p),A=C.getItemVisual(M,"style"),P=C.getItemVisual(M,"legendIcon"),E=uo(A.fill);E&&E[3]===0&&(E[3]=.2,A=ue(ue({},A),{fill:s0(E,"rgba")}));var L=this._createItem(S,p,v,d,n,r,{},A,P,c,a);L.on("click",jo(TC,null,p,a,h)).on("mouseover",jo(zm,null,p,a,h)).on("mouseout",jo(Vm,null,p,a,h)),f.set(p,!0)}},this)},this),o&&this._createSelector(o,n,a,s,l)},t.prototype._createSelector=function(r,n,i,a,o){var s=this.getSelectorGroup();Hm(r,function(u){var f=u.type,c=new mr({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){i.dispatchAction({type:f==="all"?"legendAllSelect":"legendInverseSelect"})}});s.add(c);var h=n.getModel("selectorLabel"),d=n.getModel(["emphasis","selectorLabel"]);E0(c,{normal:h,emphasis:d},{defaultText:u.title}),um(c)})},t.prototype._createItem=function(r,n,i,a,o,s,l,u,f,c,h){var d=r.visualDrawType,v=o.get("itemWidth"),p=o.get("itemHeight"),m=o.isSelected(n),g=a.get("symbolRotate"),y=a.get("symbolKeepAspect"),_=a.get("icon");f=_||f||"roundRect";var b=Kee(f,a,l,u,d,m,h),x=new wc,w=a.getModel("textStyle");if(Ye(r.getLegendIcon)&&(!_||_==="inherit"))x.add(r.getLegendIcon({itemWidth:v,itemHeight:p,icon:f,iconRotate:g,itemStyle:b.itemStyle,lineStyle:b.lineStyle,symbolKeepAspect:y}));else{var S=_==="inherit"&&r.getData().getVisual("symbol")?g==="inherit"?r.getData().getVisual("symbolRotate"):g:0;x.add(Xee({itemWidth:v,itemHeight:p,icon:f,iconRotate:S,itemStyle:b.itemStyle,lineStyle:b.lineStyle,symbolKeepAspect:y}))}var C=s==="left"?v+5:-5,M=s,A=o.get("formatter"),P=n;Ee(A)&&A?P=A.replace("{name}",n??""):Ye(A)&&(P=A(n));var E=m?w.getTextColor():a.get("inactiveColor");x.add(new mr({style:ha(w,{text:P,x:C,y:p/2,fill:E,align:M,verticalAlign:"middle"},{inheritColor:E})}));var L=new Gt({shape:x.getBoundingRect(),invisible:!0}),O=a.getModel("tooltip");return O.get("show")&&A0({el:L,componentModel:o,itemName:n,itemTooltipOption:O.option}),x.add(L),x.eachChild(function(N){N.silent=!0}),L.silent=!c,this.getContentGroup().add(x),um(x),x.__legendDataIndex=i,x},t.prototype.layoutInner=function(r,n,i,a,o,s){var l=this.getContentGroup(),u=this.getSelectorGroup();ru(r.get("orient"),l,r.get("itemGap"),i.width,i.height);var f=l.getBoundingRect(),c=[-f.x,-f.y];if(u.markRedraw(),l.markRedraw(),o){ru("horizontal",u,r.get("selectorItemGap",!0));var h=u.getBoundingRect(),d=[-h.x,-h.y],v=r.get("selectorButtonGap",!0),p=r.getOrient().index,m=p===0?"width":"height",g=p===0?"height":"width",y=p===0?"y":"x";s==="end"?d[p]+=f[m]+v:c[p]+=h[m]+v,d[1-p]+=f[g]/2-h[g]/2,u.x=d[0],u.y=d[1],l.x=c[0],l.y=c[1];var _={x:0,y:0};return _[m]=f[m]+v+h[m],_[g]=Math.max(f[g],h[g]),_[y]=Math.min(0,h[y]+d[1-p]),_}else return l.x=c[0],l.y=c[1],this.group.getBoundingRect()},t.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},t.type="legend.plain",t}(Mi);function Kee(e,t,r,n,i,a,o){function s(m,g){m.lineWidth==="auto"&&(m.lineWidth=g.lineWidth>0?2:0),Hm(m,function(y,_){m[_]==="inherit"&&(m[_]=g[_])})}var l=t.getModel("itemStyle"),u=l.getItemStyle(),f=e.lastIndexOf("empty",0)===0?"fill":"stroke",c=l.getShallow("decal");u.decal=!c||c==="inherit"?n.decal:Mm(c,o),u.fill==="inherit"&&(u.fill=n[i]),u.stroke==="inherit"&&(u.stroke=n[f]),u.opacity==="inherit"&&(u.opacity=(i==="fill"?n:r).opacity),s(u,n);var h=t.getModel("lineStyle"),d=h.getLineStyle();if(s(d,r),u.fill==="auto"&&(u.fill=n.fill),u.stroke==="auto"&&(u.stroke=n.fill),d.stroke==="auto"&&(d.stroke=n.fill),!a){var v=t.get("inactiveBorderWidth"),p=u[f];u.lineWidth=v==="auto"?n.lineWidth>0&&p?2:0:u.lineWidth,u.fill=t.get("inactiveColor"),u.stroke=t.get("inactiveBorderColor"),d.stroke=h.get("inactiveColor"),d.lineWidth=h.get("inactiveWidth")}return{itemStyle:u,lineStyle:d}}function Xee(e){var t=e.icon||"roundRect",r=j0(t,0,0,e.itemWidth,e.itemHeight,e.itemStyle.fill,e.symbolKeepAspect);return r.setStyle(e.itemStyle),r.rotation=(e.iconRotate||0)*Math.PI/180,r.setOrigin([e.itemWidth/2,e.itemHeight/2]),t.indexOf("empty")>-1&&(r.style.stroke=r.style.fill,r.style.fill="#fff",r.style.lineWidth=2),r}function TC(e,t,r,n){Vm(e,t,r,n),r.dispatchAction({type:"legendToggleSelect",name:e??t}),zm(e,t,r,n)}function xD(e){for(var t=e.getZr().storage.getDisplayList(),r,n=0,i=t.length;ni[o],m=[-d.x,-d.y];n||(m[a]=f[u]);var g=[0,0],y=[-v.x,-v.y],_=Ze(r.get("pageButtonGap",!0),r.get("itemGap",!0));if(p){var b=r.get("pageButtonPosition",!0);b==="end"?y[a]+=i[o]-v[o]:g[a]+=v[o]+_}y[1-a]+=d[s]/2-v[s]/2,f.setPosition(m),c.setPosition(g),h.setPosition(y);var x={x:0,y:0};if(x[o]=p?i[o]:d[o],x[s]=Math.max(d[s],v[s]),x[l]=Math.min(0,v[l]+y[1-a]),c.__rectSize=i[o],p){var w={x:0,y:0};w[o]=Math.max(i[o]-v[o]-_,0),w[s]=x[s],c.setClipPath(new Gt({shape:w})),c.__rectSize=w[o]}else h.eachChild(function(C){C.attr({invisible:!0,silent:!0})});var S=this._getPageInfo(r);return S.pageIndex!=null&&Or(f,{x:S.contentPosition[0],y:S.contentPosition[1]},p?r:null),this._updatePageInfoView(r,S),x},t.prototype._pageGo=function(r,n,i){var a=this._getPageInfo(n)[r];a!=null&&i.dispatchAction({type:"legendScroll",scrollDataIndex:a,legendId:n.id})},t.prototype._updatePageInfoView=function(r,n){var i=this._controllerGroup;R(["pagePrev","pageNext"],function(f){var c=f+"DataIndex",h=n[c]!=null,d=i.childOfName(f);d&&(d.setStyle("fill",h?r.get("pageIconColor",!0):r.get("pageIconInactiveColor",!0)),d.cursor=h?"pointer":"default")});var a=i.childOfName("pageText"),o=r.get("pageFormatter"),s=n.pageIndex,l=s!=null?s+1:0,u=n.pageCount;a&&o&&a.setStyle("text",Ee(o)?o.replace("{current}",l==null?"":l+"").replace("{total}",u==null?"":u+""):o({current:l,total:u}))},t.prototype._getPageInfo=function(r){var n=r.get("scrollDataIndex",!0),i=this.getContentGroup(),a=this._containerGroup.__rectSize,o=r.getOrient().index,s=Rp[o],l=kp[o],u=this._findTargetItemIndex(n),f=i.children(),c=f[u],h=f.length,d=h?1:0,v={contentPosition:[i.x,i.y],pageCount:d,pageIndex:d-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!c)return v;var p=b(c);v.contentPosition[o]=-p.s;for(var m=u+1,g=p,y=p,_=null;m<=h;++m)_=b(f[m]),(!_&&y.e>g.s+a||_&&!x(_,g.s))&&(y.i>g.i?g=y:g=_,g&&(v.pageNextDataIndex==null&&(v.pageNextDataIndex=g.i),++v.pageCount)),y=_;for(var m=u-1,g=p,y=p,_=null;m>=-1;--m)_=b(f[m]),(!_||!x(y,_.s))&&g.i=S&&w.s<=S+a}},t.prototype._findTargetItemIndex=function(r){if(!this._showController)return 0;var n,i=this.getContentGroup(),a;return i.eachChild(function(o,s){var l=o.__legendDataIndex;a==null&&l!=null&&(a=s),l===r&&(n=s)}),n??a},t.type="legend.scroll",t}(CD);const rte=tte;function nte(e){e.registerAction("legendScroll","legendscroll",function(t,r){var n=t.scrollDataIndex;n!=null&&r.eachComponent({mainType:"legend",subType:"scroll",query:t},function(i){i.setScrollDataIndex(n)})})}function ite(e){va(TD),e.registerComponentModel(ete),e.registerComponentView(rte),nte(e)}function ate(e){va(TD),va(ite)}va([tJ,$Q,GJ,vQ,Uee,Vee,ate,_ee]);function ote(e,t,r){const n=Z0(document.getElementById(e),"macarons");n.showLoading();const i={title:{text:"Network Traffic",subtext:"today",left:"center"},tooltip:{trigger:"item",formatter:function(a){return Mu.fileSize(a.data.value)+" ("+a.percent+"%)"}},legend:{orient:"vertical",left:"left",data:["Traffic In","Traffic Out"]},series:[{type:"pie",radius:"55%",center:["50%","60%"],data:[{value:t,name:"Traffic In"},{value:r,name:"Traffic Out"}],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]};n.setOption(i),n.hideLoading()}function ste(e,t){const r=Z0(document.getElementById(e),"macarons");r.showLoading();const n={title:{text:"Proxies",subtext:"now",left:"center"},tooltip:{trigger:"item",formatter:function(i){return String(i.data.value)}},legend:{orient:"vertical",left:"left",data:[]},series:[{type:"pie",radius:"55%",center:["50%","60%"],data:[],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]};t.proxyTypeCount.tcp!=null&&t.proxyTypeCount.tcp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.tcp,name:"TCP"}),n.legend.data.push("TCP")),t.proxyTypeCount.udp!=null&&t.proxyTypeCount.udp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.udp,name:"UDP"}),n.legend.data.push("UDP")),t.proxyTypeCount.http!=null&&t.proxyTypeCount.http!=0&&(n.series[0].data.push({value:t.proxyTypeCount.http,name:"HTTP"}),n.legend.data.push("HTTP")),t.proxyTypeCount.https!=null&&t.proxyTypeCount.https!=0&&(n.series[0].data.push({value:t.proxyTypeCount.https,name:"HTTPS"}),n.legend.data.push("HTTPS")),t.proxyTypeCount.stcp!=null&&t.proxyTypeCount.stcp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.stcp,name:"STCP"}),n.legend.data.push("STCP")),t.proxyTypeCount.sudp!=null&&t.proxyTypeCount.sudp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.sudp,name:"SUDP"}),n.legend.data.push("SUDP")),t.proxyTypeCount.xtcp!=null&&t.proxyTypeCount.xtcp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.xtcp,name:"XTCP"}),n.legend.data.push("XTCP")),r.setOption(n),r.hideLoading()}function lte(e,t,r){const n={width:"600px",height:"400px"},i=Z0(document.getElementById(e),"macarons",n);i.showLoading(),t=t.reverse(),r=r.reverse();let a=new Date;a=new Date(a.getFullYear(),a.getMonth(),a.getDate()-6);const o=[];for(let l=0;l<7;l++)o.push(a.getFullYear()+"-"+(a.getMonth()+1)+"-"+a.getDate()),a=new Date(a.getFullYear(),a.getMonth(),a.getDate()+1);const s={tooltip:{trigger:"axis",axisPointer:{type:"shadow"},formatter:function(l){let u="";l.length>0&&(u+=l[0].name+"
");for(const f of l){const c='';u+=c+f.seriesName+": "+Mu.fileSize(f.value)+"
"}return u}},legend:{data:["Traffic In","Traffic Out"]},grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},xAxis:[{type:"category",data:o}],yAxis:[{type:"value",axisLabel:{formatter:function(l){return Mu.fileSize(l)}}}],series:[{name:"Traffic In",type:"bar",data:t},{name:"Traffic Out",type:"bar",data:r}]};i.setOption(s),i.hideLoading()}const PC=ie({__name:"LongSpan",props:{content:{},length:{}},setup(e){return(t,r)=>{const n=Hs;return G(),ce(ft,null,[Z(n,{content:t.content,placement:"top"},{default:j(()=>[qt(ee("span",null,be(t.content.slice(0,t.length))+"...",513),[[Kn,t.content.length>t.length]])]),_:1},8,["content"]),qt(ee("span",null,be(t.content),513),[[Kn,t.content.length<30]])],64)}}}),ute={class:"source"},fte=ee("div",{id:"traffic",style:{width:"400px",height:"250px","margin-bottom":"30px"}},null,-1),cte=ee("div",{id:"proxies",style:{width:"400px",height:"250px"}},null,-1),dte=ie({__name:"ServerOverview",setup(e){let t=$({version:"",bindPort:0,kcpBindPort:0,quicBindPort:0,vhostHTTPPort:0,vhostHTTPSPort:0,tcpmuxHTTPConnectPort:0,subdomainHost:"",maxPoolCount:0,maxPortsPerClient:"",allowPortsStr:"",tlsForce:!1,heartbeatTimeout:0,clientCounts:0,curConns:0,proxyCounts:0});return(()=>{fetch("../api/serverinfo",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value.version=n.version,t.value.bindPort=n.bindPort,t.value.kcpBindPort=n.kcpBindPort,t.value.quicBindPort=n.quicBindPort,t.value.vhostHTTPPort=n.vhostHTTPPort,t.value.vhostHTTPSPort=n.vhostHTTPSPort,t.value.tcpmuxHTTPConnectPort=n.tcpmuxHTTPConnectPort,t.value.subdomainHost=n.subdomainHost,t.value.maxPoolCount=n.maxPoolCount,t.value.maxPortsPerClient=n.maxPortsPerClient,t.value.maxPortsPerClient=="0"&&(t.value.maxPortsPerClient="no limit"),t.value.allowPortsStr=n.allowPortsStr,t.value.tlsForce=n.tlsForce,t.value.heartbeatTimeout=n.heartbeatTimeout,t.value.clientCounts=n.clientCounts,t.value.curConns=n.curConns,t.value.proxyCounts=0,n.proxyTypeCount!=null&&(n.proxyTypeCount.tcp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.tcp),n.proxyTypeCount.udp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.udp),n.proxyTypeCount.http!=null&&(t.value.proxyCounts+=n.proxyTypeCount.http),n.proxyTypeCount.https!=null&&(t.value.proxyCounts+=n.proxyTypeCount.https),n.proxyTypeCount.stcp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.stcp),n.proxyTypeCount.sudp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.sudp),n.proxyTypeCount.xtcp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.xtcp)),ote("traffic",n.totalTrafficIn,n.totalTrafficOut),ste("proxies",n)}).catch(()=>{Wl({showClose:!0,message:"Get server info from frps failed!",type:"warning"})})})(),(n,i)=>{const a=sA,o=oA,s=$A,l=FA;return G(),ce("div",null,[Z(l,null,{default:j(()=>[Z(s,{md:12},{default:j(()=>[ee("div",ute,[Z(o,{"label-position":"left","label-width":"220px",class:"server_info"},{default:j(()=>[Z(a,{label:"Version"},{default:j(()=>[ee("span",null,be(T(t).version),1)]),_:1}),Z(a,{label:"BindPort"},{default:j(()=>[ee("span",null,be(T(t).bindPort),1)]),_:1}),T(t).kcpBindPort!=0?(G(),de(a,{key:0,label:"KCP Bind Port"},{default:j(()=>[ee("span",null,be(T(t).kcpBindPort),1)]),_:1})):Ae("",!0),T(t).quicBindPort!=0?(G(),de(a,{key:1,label:"QUIC Bind Port"},{default:j(()=>[ee("span",null,be(T(t).quicBindPort),1)]),_:1})):Ae("",!0),T(t).vhostHTTPPort!=0?(G(),de(a,{key:2,label:"Http Port"},{default:j(()=>[ee("span",null,be(T(t).vhostHTTPPort),1)]),_:1})):Ae("",!0),T(t).vhostHTTPSPort!=0?(G(),de(a,{key:3,label:"Https Port"},{default:j(()=>[ee("span",null,be(T(t).vhostHTTPSPort),1)]),_:1})):Ae("",!0),T(t).tcpmuxHTTPConnectPort!=0?(G(),de(a,{key:4,label:"TCPMux HTTPConnect Port"},{default:j(()=>[ee("span",null,be(T(t).tcpmuxHTTPConnectPort),1)]),_:1})):Ae("",!0),T(t).subdomainHost!=""?(G(),de(a,{key:5,label:"Subdomain Host"},{default:j(()=>[Z(PC,{content:T(t).subdomainHost,length:30},null,8,["content"])]),_:1})):Ae("",!0),Z(a,{label:"Max PoolCount"},{default:j(()=>[ee("span",null,be(T(t).maxPoolCount),1)]),_:1}),Z(a,{label:"Max Ports Per Client"},{default:j(()=>[ee("span",null,be(T(t).maxPortsPerClient),1)]),_:1}),T(t).allowPortsStr!=""?(G(),de(a,{key:6,label:"Allow Ports"},{default:j(()=>[Z(PC,{content:T(t).allowPortsStr,length:30},null,8,["content"])]),_:1})):Ae("",!0),T(t).tlsForce===!0?(G(),de(a,{key:7,label:"TLS Force"},{default:j(()=>[ee("span",null,be(T(t).tlsForce),1)]),_:1})):Ae("",!0),Z(a,{label:"HeartBeat Timeout"},{default:j(()=>[ee("span",null,be(T(t).heartbeatTimeout),1)]),_:1}),Z(a,{label:"Client Counts"},{default:j(()=>[ee("span",null,be(T(t).clientCounts),1)]),_:1}),Z(a,{label:"Current Connections"},{default:j(()=>[ee("span",null,be(T(t).curConns),1)]),_:1}),Z(a,{label:"Proxy Counts"},{default:j(()=>[ee("span",null,be(T(t).proxyCounts),1)]),_:1})]),_:1})])]),_:1}),Z(s,{md:12},{default:j(()=>[fte,cte]),_:1})]),_:1})])}}});class qs{constructor(t){zt(this,"name");zt(this,"type");zt(this,"annotations");zt(this,"encryption");zt(this,"compression");zt(this,"conns");zt(this,"trafficIn");zt(this,"trafficOut");zt(this,"lastStartTime");zt(this,"lastCloseTime");zt(this,"status");zt(this,"clientVersion");zt(this,"addr");zt(this,"port");zt(this,"customDomains");zt(this,"hostHeaderRewrite");zt(this,"locations");zt(this,"subdomain");var r,n,i,a,o;if(this.name=t.name,this.type="",this.annotations=new Map,(r=t.conf)!=null&&r.annotations)for(const s in t.conf.annotations)this.annotations.set(s,t.conf.annotations[s]);this.encryption=!1,this.compression=!1,this.encryption=((i=(n=t.conf)==null?void 0:n.transport)==null?void 0:i.useEncryption)||this.encryption,this.compression=((o=(a=t.conf)==null?void 0:a.transport)==null?void 0:o.useCompression)||this.compression,this.conns=t.curConns,this.trafficIn=t.todayTrafficIn,this.trafficOut=t.todayTrafficOut,this.lastStartTime=t.lastStartTime,this.lastCloseTime=t.lastCloseTime,this.status=t.status,this.clientVersion=t.clientVersion,this.addr="",this.port=0,this.customDomains="",this.hostHeaderRewrite="",this.locations="",this.subdomain=""}}class hte extends qs{constructor(t){super(t),this.type="tcp",t.conf!=null?(this.addr=":"+t.conf.remotePort,this.port=t.conf.remotePort):(this.addr="",this.port=0)}}class vte extends qs{constructor(t){super(t),this.type="udp",t.conf!=null?(this.addr=":"+t.conf.remotePort,this.port=t.conf.remotePort):(this.addr="",this.port=0)}}class pte extends qs{constructor(t,r,n){super(t),this.type="http",this.port=r,t.conf&&(this.customDomains=t.conf.customDomains||this.customDomains,this.hostHeaderRewrite=t.conf.hostHeaderRewrite,this.locations=t.conf.locations,t.conf.subdomain&&(this.subdomain=`${t.conf.subdomain}.${n}`))}}class gte extends qs{constructor(t,r,n){super(t),this.type="https",this.port=r,t.conf!=null&&(this.customDomains=t.conf.customDomains||this.customDomains,t.conf.subdomain&&(this.subdomain=`${t.conf.subdomain}.${n}`))}}class mte extends qs{constructor(t){super(t),this.type="stcp"}}class yte extends qs{constructor(t){super(t),this.type="sudp"}}const _te=["id"],bte=ie({__name:"Traffic",props:{proxyName:{}},setup(e){const t=e;return(()=>{let n="../api/traffic/"+t.proxyName;fetch(n,{credentials:"include"}).then(i=>i.json()).then(i=>{lte(t.proxyName,i.trafficIn,i.trafficOut)}).catch(i=>{Wl({showClose:!0,message:"Get traffic info failed!"+i,type:"warning"})})})(),(n,i)=>(G(),ce("div",{id:n.proxyName,style:{width:"600px",height:"400px"}},null,8,_te))}}),wte={key:2},Ste={class:"annotation-key"},xte=ie({__name:"ProxyViewExpand",props:{row:{},proxyType:{}},setup(e){const t=e,r=()=>{const n=[];return t.row.annotations&&t.row.annotations.forEach((i,a)=>{n.push({key:a,value:i})}),n};return(n,i)=>{const a=sA,o=oA,s=VA,l=wW;return G(),ce(ft,null,[n.proxyType==="http"||n.proxyType==="https"?(G(),de(o,{key:0,"label-position":"left",inline:"",class:"proxy-table-expand"},{default:j(()=>[Z(a,{label:"Name"},{default:j(()=>[ee("span",null,be(n.row.name),1)]),_:1}),Z(a,{label:"Type"},{default:j(()=>[ee("span",null,be(n.row.type),1)]),_:1}),Z(a,{label:"Domains"},{default:j(()=>[ee("span",null,be(n.row.customDomains),1)]),_:1}),Z(a,{label:"SubDomain"},{default:j(()=>[ee("span",null,be(n.row.subdomain),1)]),_:1}),Z(a,{label:"locations"},{default:j(()=>[ee("span",null,be(n.row.locations),1)]),_:1}),Z(a,{label:"HostRewrite"},{default:j(()=>[ee("span",null,be(n.row.hostHeaderRewrite),1)]),_:1}),Z(a,{label:"Encryption"},{default:j(()=>[ee("span",null,be(n.row.encryption),1)]),_:1}),Z(a,{label:"Compression"},{default:j(()=>[ee("span",null,be(n.row.compression),1)]),_:1}),Z(a,{label:"Last Start"},{default:j(()=>[ee("span",null,be(n.row.lastStartTime),1)]),_:1}),Z(a,{label:"Last Close"},{default:j(()=>[ee("span",null,be(n.row.lastCloseTime),1)]),_:1})]),_:1})):(G(),de(o,{key:1,"label-position":"left",inline:"",class:"proxy-table-expand"},{default:j(()=>[Z(a,{label:"Name"},{default:j(()=>[ee("span",null,be(n.row.name),1)]),_:1}),Z(a,{label:"Type"},{default:j(()=>[ee("span",null,be(n.row.type),1)]),_:1}),Z(a,{label:"Addr"},{default:j(()=>[ee("span",null,be(n.row.addr),1)]),_:1}),Z(a,{label:"Encryption"},{default:j(()=>[ee("span",null,be(n.row.encryption),1)]),_:1}),Z(a,{label:"Compression"},{default:j(()=>[ee("span",null,be(n.row.compression),1)]),_:1}),Z(a,{label:"Last Start"},{default:j(()=>[ee("span",null,be(n.row.lastStartTime),1)]),_:1}),Z(a,{label:"Last Close"},{default:j(()=>[ee("span",null,be(n.row.lastCloseTime),1)]),_:1})]),_:1})),n.row.annotations&&n.row.annotations.size>0?(G(),ce("div",wte,[Z(s),Z(l,{class:"title-text",size:"large"},{default:j(()=>[mt("Annotations")]),_:1}),ee("ul",null,[(G(!0),ce(ft,null,Hp(r(),u=>(G(),ce("li",null,[ee("span",Ste,be(u.key),1),ee("span",null,be(u.value),1)]))),256))])])):Ae("",!0)],64)}}}),Cte={class:"flex items-center",style:{"margin-right":"30px"}},Ks=ie({__name:"ProxyView",props:{proxies:{},proxyType:{}},emits:["refresh"],setup(e,{emit:t}){const r=t,n=$(!1),i=$(""),a=(l,u)=>Mu.fileSize(l.trafficIn),o=(l,u)=>Mu.fileSize(l.trafficOut),s=()=>{fetch("../api/proxies?status=offline",{method:"DELETE",credentials:"include"}).then(l=>{l.ok?(Wl({message:"Successfully cleared offline proxies",type:"success"}),r("refresh")):Wl({message:"Failed to clear offline proxies: "+l.status+" "+l.statusText,type:"warning"})}).catch(l=>{Wl({message:"Failed to clear offline proxies: "+l.message,type:"warning"})})};return(l,u)=>{const f=yg,c=eV,h=q6,d=gW,v=N8,p=pW,m=bte,g=p6;return G(),ce(ft,null,[ee("div",null,[Z(h,{icon:null,style:{width:"100%","margin-left":"30px","margin-bottom":"20px"}},{title:j(()=>[ee("span",null,be(l.proxyType),1)]),content:j(()=>[]),extra:j(()=>[ee("div",Cte,[Z(c,{title:"Are you sure to clear all data of offline proxies?",onConfirm:s},{reference:j(()=>[Z(f,null,{default:j(()=>[mt("ClearOfflineProxies")]),_:1})]),_:1}),Z(f,{onClick:u[0]||(u[0]=y=>l.$emit("refresh"))},{default:j(()=>[mt("Refresh")]),_:1})])]),_:1}),Z(p,{data:l.proxies,"default-sort":{prop:"name",order:"ascending"},style:{width:"100%"}},{default:j(()=>[Z(d,{type:"expand"},{default:j(y=>[Z(xte,{row:y.row,proxyType:l.proxyType},null,8,["row","proxyType"])]),_:1}),Z(d,{label:"Name",prop:"name",sortable:""}),Z(d,{label:"Port",prop:"port",sortable:""}),Z(d,{label:"Connections",prop:"conns",sortable:""}),Z(d,{label:"Traffic In",prop:"trafficIn",formatter:a,sortable:""}),Z(d,{label:"Traffic Out",prop:"trafficOut",formatter:o,sortable:""}),Z(d,{label:"ClientVersion",prop:"clientVersion",sortable:""}),Z(d,{label:"Status",prop:"status",sortable:""},{default:j(y=>[y.row.status==="online"?(G(),de(v,{key:0,type:"success"},{default:j(()=>[mt(be(y.row.status),1)]),_:2},1024)):(G(),de(v,{key:1,type:"danger"},{default:j(()=>[mt(be(y.row.status),1)]),_:2},1024))]),_:1}),Z(d,{label:"Operations"},{default:j(y=>[Z(f,{type:"primary",name:y.row.name,style:{"margin-bottom":"10px"},onClick:_=>{i.value=y.row.name,n.value=!0}},{default:j(()=>[mt("Traffic ")]),_:2},1032,["name","onClick"])]),_:1})]),_:1},8,["data"])]),Z(g,{modelValue:n.value,"onUpdate:modelValue":u[1]||(u[1]=y=>n.value=y),"destroy-on-close":"true",title:i.value,width:"700px"},{default:j(()=>[Z(m,{proxyName:i.value},null,8,["proxyName"])]),_:1},8,["modelValue","title"])],64)}}}),Tte=ie({__name:"ProxiesTCP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/tcp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new hte(i))})};return r(),(n,i)=>(G(),de(Ks,{proxies:T(t),proxyType:"tcp",onRefresh:r},null,8,["proxies"]))}}),Mte=ie({__name:"ProxiesUDP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/udp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new vte(i))})};return r(),(n,i)=>(G(),de(Ks,{proxies:T(t),proxyType:"udp",onRefresh:r},null,8,["proxies"]))}}),Ate=ie({__name:"ProxiesHTTP",setup(e){let t=$([]);const r=()=>{let n,i;fetch("../api/serverinfo",{credentials:"include"}).then(a=>a.json()).then(a=>{n=a.vhostHTTPPort,i=a.subdomainHost,!(n==null||n==0)&&fetch("../api/proxy/http",{credentials:"include"}).then(o=>o.json()).then(o=>{t.value=[];for(let s of o.proxies)t.value.push(new pte(s,n,i))})})};return r(),(n,i)=>(G(),de(Ks,{proxies:T(t),proxyType:"http",onRefresh:r},null,8,["proxies"]))}}),Pte=ie({__name:"ProxiesHTTPS",setup(e){let t=$([]);const r=()=>{let n,i;fetch("../api/serverinfo",{credentials:"include"}).then(a=>a.json()).then(a=>{n=a.vhostHTTPSPort,i=a.subdomainHost,!(n==null||n==0)&&fetch("../api/proxy/https",{credentials:"include"}).then(o=>o.json()).then(o=>{t.value=[];for(let s of o.proxies)t.value.push(new gte(s,n,i))})})};return r(),(n,i)=>(G(),de(Ks,{proxies:T(t),proxyType:"https",onRefresh:r},null,8,["proxies"]))}}),Ete=ie({__name:"ProxiesSTCP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/stcp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new mte(i))})};return r(),(n,i)=>(G(),de(Ks,{proxies:T(t),proxyType:"stcp",onRefresh:r},null,8,["proxies"]))}}),Lte=ie({__name:"ProxiesSUDP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/sudp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new yte(i))})};return r(),(n,i)=>(G(),de(Ks,{proxies:T(t),proxyType:"sudp",onRefresh:r},null,8,["proxies"]))}}),Dte=jG({history:uG(),routes:[{path:"/",name:"ServerOverview",component:dte},{path:"/proxies/tcp",name:"ProxiesTCP",component:Tte},{path:"/proxies/udp",name:"ProxiesUDP",component:Mte},{path:"/proxies/http",name:"ProxiesHTTP",component:Ate},{path:"/proxies/https",name:"ProxiesHTTPS",component:Pte},{path:"/proxies/stcp",name:"ProxiesSTCP",component:Ete},{path:"/proxies/sudp",name:"ProxiesSUDP",component:Lte}]}),MD=oR(GW);MD.use(Dte);MD.mount("#app")});export default Ite(); +`:"
",g=c.join(m);this._showOrMove(s,function(){this._updateContentNotChangedOnAxis(r,u)?this._updatePosition(s,d,o[0],o[1],this._tooltipContent,u):this._showTooltipContent(s,g,u,Math.random()+"",o[0],o[1],d,null,h)})},t.prototype._showSeriesItemTooltip=function(r,n,i){var a=this._ecModel,o=dt(n),s=o.seriesIndex,l=a.getSeriesByIndex(s),u=o.dataModel||l,f=o.dataIndex,c=o.dataType,h=u.getData(c),d=this._renderMode,v=r.positionDefault,p=bl([h.getItemModel(f),u,l&&(l.coordinateSystem||{}).model],this._tooltipModel,v?{position:v}:null),m=p.get("trigger");if(!(m!=null&&m!=="item")){var g=u.getDataParams(f,c),y=new up;g.marker=y.makeTooltipMarker("item",ku(g.color),d);var _=FS(u.formatTooltip(f,!1,c)),b=p.get("order"),x=p.get("valueFormatter"),w=_.frag,S=w?WS(x?ue({valueFormatter:x},w):w,y,d,b,a.get("useUTC"),p.get("textStyle")):_.text,C="item_"+u.name+"_"+f;this._showOrMove(p,function(){this._showTooltipContent(p,S,g,C,r.offsetX,r.offsetY,r.position,r.target,y)}),i({type:"showTip",dataIndexInside:f,dataIndex:h.getRawIndex(f),seriesIndex:s,from:this.uid})}},t.prototype._showComponentItemTooltip=function(r,n,i){var a=dt(n),o=a.tooltipConfig,s=o.option||{};if(Ee(s)){var l=s;s={content:l,formatter:l}}var u=[s],f=this._ecModel.getComponent(a.componentMainType,a.componentIndex);f&&u.push(f),u.push({formatter:s.content});var c=r.positionDefault,h=bl(u,this._tooltipModel,c?{position:c}:null),d=h.get("content"),v=Math.random()+"",p=new up;this._showOrMove(h,function(){var m=tt(h.get("formatterParams")||{});this._showTooltipContent(h,d,m,v,r.offsetX,r.offsetY,r.position,n,p)}),i({type:"showTip",from:this.uid})},t.prototype._showTooltipContent=function(r,n,i,a,o,s,l,u,f){if(this._ticket="",!(!r.get("showContent")||!r.get("show"))){var c=this._tooltipContent;c.setEnterable(r.get("enterable"));var h=r.get("formatter");l=l||r.get("position");var d=n,v=this._getNearestPoint([o,s],i,r.get("trigger"),r.get("borderColor")),p=v.color;if(h)if(Ee(h)){var m=r.ecModel.get("useUTC"),g=ye(i)?i[0]:i,y=g&&g.axisType&&g.axisType.indexOf("time")>=0;d=h,y&&(d=Ph(g.axisValue,d,m)),d=pE(d,i,!0)}else if(Ye(h)){var _=xt(function(b,x){b===this._ticket&&(c.setContent(x,f,r,p,l),this._updatePosition(r,l,o,s,c,i,u))},this);this._ticket=a,d=h(i,a,_)}else d=h;c.setContent(d,f,r,p,l),c.show(r,p),this._updatePosition(r,l,o,s,c,i,u)}},t.prototype._getNearestPoint=function(r,n,i,a){if(i==="axis"||ye(n))return{color:a||(this._renderMode==="html"?"#fff":"none")};if(!ye(n))return{color:a||n.color||n.borderColor}},t.prototype._updatePosition=function(r,n,i,a,o,s,l){var u=this._api.getWidth(),f=this._api.getHeight();n=n||r.get("position");var c=o.getSize(),h=r.get("align"),d=r.get("verticalAlign"),v=l&&l.getBoundingRect().clone();if(l&&v.applyTransform(l.transform),Ye(n)&&(n=n([i,a],s,o.el,v,{viewSize:[u,f],contentSize:c.slice()})),ye(n))i=yt(n[0],u),a=yt(n[1],f);else if(Re(n)){var p=n;p.width=c[0],p.height=c[1];var m=Is(p,{width:u,height:f});i=m.x,a=m.y,h=null,d=null}else if(Ee(n)&&l){var g=$ee(n,v,c,r.get("borderWidth"));i=g[0],a=g[1]}else{var g=Bee(i,a,o,u,f,h?null:20,d?null:20);i=g[0],a=g[1]}if(h&&(i-=CC(h)?c[0]/2:h==="right"?c[0]:0),d&&(a-=CC(d)?c[1]/2:d==="bottom"?c[1]:0),_D(r)){var g=Fee(i,a,o,u,f);i=g[0],a=g[1]}o.moveTo(i,a)},t.prototype._updateContentNotChangedOnAxis=function(r,n){var i=this._lastDataByCoordSys,a=this._cbParamsList,o=!!i&&i.length===r.length;return o&&R(i,function(s,l){var u=s.dataByAxis||[],f=r[l]||{},c=f.dataByAxis||[];o=o&&u.length===c.length,o&&R(u,function(h,d){var v=c[d]||{},p=h.seriesDataIndices||[],m=v.seriesDataIndices||[];o=o&&h.value===v.value&&h.axisType===v.axisType&&h.axisId===v.axisId&&p.length===m.length,o&&R(p,function(g,y){var _=m[y];o=o&&g.seriesIndex===_.seriesIndex&&g.dataIndex===_.dataIndex}),a&&R(h.seriesDataIndices,function(g){var y=g.seriesIndex,_=n[y],b=a[y];_&&b&&b.data!==_.data&&(o=!1)})})}),this._lastDataByCoordSys=r,this._cbParamsList=n,!!o},t.prototype._hide=function(r){this._lastDataByCoordSys=null,r({type:"hideTip",from:this.uid})},t.prototype.dispose=function(r,n){He.node||!n.getDom()||(wm(this,"_updatePosition"),this._tooltipContent.dispose(),Fm("itemTooltip",n))},t.type="tooltip",t}(Mi);function bl(e,t,r){var n=t.ecModel,i;r?(i=new sr(r,n,n),i=new sr(t.option,i,n)):i=t;for(var a=e.length-1;a>=0;a--){var o=e[a];o&&(o instanceof sr&&(o=o.get("tooltip",!0)),Ee(o)&&(o={formatter:o}),o&&(i=new sr(o,i,n)))}return i}function xC(e,t){return e.dispatchAction||xt(t.dispatchAction,t)}function Bee(e,t,r,n,i,a,o){var s=r.getSize(),l=s[0],u=s[1];return a!=null&&(e+l+a+2>n?e-=l+a:e+=a),o!=null&&(t+u+o>i?t-=u+o:t+=o),[e,t]}function Fee(e,t,r,n,i){var a=r.getSize(),o=a[0],s=a[1];return e=Math.min(e+o,n)-o,t=Math.min(t+s,i)-s,e=Math.max(e,0),t=Math.max(t,0),[e,t]}function $ee(e,t,r,n){var i=r[0],a=r[1],o=Math.ceil(Math.SQRT2*n)+8,s=0,l=0,u=t.width,f=t.height;switch(e){case"inside":s=t.x+u/2-i/2,l=t.y+f/2-a/2;break;case"top":s=t.x+u/2-i/2,l=t.y-a-o;break;case"bottom":s=t.x+u/2-i/2,l=t.y+f+o;break;case"left":s=t.x-i-o,l=t.y+f/2-a/2;break;case"right":s=t.x+u+o,l=t.y+f/2-a/2}return[s,l]}function CC(e){return e==="center"||e==="middle"}function Hee(e,t,r){var n=v0(e).queryOptionMap,i=n.keys()[0];if(!(!i||i==="series")){var a=lf(t,i,n.get(i),{useDefault:!1,enableAll:!1,enableNone:!1}),o=a.models[0];if(o){var s=r.getViewOfComponentModel(o),l;if(s.group.traverse(function(u){var f=dt(u).tooltipConfig;if(f&&f.name===e.name)return l=u,!0}),l)return{componentMainType:i,componentIndex:o.componentIndex,el:l}}}}const zee=Nee;function Vee(e){va(yD),e.registerComponentModel(See),e.registerComponentView(zee),e.registerAction({type:"showTip",event:"showTip",update:"tooltip:manuallyShowTip"},Er),e.registerAction({type:"hideTip",event:"hideTip",update:"tooltip:manuallyHideTip"},Er)}var Wee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.layoutMode={type:"box",ignoreSize:!0},r}return t.type="title",t.defaultOption={z:6,show:!0,text:"",target:"blank",subtext:"",subtarget:"blank",left:0,top:0,backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bold",color:"#464646"},subtextStyle:{fontSize:12,color:"#6E7079"}},t}(Mt),Gee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r}return t.prototype.render=function(r,n,i){if(this.group.removeAll(),!!r.get("show")){var a=this.group,o=r.getModel("textStyle"),s=r.getModel("subtextStyle"),l=r.get("textAlign"),u=Ze(r.get("textBaseline"),r.get("textVerticalAlign")),f=new mr({style:ha(o,{text:r.get("text"),fill:o.getTextColor()},{disableBox:!0}),z2:10}),c=f.getBoundingRect(),h=r.get("subtext"),d=new mr({style:ha(s,{text:h,fill:s.getTextColor(),y:c.height+r.get("itemGap"),verticalAlign:"top"},{disableBox:!0}),z2:10}),v=r.get("link"),p=r.get("sublink"),m=r.get("triggerEvent",!0);f.silent=!v&&!m,d.silent=!p&&!m,v&&f.on("click",function(){bS(v,"_"+r.get("target"))}),p&&d.on("click",function(){bS(p,"_"+r.get("subtarget"))}),dt(f).eventData=dt(d).eventData=m?{componentType:"title",componentIndex:r.componentIndex}:null,a.add(f),h&&a.add(d);var g=a.getBoundingRect(),y=r.getBoxLayoutParams();y.width=g.width,y.height=g.height;var _=Is(y,{width:i.getWidth(),height:i.getHeight()},r.get("padding"));l||(l=r.get("left")||r.get("right"),l==="middle"&&(l="center"),l==="right"?_.x+=_.width:l==="center"&&(_.x+=_.width/2)),u||(u=r.get("top")||r.get("bottom"),u==="center"&&(u="middle"),u==="bottom"?_.y+=_.height:u==="middle"&&(_.y+=_.height/2),u=u||"top"),a.x=_.x,a.y=_.y,a.markRedraw();var b={align:l,verticalAlign:u};f.setStyle(b),d.setStyle(b),g=a.getBoundingRect();var x=_.margin,w=r.getItemStyle(["color","opacity"]);w.fill=r.get("backgroundColor");var S=new Gt({shape:{x:g.x-x[3],y:g.y-x[0],width:g.width+x[1]+x[3],height:g.height+x[0]+x[2],r:r.get("borderRadius")},style:w,subPixelOptimize:!0,silent:!0});a.add(S)}},t.type="title",t}(Mi);function Uee(e){e.registerComponentModel(Wee),e.registerComponentView(Gee)}var Yee=function(e,t){if(t==="all")return{type:"all",title:e.getLocaleModel().get(["legend","selector","all"])};if(t==="inverse")return{type:"inverse",title:e.getLocaleModel().get(["legend","selector","inverse"])}},jee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.layoutMode={type:"box",ignoreSize:!0},r}return t.prototype.init=function(r,n,i){this.mergeDefaultAndTheme(r,i),r.selected=r.selected||{},this._updateSelector(r)},t.prototype.mergeOption=function(r,n){e.prototype.mergeOption.call(this,r,n),this._updateSelector(r)},t.prototype._updateSelector=function(r){var n=r.selector,i=this.ecModel;n===!0&&(n=r.selector=["all","inverse"]),ye(n)&&R(n,function(a,o){Ee(a)&&(a={type:a}),n[o]=st(a,Yee(i,a.type))})},t.prototype.optionUpdated=function(){this._updateData(this.ecModel);var r=this._data;if(r[0]&&this.get("selectedMode")==="single"){for(var n=!1,i=0;i=0},t.prototype.getOrient=function(){return this.get("orient")==="vertical"?{index:1,name:"vertical"}:{index:0,name:"horizontal"}},t.type="legend.plain",t.dependencies=["series"],t.defaultOption={z:4,show:!0,orient:"horizontal",left:"center",top:0,align:"auto",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderRadius:0,borderWidth:0,padding:5,itemGap:10,itemWidth:25,itemHeight:14,symbolRotate:"inherit",symbolKeepAspect:!0,inactiveColor:"#ccc",inactiveBorderColor:"#ccc",inactiveBorderWidth:"auto",itemStyle:{color:"inherit",opacity:"inherit",borderColor:"inherit",borderWidth:"auto",borderCap:"inherit",borderJoin:"inherit",borderDashOffset:"inherit",borderMiterLimit:"inherit"},lineStyle:{width:"auto",color:"inherit",inactiveColor:"#ccc",inactiveWidth:2,opacity:"inherit",type:"inherit",cap:"inherit",join:"inherit",dashOffset:"inherit",miterLimit:"inherit"},textStyle:{color:"#333"},selectedMode:!0,selector:!1,selectorLabel:{show:!0,borderRadius:10,padding:[3,5,3,5],fontSize:12,fontFamily:"sans-serif",color:"#666",borderWidth:1,borderColor:"#666"},emphasis:{selectorLabel:{show:!0,color:"#eee",backgroundColor:"#666"}},selectorPosition:"auto",selectorItemGap:7,selectorButtonGap:10,tooltip:{show:!1}},t}(Mt);const $m=jee;var Ko=Rt,Hm=R,wc=Ur,qee=function(e){ge(t,e);function t(){var r=e!==null&&e.apply(this,arguments)||this;return r.type=t.type,r.newlineDisabled=!1,r}return t.prototype.init=function(){this.group.add(this._contentGroup=new wc),this.group.add(this._selectorGroup=new wc),this._isFirstRender=!0},t.prototype.getContentGroup=function(){return this._contentGroup},t.prototype.getSelectorGroup=function(){return this._selectorGroup},t.prototype.render=function(r,n,i){var a=this._isFirstRender;if(this._isFirstRender=!1,this.resetInner(),!!r.get("show",!0)){var o=r.get("align"),s=r.get("orient");(!o||o==="auto")&&(o=r.get("left")==="right"&&s==="vertical"?"right":"left");var l=r.get("selector",!0),u=r.get("selectorPosition",!0);l&&(!u||u==="auto")&&(u=s==="horizontal"?"end":"start"),this.renderInner(o,r,n,i,l,s,u);var f=r.getBoxLayoutParams(),c={width:i.getWidth(),height:i.getHeight()},h=r.get("padding"),d=Is(f,c,h),v=this.layoutInner(r,o,d,a,l,u),p=Is(ht({width:v.width,height:v.height},f),c,h);this.group.x=p.x-v.x,this.group.y=p.y-v.y,this.group.markRedraw(),this.group.add(this._backgroundEl=bee(v,r))}},t.prototype.resetInner=function(){this.getContentGroup().removeAll(),this._backgroundEl&&this.group.remove(this._backgroundEl),this.getSelectorGroup().removeAll()},t.prototype.renderInner=function(r,n,i,a,o,s,l){var u=this.getContentGroup(),f=je(),c=n.get("selectedMode"),h=[];i.eachRawSeries(function(d){!d.get("legendHoverLink")&&h.push(d.id)}),Hm(n.getData(),function(d,v){var p=d.get("name");if(!this.newlineDisabled&&(p===""||p===` +`)){var m=new wc;m.newline=!0,u.add(m);return}var g=i.getSeriesByName(p)[0];if(!f.get(p))if(g){var y=g.getData(),_=y.getVisual("legendLineStyle")||{},b=y.getVisual("legendIcon"),x=y.getVisual("style"),w=this._createItem(g,p,v,d,n,r,_,x,b,c,a);w.on("click",Ko(TC,p,null,a,h)).on("mouseover",Ko(zm,g.name,null,a,h)).on("mouseout",Ko(Vm,g.name,null,a,h)),f.set(p,!0)}else i.eachRawSeries(function(S){if(!f.get(p)&&S.legendVisualProvider){var C=S.legendVisualProvider;if(!C.containName(p))return;var M=C.indexOfName(p),A=C.getItemVisual(M,"style"),P=C.getItemVisual(M,"legendIcon"),E=uo(A.fill);E&&E[3]===0&&(E[3]=.2,A=ue(ue({},A),{fill:s0(E,"rgba")}));var L=this._createItem(S,p,v,d,n,r,{},A,P,c,a);L.on("click",Ko(TC,null,p,a,h)).on("mouseover",Ko(zm,null,p,a,h)).on("mouseout",Ko(Vm,null,p,a,h)),f.set(p,!0)}},this)},this),o&&this._createSelector(o,n,a,s,l)},t.prototype._createSelector=function(r,n,i,a,o){var s=this.getSelectorGroup();Hm(r,function(u){var f=u.type,c=new mr({style:{x:0,y:0,align:"center",verticalAlign:"middle"},onclick:function(){i.dispatchAction({type:f==="all"?"legendAllSelect":"legendInverseSelect"})}});s.add(c);var h=n.getModel("selectorLabel"),d=n.getModel(["emphasis","selectorLabel"]);E0(c,{normal:h,emphasis:d},{defaultText:u.title}),um(c)})},t.prototype._createItem=function(r,n,i,a,o,s,l,u,f,c,h){var d=r.visualDrawType,v=o.get("itemWidth"),p=o.get("itemHeight"),m=o.isSelected(n),g=a.get("symbolRotate"),y=a.get("symbolKeepAspect"),_=a.get("icon");f=_||f||"roundRect";var b=Kee(f,a,l,u,d,m,h),x=new wc,w=a.getModel("textStyle");if(Ye(r.getLegendIcon)&&(!_||_==="inherit"))x.add(r.getLegendIcon({itemWidth:v,itemHeight:p,icon:f,iconRotate:g,itemStyle:b.itemStyle,lineStyle:b.lineStyle,symbolKeepAspect:y}));else{var S=_==="inherit"&&r.getData().getVisual("symbol")?g==="inherit"?r.getData().getVisual("symbolRotate"):g:0;x.add(Xee({itemWidth:v,itemHeight:p,icon:f,iconRotate:S,itemStyle:b.itemStyle,lineStyle:b.lineStyle,symbolKeepAspect:y}))}var C=s==="left"?v+5:-5,M=s,A=o.get("formatter"),P=n;Ee(A)&&A?P=A.replace("{name}",n??""):Ye(A)&&(P=A(n));var E=m?w.getTextColor():a.get("inactiveColor");x.add(new mr({style:ha(w,{text:P,x:C,y:p/2,fill:E,align:M,verticalAlign:"middle"},{inheritColor:E})}));var L=new Gt({shape:x.getBoundingRect(),invisible:!0}),O=a.getModel("tooltip");return O.get("show")&&A0({el:L,componentModel:o,itemName:n,itemTooltipOption:O.option}),x.add(L),x.eachChild(function(N){N.silent=!0}),L.silent=!c,this.getContentGroup().add(x),um(x),x.__legendDataIndex=i,x},t.prototype.layoutInner=function(r,n,i,a,o,s){var l=this.getContentGroup(),u=this.getSelectorGroup();ru(r.get("orient"),l,r.get("itemGap"),i.width,i.height);var f=l.getBoundingRect(),c=[-f.x,-f.y];if(u.markRedraw(),l.markRedraw(),o){ru("horizontal",u,r.get("selectorItemGap",!0));var h=u.getBoundingRect(),d=[-h.x,-h.y],v=r.get("selectorButtonGap",!0),p=r.getOrient().index,m=p===0?"width":"height",g=p===0?"height":"width",y=p===0?"y":"x";s==="end"?d[p]+=f[m]+v:c[p]+=h[m]+v,d[1-p]+=f[g]/2-h[g]/2,u.x=d[0],u.y=d[1],l.x=c[0],l.y=c[1];var _={x:0,y:0};return _[m]=f[m]+v+h[m],_[g]=Math.max(f[g],h[g]),_[y]=Math.min(0,h[y]+d[1-p]),_}else return l.x=c[0],l.y=c[1],this.group.getBoundingRect()},t.prototype.remove=function(){this.getContentGroup().removeAll(),this._isFirstRender=!0},t.type="legend.plain",t}(Mi);function Kee(e,t,r,n,i,a,o){function s(m,g){m.lineWidth==="auto"&&(m.lineWidth=g.lineWidth>0?2:0),Hm(m,function(y,_){m[_]==="inherit"&&(m[_]=g[_])})}var l=t.getModel("itemStyle"),u=l.getItemStyle(),f=e.lastIndexOf("empty",0)===0?"fill":"stroke",c=l.getShallow("decal");u.decal=!c||c==="inherit"?n.decal:Mm(c,o),u.fill==="inherit"&&(u.fill=n[i]),u.stroke==="inherit"&&(u.stroke=n[f]),u.opacity==="inherit"&&(u.opacity=(i==="fill"?n:r).opacity),s(u,n);var h=t.getModel("lineStyle"),d=h.getLineStyle();if(s(d,r),u.fill==="auto"&&(u.fill=n.fill),u.stroke==="auto"&&(u.stroke=n.fill),d.stroke==="auto"&&(d.stroke=n.fill),!a){var v=t.get("inactiveBorderWidth"),p=u[f];u.lineWidth=v==="auto"?n.lineWidth>0&&p?2:0:u.lineWidth,u.fill=t.get("inactiveColor"),u.stroke=t.get("inactiveBorderColor"),d.stroke=h.get("inactiveColor"),d.lineWidth=h.get("inactiveWidth")}return{itemStyle:u,lineStyle:d}}function Xee(e){var t=e.icon||"roundRect",r=j0(t,0,0,e.itemWidth,e.itemHeight,e.itemStyle.fill,e.symbolKeepAspect);return r.setStyle(e.itemStyle),r.rotation=(e.iconRotate||0)*Math.PI/180,r.setOrigin([e.itemWidth/2,e.itemHeight/2]),t.indexOf("empty")>-1&&(r.style.stroke=r.style.fill,r.style.fill="#fff",r.style.lineWidth=2),r}function TC(e,t,r,n){Vm(e,t,r,n),r.dispatchAction({type:"legendToggleSelect",name:e??t}),zm(e,t,r,n)}function xD(e){for(var t=e.getZr().storage.getDisplayList(),r,n=0,i=t.length;ni[o],m=[-d.x,-d.y];n||(m[a]=f[u]);var g=[0,0],y=[-v.x,-v.y],_=Ze(r.get("pageButtonGap",!0),r.get("itemGap",!0));if(p){var b=r.get("pageButtonPosition",!0);b==="end"?y[a]+=i[o]-v[o]:g[a]+=v[o]+_}y[1-a]+=d[s]/2-v[s]/2,f.setPosition(m),c.setPosition(g),h.setPosition(y);var x={x:0,y:0};if(x[o]=p?i[o]:d[o],x[s]=Math.max(d[s],v[s]),x[l]=Math.min(0,v[l]+y[1-a]),c.__rectSize=i[o],p){var w={x:0,y:0};w[o]=Math.max(i[o]-v[o]-_,0),w[s]=x[s],c.setClipPath(new Gt({shape:w})),c.__rectSize=w[o]}else h.eachChild(function(C){C.attr({invisible:!0,silent:!0})});var S=this._getPageInfo(r);return S.pageIndex!=null&&Or(f,{x:S.contentPosition[0],y:S.contentPosition[1]},p?r:null),this._updatePageInfoView(r,S),x},t.prototype._pageGo=function(r,n,i){var a=this._getPageInfo(n)[r];a!=null&&i.dispatchAction({type:"legendScroll",scrollDataIndex:a,legendId:n.id})},t.prototype._updatePageInfoView=function(r,n){var i=this._controllerGroup;R(["pagePrev","pageNext"],function(f){var c=f+"DataIndex",h=n[c]!=null,d=i.childOfName(f);d&&(d.setStyle("fill",h?r.get("pageIconColor",!0):r.get("pageIconInactiveColor",!0)),d.cursor=h?"pointer":"default")});var a=i.childOfName("pageText"),o=r.get("pageFormatter"),s=n.pageIndex,l=s!=null?s+1:0,u=n.pageCount;a&&o&&a.setStyle("text",Ee(o)?o.replace("{current}",l==null?"":l+"").replace("{total}",u==null?"":u+""):o({current:l,total:u}))},t.prototype._getPageInfo=function(r){var n=r.get("scrollDataIndex",!0),i=this.getContentGroup(),a=this._containerGroup.__rectSize,o=r.getOrient().index,s=Rp[o],l=kp[o],u=this._findTargetItemIndex(n),f=i.children(),c=f[u],h=f.length,d=h?1:0,v={contentPosition:[i.x,i.y],pageCount:d,pageIndex:d-1,pagePrevDataIndex:null,pageNextDataIndex:null};if(!c)return v;var p=b(c);v.contentPosition[o]=-p.s;for(var m=u+1,g=p,y=p,_=null;m<=h;++m)_=b(f[m]),(!_&&y.e>g.s+a||_&&!x(_,g.s))&&(y.i>g.i?g=y:g=_,g&&(v.pageNextDataIndex==null&&(v.pageNextDataIndex=g.i),++v.pageCount)),y=_;for(var m=u-1,g=p,y=p,_=null;m>=-1;--m)_=b(f[m]),(!_||!x(y,_.s))&&g.i=S&&w.s<=S+a}},t.prototype._findTargetItemIndex=function(r){if(!this._showController)return 0;var n,i=this.getContentGroup(),a;return i.eachChild(function(o,s){var l=o.__legendDataIndex;a==null&&l!=null&&(a=s),l===r&&(n=s)}),n??a},t.type="legend.scroll",t}(CD);const rte=tte;function nte(e){e.registerAction("legendScroll","legendscroll",function(t,r){var n=t.scrollDataIndex;n!=null&&r.eachComponent({mainType:"legend",subType:"scroll",query:t},function(i){i.setScrollDataIndex(n)})})}function ite(e){va(TD),e.registerComponentModel(ete),e.registerComponentView(rte),nte(e)}function ate(e){va(TD),va(ite)}va([tJ,$Q,GJ,vQ,Uee,Vee,ate,_ee]);function ote(e,t,r){const n=Z0(document.getElementById(e),"macarons");n.showLoading();const i={title:{text:"Network Traffic",subtext:"today",left:"center"},tooltip:{trigger:"item",formatter:function(a){return Mu.fileSize(a.data.value)+" ("+a.percent+"%)"}},legend:{orient:"vertical",left:"left",data:["Traffic In","Traffic Out"]},series:[{type:"pie",radius:"55%",center:["50%","60%"],data:[{value:t,name:"Traffic In"},{value:r,name:"Traffic Out"}],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]};n.setOption(i),n.hideLoading()}function ste(e,t){const r=Z0(document.getElementById(e),"macarons");r.showLoading();const n={title:{text:"Proxies",subtext:"now",left:"center"},tooltip:{trigger:"item",formatter:function(i){return String(i.data.value)}},legend:{orient:"vertical",left:"left",data:[]},series:[{type:"pie",radius:"55%",center:["50%","60%"],data:[],emphasis:{itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]};t.proxyTypeCount.tcp!=null&&t.proxyTypeCount.tcp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.tcp,name:"TCP"}),n.legend.data.push("TCP")),t.proxyTypeCount.udp!=null&&t.proxyTypeCount.udp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.udp,name:"UDP"}),n.legend.data.push("UDP")),t.proxyTypeCount.http!=null&&t.proxyTypeCount.http!=0&&(n.series[0].data.push({value:t.proxyTypeCount.http,name:"HTTP"}),n.legend.data.push("HTTP")),t.proxyTypeCount.https!=null&&t.proxyTypeCount.https!=0&&(n.series[0].data.push({value:t.proxyTypeCount.https,name:"HTTPS"}),n.legend.data.push("HTTPS")),t.proxyTypeCount.stcp!=null&&t.proxyTypeCount.stcp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.stcp,name:"STCP"}),n.legend.data.push("STCP")),t.proxyTypeCount.sudp!=null&&t.proxyTypeCount.sudp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.sudp,name:"SUDP"}),n.legend.data.push("SUDP")),t.proxyTypeCount.xtcp!=null&&t.proxyTypeCount.xtcp!=0&&(n.series[0].data.push({value:t.proxyTypeCount.xtcp,name:"XTCP"}),n.legend.data.push("XTCP")),r.setOption(n),r.hideLoading()}function lte(e,t,r){const n={width:"600px",height:"400px"},i=Z0(document.getElementById(e),"macarons",n);i.showLoading(),t=t.reverse(),r=r.reverse();let a=new Date;a=new Date(a.getFullYear(),a.getMonth(),a.getDate()-6);const o=[];for(let l=0;l<7;l++)o.push(a.getFullYear()+"-"+(a.getMonth()+1)+"-"+a.getDate()),a=new Date(a.getFullYear(),a.getMonth(),a.getDate()+1);const s={tooltip:{trigger:"axis",axisPointer:{type:"shadow"},formatter:function(l){let u="";l.length>0&&(u+=l[0].name+"
");for(const f of l){const c='';u+=c+f.seriesName+": "+Mu.fileSize(f.value)+"
"}return u}},legend:{data:["Traffic In","Traffic Out"]},grid:{left:"3%",right:"4%",bottom:"3%",containLabel:!0},xAxis:[{type:"category",data:o}],yAxis:[{type:"value",axisLabel:{formatter:function(l){return Mu.fileSize(l)}}}],series:[{name:"Traffic In",type:"bar",data:t},{name:"Traffic Out",type:"bar",data:r}]};i.setOption(s),i.hideLoading()}const PC=ie({__name:"LongSpan",props:{content:{},length:{}},setup(e){return(t,r)=>{const n=Vs;return G(),ce(ft,null,[Z(n,{content:t.content,placement:"top"},{default:q(()=>[qt(te("span",null,xe(t.content.slice(0,t.length))+"...",513),[[Kn,t.content.length>t.length]])]),_:1},8,["content"]),qt(te("span",null,xe(t.content),513),[[Kn,t.content.length<30]])],64)}}}),ute={class:"source"},fte=te("div",{id:"traffic",style:{width:"400px",height:"250px","margin-bottom":"30px"}},null,-1),cte=te("div",{id:"proxies",style:{width:"400px",height:"250px"}},null,-1),dte=ie({__name:"ServerOverview",setup(e){let t=$({version:"",bindPort:0,kcpBindPort:0,quicBindPort:0,vhostHTTPPort:0,vhostHTTPSPort:0,tcpmuxHTTPConnectPort:0,subdomainHost:"",maxPoolCount:0,maxPortsPerClient:"",allowPortsStr:"",tlsForce:!1,heartbeatTimeout:0,clientCounts:0,curConns:0,proxyCounts:0});return(()=>{fetch("../api/serverinfo",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value.version=n.version,t.value.bindPort=n.bindPort,t.value.kcpBindPort=n.kcpBindPort,t.value.quicBindPort=n.quicBindPort,t.value.vhostHTTPPort=n.vhostHTTPPort,t.value.vhostHTTPSPort=n.vhostHTTPSPort,t.value.tcpmuxHTTPConnectPort=n.tcpmuxHTTPConnectPort,t.value.subdomainHost=n.subdomainHost,t.value.maxPoolCount=n.maxPoolCount,t.value.maxPortsPerClient=n.maxPortsPerClient,t.value.maxPortsPerClient=="0"&&(t.value.maxPortsPerClient="no limit"),t.value.allowPortsStr=n.allowPortsStr,t.value.tlsForce=n.tlsForce,t.value.heartbeatTimeout=n.heartbeatTimeout,t.value.clientCounts=n.clientCounts,t.value.curConns=n.curConns,t.value.proxyCounts=0,n.proxyTypeCount!=null&&(n.proxyTypeCount.tcp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.tcp),n.proxyTypeCount.udp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.udp),n.proxyTypeCount.http!=null&&(t.value.proxyCounts+=n.proxyTypeCount.http),n.proxyTypeCount.https!=null&&(t.value.proxyCounts+=n.proxyTypeCount.https),n.proxyTypeCount.stcp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.stcp),n.proxyTypeCount.sudp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.sudp),n.proxyTypeCount.xtcp!=null&&(t.value.proxyCounts+=n.proxyTypeCount.xtcp)),ote("traffic",n.totalTrafficIn,n.totalTrafficOut),ste("proxies",n)}).catch(()=>{Wl({showClose:!0,message:"Get server info from frps failed!",type:"warning"})})})(),(n,i)=>{const a=sA,o=oA,s=$A,l=FA;return G(),ce("div",null,[Z(l,null,{default:q(()=>[Z(s,{md:12},{default:q(()=>[te("div",ute,[Z(o,{"label-position":"left","label-width":"220px",class:"server_info"},{default:q(()=>[Z(a,{label:"Version"},{default:q(()=>[te("span",null,xe(T(t).version),1)]),_:1}),Z(a,{label:"BindPort"},{default:q(()=>[te("span",null,xe(T(t).bindPort),1)]),_:1}),T(t).kcpBindPort!=0?(G(),ve(a,{key:0,label:"KCP Bind Port"},{default:q(()=>[te("span",null,xe(T(t).kcpBindPort),1)]),_:1})):Ae("",!0),T(t).quicBindPort!=0?(G(),ve(a,{key:1,label:"QUIC Bind Port"},{default:q(()=>[te("span",null,xe(T(t).quicBindPort),1)]),_:1})):Ae("",!0),T(t).vhostHTTPPort!=0?(G(),ve(a,{key:2,label:"HTTP Port"},{default:q(()=>[te("span",null,xe(T(t).vhostHTTPPort),1)]),_:1})):Ae("",!0),T(t).vhostHTTPSPort!=0?(G(),ve(a,{key:3,label:"HTTPS Port"},{default:q(()=>[te("span",null,xe(T(t).vhostHTTPSPort),1)]),_:1})):Ae("",!0),T(t).tcpmuxHTTPConnectPort!=0?(G(),ve(a,{key:4,label:"TCPMux HTTPConnect Port"},{default:q(()=>[te("span",null,xe(T(t).tcpmuxHTTPConnectPort),1)]),_:1})):Ae("",!0),T(t).subdomainHost!=""?(G(),ve(a,{key:5,label:"Subdomain Host"},{default:q(()=>[Z(PC,{content:T(t).subdomainHost,length:30},null,8,["content"])]),_:1})):Ae("",!0),Z(a,{label:"Max PoolCount"},{default:q(()=>[te("span",null,xe(T(t).maxPoolCount),1)]),_:1}),Z(a,{label:"Max Ports Per Client"},{default:q(()=>[te("span",null,xe(T(t).maxPortsPerClient),1)]),_:1}),T(t).allowPortsStr!=""?(G(),ve(a,{key:6,label:"Allow Ports"},{default:q(()=>[Z(PC,{content:T(t).allowPortsStr,length:30},null,8,["content"])]),_:1})):Ae("",!0),T(t).tlsForce===!0?(G(),ve(a,{key:7,label:"TLS Force"},{default:q(()=>[te("span",null,xe(T(t).tlsForce),1)]),_:1})):Ae("",!0),Z(a,{label:"HeartBeat Timeout"},{default:q(()=>[te("span",null,xe(T(t).heartbeatTimeout),1)]),_:1}),Z(a,{label:"Client Counts"},{default:q(()=>[te("span",null,xe(T(t).clientCounts),1)]),_:1}),Z(a,{label:"Current Connections"},{default:q(()=>[te("span",null,xe(T(t).curConns),1)]),_:1}),Z(a,{label:"Proxy Counts"},{default:q(()=>[te("span",null,xe(T(t).proxyCounts),1)]),_:1})]),_:1})])]),_:1}),Z(s,{md:12},{default:q(()=>[fte,cte]),_:1})]),_:1})])}}});class Io{constructor(t){It(this,"name");It(this,"type");It(this,"annotations");It(this,"encryption");It(this,"compression");It(this,"conns");It(this,"trafficIn");It(this,"trafficOut");It(this,"lastStartTime");It(this,"lastCloseTime");It(this,"status");It(this,"clientVersion");It(this,"addr");It(this,"port");It(this,"customDomains");It(this,"hostHeaderRewrite");It(this,"locations");It(this,"subdomain");var r,n,i,a,o;if(this.name=t.name,this.type="",this.annotations=new Map,(r=t.conf)!=null&&r.annotations)for(const s in t.conf.annotations)this.annotations.set(s,t.conf.annotations[s]);this.encryption=!1,this.compression=!1,this.encryption=((i=(n=t.conf)==null?void 0:n.transport)==null?void 0:i.useEncryption)||this.encryption,this.compression=((o=(a=t.conf)==null?void 0:a.transport)==null?void 0:o.useCompression)||this.compression,this.conns=t.curConns,this.trafficIn=t.todayTrafficIn,this.trafficOut=t.todayTrafficOut,this.lastStartTime=t.lastStartTime,this.lastCloseTime=t.lastCloseTime,this.status=t.status,this.clientVersion=t.clientVersion,this.addr="",this.port=0,this.customDomains="",this.hostHeaderRewrite="",this.locations="",this.subdomain=""}}class hte extends Io{constructor(t){super(t),this.type="tcp",t.conf!=null?(this.addr=":"+t.conf.remotePort,this.port=t.conf.remotePort):(this.addr="",this.port=0)}}class vte extends Io{constructor(t){super(t),this.type="udp",t.conf!=null?(this.addr=":"+t.conf.remotePort,this.port=t.conf.remotePort):(this.addr="",this.port=0)}}class pte extends Io{constructor(t,r,n){super(t),this.type="http",this.port=r,t.conf&&(this.customDomains=t.conf.customDomains||this.customDomains,this.hostHeaderRewrite=t.conf.hostHeaderRewrite,this.locations=t.conf.locations,t.conf.subdomain&&(this.subdomain=`${t.conf.subdomain}.${n}`))}}class gte extends Io{constructor(t,r,n){super(t),this.type="https",this.port=r,t.conf!=null&&(this.customDomains=t.conf.customDomains||this.customDomains,t.conf.subdomain&&(this.subdomain=`${t.conf.subdomain}.${n}`))}}class mte extends Io{constructor(r,n,i){super(r);It(this,"multiplexer");It(this,"routeByHTTPUser");this.type="tcpmux",this.port=n,this.multiplexer="",this.routeByHTTPUser="",r.conf&&(this.customDomains=r.conf.customDomains||this.customDomains,this.multiplexer=r.conf.multiplexer,this.routeByHTTPUser=r.conf.routeByHTTPUser,r.conf.subdomain&&(this.subdomain=`${r.conf.subdomain}.${i}`))}}class yte extends Io{constructor(t){super(t),this.type="stcp"}}class _te extends Io{constructor(t){super(t),this.type="sudp"}}const bte=["id"],wte=ie({__name:"Traffic",props:{proxyName:{}},setup(e){const t=e;return(()=>{let n="../api/traffic/"+t.proxyName;fetch(n,{credentials:"include"}).then(i=>i.json()).then(i=>{lte(t.proxyName,i.trafficIn,i.trafficOut)}).catch(i=>{Wl({showClose:!0,message:"Get traffic info failed!"+i,type:"warning"})})})(),(n,i)=>(G(),ce("div",{id:n.proxyName,style:{width:"600px",height:"400px"}},null,8,bte))}}),Ste={key:0},xte={key:1},Cte={key:2},Tte={key:0},Mte={class:"annotation-key"},Ate=ie({__name:"ProxyViewExpand",props:{row:{},proxyType:{}},setup(e){const t=e,r=()=>{const n=[];return t.row.annotations&&t.row.annotations.forEach((i,a)=>{n.push({key:a,value:i})}),n};return(n,i)=>{const a=sA,o=oA,s=VA,l=wW;return G(),ce(ft,null,[Z(o,{"label-position":"left","label-width":"auto",inline:"",class:"proxy-table-expand"},{default:q(()=>[Z(a,{label:"Name"},{default:q(()=>[te("span",null,xe(n.row.name),1)]),_:1}),Z(a,{label:"Type"},{default:q(()=>[te("span",null,xe(n.row.type),1)]),_:1}),Z(a,{label:"Encryption"},{default:q(()=>[te("span",null,xe(n.row.encryption),1)]),_:1}),Z(a,{label:"Compression"},{default:q(()=>[te("span",null,xe(n.row.compression),1)]),_:1}),Z(a,{label:"Last Start"},{default:q(()=>[te("span",null,xe(n.row.lastStartTime),1)]),_:1}),Z(a,{label:"Last Close"},{default:q(()=>[te("span",null,xe(n.row.lastCloseTime),1)]),_:1}),n.proxyType==="http"||n.proxyType==="https"?(G(),ce("div",Ste,[Z(a,{label:"Domains"},{default:q(()=>[te("span",null,xe(n.row.customDomains),1)]),_:1}),Z(a,{label:"SubDomain"},{default:q(()=>[te("span",null,xe(n.row.subdomain),1)]),_:1}),Z(a,{label:"locations"},{default:q(()=>[te("span",null,xe(n.row.locations),1)]),_:1}),Z(a,{label:"HostRewrite"},{default:q(()=>[te("span",null,xe(n.row.hostHeaderRewrite),1)]),_:1})])):n.proxyType==="tcpmux"?(G(),ce("div",xte,[Z(a,{label:"Multiplexer"},{default:q(()=>[te("span",null,xe(n.row.multiplexer),1)]),_:1}),Z(a,{label:"RouteByHTTPUser"},{default:q(()=>[te("span",null,xe(n.row.routeByHTTPUser),1)]),_:1}),Z(a,{label:"Domains"},{default:q(()=>[te("span",null,xe(n.row.customDomains),1)]),_:1}),Z(a,{label:"SubDomain"},{default:q(()=>[te("span",null,xe(n.row.subdomain),1)]),_:1})])):(G(),ce("div",Cte,[Z(a,{label:"Addr"},{default:q(()=>[te("span",null,xe(n.row.addr),1)]),_:1})]))]),_:1}),n.row.annotations&&n.row.annotations.size>0?(G(),ce("div",Tte,[Z(s),Z(l,{class:"title-text",size:"large"},{default:q(()=>[pt("Annotations")]),_:1}),te("ul",null,[(G(!0),ce(ft,null,Hp(r(),u=>(G(),ce("li",null,[te("span",Mte,xe(u.key),1),te("span",null,xe(u.value),1)]))),256))])])):Ae("",!0)],64)}}}),Pte={class:"flex items-center",style:{"margin-right":"30px"}},Oo=ie({__name:"ProxyView",props:{proxies:{},proxyType:{}},emits:["refresh"],setup(e,{emit:t}){const r=t,n=$(!1),i=$(""),a=(l,u)=>Mu.fileSize(l.trafficIn),o=(l,u)=>Mu.fileSize(l.trafficOut),s=()=>{fetch("../api/proxies?status=offline",{method:"DELETE",credentials:"include"}).then(l=>{l.ok?(Wl({message:"Successfully cleared offline proxies",type:"success"}),r("refresh")):Wl({message:"Failed to clear offline proxies: "+l.status+" "+l.statusText,type:"warning"})}).catch(l=>{Wl({message:"Failed to clear offline proxies: "+l.message,type:"warning"})})};return(l,u)=>{const f=yg,c=eV,h=q6,d=gW,v=N8,p=pW,m=wte,g=p6;return G(),ce(ft,null,[te("div",null,[Z(h,{icon:null,style:{width:"100%","margin-left":"30px","margin-bottom":"20px"}},{title:q(()=>[te("span",null,xe(l.proxyType),1)]),content:q(()=>[]),extra:q(()=>[te("div",Pte,[Z(c,{title:"Are you sure to clear all data of offline proxies?",onConfirm:s},{reference:q(()=>[Z(f,null,{default:q(()=>[pt("ClearOfflineProxies")]),_:1})]),_:1}),Z(f,{onClick:u[0]||(u[0]=y=>l.$emit("refresh"))},{default:q(()=>[pt("Refresh")]),_:1})])]),_:1}),Z(p,{data:l.proxies,"default-sort":{prop:"name",order:"ascending"},style:{width:"100%"}},{default:q(()=>[Z(d,{type:"expand"},{default:q(y=>[Z(Ate,{row:y.row,proxyType:l.proxyType},null,8,["row","proxyType"])]),_:1}),Z(d,{label:"Name",prop:"name",sortable:""}),Z(d,{label:"Port",prop:"port",sortable:""}),Z(d,{label:"Connections",prop:"conns",sortable:""}),Z(d,{label:"Traffic In",prop:"trafficIn",formatter:a,sortable:""}),Z(d,{label:"Traffic Out",prop:"trafficOut",formatter:o,sortable:""}),Z(d,{label:"ClientVersion",prop:"clientVersion",sortable:""}),Z(d,{label:"Status",prop:"status",sortable:""},{default:q(y=>[y.row.status==="online"?(G(),ve(v,{key:0,type:"success"},{default:q(()=>[pt(xe(y.row.status),1)]),_:2},1024)):(G(),ve(v,{key:1,type:"danger"},{default:q(()=>[pt(xe(y.row.status),1)]),_:2},1024))]),_:1}),Z(d,{label:"Operations"},{default:q(y=>[Z(f,{type:"primary",name:y.row.name,style:{"margin-bottom":"10px"},onClick:_=>{i.value=y.row.name,n.value=!0}},{default:q(()=>[pt("Traffic ")]),_:2},1032,["name","onClick"])]),_:1})]),_:1},8,["data"])]),Z(g,{modelValue:n.value,"onUpdate:modelValue":u[1]||(u[1]=y=>n.value=y),"destroy-on-close":"true",title:i.value,width:"700px"},{default:q(()=>[Z(m,{proxyName:i.value},null,8,["proxyName"])]),_:1},8,["modelValue","title"])],64)}}}),Ete=ie({__name:"ProxiesTCP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/tcp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new hte(i))})};return r(),(n,i)=>(G(),ve(Oo,{proxies:T(t),proxyType:"tcp",onRefresh:r},null,8,["proxies"]))}}),Lte=ie({__name:"ProxiesUDP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/udp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new vte(i))})};return r(),(n,i)=>(G(),ve(Oo,{proxies:T(t),proxyType:"udp",onRefresh:r},null,8,["proxies"]))}}),Dte=ie({__name:"ProxiesHTTP",setup(e){let t=$([]);const r=()=>{let n,i;fetch("../api/serverinfo",{credentials:"include"}).then(a=>a.json()).then(a=>{n=a.vhostHTTPPort,i=a.subdomainHost,!(n==null||n==0)&&fetch("../api/proxy/http",{credentials:"include"}).then(o=>o.json()).then(o=>{t.value=[];for(let s of o.proxies)t.value.push(new pte(s,n,i))})})};return r(),(n,i)=>(G(),ve(Oo,{proxies:T(t),proxyType:"http",onRefresh:r},null,8,["proxies"]))}}),Ite=ie({__name:"ProxiesHTTPS",setup(e){let t=$([]);const r=()=>{let n,i;fetch("../api/serverinfo",{credentials:"include"}).then(a=>a.json()).then(a=>{n=a.vhostHTTPSPort,i=a.subdomainHost,!(n==null||n==0)&&fetch("../api/proxy/https",{credentials:"include"}).then(o=>o.json()).then(o=>{t.value=[];for(let s of o.proxies)t.value.push(new gte(s,n,i))})})};return r(),(n,i)=>(G(),ve(Oo,{proxies:T(t),proxyType:"https",onRefresh:r},null,8,["proxies"]))}}),Ote=ie({__name:"ProxiesTCPMux",setup(e){let t=$([]);const r=()=>{let n,i;fetch("../api/serverinfo",{credentials:"include"}).then(a=>a.json()).then(a=>{n=a.tcpmuxHTTPConnectPort,i=a.subdomainHost,fetch("../api/proxy/tcpmux",{credentials:"include"}).then(o=>o.json()).then(o=>{t.value=[];for(let s of o.proxies)t.value.push(new mte(s,n,i))})})};return r(),(n,i)=>(G(),ve(Oo,{proxies:T(t),proxyType:"tcpmux",onRefresh:r},null,8,["proxies"]))}}),Rte=ie({__name:"ProxiesSTCP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/stcp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new yte(i))})};return r(),(n,i)=>(G(),ve(Oo,{proxies:T(t),proxyType:"stcp",onRefresh:r},null,8,["proxies"]))}}),kte=ie({__name:"ProxiesSUDP",setup(e){let t=$([]);const r=()=>{fetch("../api/proxy/sudp",{credentials:"include"}).then(n=>n.json()).then(n=>{t.value=[];for(let i of n.proxies)t.value.push(new _te(i))})};return r(),(n,i)=>(G(),ve(Oo,{proxies:T(t),proxyType:"sudp",onRefresh:r},null,8,["proxies"]))}}),Nte=jG({history:uG(),routes:[{path:"/",name:"ServerOverview",component:dte},{path:"/proxies/tcp",name:"ProxiesTCP",component:Ete},{path:"/proxies/udp",name:"ProxiesUDP",component:Lte},{path:"/proxies/http",name:"ProxiesHTTP",component:Dte},{path:"/proxies/https",name:"ProxiesHTTPS",component:Ite},{path:"/proxies/tcpmux",name:"ProxiesTCPMux",component:Ote},{path:"/proxies/stcp",name:"ProxiesSTCP",component:Rte},{path:"/proxies/sudp",name:"ProxiesSUDP",component:kte}]}),MD=oR(GW);MD.use(Nte);MD.mount("#app")});export default Bte(); diff --git a/assets/frps/static/index.html b/assets/frps/static/index.html index 0a1966e8306..075604a5dab 100644 --- a/assets/frps/static/index.html +++ b/assets/frps/static/index.html @@ -4,7 +4,7 @@ frps dashboard - + diff --git a/server/dashboard_api.go b/server/dashboard_api.go index 62415c968d2..ce5a4c74535 100644 --- a/server/dashboard_api.go +++ b/server/dashboard_api.go @@ -146,7 +146,8 @@ type TCPOutConf struct { type TCPMuxOutConf struct { BaseOutConf v1.DomainConfig - Multiplexer string `json:"multiplexer"` + Multiplexer string `json:"multiplexer"` + RouteByHTTPUser string `json:"routeByHTTPUser"` } type UDPOutConf struct { diff --git a/web/frps/components.d.ts b/web/frps/components.d.ts index 5a1615e419a..188e961b99d 100644 --- a/web/frps/components.d.ts +++ b/web/frps/components.d.ts @@ -31,6 +31,7 @@ declare module 'vue' { ProxiesSTCP: typeof import('./src/components/ProxiesSTCP.vue')['default'] ProxiesSUDP: typeof import('./src/components/ProxiesSUDP.vue')['default'] ProxiesTCP: typeof import('./src/components/ProxiesTCP.vue')['default'] + ProxiesTCPMux: typeof import('./src/components/ProxiesTCPMux.vue')['default'] ProxiesUDP: typeof import('./src/components/ProxiesUDP.vue')['default'] ProxyView: typeof import('./src/components/ProxyView.vue')['default'] ProxyViewExpand: typeof import('./src/components/ProxyViewExpand.vue')['default'] diff --git a/web/frps/src/App.vue b/web/frps/src/App.vue index 974314b2604..ad15e3a14d1 100644 --- a/web/frps/src/App.vue +++ b/web/frps/src/App.vue @@ -39,6 +39,7 @@ UDP HTTP HTTPS + TCPMUX STCP SUDP diff --git a/web/frps/src/components/ProxiesTCPMux.vue b/web/frps/src/components/ProxiesTCPMux.vue new file mode 100644 index 00000000000..9e39e278683 --- /dev/null +++ b/web/frps/src/components/ProxiesTCPMux.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/web/frps/src/components/ProxyViewExpand.vue b/web/frps/src/components/ProxyViewExpand.vue index 49b17a6611e..f0e7d8992c6 100644 --- a/web/frps/src/components/ProxyViewExpand.vue +++ b/web/frps/src/components/ProxyViewExpand.vue @@ -1,9 +1,9 @@ From 27db6217ecda9236f5bc25c65824f1e723810751 Mon Sep 17 00:00:00 2001 From: fatedier Date: Mon, 6 Jan 2025 14:22:57 +0800 Subject: [PATCH 52/90] frpc: support metadatas and annotations in frpc proxy commands (#4623) --- Release.md | 4 +--- pkg/config/flags.go | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Release.md b/Release.md index d75b07cb7c2..046e4d48039 100644 --- a/Release.md +++ b/Release.md @@ -1,5 +1,3 @@ ### Features -* `tzdata` is installed by default in the container image, and the time zone can be set using the `TZ` environment variable. -* The `quic-bind-port` command line parameter is supported in frps, which specifies the port for accepting frpc connections using the QUIC protocol. -* The vhost HTTP proxy of frps supports the h2c protocol. +* Support metadatas and annotations in frpc proxy commands. diff --git a/pkg/config/flags.go b/pkg/config/flags.go index f9d9e3e4495..6027b622411 100644 --- a/pkg/config/flags.go +++ b/pkg/config/flags.go @@ -106,6 +106,8 @@ func registerProxyBaseConfigFlags(cmd *cobra.Command, c *v1.ProxyBaseConfig, opt } cmd.Flags().StringVarP(&c.Name, "proxy_name", "n", "", "proxy name") + cmd.Flags().StringToStringVarP(&c.Metadatas, "metadatas", "", nil, "metadata key-value pairs (e.g., key1=value1,key2=value2)") + cmd.Flags().StringToStringVarP(&c.Annotations, "annotations", "", nil, "annotation key-value pairs (e.g., key1=value1,key2=value2)") if !options.sshMode { cmd.Flags().StringVarP(&c.LocalIP, "local_ip", "i", "127.0.0.1", "local ip") From 450b8393bc5a06fd1182690b967e8deb0c20b606 Mon Sep 17 00:00:00 2001 From: "Jeb.Wang" Date: Thu, 16 Jan 2025 10:50:57 +0800 Subject: [PATCH 53/90] Fix goroutine leaks * Fix goroutine leaks --- server/proxy/xtcp.go | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/server/proxy/xtcp.go b/server/proxy/xtcp.go index f69d0790d65..1ccf331c49d 100644 --- a/server/proxy/xtcp.go +++ b/server/proxy/xtcp.go @@ -17,8 +17,7 @@ package proxy import ( "fmt" "reflect" - - "github.com/fatedier/golib/errors" + "sync" v1 "github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/msg" @@ -32,7 +31,8 @@ type XTCPProxy struct { *BaseProxy cfg *v1.XTCPProxyConfig - closeCh chan struct{} + closeCh chan struct{} + closeOnce sync.Once } func NewXTCPProxy(baseProxy *BaseProxy) Proxy { @@ -43,6 +43,7 @@ func NewXTCPProxy(baseProxy *BaseProxy) Proxy { return &XTCPProxy{ BaseProxy: baseProxy, cfg: unwrapped, + closeCh: make(chan struct{}), } } @@ -87,9 +88,9 @@ func (pxy *XTCPProxy) Run() (remoteAddr string, err error) { } func (pxy *XTCPProxy) Close() { - pxy.BaseProxy.Close() - pxy.rc.NatHoleController.CloseClient(pxy.GetName()) - _ = errors.PanicToError(func() { + pxy.closeOnce.Do(func() { + pxy.BaseProxy.Close() + pxy.rc.NatHoleController.CloseClient(pxy.GetName()) close(pxy.closeCh) }) } From b8d3ace1139f5bcfee816d9844bba4780d052ba8 Mon Sep 17 00:00:00 2001 From: hansmi Date: Fri, 7 Feb 2025 04:33:11 +0100 Subject: [PATCH 54/90] Use text/template instead of html/template for config pre-processing (#4656) --- pkg/config/load.go | 2 +- pkg/config/load_test.go | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/pkg/config/load.go b/pkg/config/load.go index fa814fd0b0a..fa394dda115 100644 --- a/pkg/config/load.go +++ b/pkg/config/load.go @@ -18,10 +18,10 @@ import ( "bytes" "encoding/json" "fmt" - "html/template" "os" "path/filepath" "strings" + "text/template" toml "github.com/pelletier/go-toml/v2" "github.com/samber/lo" diff --git a/pkg/config/load_test.go b/pkg/config/load_test.go index b3f77800449..980a332ad1b 100644 --- a/pkg/config/load_test.go +++ b/pkg/config/load_test.go @@ -112,6 +112,29 @@ func TestLoadServerConfigStrictMode(t *testing.T) { } } +func TestRenderWithTemplate(t *testing.T) { + tests := []struct { + name string + content string + want string + }{ + {"toml", tomlServerContent, tomlServerContent}, + {"yaml", yamlServerContent, yamlServerContent}, + {"json", jsonServerContent, jsonServerContent}, + {"template numeric", `key = {{ 123 }}`, "key = 123"}, + {"template string", `key = {{ "xyz" }}`, "key = xyz"}, + {"template quote", `key = {{ printf "%q" "with space" }}`, `key = "with space"`}, + } + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + require := require.New(t) + got, err := RenderWithTemplate([]byte(test.content), nil) + require.NoError(err) + require.EqualValues(test.want, string(got)) + }) + } +} + func TestCustomStructStrictMode(t *testing.T) { require := require.New(t) From 8b86e1473ca8d180e03b57c2ca50daa6f2880a82 Mon Sep 17 00:00:00 2001 From: ubergeek77 Date: Tue, 11 Feb 2025 21:28:30 -0600 Subject: [PATCH 55/90] Fix ports not being released on Service.Close() (#4666) --- server/service.go | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/server/service.go b/server/service.go index 27c4110d92a..86d82a2ad33 100644 --- a/server/service.go +++ b/server/service.go @@ -77,7 +77,7 @@ type Service struct { muxer *mux.Mux // Accept connections from client - listener net.Listener + muxListener net.Listener // Accept connections using kcp kcpListener net.Listener @@ -125,6 +125,11 @@ type Service struct { ctx context.Context // call cancel to stop service cancel context.CancelFunc + + // Track listeners so they can be closed manually + vhostHTTPSListener net.Listener + tcpmuxHTTPConnectListener net.Listener + tcpListener net.Listener } func NewService(cfg *v1.ServerConfig) (*Service, error) { @@ -180,6 +185,8 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { return nil, fmt.Errorf("create server listener error, %v", err) } + // Save listener so it can be closed in svr.Close() + svr.tcpmuxHTTPConnectListener = l svr.rc.TCPMuxHTTPConnectMuxer, err = tcpmux.NewHTTPConnectTCPMuxer(l, cfg.TCPMuxPassthrough, vhostReadWriteTimeout) if err != nil { return nil, fmt.Errorf("create vhost tcpMuxer error, %v", err) @@ -226,14 +233,16 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { return nil, fmt.Errorf("create server listener error, %v", err) } + // Save listener so it can be closed in svr.Close() + svr.tcpListener = ln + svr.muxer = mux.NewMux(ln) svr.muxer.SetKeepAlive(time.Duration(cfg.Transport.TCPKeepAlive) * time.Second) go func() { _ = svr.muxer.Serve() }() ln = svr.muxer.DefaultListener() - - svr.listener = ln + svr.muxListener = ln log.Infof("frps tcp listen on %s", address) // Listen for accepting connections from client using kcp protocol. @@ -318,7 +327,8 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { } log.Infof("https service listen on %s", address) } - + // Save listener so it can be closed in svr.Close() + svr.vhostHTTPSListener = l svr.rc.VhostHTTPSMuxer, err = vhost.NewHTTPSMuxer(l, vhostReadWriteTimeout) if err != nil { return nil, fmt.Errorf("create vhost httpsMuxer error, %v", err) @@ -374,11 +384,11 @@ func (svr *Service) Run(ctx context.Context) { go svr.sshTunnelGateway.Run() } - svr.HandleListener(svr.listener, false) + svr.HandleListener(svr.muxListener, false) <-svr.ctx.Done() // service context may not be canceled by svr.Close(), we should call it here to release resources - if svr.listener != nil { + if svr.muxListener != nil { svr.Close() } } @@ -400,9 +410,25 @@ func (svr *Service) Close() error { svr.tlsListener.Close() svr.tlsConfig = nil } - if svr.listener != nil { - svr.listener.Close() - svr.listener = nil + if svr.muxListener != nil { + svr.muxListener.Close() + svr.muxListener = nil + } + if svr.vhostHTTPSListener != nil { + svr.vhostHTTPSListener.Close() + svr.vhostHTTPSListener = nil + } + if svr.tcpmuxHTTPConnectListener != nil { + svr.tcpmuxHTTPConnectListener.Close() + svr.tcpmuxHTTPConnectListener = nil + } + if svr.webServer != nil { + svr.webServer.Close() + svr.webServer = nil + } + if svr.tcpListener != nil { + svr.tcpListener.Close() + svr.tcpListener = nil } svr.ctlManager.Close() if svr.cancel != nil { From e0dd947e6af0bc1116e1120ee422f5a8ab18869d Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 12 Feb 2025 12:22:57 +0800 Subject: [PATCH 56/90] frps: release resources in service.Close() (#4667) --- go.mod | 2 +- go.sum | 4 +-- pkg/ssh/gateway.go | 4 +++ pkg/util/vhost/vhost.go | 4 +++ server/controller/resource.go | 10 ++++++++ server/service.go | 48 ++++++++++------------------------- 6 files changed, 35 insertions(+), 37 deletions(-) diff --git a/go.mod b/go.mod index 957fc7f493e..5809def87a1 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22.0 require ( github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 github.com/coreos/go-oidc/v3 v3.10.0 - github.com/fatedier/golib v0.5.0 + github.com/fatedier/golib v0.5.1 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.0 diff --git a/go.sum b/go.sum index 4b771361ee0..e1053561e04 100644 --- a/go.sum +++ b/go.sum @@ -21,8 +21,8 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatedier/golib v0.5.0 h1:hNcH7hgfIFqVWbP+YojCCAj4eO94pPf4dEF8lmq2jWs= -github.com/fatedier/golib v0.5.0/go.mod h1:W6kIYkIFxHsTzbgqg5piCxIiDo4LzwgTY6R5W8l9NFQ= +github.com/fatedier/golib v0.5.1 h1:hcKAnaw5mdI/1KWRGejxR+i1Hn/NvbY5UsMKDr7o13M= +github.com/fatedier/golib v0.5.1/go.mod h1:W6kIYkIFxHsTzbgqg5piCxIiDo4LzwgTY6R5W8l9NFQ= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d h1:ynk1ra0RUqDWQfvFi5KtMiSobkVQ3cNc0ODb8CfIETo= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= diff --git a/pkg/ssh/gateway.go b/pkg/ssh/gateway.go index 5716f04038d..4d90f338385 100644 --- a/pkg/ssh/gateway.go +++ b/pkg/ssh/gateway.go @@ -112,6 +112,10 @@ func (g *Gateway) Run() { } } +func (g *Gateway) Close() error { + return g.ln.Close() +} + func (g *Gateway) handleConn(conn net.Conn) { defer conn.Close() diff --git a/pkg/util/vhost/vhost.go b/pkg/util/vhost/vhost.go index e62a1caf354..75b472b6ee4 100644 --- a/pkg/util/vhost/vhost.go +++ b/pkg/util/vhost/vhost.go @@ -100,6 +100,10 @@ func (v *Muxer) SetRewriteHostFunc(f hostRewriteFunc) *Muxer { return v } +func (v *Muxer) Close() error { + return v.listener.Close() +} + type ChooseEndpointFunc func() (string, error) type CreateConnFunc func(remoteAddr string) (net.Conn, error) diff --git a/server/controller/resource.go b/server/controller/resource.go index 47236c9e0d0..9d14b18dfbe 100644 --- a/server/controller/resource.go +++ b/server/controller/resource.go @@ -59,3 +59,13 @@ type ResourceController struct { // All server manager plugin PluginManager *plugin.Manager } + +func (rc *ResourceController) Close() error { + if rc.VhostHTTPSMuxer != nil { + rc.VhostHTTPSMuxer.Close() + } + if rc.TCPMuxHTTPConnectMuxer != nil { + rc.TCPMuxHTTPConnectMuxer.Close() + } + return nil +} diff --git a/server/service.go b/server/service.go index 86d82a2ad33..d1dd68a1c90 100644 --- a/server/service.go +++ b/server/service.go @@ -77,7 +77,7 @@ type Service struct { muxer *mux.Mux // Accept connections from client - muxListener net.Listener + listener net.Listener // Accept connections using kcp kcpListener net.Listener @@ -125,11 +125,6 @@ type Service struct { ctx context.Context // call cancel to stop service cancel context.CancelFunc - - // Track listeners so they can be closed manually - vhostHTTPSListener net.Listener - tcpmuxHTTPConnectListener net.Listener - tcpListener net.Listener } func NewService(cfg *v1.ServerConfig) (*Service, error) { @@ -185,8 +180,6 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { return nil, fmt.Errorf("create server listener error, %v", err) } - // Save listener so it can be closed in svr.Close() - svr.tcpmuxHTTPConnectListener = l svr.rc.TCPMuxHTTPConnectMuxer, err = tcpmux.NewHTTPConnectTCPMuxer(l, cfg.TCPMuxPassthrough, vhostReadWriteTimeout) if err != nil { return nil, fmt.Errorf("create vhost tcpMuxer error, %v", err) @@ -233,16 +226,14 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { return nil, fmt.Errorf("create server listener error, %v", err) } - // Save listener so it can be closed in svr.Close() - svr.tcpListener = ln - svr.muxer = mux.NewMux(ln) svr.muxer.SetKeepAlive(time.Duration(cfg.Transport.TCPKeepAlive) * time.Second) go func() { _ = svr.muxer.Serve() }() ln = svr.muxer.DefaultListener() - svr.muxListener = ln + + svr.listener = ln log.Infof("frps tcp listen on %s", address) // Listen for accepting connections from client using kcp protocol. @@ -327,8 +318,7 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { } log.Infof("https service listen on %s", address) } - // Save listener so it can be closed in svr.Close() - svr.vhostHTTPSListener = l + svr.rc.VhostHTTPSMuxer, err = vhost.NewHTTPSMuxer(l, vhostReadWriteTimeout) if err != nil { return nil, fmt.Errorf("create vhost httpsMuxer error, %v", err) @@ -384,11 +374,11 @@ func (svr *Service) Run(ctx context.Context) { go svr.sshTunnelGateway.Run() } - svr.HandleListener(svr.muxListener, false) + svr.HandleListener(svr.listener, false) <-svr.ctx.Done() // service context may not be canceled by svr.Close(), we should call it here to release resources - if svr.muxListener != nil { + if svr.listener != nil { svr.Close() } } @@ -396,40 +386,30 @@ func (svr *Service) Run(ctx context.Context) { func (svr *Service) Close() error { if svr.kcpListener != nil { svr.kcpListener.Close() - svr.kcpListener = nil } if svr.quicListener != nil { svr.quicListener.Close() - svr.quicListener = nil } if svr.websocketListener != nil { svr.websocketListener.Close() - svr.websocketListener = nil } if svr.tlsListener != nil { svr.tlsListener.Close() - svr.tlsConfig = nil - } - if svr.muxListener != nil { - svr.muxListener.Close() - svr.muxListener = nil } - if svr.vhostHTTPSListener != nil { - svr.vhostHTTPSListener.Close() - svr.vhostHTTPSListener = nil + if svr.sshTunnelListener != nil { + svr.sshTunnelListener.Close() } - if svr.tcpmuxHTTPConnectListener != nil { - svr.tcpmuxHTTPConnectListener.Close() - svr.tcpmuxHTTPConnectListener = nil + if svr.listener != nil { + svr.listener.Close() } if svr.webServer != nil { svr.webServer.Close() - svr.webServer = nil } - if svr.tcpListener != nil { - svr.tcpListener.Close() - svr.tcpListener = nil + if svr.sshTunnelGateway != nil { + svr.sshTunnelGateway.Close() } + svr.rc.Close() + svr.muxer.Close() svr.ctlManager.Close() if svr.cancel != nil { svr.cancel() From 1e8db667434f8f43cd60c16e9a6d694e9bd6e420 Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 12 Feb 2025 12:30:37 +0800 Subject: [PATCH 57/90] update Release.md (#4668) --- Release.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Release.md b/Release.md index 046e4d48039..11b788a62bb 100644 --- a/Release.md +++ b/Release.md @@ -1,3 +1,7 @@ ### Features * Support metadatas and annotations in frpc proxy commands. + +### Fixes + +* Properly release resources in service.Close() to prevent resource leaks when used as a library. From 9757a351c66c89c15812a20e2fbd4f152bdefe9f Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 7 Mar 2025 16:56:08 +0800 Subject: [PATCH 58/90] fix golangci lint config (#4698) --- .circleci/config.yml | 2 +- .golangci.yml | 3 ++- go.mod | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 3dff8a52ca6..ede1f5fef64 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: go-version-latest: docker: - - image: cimg/go:1.22-node + - image: cimg/go:1.23-node resource_class: large steps: - checkout diff --git a/.golangci.yml b/.golangci.yml index 5651ef5cf78..a45e4ba3a2d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -48,7 +48,8 @@ linters-settings: check-blank: false govet: # report about shadowed variables - check-shadowing: false + disable: + - shadow maligned: # print struct with more effective memory layout or not, false by default suggest-new: true diff --git a/go.mod b/go.mod index 5809def87a1..ecf202114f6 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/fatedier/frp -go 1.22.0 +go 1.23.0 require ( github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 From 773169e0c44070facd652c4b8b3fe6e6ff4d78f3 Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 7 Mar 2025 17:22:51 +0800 Subject: [PATCH 59/90] update version (#4699) --- pkg/util/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/util/version/version.go b/pkg/util/version/version.go index 9b75f23645b..f56e1ec072c 100644 --- a/pkg/util/version/version.go +++ b/pkg/util/version/version.go @@ -14,7 +14,7 @@ package version -var version = "0.61.1" +var version = "0.61.2" func Full() string { return version From a78814a2e9fef204d0fb06fa0b0b7ae0d8b39589 Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 16 Apr 2025 16:05:54 +0800 Subject: [PATCH 60/90] virtual-net: initial (#4751) --- README.md | 45 ++- README_zh.md | 5 - Release.md | 9 +- client/control.go | 8 +- client/proxy/proxy.go | 29 +- client/proxy/proxy_manager.go | 6 +- client/proxy/proxy_wrapper.go | 7 +- client/service.go | 32 +- client/visitor/stcp.go | 4 + client/visitor/visitor.go | 34 +- client/visitor/visitor_manager.go | 14 +- client/visitor/xtcp.go | 10 +- cmd/frpc/sub/root.go | 7 + conf/frpc_full_example.toml | 26 ++ doc/virtual_net.md | 75 ++++ go.mod | 25 +- go.sum | 65 ++-- pkg/config/v1/client.go | 15 +- pkg/config/v1/{plugin.go => proxy_plugin.go} | 56 +-- pkg/config/v1/validation/client.go | 8 + pkg/config/v1/visitor.go | 3 + pkg/config/v1/visitor_plugin.go | 86 +++++ pkg/featuregate/feature_gate.go | 219 +++++++++++ pkg/plugin/client/http2http.go | 10 +- pkg/plugin/client/http2https.go | 10 +- pkg/plugin/client/http_proxy.go | 8 +- pkg/plugin/client/https2http.go | 14 +- pkg/plugin/client/https2https.go | 14 +- pkg/plugin/client/plugin.go | 26 +- pkg/plugin/client/socks5.go | 11 +- pkg/plugin/client/static_file.go | 10 +- pkg/plugin/client/tls2raw.go | 9 +- pkg/plugin/client/unix_domain_socket.go | 13 +- pkg/plugin/client/virtual_net.go | 71 ++++ pkg/plugin/server/http.go | 2 +- pkg/plugin/server/manager.go | 2 +- pkg/plugin/server/plugin.go | 2 +- pkg/plugin/server/tracer.go | 2 +- pkg/plugin/server/types.go | 2 +- pkg/plugin/visitor/plugin.go | 58 +++ pkg/plugin/visitor/virtual_net.go | 232 ++++++++++++ pkg/util/version/version.go | 2 +- pkg/vnet/controller.go | 360 +++++++++++++++++++ pkg/vnet/message.go | 81 +++++ pkg/vnet/tun.go | 77 ++++ pkg/vnet/tun_darwin.go | 85 +++++ pkg/vnet/tun_linux.go | 84 +++++ pkg/vnet/tun_unsupported.go | 27 ++ 48 files changed, 1821 insertions(+), 179 deletions(-) create mode 100644 doc/virtual_net.md rename pkg/config/v1/{plugin.go => proxy_plugin.go} (96%) create mode 100644 pkg/config/v1/visitor_plugin.go create mode 100644 pkg/featuregate/feature_gate.go create mode 100644 pkg/plugin/client/virtual_net.go create mode 100644 pkg/plugin/visitor/plugin.go create mode 100644 pkg/plugin/visitor/virtual_net.go create mode 100644 pkg/vnet/controller.go create mode 100644 pkg/vnet/message.go create mode 100644 pkg/vnet/tun.go create mode 100644 pkg/vnet/tun_darwin.go create mode 100644 pkg/vnet/tun_linux.go create mode 100644 pkg/vnet/tun_unsupported.go diff --git a/README.md b/README.md index ab9ef37b271..e604d5af114 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,6 @@ frp is an open source project with its ongoing development made possible entirel

-

- - - -

@@ -97,6 +92,11 @@ frp also offers a P2P connect mode. * [Client Plugins](#client-plugins) * [Server Manage Plugins](#server-manage-plugins) * [SSH Tunnel Gateway](#ssh-tunnel-gateway) + * [Virtual Network (VirtualNet)](#virtual-network-virtualnet) +* [Feature Gates](#feature-gates) + * [Available Feature Gates](#available-feature-gates) + * [Enabling Feature Gates](#enabling-feature-gates) + * [Feature Lifecycle](#feature-lifecycle) * [Related Projects](#related-projects) * [Contributing](#contributing) * [Donation](#donation) @@ -1260,6 +1260,41 @@ frpc tcp --proxy_name "test-tcp" --local_ip 127.0.0.1 --local_port 8080 --remote Please refer to this [document](/doc/ssh_tunnel_gateway.md) for more information. +### Virtual Network (VirtualNet) + +*Alpha feature added in v0.62.0* + +The VirtualNet feature enables frp to create and manage virtual network connections between clients and visitors through a TUN interface. This allows for IP-level routing between machines, extending frp beyond simple port forwarding to support full network connectivity. + +For detailed information about configuration and usage, please refer to the [VirtualNet documentation](/doc/virtual_net.md). + +## Feature Gates + +frp supports feature gates to enable or disable experimental features. This allows users to try out new features before they're considered stable. + +### Available Feature Gates + +| Name | Stage | Default | Description | +|------|-------|---------|-------------| +| VirtualNet | ALPHA | false | Virtual network capabilities for frp | + +### Enabling Feature Gates + +To enable an experimental feature, add the feature gate to your configuration: + +```toml +featureGates = { + VirtualNet = true +} +``` + +### Feature Lifecycle + +Features typically go through three stages: +1. **ALPHA**: Disabled by default, may be unstable +2. **BETA**: May be enabled by default, more stable but still evolving +3. **GA (Generally Available)**: Enabled by default, ready for production use + ## Related Projects * [gofrp/plugin](https://github.com/gofrp/plugin) - A repository for frp plugins that contains a variety of plugins implemented based on the frp extension mechanism, meeting the customization needs of different scenarios. diff --git a/README_zh.md b/README_zh.md index ebd3109ba0d..d911e15230f 100644 --- a/README_zh.md +++ b/README_zh.md @@ -20,11 +20,6 @@ frp 是一个完全开源的项目,我们的开发工作完全依靠赞助者

-

- - - -

diff --git a/Release.md b/Release.md index 11b788a62bb..b3edf41090c 100644 --- a/Release.md +++ b/Release.md @@ -1,7 +1,8 @@ -### Features +### Notes -* Support metadatas and annotations in frpc proxy commands. +* **Feature Gates Introduced:** This version introduces a new experimental mechanism called Feature Gates. This allows users to enable or disable specific experimental features before they become generally available. Feature gates can be configured in the `featureGates` map within the configuration file. +* **VirtualNet Feature Gate:** The first available feature gate is `VirtualNet`, which enables the experimental Virtual Network functionality (currently in Alpha stage). -### Fixes +### Features -* Properly release resources in service.Close() to prevent resource leaks when used as a library. +* **Virtual Network (VirtualNet):** Introduce experimental virtual network capabilities (Alpha). This allows creating a TUN device managed by frp, enabling Layer 3 connectivity between different clients within the frp network. Requires root/admin privileges and is currently supported on Linux and macOS. Configuration is done via the `virtualNet` section and the `virtual_net` plugin. Enable with feature gate `VirtualNet`. **Note: As an Alpha feature, configuration details may change in future releases.** \ No newline at end of file diff --git a/client/control.go b/client/control.go index 3e20c312822..157b4aef913 100644 --- a/client/control.go +++ b/client/control.go @@ -29,6 +29,7 @@ import ( netpkg "github.com/fatedier/frp/pkg/util/net" "github.com/fatedier/frp/pkg/util/wait" "github.com/fatedier/frp/pkg/util/xlog" + "github.com/fatedier/frp/pkg/vnet" ) type SessionContext struct { @@ -46,6 +47,8 @@ type SessionContext struct { AuthSetter auth.Setter // Connector is used to create new connections, which could be real TCP connections or virtual streams. Connector Connector + // Virtual net controller + VnetController *vnet.Controller } type Control struct { @@ -99,8 +102,9 @@ func NewControl(ctx context.Context, sessionCtx *SessionContext) (*Control, erro ctl.registerMsgHandlers() ctl.msgTransporter = transport.NewMessageTransporter(ctl.msgDispatcher.SendChannel()) - ctl.pm = proxy.NewManager(ctl.ctx, sessionCtx.Common, ctl.msgTransporter) - ctl.vm = visitor.NewManager(ctl.ctx, sessionCtx.RunID, sessionCtx.Common, ctl.connectServer, ctl.msgTransporter) + ctl.pm = proxy.NewManager(ctl.ctx, sessionCtx.Common, ctl.msgTransporter, sessionCtx.VnetController) + ctl.vm = visitor.NewManager(ctl.ctx, sessionCtx.RunID, sessionCtx.Common, + ctl.connectServer, ctl.msgTransporter, sessionCtx.VnetController) return ctl, nil } diff --git a/client/proxy/proxy.go b/client/proxy/proxy.go index 5cb5ccf2ab4..debda9fa2ff 100644 --- a/client/proxy/proxy.go +++ b/client/proxy/proxy.go @@ -36,6 +36,7 @@ import ( "github.com/fatedier/frp/pkg/transport" "github.com/fatedier/frp/pkg/util/limit" "github.com/fatedier/frp/pkg/util/xlog" + "github.com/fatedier/frp/pkg/vnet" ) var proxyFactoryRegistry = map[reflect.Type]func(*BaseProxy, v1.ProxyConfigurer) Proxy{} @@ -58,6 +59,7 @@ func NewProxy( pxyConf v1.ProxyConfigurer, clientCfg *v1.ClientCommonConfig, msgTransporter transport.MessageTransporter, + vnetController *vnet.Controller, ) (pxy Proxy) { var limiter *rate.Limiter limitBytes := pxyConf.GetBaseConfig().Transport.BandwidthLimit.Bytes() @@ -70,6 +72,7 @@ func NewProxy( clientCfg: clientCfg, limiter: limiter, msgTransporter: msgTransporter, + vnetController: vnetController, xl: xlog.FromContextSafe(ctx), ctx: ctx, } @@ -85,6 +88,7 @@ type BaseProxy struct { baseCfg *v1.ProxyBaseConfig clientCfg *v1.ClientCommonConfig msgTransporter transport.MessageTransporter + vnetController *vnet.Controller limiter *rate.Limiter // proxyPlugin is used to handle connections instead of dialing to local service. // It's only validate for TCP protocol now. @@ -98,7 +102,10 @@ type BaseProxy struct { func (pxy *BaseProxy) Run() error { if pxy.baseCfg.Plugin.Type != "" { - p, err := plugin.Create(pxy.baseCfg.Plugin.Type, pxy.baseCfg.Plugin.ClientPluginOptions) + p, err := plugin.Create(pxy.baseCfg.Plugin.Type, plugin.PluginContext{ + Name: pxy.baseCfg.Name, + VnetController: pxy.vnetController, + }, pxy.baseCfg.Plugin.ClientPluginOptions) if err != nil { return err } @@ -157,22 +164,22 @@ func (pxy *BaseProxy) HandleTCPWorkConnection(workConn net.Conn, m *msg.StartWor } // check if we need to send proxy protocol info - var extraInfo plugin.ExtraInfo + var connInfo plugin.ConnectionInfo if m.SrcAddr != "" && m.SrcPort != 0 { if m.DstAddr == "" { m.DstAddr = "127.0.0.1" } srcAddr, _ := net.ResolveTCPAddr("tcp", net.JoinHostPort(m.SrcAddr, strconv.Itoa(int(m.SrcPort)))) dstAddr, _ := net.ResolveTCPAddr("tcp", net.JoinHostPort(m.DstAddr, strconv.Itoa(int(m.DstPort)))) - extraInfo.SrcAddr = srcAddr - extraInfo.DstAddr = dstAddr + connInfo.SrcAddr = srcAddr + connInfo.DstAddr = dstAddr } if baseCfg.Transport.ProxyProtocolVersion != "" && m.SrcAddr != "" && m.SrcPort != 0 { h := &pp.Header{ Command: pp.PROXY, - SourceAddr: extraInfo.SrcAddr, - DestinationAddr: extraInfo.DstAddr, + SourceAddr: connInfo.SrcAddr, + DestinationAddr: connInfo.DstAddr, } if strings.Contains(m.SrcAddr, ".") { @@ -186,13 +193,15 @@ func (pxy *BaseProxy) HandleTCPWorkConnection(workConn net.Conn, m *msg.StartWor } else if baseCfg.Transport.ProxyProtocolVersion == "v2" { h.Version = 2 } - extraInfo.ProxyProtocolHeader = h + connInfo.ProxyProtocolHeader = h } + connInfo.Conn = remote + connInfo.UnderlyingConn = workConn if pxy.proxyPlugin != nil { // if plugin is set, let plugin handle connection first xl.Debugf("handle by plugin: %s", pxy.proxyPlugin.Name()) - pxy.proxyPlugin.Handle(pxy.ctx, remote, workConn, &extraInfo) + pxy.proxyPlugin.Handle(pxy.ctx, &connInfo) xl.Debugf("handle by plugin finished") return } @@ -210,8 +219,8 @@ func (pxy *BaseProxy) HandleTCPWorkConnection(workConn net.Conn, m *msg.StartWor xl.Debugf("join connections, localConn(l[%s] r[%s]) workConn(l[%s] r[%s])", localConn.LocalAddr().String(), localConn.RemoteAddr().String(), workConn.LocalAddr().String(), workConn.RemoteAddr().String()) - if extraInfo.ProxyProtocolHeader != nil { - if _, err := extraInfo.ProxyProtocolHeader.WriteTo(localConn); err != nil { + if connInfo.ProxyProtocolHeader != nil { + if _, err := connInfo.ProxyProtocolHeader.WriteTo(localConn); err != nil { workConn.Close() xl.Errorf("write proxy protocol header to local conn error: %v", err) return diff --git a/client/proxy/proxy_manager.go b/client/proxy/proxy_manager.go index d42aedc00eb..ea5cc553112 100644 --- a/client/proxy/proxy_manager.go +++ b/client/proxy/proxy_manager.go @@ -28,12 +28,14 @@ import ( "github.com/fatedier/frp/pkg/msg" "github.com/fatedier/frp/pkg/transport" "github.com/fatedier/frp/pkg/util/xlog" + "github.com/fatedier/frp/pkg/vnet" ) type Manager struct { proxies map[string]*Wrapper msgTransporter transport.MessageTransporter inWorkConnCallback func(*v1.ProxyBaseConfig, net.Conn, *msg.StartWorkConn) bool + vnetController *vnet.Controller closed bool mu sync.RWMutex @@ -47,10 +49,12 @@ func NewManager( ctx context.Context, clientCfg *v1.ClientCommonConfig, msgTransporter transport.MessageTransporter, + vnetController *vnet.Controller, ) *Manager { return &Manager{ proxies: make(map[string]*Wrapper), msgTransporter: msgTransporter, + vnetController: vnetController, closed: false, clientCfg: clientCfg, ctx: ctx, @@ -159,7 +163,7 @@ func (pm *Manager) UpdateAll(proxyCfgs []v1.ProxyConfigurer) { for _, cfg := range proxyCfgs { name := cfg.GetBaseConfig().Name if _, ok := pm.proxies[name]; !ok { - pxy := NewWrapper(pm.ctx, cfg, pm.clientCfg, pm.HandleEvent, pm.msgTransporter) + pxy := NewWrapper(pm.ctx, cfg, pm.clientCfg, pm.HandleEvent, pm.msgTransporter, pm.vnetController) if pm.inWorkConnCallback != nil { pxy.SetInWorkConnCallback(pm.inWorkConnCallback) } diff --git a/client/proxy/proxy_wrapper.go b/client/proxy/proxy_wrapper.go index 95048f29907..f3f17e2b10c 100644 --- a/client/proxy/proxy_wrapper.go +++ b/client/proxy/proxy_wrapper.go @@ -31,6 +31,7 @@ import ( "github.com/fatedier/frp/pkg/msg" "github.com/fatedier/frp/pkg/transport" "github.com/fatedier/frp/pkg/util/xlog" + "github.com/fatedier/frp/pkg/vnet" ) const ( @@ -73,6 +74,8 @@ type Wrapper struct { handler event.Handler msgTransporter transport.MessageTransporter + // vnet controller + vnetController *vnet.Controller health uint32 lastSendStartMsg time.Time @@ -91,6 +94,7 @@ func NewWrapper( clientCfg *v1.ClientCommonConfig, eventHandler event.Handler, msgTransporter transport.MessageTransporter, + vnetController *vnet.Controller, ) *Wrapper { baseInfo := cfg.GetBaseConfig() xl := xlog.FromContextSafe(ctx).Spawn().AppendPrefix(baseInfo.Name) @@ -105,6 +109,7 @@ func NewWrapper( healthNotifyCh: make(chan struct{}), handler: eventHandler, msgTransporter: msgTransporter, + vnetController: vnetController, xl: xl, ctx: xlog.NewContext(ctx, xl), } @@ -117,7 +122,7 @@ func NewWrapper( xl.Tracef("enable health check monitor") } - pw.pxy = NewProxy(pw.ctx, pw.Cfg, clientCfg, pw.msgTransporter) + pw.pxy = NewProxy(pw.ctx, pw.Cfg, clientCfg, pw.msgTransporter, pw.vnetController) return pw } diff --git a/client/service.go b/client/service.go index b06706a6a48..57eb483559e 100644 --- a/client/service.go +++ b/client/service.go @@ -37,6 +37,7 @@ import ( "github.com/fatedier/frp/pkg/util/version" "github.com/fatedier/frp/pkg/util/wait" "github.com/fatedier/frp/pkg/util/xlog" + "github.com/fatedier/frp/pkg/vnet" ) func init() { @@ -110,6 +111,8 @@ type Service struct { // web server for admin UI and apis webServer *httppkg.Server + vnetController *vnet.Controller + cfgMu sync.RWMutex common *v1.ClientCommonConfig proxyCfgs []v1.ProxyConfigurer @@ -156,6 +159,9 @@ func NewService(options ServiceOptions) (*Service, error) { if webServer != nil { webServer.RouteRegister(s.registerRouteHandlers) } + if options.Common.VirtualNet.Address != "" { + s.vnetController = vnet.NewController(options.Common.VirtualNet) + } return s, nil } @@ -169,6 +175,19 @@ func (svr *Service) Run(ctx context.Context) error { netpkg.SetDefaultDNSAddress(svr.common.DNSServer) } + if svr.vnetController != nil { + if err := svr.vnetController.Init(); err != nil { + log.Errorf("init virtual network controller error: %v", err) + return err + } + go func() { + log.Infof("virtual network controller start...") + if err := svr.vnetController.Run(); err != nil { + log.Warnf("virtual network controller exit with error: %v", err) + } + }() + } + if svr.webServer != nil { go func() { log.Infof("admin server listen on %s", svr.webServer.Address()) @@ -311,12 +330,13 @@ func (svr *Service) loopLoginUntilSuccess(maxInterval time.Duration, firstLoginE connEncrypted = false } sessionCtx := &SessionContext{ - Common: svr.common, - RunID: svr.runID, - Conn: conn, - ConnEncrypted: connEncrypted, - AuthSetter: svr.authSetter, - Connector: connector, + Common: svr.common, + RunID: svr.runID, + Conn: conn, + ConnEncrypted: connEncrypted, + AuthSetter: svr.authSetter, + Connector: connector, + VnetController: svr.vnetController, } ctl, err := NewControl(svr.ctx, sessionCtx) if err != nil { diff --git a/client/visitor/stcp.go b/client/visitor/stcp.go index b26faf5200c..124202eb8d5 100644 --- a/client/visitor/stcp.go +++ b/client/visitor/stcp.go @@ -44,6 +44,10 @@ func (sv *STCPVisitor) Run() (err error) { } go sv.internalConnWorker() + + if sv.plugin != nil { + sv.plugin.Start() + } return } diff --git a/client/visitor/visitor.go b/client/visitor/visitor.go index d520f735ddc..fb2b3e118a1 100644 --- a/client/visitor/visitor.go +++ b/client/visitor/visitor.go @@ -20,9 +20,11 @@ import ( "sync" v1 "github.com/fatedier/frp/pkg/config/v1" + plugin "github.com/fatedier/frp/pkg/plugin/visitor" "github.com/fatedier/frp/pkg/transport" netpkg "github.com/fatedier/frp/pkg/util/net" "github.com/fatedier/frp/pkg/util/xlog" + "github.com/fatedier/frp/pkg/vnet" ) // Helper wraps some functions for visitor to use. @@ -34,6 +36,8 @@ type Helper interface { // MsgTransporter returns the message transporter that is used to send and receive messages // to the frp server through the controller. MsgTransporter() transport.MessageTransporter + // VNetController returns the vnet controller that is used to manage the virtual network. + VNetController() *vnet.Controller // RunID returns the run id of current controller. RunID() string } @@ -50,14 +54,34 @@ func NewVisitor( cfg v1.VisitorConfigurer, clientCfg *v1.ClientCommonConfig, helper Helper, -) (visitor Visitor) { +) (Visitor, error) { xl := xlog.FromContextSafe(ctx).Spawn().AppendPrefix(cfg.GetBaseConfig().Name) + ctx = xlog.NewContext(ctx, xl) + var visitor Visitor baseVisitor := BaseVisitor{ clientCfg: clientCfg, helper: helper, - ctx: xlog.NewContext(ctx, xl), + ctx: ctx, internalLn: netpkg.NewInternalListener(), } + if cfg.GetBaseConfig().Plugin.Type != "" { + p, err := plugin.Create( + cfg.GetBaseConfig().Plugin.Type, + plugin.PluginContext{ + Name: cfg.GetBaseConfig().Name, + Ctx: ctx, + VnetController: helper.VNetController(), + HandleConn: func(conn net.Conn) { + _ = baseVisitor.AcceptConn(conn) + }, + }, + cfg.GetBaseConfig().Plugin.VisitorPluginOptions, + ) + if err != nil { + return nil, err + } + baseVisitor.plugin = p + } switch cfg := cfg.(type) { case *v1.STCPVisitorConfig: visitor = &STCPVisitor{ @@ -77,7 +101,7 @@ func NewVisitor( checkCloseCh: make(chan struct{}), } } - return + return visitor, nil } type BaseVisitor struct { @@ -85,6 +109,7 @@ type BaseVisitor struct { helper Helper l net.Listener internalLn *netpkg.InternalListener + plugin plugin.Plugin mu sync.RWMutex ctx context.Context @@ -101,4 +126,7 @@ func (v *BaseVisitor) Close() { if v.internalLn != nil { v.internalLn.Close() } + if v.plugin != nil { + v.plugin.Close() + } } diff --git a/client/visitor/visitor_manager.go b/client/visitor/visitor_manager.go index 6ff65dabae0..b3539c69295 100644 --- a/client/visitor/visitor_manager.go +++ b/client/visitor/visitor_manager.go @@ -27,6 +27,7 @@ import ( v1 "github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/transport" "github.com/fatedier/frp/pkg/util/xlog" + "github.com/fatedier/frp/pkg/vnet" ) type Manager struct { @@ -50,6 +51,7 @@ func NewManager( clientCfg *v1.ClientCommonConfig, connectServer func() (net.Conn, error), msgTransporter transport.MessageTransporter, + vnetController *vnet.Controller, ) *Manager { m := &Manager{ clientCfg: clientCfg, @@ -62,6 +64,7 @@ func NewManager( m.helper = &visitorHelperImpl{ connectServerFn: connectServer, msgTransporter: msgTransporter, + vnetController: vnetController, transferConnFn: m.TransferConn, runID: runID, } @@ -112,7 +115,11 @@ func (vm *Manager) Close() { func (vm *Manager) startVisitor(cfg v1.VisitorConfigurer) (err error) { xl := xlog.FromContextSafe(vm.ctx) name := cfg.GetBaseConfig().Name - visitor := NewVisitor(vm.ctx, cfg, vm.clientCfg, vm.helper) + visitor, err := NewVisitor(vm.ctx, cfg, vm.clientCfg, vm.helper) + if err != nil { + xl.Warnf("new visitor error: %v", err) + return + } err = visitor.Run() if err != nil { xl.Warnf("start error: %v", err) @@ -187,6 +194,7 @@ func (vm *Manager) TransferConn(name string, conn net.Conn) error { type visitorHelperImpl struct { connectServerFn func() (net.Conn, error) msgTransporter transport.MessageTransporter + vnetController *vnet.Controller transferConnFn func(name string, conn net.Conn) error runID string } @@ -203,6 +211,10 @@ func (v *visitorHelperImpl) MsgTransporter() transport.MessageTransporter { return v.msgTransporter } +func (v *visitorHelperImpl) VNetController() *vnet.Controller { + return v.vnetController +} + func (v *visitorHelperImpl) RunID() string { return v.runID } diff --git a/client/visitor/xtcp.go b/client/visitor/xtcp.go index a1efd72b62b..51f29ad2a94 100644 --- a/client/visitor/xtcp.go +++ b/client/visitor/xtcp.go @@ -73,6 +73,10 @@ func (sv *XTCPVisitor) Run() (err error) { sv.retryLimiter = rate.NewLimiter(rate.Every(time.Hour/time.Duration(sv.cfg.MaxRetriesAnHour)), sv.cfg.MaxRetriesAnHour) go sv.keepTunnelOpenWorker() } + + if sv.plugin != nil { + sv.plugin.Start() + } return } @@ -157,9 +161,9 @@ func (sv *XTCPVisitor) keepTunnelOpenWorker() { func (sv *XTCPVisitor) handleConn(userConn net.Conn) { xl := xlog.FromContextSafe(sv.ctx) - isConnTrasfered := false + isConnTransfered := false defer func() { - if !isConnTrasfered { + if !isConnTransfered { userConn.Close() } }() @@ -187,7 +191,7 @@ func (sv *XTCPVisitor) handleConn(userConn net.Conn) { xl.Errorf("transfer connection to visitor %s error: %v", sv.cfg.FallbackTo, err) return } - isConnTrasfered = true + isConnTransfered = true return } diff --git a/cmd/frpc/sub/root.go b/cmd/frpc/sub/root.go index b844ddfd5e9..ee89c48947a 100644 --- a/cmd/frpc/sub/root.go +++ b/cmd/frpc/sub/root.go @@ -31,6 +31,7 @@ import ( "github.com/fatedier/frp/pkg/config" v1 "github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/config/v1/validation" + "github.com/fatedier/frp/pkg/featuregate" "github.com/fatedier/frp/pkg/util/log" "github.com/fatedier/frp/pkg/util/version" ) @@ -120,6 +121,12 @@ func runClient(cfgFilePath string) error { "please use yaml/json/toml format instead!\n") } + if len(cfg.FeatureGates) > 0 { + if err := featuregate.SetFromMap(cfg.FeatureGates); err != nil { + return err + } + } + warning, err := validation.ValidateAllClientConfig(cfg, proxyCfgs, visitorCfgs) if warning != nil { fmt.Printf("WARNING: %v\n", warning) diff --git a/conf/frpc_full_example.toml b/conf/frpc_full_example.toml index eb44739239d..7d4838cd78f 100644 --- a/conf/frpc_full_example.toml +++ b/conf/frpc_full_example.toml @@ -129,6 +129,15 @@ transport.tls.enable = true # It affects the udp and sudp proxy. udpPacketSize = 1500 +# Feature gates allows you to enable or disable experimental features +# Format is a map of feature names to boolean values +# You can enable specific features: +#featureGates = { VirtualNet = true } + +# VirtualNet settings for experimental virtual network capabilities +# The virtual network feature requires enabling the VirtualNet feature gate above +# virtualNet.address = "100.86.1.1/24" + # Additional metadatas for client. metadatas.var1 = "abc" metadatas.var2 = "123" @@ -358,6 +367,13 @@ localPort = 22 # Otherwise, visitors from same user can connect. '*' means allow all users. allowUsers = ["user1", "user2"] +[[proxies]] +name = "vnet-server" +type = "stcp" +secretKey = "your-secret-key" +[proxies.plugin] +type = "virtual_net" + # frpc role visitor -> frps -> frpc role server [[visitors]] name = "secret_tcp_visitor" @@ -389,3 +405,13 @@ maxRetriesAnHour = 8 minRetryInterval = 90 # fallbackTo = "stcp_visitor" # fallbackTimeoutMs = 500 + +[[visitors]] +name = "vnet-visitor" +type = "stcp" +serverName = "vnet-server" +secretKey = "your-secret-key" +bindPort = -1 +[visitors.plugin] +type = "virtual_net" +destinationIP = "100.86.0.1" diff --git a/doc/virtual_net.md b/doc/virtual_net.md new file mode 100644 index 00000000000..62653e9f188 --- /dev/null +++ b/doc/virtual_net.md @@ -0,0 +1,75 @@ +# Virtual Network (VirtualNet) + +*Alpha feature added in v0.62.0* + +The VirtualNet feature enables frp to create and manage virtual network connections between clients and visitors through a TUN interface. This allows for IP-level routing between machines, extending frp beyond simple port forwarding to support full network connectivity. + +> **Note**: VirtualNet is an Alpha stage feature and is currently unstable. Its configuration methods and functionality may be adjusted and changed at any time in subsequent versions. Do not use this feature in production environments; it is only recommended for testing and evaluation purposes. + +## Enabling VirtualNet + +Since VirtualNet is currently an alpha feature, you need to enable it with feature gates in your configuration: + +```toml +# frpc.toml +featureGates = { VirtualNet = true } +``` + +## Basic Configuration + +To use the virtual network capabilities: + +1. First, configure your frpc with a virtual network address: + +```toml +# frpc.toml +serverAddr = "x.x.x.x" +serverPort = 7000 +featureGates = { VirtualNet = true } + +# Configure the virtual network interface +virtualNet.address = "100.86.0.1/24" +``` + +2. For client proxies, use the `virtual_net` plugin: + +```toml +# frpc.toml (server side) +[[proxies]] +name = "vnet-server" +type = "stcp" +secretKey = "your-secret-key" +[proxies.plugin] +type = "virtual_net" +``` + +3. For visitor connections, configure the `virtual_net` visitor plugin: + +```toml +# frpc.toml (client side) +serverAddr = "x.x.x.x" +serverPort = 7000 +featureGates = { + VirtualNet = true +} + +# Configure the virtual network interface +virtualNet.address = "100.86.0.2/24" + +[[visitors]] +name = "vnet-visitor" +type = "stcp" +serverName = "vnet-server" +secretKey = "your-secret-key" +bindPort = -1 +[visitors.plugin] +type = "virtual_net" +destinationIP = "100.86.0.1" +``` + +## Requirements and Limitations + +- **Permissions**: Creating a TUN interface requires elevated permissions (root/admin) +- **Platform Support**: Currently supported on Linux and macOS +- **Default Status**: As an alpha feature, VirtualNet is disabled by default +- **Configuration**: A valid IP/CIDR must be provided for each endpoint in the virtual network diff --git a/go.mod b/go.mod index ecf202114f6..0b8ee2a5e8a 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.23.0 require ( github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 - github.com/coreos/go-oidc/v3 v3.10.0 + github.com/coreos/go-oidc/v3 v3.14.1 github.com/fatedier/golib v0.5.1 github.com/google/uuid v1.6.0 github.com/gorilla/mux v1.8.1 @@ -19,16 +19,19 @@ require ( github.com/quic-go/quic-go v0.48.2 github.com/rodaine/table v1.2.0 github.com/samber/lo v1.47.0 + github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 github.com/spf13/cobra v1.8.0 github.com/spf13/pflag v1.0.5 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.10.0 github.com/tidwall/gjson v1.17.1 + github.com/vishvananda/netlink v1.3.0 github.com/xtaci/kcp-go/v5 v5.6.13 - golang.org/x/crypto v0.30.0 - golang.org/x/net v0.32.0 - golang.org/x/oauth2 v0.16.0 - golang.org/x/sync v0.10.0 + golang.org/x/crypto v0.37.0 + golang.org/x/net v0.39.0 + golang.org/x/oauth2 v0.28.0 + golang.org/x/sync v0.13.0 golang.org/x/time v0.5.0 + golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 gopkg.in/ini.v1 v1.67.0 k8s.io/apimachinery v0.28.8 k8s.io/client-go v0.28.8 @@ -39,10 +42,9 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/go-jose/go-jose/v4 v4.0.1 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/pprof v0.0.0-20241206021119-61a79c692802 // indirect @@ -64,13 +66,14 @@ require ( github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect + github.com/vishvananda/netns v0.0.4 // indirect go.uber.org/mock v0.5.0 // indirect golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/text v0.24.0 // indirect golang.org/x/tools v0.28.0 // indirect - google.golang.org/appengine v1.6.8 // indirect + golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect google.golang.org/protobuf v1.34.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index e1053561e04..a39d174edae 100644 --- a/go.sum +++ b/go.sum @@ -11,8 +11,8 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-oidc/v3 v3.10.0 h1:tDnXHnLyiTVyT/2zLDGj09pFPkhND8Gl8lnTRhoEaJU= -github.com/coreos/go-oidc/v3 v3.10.0/go.mod h1:5j11xcw0D3+SGxn6Z/WFADsgcWVMyNAlSQupk0KK3ac= +github.com/coreos/go-oidc/v3 v3.14.1 h1:9ePWwfdwC4QKRlCXsJGou56adA/owXczOzwKdOumLqk= +github.com/coreos/go-oidc/v3 v3.14.1/go.mod h1:HaZ3szPaZ0e4r6ebqvsLWlk2Tn+aejfmrfah6hnSYEU= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -25,8 +25,8 @@ github.com/fatedier/golib v0.5.1 h1:hcKAnaw5mdI/1KWRGejxR+i1Hn/NvbY5UsMKDr7o13M= github.com/fatedier/golib v0.5.1/go.mod h1:W6kIYkIFxHsTzbgqg5piCxIiDo4LzwgTY6R5W8l9NFQ= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d h1:ynk1ra0RUqDWQfvFi5KtMiSobkVQ3cNc0ODb8CfIETo= github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= -github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U= -github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= @@ -42,17 +42,14 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/pprof v0.0.0-20241206021119-61a79c692802 h1:US08AXzP0bLurpzFUV3Poa9ZijrRdd1zAIOVtoHEiS8= @@ -117,6 +114,8 @@ github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncj github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= +github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 h1:TG/diQgUe0pntT/2D9tmUCz4VNwm9MfrtPr0SU2qSX8= +github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8/go.mod h1:P5HUIBuIWKbyjl083/loAegFkfbFNx5i2qEP4CNbm7E= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -129,8 +128,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/templexxx/cpu v0.1.1 h1:isxHaxBXpYFWnk2DReuKkigaZyrjs2+9ypIdGP4h+HI= github.com/templexxx/cpu v0.1.1/go.mod h1:w7Tb+7qgcAlIyX4NhLuDKt78AHA5SzPmq0Wj6HiEnnk= github.com/templexxx/xorsimd v0.4.3 h1:9AQTFHd7Bhk3dIT7Al2XeBX5DWOvsUPZCuhyAtNbHjU= @@ -143,6 +143,10 @@ github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= +github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk= +github.com/vishvananda/netlink v1.3.0/go.mod h1:i6NetklAujEcC6fK0JPjT8qSwWyO0HLn4UKG+hGqeJs= +github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= +github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/xtaci/kcp-go/v5 v5.6.13 h1:FEjtz9+D4p8t2x4WjciGt/jsIuhlWjjgPCCWjrVR4Hk= github.com/xtaci/kcp-go/v5 v5.6.13/go.mod h1:75S1AKYYzNUSXIv30h+jPKJYZUwqpfvLshu63nCNSOM= github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= @@ -156,8 +160,8 @@ golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/crypto v0.30.0 h1:RwoQn3GkWiMkzlX562cLB7OxWvjH1L8xutO2WoJcRoY= -golang.org/x/crypto v0.30.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d h1:0olWaB5pg3+oychR51GUVCEsGkeCU/2JxjBgIo4f3M0= golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= @@ -181,18 +185,18 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI= -golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= -golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= +golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= +golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -201,29 +205,30 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= -golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= -golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -238,10 +243,12 @@ golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= +golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2/go.mod h1:deeaetjYA+DHMHg+sMSMI58GrEteJUUzzw7en6TJQcI= +golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 h1:/jFs0duh4rdb8uIfPMv78iAJGcPKDeqAFnaLBropIC4= +golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173/go.mod h1:tkCQ4FQXmpAgYVh++1cq16/dH4QJtmvpRv19DWGAHSA= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -254,8 +261,6 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -268,6 +273,8 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259 h1:TbRPT0HtzFP3Cno1zZo7yPzEEnfu8EjLfl6IU9VfqkQ= +gvisor.dev/gvisor v0.0.0-20230927004350-cbd86285d259/go.mod h1:AVgIgHMwK63XvmAzWG9vLQ41YnVHN0du0tEC46fI7yY= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/apimachinery v0.28.8 h1:hi/nrxHwk4QLV+W/SHve1bypTE59HCDorLY1stBIxKQ= diff --git a/pkg/config/v1/client.go b/pkg/config/v1/client.go index d43ec1bcee3..d616fc0a300 100644 --- a/pkg/config/v1/client.go +++ b/pkg/config/v1/client.go @@ -58,9 +58,14 @@ type ClientCommonConfig struct { // set. Start []string `json:"start,omitempty"` - Log LogConfig `json:"log,omitempty"` - WebServer WebServerConfig `json:"webServer,omitempty"` - Transport ClientTransportConfig `json:"transport,omitempty"` + Log LogConfig `json:"log,omitempty"` + WebServer WebServerConfig `json:"webServer,omitempty"` + Transport ClientTransportConfig `json:"transport,omitempty"` + VirtualNet VirtualNetConfig `json:"virtualNet,omitempty"` + + // FeatureGates specifies a set of feature gates to enable or disable. + // This can be used to enable alpha/beta features or disable default features. + FeatureGates map[string]bool `json:"featureGates,omitempty"` // UDPPacketSize specifies the udp packet size // By default, this value is 1500 @@ -204,3 +209,7 @@ type AuthOIDCClientConfig struct { // this field will be transfer to map[string][]string in OIDC token generator. AdditionalEndpointParams map[string]string `json:"additionalEndpointParams,omitempty"` } + +type VirtualNetConfig struct { + Address string `json:"address,omitempty"` +} diff --git a/pkg/config/v1/plugin.go b/pkg/config/v1/proxy_plugin.go similarity index 96% rename from pkg/config/v1/plugin.go rename to pkg/config/v1/proxy_plugin.go index cdf3cf263e9..128ccae629c 100644 --- a/pkg/config/v1/plugin.go +++ b/pkg/config/v1/proxy_plugin.go @@ -26,6 +26,32 @@ import ( "github.com/fatedier/frp/pkg/util/util" ) +const ( + PluginHTTP2HTTPS = "http2https" + PluginHTTPProxy = "http_proxy" + PluginHTTPS2HTTP = "https2http" + PluginHTTPS2HTTPS = "https2https" + PluginHTTP2HTTP = "http2http" + PluginSocks5 = "socks5" + PluginStaticFile = "static_file" + PluginUnixDomainSocket = "unix_domain_socket" + PluginTLS2Raw = "tls2raw" + PluginVirtualNet = "virtual_net" +) + +var clientPluginOptionsTypeMap = map[string]reflect.Type{ + PluginHTTP2HTTPS: reflect.TypeOf(HTTP2HTTPSPluginOptions{}), + PluginHTTPProxy: reflect.TypeOf(HTTPProxyPluginOptions{}), + PluginHTTPS2HTTP: reflect.TypeOf(HTTPS2HTTPPluginOptions{}), + PluginHTTPS2HTTPS: reflect.TypeOf(HTTPS2HTTPSPluginOptions{}), + PluginHTTP2HTTP: reflect.TypeOf(HTTP2HTTPPluginOptions{}), + PluginSocks5: reflect.TypeOf(Socks5PluginOptions{}), + PluginStaticFile: reflect.TypeOf(StaticFilePluginOptions{}), + PluginUnixDomainSocket: reflect.TypeOf(UnixDomainSocketPluginOptions{}), + PluginTLS2Raw: reflect.TypeOf(TLS2RawPluginOptions{}), + PluginVirtualNet: reflect.TypeOf(VirtualNetPluginOptions{}), +} + type ClientPluginOptions interface { Complete() } @@ -74,30 +100,6 @@ func (c *TypedClientPluginOptions) MarshalJSON() ([]byte, error) { return json.Marshal(c.ClientPluginOptions) } -const ( - PluginHTTP2HTTPS = "http2https" - PluginHTTPProxy = "http_proxy" - PluginHTTPS2HTTP = "https2http" - PluginHTTPS2HTTPS = "https2https" - PluginHTTP2HTTP = "http2http" - PluginSocks5 = "socks5" - PluginStaticFile = "static_file" - PluginUnixDomainSocket = "unix_domain_socket" - PluginTLS2Raw = "tls2raw" -) - -var clientPluginOptionsTypeMap = map[string]reflect.Type{ - PluginHTTP2HTTPS: reflect.TypeOf(HTTP2HTTPSPluginOptions{}), - PluginHTTPProxy: reflect.TypeOf(HTTPProxyPluginOptions{}), - PluginHTTPS2HTTP: reflect.TypeOf(HTTPS2HTTPPluginOptions{}), - PluginHTTPS2HTTPS: reflect.TypeOf(HTTPS2HTTPSPluginOptions{}), - PluginHTTP2HTTP: reflect.TypeOf(HTTP2HTTPPluginOptions{}), - PluginSocks5: reflect.TypeOf(Socks5PluginOptions{}), - PluginStaticFile: reflect.TypeOf(StaticFilePluginOptions{}), - PluginUnixDomainSocket: reflect.TypeOf(UnixDomainSocketPluginOptions{}), - PluginTLS2Raw: reflect.TypeOf(TLS2RawPluginOptions{}), -} - type HTTP2HTTPSPluginOptions struct { Type string `json:"type,omitempty"` LocalAddr string `json:"localAddr,omitempty"` @@ -185,3 +187,9 @@ type TLS2RawPluginOptions struct { } func (o *TLS2RawPluginOptions) Complete() {} + +type VirtualNetPluginOptions struct { + Type string `json:"type,omitempty"` +} + +func (o *VirtualNetPluginOptions) Complete() {} diff --git a/pkg/config/v1/validation/client.go b/pkg/config/v1/validation/client.go index cc46607cb9c..bae21fda40b 100644 --- a/pkg/config/v1/validation/client.go +++ b/pkg/config/v1/validation/client.go @@ -23,6 +23,7 @@ import ( "github.com/samber/lo" v1 "github.com/fatedier/frp/pkg/config/v1" + "github.com/fatedier/frp/pkg/featuregate" ) func ValidateClientCommonConfig(c *v1.ClientCommonConfig) (Warning, error) { @@ -30,6 +31,13 @@ func ValidateClientCommonConfig(c *v1.ClientCommonConfig) (Warning, error) { warnings Warning errs error ) + // validate feature gates + if c.VirtualNet.Address != "" { + if !featuregate.Enabled(featuregate.VirtualNet) { + return warnings, fmt.Errorf("VirtualNet feature is not enabled; enable it by setting the appropriate feature gate flag") + } + } + if !slices.Contains(SupportedAuthMethods, c.Auth.Method) { errs = AppendError(errs, fmt.Errorf("invalid auth method, optional values are %v", SupportedAuthMethods)) } diff --git a/pkg/config/v1/visitor.go b/pkg/config/v1/visitor.go index 51fe88a6300..f00391c34e4 100644 --- a/pkg/config/v1/visitor.go +++ b/pkg/config/v1/visitor.go @@ -44,6 +44,9 @@ type VisitorBaseConfig struct { // It can be less than 0, it means don't bind to the port and only receive connections redirected from // other visitors. (This is not supported for SUDP now) BindPort int `json:"bindPort,omitempty"` + + // Plugin specifies what plugin should be used. + Plugin TypedVisitorPluginOptions `json:"plugin,omitempty"` } func (c *VisitorBaseConfig) GetBaseConfig() *VisitorBaseConfig { diff --git a/pkg/config/v1/visitor_plugin.go b/pkg/config/v1/visitor_plugin.go new file mode 100644 index 00000000000..5a4909bdb84 --- /dev/null +++ b/pkg/config/v1/visitor_plugin.go @@ -0,0 +1,86 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1 + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "reflect" +) + +const ( + VisitorPluginVirtualNet = "virtual_net" +) + +var visitorPluginOptionsTypeMap = map[string]reflect.Type{ + VisitorPluginVirtualNet: reflect.TypeOf(VirtualNetVisitorPluginOptions{}), +} + +type VisitorPluginOptions interface { + Complete() +} + +type TypedVisitorPluginOptions struct { + Type string `json:"type"` + VisitorPluginOptions +} + +func (c *TypedVisitorPluginOptions) UnmarshalJSON(b []byte) error { + if len(b) == 4 && string(b) == "null" { + return nil + } + + typeStruct := struct { + Type string `json:"type"` + }{} + if err := json.Unmarshal(b, &typeStruct); err != nil { + return err + } + + c.Type = typeStruct.Type + if c.Type == "" { + return errors.New("visitor plugin type is empty") + } + + v, ok := visitorPluginOptionsTypeMap[typeStruct.Type] + if !ok { + return fmt.Errorf("unknown visitor plugin type: %s", typeStruct.Type) + } + options := reflect.New(v).Interface().(VisitorPluginOptions) + + decoder := json.NewDecoder(bytes.NewBuffer(b)) + if DisallowUnknownFields { + decoder.DisallowUnknownFields() + } + + if err := decoder.Decode(options); err != nil { + return fmt.Errorf("unmarshal VisitorPluginOptions error: %v", err) + } + c.VisitorPluginOptions = options + return nil +} + +func (c *TypedVisitorPluginOptions) MarshalJSON() ([]byte, error) { + return json.Marshal(c.VisitorPluginOptions) +} + +type VirtualNetVisitorPluginOptions struct { + Type string `json:"type"` + DestinationIP string `json:"destinationIP"` +} + +func (o *VirtualNetVisitorPluginOptions) Complete() {} diff --git a/pkg/featuregate/feature_gate.go b/pkg/featuregate/feature_gate.go new file mode 100644 index 00000000000..c5fd684bbd2 --- /dev/null +++ b/pkg/featuregate/feature_gate.go @@ -0,0 +1,219 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package featuregate + +import ( + "fmt" + "sort" + "strings" + "sync" + "sync/atomic" +) + +// Feature represents a feature gate name +type Feature string + +// FeatureStage represents the maturity level of a feature +type FeatureStage string + +const ( + // Alpha means the feature is experimental and disabled by default + Alpha FeatureStage = "ALPHA" + // Beta means the feature is more stable but still might change and is disabled by default + Beta FeatureStage = "BETA" + // GA means the feature is generally available and enabled by default + GA FeatureStage = "" +) + +// FeatureSpec describes a feature and its properties +type FeatureSpec struct { + // Default is the default enablement state for the feature + Default bool + // LockToDefault indicates the feature cannot be changed from its default + LockToDefault bool + // Stage indicates the maturity level of the feature + Stage FeatureStage +} + +// Define all available features here +var ( + VirtualNet = Feature("VirtualNet") +) + +// defaultFeatures defines default features with their specifications +var defaultFeatures = map[Feature]FeatureSpec{ + // Actual features + VirtualNet: {Default: false, Stage: Alpha}, +} + +// FeatureGate indicates whether a given feature is enabled or not +type FeatureGate interface { + // Enabled returns true if the key is enabled + Enabled(key Feature) bool + // KnownFeatures returns a slice of strings describing the known features + KnownFeatures() []string +} + +// MutableFeatureGate allows for dynamic feature gate configuration +type MutableFeatureGate interface { + FeatureGate + + // SetFromMap sets feature gate values from a map[string]bool + SetFromMap(m map[string]bool) error + // Add adds features to the feature gate + Add(features map[Feature]FeatureSpec) error + // String returns a string representing the feature gate configuration + String() string +} + +// featureGate implements the FeatureGate and MutableFeatureGate interfaces +type featureGate struct { + // lock guards writes to known, enabled, and reads/writes of closed + lock sync.Mutex + // known holds a map[Feature]FeatureSpec + known atomic.Value + // enabled holds a map[Feature]bool + enabled atomic.Value + // closed is set to true once the feature gates are considered immutable + closed bool +} + +// NewFeatureGate creates a new feature gate with the default features +func NewFeatureGate() MutableFeatureGate { + known := map[Feature]FeatureSpec{} + for k, v := range defaultFeatures { + known[k] = v + } + + f := &featureGate{} + f.known.Store(known) + f.enabled.Store(map[Feature]bool{}) + return f +} + +// SetFromMap sets feature gate values from a map[string]bool +func (f *featureGate) SetFromMap(m map[string]bool) error { + f.lock.Lock() + defer f.lock.Unlock() + + // Copy existing state + known := map[Feature]FeatureSpec{} + for k, v := range f.known.Load().(map[Feature]FeatureSpec) { + known[k] = v + } + enabled := map[Feature]bool{} + for k, v := range f.enabled.Load().(map[Feature]bool) { + enabled[k] = v + } + + // Apply the new settings + for k, v := range m { + k := Feature(k) + featureSpec, ok := known[k] + if !ok { + return fmt.Errorf("unrecognized feature gate: %s", k) + } + if featureSpec.LockToDefault && featureSpec.Default != v { + return fmt.Errorf("cannot set feature gate %v to %v, feature is locked to %v", k, v, featureSpec.Default) + } + enabled[k] = v + } + + // Persist the changes + f.known.Store(known) + f.enabled.Store(enabled) + return nil +} + +// Add adds features to the feature gate +func (f *featureGate) Add(features map[Feature]FeatureSpec) error { + f.lock.Lock() + defer f.lock.Unlock() + + if f.closed { + return fmt.Errorf("cannot add feature gates after the feature gate is closed") + } + + // Copy existing state + known := map[Feature]FeatureSpec{} + for k, v := range f.known.Load().(map[Feature]FeatureSpec) { + known[k] = v + } + + // Add new features + for name, spec := range features { + if existingSpec, found := known[name]; found { + if existingSpec == spec { + continue + } + return fmt.Errorf("feature gate %q with different spec already exists: %v", name, existingSpec) + } + known[name] = spec + } + + // Persist changes + f.known.Store(known) + + return nil +} + +// String returns a string containing all enabled feature gates, formatted as "key1=value1,key2=value2,..." +func (f *featureGate) String() string { + pairs := []string{} + for k, v := range f.enabled.Load().(map[Feature]bool) { + pairs = append(pairs, fmt.Sprintf("%s=%t", k, v)) + } + sort.Strings(pairs) + return strings.Join(pairs, ",") +} + +// Enabled returns true if the key is enabled +func (f *featureGate) Enabled(key Feature) bool { + if v, ok := f.enabled.Load().(map[Feature]bool)[key]; ok { + return v + } + if v, ok := f.known.Load().(map[Feature]FeatureSpec)[key]; ok { + return v.Default + } + return false +} + +// KnownFeatures returns a slice of strings describing the FeatureGate's known features +// GA features are hidden from the list +func (f *featureGate) KnownFeatures() []string { + knownFeatures := f.known.Load().(map[Feature]FeatureSpec) + known := make([]string, 0, len(knownFeatures)) + for k, v := range knownFeatures { + if v.Stage == GA { + continue + } + known = append(known, fmt.Sprintf("%s=true|false (%s - default=%t)", k, v.Stage, v.Default)) + } + sort.Strings(known) + return known +} + +// Default feature gates instance +var DefaultFeatureGates = NewFeatureGate() + +// Enabled checks if a feature is enabled in the default feature gates +func Enabled(name Feature) bool { + return DefaultFeatureGates.Enabled(name) +} + +// SetFromMap sets feature gate values from a map in the default feature gates +func SetFromMap(featureMap map[string]bool) error { + return DefaultFeatureGates.SetFromMap(featureMap) +} diff --git a/pkg/plugin/client/http2http.go b/pkg/plugin/client/http2http.go index d7c4c7e492a..889a10f6643 100644 --- a/pkg/plugin/client/http2http.go +++ b/pkg/plugin/client/http2http.go @@ -14,13 +14,11 @@ //go:build !frps -package plugin +package client import ( "context" - "io" stdlog "log" - "net" "net/http" "net/http/httputil" @@ -42,7 +40,7 @@ type HTTP2HTTPPlugin struct { s *http.Server } -func NewHTTP2HTTPPlugin(options v1.ClientPluginOptions) (Plugin, error) { +func NewHTTP2HTTPPlugin(_ PluginContext, options v1.ClientPluginOptions) (Plugin, error) { opts := options.(*v1.HTTP2HTTPPluginOptions) listener := NewProxyListener() @@ -80,8 +78,8 @@ func NewHTTP2HTTPPlugin(options v1.ClientPluginOptions) (Plugin, error) { return p, nil } -func (p *HTTP2HTTPPlugin) Handle(_ context.Context, conn io.ReadWriteCloser, realConn net.Conn, _ *ExtraInfo) { - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) +func (p *HTTP2HTTPPlugin) Handle(_ context.Context, connInfo *ConnectionInfo) { + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) _ = p.l.PutConn(wrapConn) } diff --git a/pkg/plugin/client/http2https.go b/pkg/plugin/client/http2https.go index 66f9098912c..538f2850f1f 100644 --- a/pkg/plugin/client/http2https.go +++ b/pkg/plugin/client/http2https.go @@ -14,14 +14,12 @@ //go:build !frps -package plugin +package client import ( "context" "crypto/tls" - "io" stdlog "log" - "net" "net/http" "net/http/httputil" @@ -43,7 +41,7 @@ type HTTP2HTTPSPlugin struct { s *http.Server } -func NewHTTP2HTTPSPlugin(options v1.ClientPluginOptions) (Plugin, error) { +func NewHTTP2HTTPSPlugin(_ PluginContext, options v1.ClientPluginOptions) (Plugin, error) { opts := options.(*v1.HTTP2HTTPSPluginOptions) listener := NewProxyListener() @@ -89,8 +87,8 @@ func NewHTTP2HTTPSPlugin(options v1.ClientPluginOptions) (Plugin, error) { return p, nil } -func (p *HTTP2HTTPSPlugin) Handle(_ context.Context, conn io.ReadWriteCloser, realConn net.Conn, _ *ExtraInfo) { - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) +func (p *HTTP2HTTPSPlugin) Handle(_ context.Context, connInfo *ConnectionInfo) { + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) _ = p.l.PutConn(wrapConn) } diff --git a/pkg/plugin/client/http_proxy.go b/pkg/plugin/client/http_proxy.go index b7491bd1082..0f6b55f4438 100644 --- a/pkg/plugin/client/http_proxy.go +++ b/pkg/plugin/client/http_proxy.go @@ -14,7 +14,7 @@ //go:build !frps -package plugin +package client import ( "bufio" @@ -45,7 +45,7 @@ type HTTPProxy struct { s *http.Server } -func NewHTTPProxyPlugin(options v1.ClientPluginOptions) (Plugin, error) { +func NewHTTPProxyPlugin(_ PluginContext, options v1.ClientPluginOptions) (Plugin, error) { opts := options.(*v1.HTTPProxyPluginOptions) listener := NewProxyListener() @@ -69,8 +69,8 @@ func (hp *HTTPProxy) Name() string { return v1.PluginHTTPProxy } -func (hp *HTTPProxy) Handle(_ context.Context, conn io.ReadWriteCloser, realConn net.Conn, _ *ExtraInfo) { - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) +func (hp *HTTPProxy) Handle(_ context.Context, connInfo *ConnectionInfo) { + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) sc, rd := libnet.NewSharedConn(wrapConn) firstBytes := make([]byte, 7) diff --git a/pkg/plugin/client/https2http.go b/pkg/plugin/client/https2http.go index 9632a6fbc80..963b9d2e037 100644 --- a/pkg/plugin/client/https2http.go +++ b/pkg/plugin/client/https2http.go @@ -14,15 +14,13 @@ //go:build !frps -package plugin +package client import ( "context" "crypto/tls" "fmt" - "io" stdlog "log" - "net" "net/http" "net/http/httputil" "time" @@ -48,7 +46,7 @@ type HTTPS2HTTPPlugin struct { s *http.Server } -func NewHTTPS2HTTPPlugin(options v1.ClientPluginOptions) (Plugin, error) { +func NewHTTPS2HTTPPlugin(_ PluginContext, options v1.ClientPluginOptions) (Plugin, error) { opts := options.(*v1.HTTPS2HTTPPluginOptions) listener := NewProxyListener() @@ -106,10 +104,10 @@ func NewHTTPS2HTTPPlugin(options v1.ClientPluginOptions) (Plugin, error) { return p, nil } -func (p *HTTPS2HTTPPlugin) Handle(_ context.Context, conn io.ReadWriteCloser, realConn net.Conn, extra *ExtraInfo) { - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) - if extra.SrcAddr != nil { - wrapConn.SetRemoteAddr(extra.SrcAddr) +func (p *HTTPS2HTTPPlugin) Handle(_ context.Context, connInfo *ConnectionInfo) { + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) + if connInfo.SrcAddr != nil { + wrapConn.SetRemoteAddr(connInfo.SrcAddr) } _ = p.l.PutConn(wrapConn) } diff --git a/pkg/plugin/client/https2https.go b/pkg/plugin/client/https2https.go index 8121e0943de..5c669d367da 100644 --- a/pkg/plugin/client/https2https.go +++ b/pkg/plugin/client/https2https.go @@ -14,15 +14,13 @@ //go:build !frps -package plugin +package client import ( "context" "crypto/tls" "fmt" - "io" stdlog "log" - "net" "net/http" "net/http/httputil" "time" @@ -48,7 +46,7 @@ type HTTPS2HTTPSPlugin struct { s *http.Server } -func NewHTTPS2HTTPSPlugin(options v1.ClientPluginOptions) (Plugin, error) { +func NewHTTPS2HTTPSPlugin(_ PluginContext, options v1.ClientPluginOptions) (Plugin, error) { opts := options.(*v1.HTTPS2HTTPSPluginOptions) listener := NewProxyListener() @@ -112,10 +110,10 @@ func NewHTTPS2HTTPSPlugin(options v1.ClientPluginOptions) (Plugin, error) { return p, nil } -func (p *HTTPS2HTTPSPlugin) Handle(_ context.Context, conn io.ReadWriteCloser, realConn net.Conn, extra *ExtraInfo) { - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) - if extra.SrcAddr != nil { - wrapConn.SetRemoteAddr(extra.SrcAddr) +func (p *HTTPS2HTTPSPlugin) Handle(_ context.Context, connInfo *ConnectionInfo) { + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) + if connInfo.SrcAddr != nil { + wrapConn.SetRemoteAddr(connInfo.SrcAddr) } _ = p.l.PutConn(wrapConn) } diff --git a/pkg/plugin/client/plugin.go b/pkg/plugin/client/plugin.go index 3dce8592629..7bcd04893f5 100644 --- a/pkg/plugin/client/plugin.go +++ b/pkg/plugin/client/plugin.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package plugin +package client import ( "context" @@ -25,13 +25,18 @@ import ( pp "github.com/pires/go-proxyproto" v1 "github.com/fatedier/frp/pkg/config/v1" + "github.com/fatedier/frp/pkg/vnet" ) +type PluginContext struct { + Name string + VnetController *vnet.Controller +} + // Creators is used for create plugins to handle connections. var creators = make(map[string]CreatorFn) -// params has prefix "plugin_" -type CreatorFn func(options v1.ClientPluginOptions) (Plugin, error) +type CreatorFn func(pluginCtx PluginContext, options v1.ClientPluginOptions) (Plugin, error) func Register(name string, fn CreatorFn) { if _, exist := creators[name]; exist { @@ -40,16 +45,19 @@ func Register(name string, fn CreatorFn) { creators[name] = fn } -func Create(name string, options v1.ClientPluginOptions) (p Plugin, err error) { - if fn, ok := creators[name]; ok { - p, err = fn(options) +func Create(pluginName string, pluginCtx PluginContext, options v1.ClientPluginOptions) (p Plugin, err error) { + if fn, ok := creators[pluginName]; ok { + p, err = fn(pluginCtx, options) } else { - err = fmt.Errorf("plugin [%s] is not registered", name) + err = fmt.Errorf("plugin [%s] is not registered", pluginName) } return } -type ExtraInfo struct { +type ConnectionInfo struct { + Conn io.ReadWriteCloser + UnderlyingConn net.Conn + ProxyProtocolHeader *pp.Header SrcAddr net.Addr DstAddr net.Addr @@ -58,7 +66,7 @@ type ExtraInfo struct { type Plugin interface { Name() string - Handle(ctx context.Context, conn io.ReadWriteCloser, realConn net.Conn, extra *ExtraInfo) + Handle(ctx context.Context, connInfo *ConnectionInfo) Close() error } diff --git a/pkg/plugin/client/socks5.go b/pkg/plugin/client/socks5.go index 7478ebe1414..752dd1e198e 100644 --- a/pkg/plugin/client/socks5.go +++ b/pkg/plugin/client/socks5.go @@ -14,13 +14,12 @@ //go:build !frps -package plugin +package client import ( "context" "io" "log" - "net" gosocks5 "github.com/armon/go-socks5" @@ -36,7 +35,7 @@ type Socks5Plugin struct { Server *gosocks5.Server } -func NewSocks5Plugin(options v1.ClientPluginOptions) (p Plugin, err error) { +func NewSocks5Plugin(_ PluginContext, options v1.ClientPluginOptions) (p Plugin, err error) { opts := options.(*v1.Socks5PluginOptions) cfg := &gosocks5.Config{ @@ -51,9 +50,9 @@ func NewSocks5Plugin(options v1.ClientPluginOptions) (p Plugin, err error) { return } -func (sp *Socks5Plugin) Handle(_ context.Context, conn io.ReadWriteCloser, realConn net.Conn, _ *ExtraInfo) { - defer conn.Close() - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) +func (sp *Socks5Plugin) Handle(_ context.Context, connInfo *ConnectionInfo) { + defer connInfo.Conn.Close() + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) _ = sp.Server.ServeConn(wrapConn) } diff --git a/pkg/plugin/client/static_file.go b/pkg/plugin/client/static_file.go index 02cb9930728..0bab120aa22 100644 --- a/pkg/plugin/client/static_file.go +++ b/pkg/plugin/client/static_file.go @@ -14,12 +14,10 @@ //go:build !frps -package plugin +package client import ( "context" - "io" - "net" "net/http" "time" @@ -40,7 +38,7 @@ type StaticFilePlugin struct { s *http.Server } -func NewStaticFilePlugin(options v1.ClientPluginOptions) (Plugin, error) { +func NewStaticFilePlugin(_ PluginContext, options v1.ClientPluginOptions) (Plugin, error) { opts := options.(*v1.StaticFilePluginOptions) listener := NewProxyListener() @@ -70,8 +68,8 @@ func NewStaticFilePlugin(options v1.ClientPluginOptions) (Plugin, error) { return sp, nil } -func (sp *StaticFilePlugin) Handle(_ context.Context, conn io.ReadWriteCloser, realConn net.Conn, _ *ExtraInfo) { - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) +func (sp *StaticFilePlugin) Handle(_ context.Context, connInfo *ConnectionInfo) { + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) _ = sp.l.PutConn(wrapConn) } diff --git a/pkg/plugin/client/tls2raw.go b/pkg/plugin/client/tls2raw.go index adcc77417d8..445b6c91dfc 100644 --- a/pkg/plugin/client/tls2raw.go +++ b/pkg/plugin/client/tls2raw.go @@ -14,12 +14,11 @@ //go:build !frps -package plugin +package client import ( "context" "crypto/tls" - "io" "net" libio "github.com/fatedier/golib/io" @@ -40,7 +39,7 @@ type TLS2RawPlugin struct { tlsConfig *tls.Config } -func NewTLS2RawPlugin(options v1.ClientPluginOptions) (Plugin, error) { +func NewTLS2RawPlugin(_ PluginContext, options v1.ClientPluginOptions) (Plugin, error) { opts := options.(*v1.TLS2RawPluginOptions) p := &TLS2RawPlugin{ @@ -55,10 +54,10 @@ func NewTLS2RawPlugin(options v1.ClientPluginOptions) (Plugin, error) { return p, nil } -func (p *TLS2RawPlugin) Handle(ctx context.Context, conn io.ReadWriteCloser, realConn net.Conn, _ *ExtraInfo) { +func (p *TLS2RawPlugin) Handle(ctx context.Context, connInfo *ConnectionInfo) { xl := xlog.FromContextSafe(ctx) - wrapConn := netpkg.WrapReadWriteCloserToConn(conn, realConn) + wrapConn := netpkg.WrapReadWriteCloserToConn(connInfo.Conn, connInfo.UnderlyingConn) tlsConn := tls.Server(wrapConn, p.tlsConfig) if err := tlsConn.Handshake(); err != nil { diff --git a/pkg/plugin/client/unix_domain_socket.go b/pkg/plugin/client/unix_domain_socket.go index b6aa6075040..52d9c6525be 100644 --- a/pkg/plugin/client/unix_domain_socket.go +++ b/pkg/plugin/client/unix_domain_socket.go @@ -14,11 +14,10 @@ //go:build !frps -package plugin +package client import ( "context" - "io" "net" libio "github.com/fatedier/golib/io" @@ -35,7 +34,7 @@ type UnixDomainSocketPlugin struct { UnixAddr *net.UnixAddr } -func NewUnixDomainSocketPlugin(options v1.ClientPluginOptions) (p Plugin, err error) { +func NewUnixDomainSocketPlugin(_ PluginContext, options v1.ClientPluginOptions) (p Plugin, err error) { opts := options.(*v1.UnixDomainSocketPluginOptions) unixAddr, errRet := net.ResolveUnixAddr("unix", opts.UnixPath) @@ -50,20 +49,20 @@ func NewUnixDomainSocketPlugin(options v1.ClientPluginOptions) (p Plugin, err er return } -func (uds *UnixDomainSocketPlugin) Handle(ctx context.Context, conn io.ReadWriteCloser, _ net.Conn, extra *ExtraInfo) { +func (uds *UnixDomainSocketPlugin) Handle(ctx context.Context, connInfo *ConnectionInfo) { xl := xlog.FromContextSafe(ctx) localConn, err := net.DialUnix("unix", nil, uds.UnixAddr) if err != nil { xl.Warnf("dial to uds %s error: %v", uds.UnixAddr, err) return } - if extra.ProxyProtocolHeader != nil { - if _, err := extra.ProxyProtocolHeader.WriteTo(localConn); err != nil { + if connInfo.ProxyProtocolHeader != nil { + if _, err := connInfo.ProxyProtocolHeader.WriteTo(localConn); err != nil { return } } - libio.Join(localConn, conn) + libio.Join(localConn, connInfo.Conn) } func (uds *UnixDomainSocketPlugin) Name() string { diff --git a/pkg/plugin/client/virtual_net.go b/pkg/plugin/client/virtual_net.go new file mode 100644 index 00000000000..e1b29fdc843 --- /dev/null +++ b/pkg/plugin/client/virtual_net.go @@ -0,0 +1,71 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !frps + +package client + +import ( + "context" + + v1 "github.com/fatedier/frp/pkg/config/v1" + "github.com/fatedier/frp/pkg/util/xlog" +) + +func init() { + Register(v1.PluginVirtualNet, NewVirtualNetPlugin) +} + +type VirtualNetPlugin struct { + pluginCtx PluginContext + opts *v1.VirtualNetPluginOptions +} + +func NewVirtualNetPlugin(pluginCtx PluginContext, options v1.ClientPluginOptions) (Plugin, error) { + opts := options.(*v1.VirtualNetPluginOptions) + + p := &VirtualNetPlugin{ + pluginCtx: pluginCtx, + opts: opts, + } + return p, nil +} + +func (p *VirtualNetPlugin) Handle(ctx context.Context, connInfo *ConnectionInfo) { + xl := xlog.FromContextSafe(ctx) + + // Verify if virtual network controller is available + if p.pluginCtx.VnetController == nil { + return + } + + // Register the connection with the controller + routeName := p.pluginCtx.Name + err := p.pluginCtx.VnetController.RegisterServerConn(ctx, routeName, connInfo.Conn) + if err != nil { + xl.Errorf("virtual net failed to register server connection: %v", err) + return + } +} + +func (p *VirtualNetPlugin) Name() string { + return v1.PluginVirtualNet +} + +func (p *VirtualNetPlugin) Close() error { + if p.pluginCtx.VnetController != nil { + p.pluginCtx.VnetController.UnregisterServerConn(p.pluginCtx.Name) + } + return nil +} diff --git a/pkg/plugin/server/http.go b/pkg/plugin/server/http.go index 6046c38a848..196993ef8b6 100644 --- a/pkg/plugin/server/http.go +++ b/pkg/plugin/server/http.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package plugin +package server import ( "bytes" diff --git a/pkg/plugin/server/manager.go b/pkg/plugin/server/manager.go index 8f23b529fd8..dabfb46cbd0 100644 --- a/pkg/plugin/server/manager.go +++ b/pkg/plugin/server/manager.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package plugin +package server import ( "context" diff --git a/pkg/plugin/server/plugin.go b/pkg/plugin/server/plugin.go index 9456ee9b039..3d3c8cfdd65 100644 --- a/pkg/plugin/server/plugin.go +++ b/pkg/plugin/server/plugin.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package plugin +package server import ( "context" diff --git a/pkg/plugin/server/tracer.go b/pkg/plugin/server/tracer.go index 2f4f2ccc25d..5b6ede182ec 100644 --- a/pkg/plugin/server/tracer.go +++ b/pkg/plugin/server/tracer.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package plugin +package server import ( "context" diff --git a/pkg/plugin/server/types.go b/pkg/plugin/server/types.go index c9fc4a40225..4a5b7527185 100644 --- a/pkg/plugin/server/types.go +++ b/pkg/plugin/server/types.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package plugin +package server import ( "github.com/fatedier/frp/pkg/msg" diff --git a/pkg/plugin/visitor/plugin.go b/pkg/plugin/visitor/plugin.go new file mode 100644 index 00000000000..94adce093b0 --- /dev/null +++ b/pkg/plugin/visitor/plugin.go @@ -0,0 +1,58 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package visitor + +import ( + "context" + "fmt" + "net" + + v1 "github.com/fatedier/frp/pkg/config/v1" + "github.com/fatedier/frp/pkg/vnet" +) + +type PluginContext struct { + Name string + Ctx context.Context + VnetController *vnet.Controller + HandleConn func(net.Conn) +} + +// Creators is used for create plugins to handle connections. +var creators = make(map[string]CreatorFn) + +type CreatorFn func(pluginCtx PluginContext, options v1.VisitorPluginOptions) (Plugin, error) + +func Register(name string, fn CreatorFn) { + if _, exist := creators[name]; exist { + panic(fmt.Sprintf("plugin [%s] is already registered", name)) + } + creators[name] = fn +} + +func Create(pluginName string, pluginCtx PluginContext, options v1.VisitorPluginOptions) (p Plugin, err error) { + if fn, ok := creators[pluginName]; ok { + p, err = fn(pluginCtx, options) + } else { + err = fmt.Errorf("plugin [%s] is not registered", pluginName) + } + return +} + +type Plugin interface { + Name() string + Start() + Close() error +} diff --git a/pkg/plugin/visitor/virtual_net.go b/pkg/plugin/visitor/virtual_net.go new file mode 100644 index 00000000000..e452e14f810 --- /dev/null +++ b/pkg/plugin/visitor/virtual_net.go @@ -0,0 +1,232 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !frps + +package visitor + +import ( + "context" + "errors" + "fmt" + "net" + "sync" + "time" + + v1 "github.com/fatedier/frp/pkg/config/v1" + netutil "github.com/fatedier/frp/pkg/util/net" + "github.com/fatedier/frp/pkg/util/xlog" +) + +func init() { + Register(v1.VisitorPluginVirtualNet, NewVirtualNetPlugin) +} + +type VirtualNetPlugin struct { + pluginCtx PluginContext + + routes []net.IPNet + + mu sync.Mutex + controllerConn net.Conn + closeSignal chan struct{} + + ctx context.Context + cancel context.CancelFunc +} + +func NewVirtualNetPlugin(pluginCtx PluginContext, options v1.VisitorPluginOptions) (Plugin, error) { + opts := options.(*v1.VirtualNetVisitorPluginOptions) + + p := &VirtualNetPlugin{ + pluginCtx: pluginCtx, + routes: make([]net.IPNet, 0), + } + + p.ctx, p.cancel = context.WithCancel(pluginCtx.Ctx) + + if opts.DestinationIP == "" { + return nil, errors.New("destinationIP is required") + } + + // Parse DestinationIP as a single IP and create a host route + ip := net.ParseIP(opts.DestinationIP) + if ip == nil { + return nil, fmt.Errorf("invalid destination IP address [%s]", opts.DestinationIP) + } + + var mask net.IPMask + if ip.To4() != nil { + mask = net.CIDRMask(32, 32) // /32 for IPv4 + } else { + mask = net.CIDRMask(128, 128) // /128 for IPv6 + } + p.routes = append(p.routes, net.IPNet{IP: ip, Mask: mask}) + + return p, nil +} + +func (p *VirtualNetPlugin) Name() string { + return v1.VisitorPluginVirtualNet +} + +func (p *VirtualNetPlugin) Start() { + xl := xlog.FromContextSafe(p.pluginCtx.Ctx) + if p.pluginCtx.VnetController == nil { + return + } + + routeStr := "unknown" + if len(p.routes) > 0 { + routeStr = p.routes[0].String() + } + xl.Infof("Starting VirtualNetPlugin for visitor [%s], attempting to register routes for %s", p.pluginCtx.Name, routeStr) + + go p.run() +} + +func (p *VirtualNetPlugin) run() { + xl := xlog.FromContextSafe(p.ctx) + reconnectDelay := 10 * time.Second + + for { + // Create a signal channel for this connection attempt + currentCloseSignal := make(chan struct{}) + + // Store the signal channel under lock + p.mu.Lock() + p.closeSignal = currentCloseSignal + p.mu.Unlock() + + select { + case <-p.ctx.Done(): + xl.Infof("VirtualNetPlugin run loop for visitor [%s] stopping (context cancelled before pipe creation).", p.pluginCtx.Name) + // Ensure controllerConn from previous loop is cleaned up if necessary + p.cleanupControllerConn(xl) + return + default: + } + + controllerConn, pluginConn := net.Pipe() + + // Store controllerConn under lock for cleanup purposes + p.mu.Lock() + p.controllerConn = controllerConn + p.mu.Unlock() + + // Wrap pluginConn using CloseNotifyConn + pluginNotifyConn := netutil.WrapCloseNotifyConn(pluginConn, func() { + close(currentCloseSignal) // Signal the run loop + }) + + xl.Infof("Attempting to register client route for visitor [%s]", p.pluginCtx.Name) + err := p.pluginCtx.VnetController.RegisterClientRoute(p.ctx, p.pluginCtx.Name, p.routes, controllerConn) + if err != nil { + xl.Errorf("Failed to register client route for visitor [%s]: %v. Retrying after %v", p.pluginCtx.Name, err, reconnectDelay) + p.cleanupPipePair(xl, controllerConn, pluginConn) // Close both ends on registration failure + + // Wait before retrying registration, unless context is cancelled + select { + case <-time.After(reconnectDelay): + continue // Retry the loop + case <-p.ctx.Done(): + xl.Infof("VirtualNetPlugin registration retry wait interrupted for visitor [%s]", p.pluginCtx.Name) + return // Exit loop if context is cancelled during wait + } + } + + xl.Infof("Successfully registered client route for visitor [%s]. Starting connection handler with CloseNotifyConn.", p.pluginCtx.Name) + + // Pass the CloseNotifyConn to HandleConn. + // HandleConn is responsible for calling Close() on pluginNotifyConn. + p.pluginCtx.HandleConn(pluginNotifyConn) + + // Wait for either the plugin context to be cancelled or the wrapper's Close() to be called via the signal channel. + select { + case <-p.ctx.Done(): + xl.Infof("VirtualNetPlugin run loop stopping for visitor [%s] (context cancelled while waiting).", p.pluginCtx.Name) + // Context cancelled, ensure controller side is closed if HandleConn didn't close its side yet. + p.cleanupControllerConn(xl) + return + case <-currentCloseSignal: + xl.Infof("Detected connection closed via CloseNotifyConn for visitor [%s].", p.pluginCtx.Name) + // HandleConn closed the plugin side (pluginNotifyConn). The closeFn was called, closing currentCloseSignal. + // We still need to close the controller side. + p.cleanupControllerConn(xl) + + // Add a delay before attempting to reconnect, respecting context cancellation. + xl.Infof("Waiting %v before attempting reconnection for visitor [%s]...", reconnectDelay, p.pluginCtx.Name) + select { + case <-time.After(reconnectDelay): + // Delay completed, loop will continue. + case <-p.ctx.Done(): + xl.Infof("VirtualNetPlugin reconnection delay interrupted for visitor [%s]", p.pluginCtx.Name) + return // Exit loop if context is cancelled during wait + } + // Loop will continue to reconnect. + } + + // Loop will restart, context check at the beginning of the loop is sufficient. + xl.Infof("Re-establishing virtual connection for visitor [%s]...", p.pluginCtx.Name) + } +} + +// cleanupControllerConn closes the current controllerConn (if it exists) under lock. +func (p *VirtualNetPlugin) cleanupControllerConn(xl *xlog.Logger) { + p.mu.Lock() + defer p.mu.Unlock() + if p.controllerConn != nil { + xl.Debugf("Cleaning up controllerConn for visitor [%s]", p.pluginCtx.Name) + p.controllerConn.Close() + p.controllerConn = nil + } + // Also clear the closeSignal reference for the completed/cancelled connection attempt + p.closeSignal = nil +} + +// cleanupPipePair closes both ends of a pipe, used typically when registration fails. +func (p *VirtualNetPlugin) cleanupPipePair(xl *xlog.Logger, controllerConn, pluginConn net.Conn) { + xl.Debugf("Cleaning up pipe pair for visitor [%s] after registration failure", p.pluginCtx.Name) + controllerConn.Close() + pluginConn.Close() + p.mu.Lock() + p.controllerConn = nil // Ensure field is nil if it was briefly set + p.closeSignal = nil // Ensure field is nil if it was briefly set + p.mu.Unlock() +} + +// Close initiates the plugin shutdown. +func (p *VirtualNetPlugin) Close() error { + xl := xlog.FromContextSafe(p.pluginCtx.Ctx) // Use base context for close logging + xl.Infof("Closing VirtualNetPlugin for visitor [%s]", p.pluginCtx.Name) + + // 1. Signal the run loop goroutine to stop via context cancellation. + p.cancel() + + // 2. Unregister the route from the controller. + // This might implicitly cause the VnetController to close its end of the pipe (controllerConn). + if p.pluginCtx.VnetController != nil { + p.pluginCtx.VnetController.UnregisterClientRoute(p.pluginCtx.Name) + xl.Infof("Unregistered client route for visitor [%s]", p.pluginCtx.Name) + } else { + xl.Warnf("VnetController is nil during close for visitor [%s], cannot unregister route", p.pluginCtx.Name) + } + + // 3. Explicitly close the controller side of the pipe managed by this plugin. + // This ensures the pipe is broken even if the run loop is stuck or HandleConn hasn't closed its end. + p.cleanupControllerConn(xl) + xl.Infof("Finished cleaning up connections during close for visitor [%s]", p.pluginCtx.Name) + + return nil +} diff --git a/pkg/util/version/version.go b/pkg/util/version/version.go index f56e1ec072c..e74233c7083 100644 --- a/pkg/util/version/version.go +++ b/pkg/util/version/version.go @@ -14,7 +14,7 @@ package version -var version = "0.61.2" +var version = "0.62.0" func Full() string { return version diff --git a/pkg/vnet/controller.go b/pkg/vnet/controller.go new file mode 100644 index 00000000000..d43147a3076 --- /dev/null +++ b/pkg/vnet/controller.go @@ -0,0 +1,360 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vnet + +import ( + "context" + "encoding/base64" + "fmt" + "io" + "net" + "sync" + + "github.com/fatedier/golib/pool" + "github.com/songgao/water/waterutil" + "golang.org/x/net/ipv4" + "golang.org/x/net/ipv6" + + v1 "github.com/fatedier/frp/pkg/config/v1" + "github.com/fatedier/frp/pkg/util/log" + "github.com/fatedier/frp/pkg/util/xlog" +) + +const ( + maxPacketSize = 1420 +) + +type Controller struct { + addr string + + tun io.ReadWriteCloser + clientRouter *clientRouter // Route based on destination IP (client mode) + serverRouter *serverRouter // Route based on source IP (server mode) +} + +func NewController(cfg v1.VirtualNetConfig) *Controller { + return &Controller{ + addr: cfg.Address, + clientRouter: newClientRouter(), + serverRouter: newServerRouter(), + } +} + +func (c *Controller) Init() error { + tunDevice, err := OpenTun(context.Background(), c.addr) + if err != nil { + return err + } + c.tun = tunDevice + return nil +} + +func (c *Controller) Run() error { + conn := c.tun + + for { + buf := pool.GetBuf(maxPacketSize) + n, err := conn.Read(buf) + if err != nil { + pool.PutBuf(buf) + log.Warnf("vnet read from tun error: %v", err) + return err + } + + c.handlePacket(buf[:n]) + pool.PutBuf(buf) + } +} + +// handlePacket processes a single packet. The caller is responsible for managing the buffer. +func (c *Controller) handlePacket(buf []byte) { + log.Tracef("vnet read from tun [%d]: %s", len(buf), base64.StdEncoding.EncodeToString(buf)) + + var src, dst net.IP + switch { + case waterutil.IsIPv4(buf): + header, err := ipv4.ParseHeader(buf) + if err != nil { + log.Warnf("parse ipv4 header error:", err) + return + } + src = header.Src + dst = header.Dst + log.Tracef("%s >> %s %d/%-4d %-4x %d", + header.Src, header.Dst, + header.Len, header.TotalLen, header.ID, header.Flags) + case waterutil.IsIPv6(buf): + header, err := ipv6.ParseHeader(buf) + if err != nil { + log.Warnf("parse ipv6 header error:", err) + return + } + src = header.Src + dst = header.Dst + log.Tracef("%s >> %s %d %d", + header.Src, header.Dst, + header.PayloadLen, header.TrafficClass) + default: + log.Tracef("unknown packet, discarded(%d)", len(buf)) + return + } + + targetConn, err := c.clientRouter.findConn(dst) + if err == nil { + if err := WriteMessage(targetConn, buf); err != nil { + log.Warnf("write to client target conn error: %v", err) + } + return + } + + targetConn, err = c.serverRouter.findConnBySrc(dst) + if err == nil { + if err := WriteMessage(targetConn, buf); err != nil { + log.Warnf("write to server target conn error: %v", err) + } + return + } + + log.Tracef("no route found for packet from %s to %s", src, dst) +} + +func (c *Controller) Stop() error { + return c.tun.Close() +} + +// Client connection read loop +func (c *Controller) readLoopClient(ctx context.Context, conn io.ReadWriteCloser) { + xl := xlog.FromContextSafe(ctx) + for { + data, err := ReadMessage(conn) + if err != nil { + xl.Warnf("client read error: %v", err) + return + } + + if len(data) == 0 { + continue + } + + switch { + case waterutil.IsIPv4(data): + header, err := ipv4.ParseHeader(data) + if err != nil { + xl.Warnf("parse ipv4 header error: %v", err) + continue + } + xl.Tracef("%s >> %s %d/%-4d %-4x %d", + header.Src, header.Dst, + header.Len, header.TotalLen, header.ID, header.Flags) + case waterutil.IsIPv6(data): + header, err := ipv6.ParseHeader(data) + if err != nil { + xl.Warnf("parse ipv6 header error: %v", err) + continue + } + xl.Tracef("%s >> %s %d %d", + header.Src, header.Dst, + header.PayloadLen, header.TrafficClass) + default: + xl.Tracef("unknown packet, discarded(%d)", len(data)) + continue + } + + xl.Tracef("vnet write to tun (client) [%d]: %s", len(data), base64.StdEncoding.EncodeToString(data)) + _, err = c.tun.Write(data) + if err != nil { + xl.Warnf("client write tun error: %v", err) + } + } +} + +// Server connection read loop +func (c *Controller) readLoopServer(ctx context.Context, conn io.ReadWriteCloser) { + xl := xlog.FromContextSafe(ctx) + for { + data, err := ReadMessage(conn) + if err != nil { + xl.Warnf("server read error: %v", err) + return + } + + if len(data) == 0 { + continue + } + + // Register source IP to connection mapping + if waterutil.IsIPv4(data) || waterutil.IsIPv6(data) { + var src net.IP + if waterutil.IsIPv4(data) { + header, err := ipv4.ParseHeader(data) + if err == nil { + src = header.Src + c.serverRouter.registerSrcIP(src, conn) + } + } else { + header, err := ipv6.ParseHeader(data) + if err == nil { + src = header.Src + c.serverRouter.registerSrcIP(src, conn) + } + } + } + + xl.Tracef("vnet write to tun (server) [%d]: %s", len(data), base64.StdEncoding.EncodeToString(data)) + _, err = c.tun.Write(data) + if err != nil { + xl.Warnf("server write tun error: %v", err) + } + } +} + +// RegisterClientRoute Register client route (based on destination IP CIDR) +func (c *Controller) RegisterClientRoute(ctx context.Context, name string, routes []net.IPNet, conn io.ReadWriteCloser) error { + if err := c.clientRouter.addRoute(name, routes, conn); err != nil { + return err + } + go c.readLoopClient(ctx, conn) + return nil +} + +// RegisterServerConn Register server connection (dynamically associates with source IPs) +func (c *Controller) RegisterServerConn(ctx context.Context, name string, conn io.ReadWriteCloser) error { + if err := c.serverRouter.addConn(name, conn); err != nil { + return err + } + go c.readLoopServer(ctx, conn) + return nil +} + +// UnregisterServerConn Remove server connection from routing table +func (c *Controller) UnregisterServerConn(name string) { + c.serverRouter.delConn(name) +} + +// UnregisterClientRoute Remove client route from routing table +func (c *Controller) UnregisterClientRoute(name string) { + c.clientRouter.delRoute(name) +} + +// ParseRoutes Convert route strings to IPNet objects +func ParseRoutes(routeStrings []string) ([]net.IPNet, error) { + routes := make([]net.IPNet, 0, len(routeStrings)) + for _, r := range routeStrings { + _, ipNet, err := net.ParseCIDR(r) + if err != nil { + return nil, fmt.Errorf("parse route %s error: %v", r, err) + } + routes = append(routes, *ipNet) + } + return routes, nil +} + +// Client router (based on destination IP routing) +type clientRouter struct { + routes map[string]*routeElement + mu sync.RWMutex +} + +func newClientRouter() *clientRouter { + return &clientRouter{ + routes: make(map[string]*routeElement), + } +} + +func (r *clientRouter) addRoute(name string, routes []net.IPNet, conn io.ReadWriteCloser) error { + r.mu.Lock() + defer r.mu.Unlock() + r.routes[name] = &routeElement{ + name: name, + routes: routes, + conn: conn, + } + return nil +} + +func (r *clientRouter) findConn(dst net.IP) (io.Writer, error) { + r.mu.RLock() + defer r.mu.RUnlock() + for _, re := range r.routes { + for _, route := range re.routes { + if route.Contains(dst) { + return re.conn, nil + } + } + } + return nil, fmt.Errorf("no route found for destination %s", dst) +} + +func (r *clientRouter) delRoute(name string) { + r.mu.Lock() + defer r.mu.Unlock() + delete(r.routes, name) +} + +// Server router (based on source IP routing) +type serverRouter struct { + namedConns map[string]io.ReadWriteCloser // Name to connection mapping + srcIPConns map[string]io.Writer // Source IP string to connection mapping + mu sync.RWMutex +} + +func newServerRouter() *serverRouter { + return &serverRouter{ + namedConns: make(map[string]io.ReadWriteCloser), + srcIPConns: make(map[string]io.Writer), + } +} + +func (r *serverRouter) addConn(name string, conn io.ReadWriteCloser) error { + r.mu.Lock() + original, ok := r.namedConns[name] + r.namedConns[name] = conn + r.mu.Unlock() + if ok { + // Close the original connection if it exists + _ = original.Close() + } + return nil +} + +func (r *serverRouter) findConnBySrc(src net.IP) (io.Writer, error) { + r.mu.RLock() + defer r.mu.RUnlock() + conn, exists := r.srcIPConns[src.String()] + if !exists { + return nil, fmt.Errorf("no route found for source %s", src) + } + return conn, nil +} + +func (r *serverRouter) registerSrcIP(src net.IP, conn io.Writer) { + r.mu.Lock() + defer r.mu.Unlock() + r.srcIPConns[src.String()] = conn +} + +func (r *serverRouter) delConn(name string) { + r.mu.Lock() + defer r.mu.Unlock() + delete(r.namedConns, name) + // Note: We don't delete mappings from srcIPConns because we don't know which source IPs are associated with this connection + // This might cause dangling references, but they will be overwritten on new connections or restart +} + +type routeElement struct { + name string + routes []net.IPNet + conn io.ReadWriteCloser +} diff --git a/pkg/vnet/message.go b/pkg/vnet/message.go new file mode 100644 index 00000000000..002b090ab4a --- /dev/null +++ b/pkg/vnet/message.go @@ -0,0 +1,81 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vnet + +import ( + "encoding/binary" + "fmt" + "io" +) + +// Maximum message size +const ( + maxMessageSize = 1024 * 1024 // 1MB +) + +// Format: [length(4 bytes)][data(length bytes)] + +// ReadMessage reads a framed message from the reader +func ReadMessage(r io.Reader) ([]byte, error) { + // Read length (4 bytes) + var length uint32 + err := binary.Read(r, binary.LittleEndian, &length) + if err != nil { + return nil, fmt.Errorf("read message length error: %v", err) + } + + // Check length to prevent DoS + if length == 0 { + return nil, fmt.Errorf("message length is 0") + } + if length > maxMessageSize { + return nil, fmt.Errorf("message too large: %d > %d", length, maxMessageSize) + } + + // Read message data + data := make([]byte, length) + _, err = io.ReadFull(r, data) + if err != nil { + return nil, fmt.Errorf("read message data error: %v", err) + } + + return data, nil +} + +// WriteMessage writes a framed message to the writer +func WriteMessage(w io.Writer, data []byte) error { + // Get data length + length := uint32(len(data)) + if length == 0 { + return fmt.Errorf("message data length is 0") + } + if length > maxMessageSize { + return fmt.Errorf("message too large: %d > %d", length, maxMessageSize) + } + + // Write length + err := binary.Write(w, binary.LittleEndian, length) + if err != nil { + return fmt.Errorf("write message length error: %v", err) + } + + // Write message data + _, err = w.Write(data) + if err != nil { + return fmt.Errorf("write message data error: %v", err) + } + + return nil +} diff --git a/pkg/vnet/tun.go b/pkg/vnet/tun.go new file mode 100644 index 00000000000..bafc639271d --- /dev/null +++ b/pkg/vnet/tun.go @@ -0,0 +1,77 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vnet + +import ( + "context" + "io" + + "github.com/fatedier/golib/pool" + "golang.zx2c4.com/wireguard/tun" +) + +const ( + offset = 16 +) + +type TunDevice interface { + io.ReadWriteCloser +} + +func OpenTun(ctx context.Context, addr string) (TunDevice, error) { + td, err := openTun(ctx, addr) + if err != nil { + return nil, err + } + return &tunDeviceWrapper{dev: td}, nil +} + +type tunDeviceWrapper struct { + dev tun.Device +} + +func (d *tunDeviceWrapper) Read(p []byte) (int, error) { + buf := pool.GetBuf(len(p) + offset) + defer pool.PutBuf(buf) + + sz := make([]int, 1) + + n, err := d.dev.Read([][]byte{buf}, sz, offset) + if err != nil { + return 0, err + } + if n == 0 { + return 0, io.EOF + } + + dataSize := sz[0] + if dataSize > len(p) { + dataSize = len(p) + } + copy(p, buf[offset:offset+dataSize]) + return dataSize, nil +} + +func (d *tunDeviceWrapper) Write(p []byte) (int, error) { + buf := pool.GetBuf(len(p) + offset) + defer pool.PutBuf(buf) + + copy(buf[offset:], p) + return d.dev.Write([][]byte{buf}, offset) +} + +func (d *tunDeviceWrapper) Close() error { + return d.dev.Close() +} diff --git a/pkg/vnet/tun_darwin.go b/pkg/vnet/tun_darwin.go new file mode 100644 index 00000000000..9fa7d42c58f --- /dev/null +++ b/pkg/vnet/tun_darwin.go @@ -0,0 +1,85 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vnet + +import ( + "context" + "fmt" + "net" + "os/exec" + + "golang.zx2c4.com/wireguard/tun" +) + +const ( + defaultTunName = "utun" + defaultMTU = 1420 +) + +func openTun(_ context.Context, addr string) (tun.Device, error) { + dev, err := tun.CreateTUN(defaultTunName, defaultMTU) + if err != nil { + return nil, err + } + + name, err := dev.Name() + if err != nil { + return nil, err + } + + ip, ipNet, err := net.ParseCIDR(addr) + if err != nil { + return nil, err + } + + // Calculate a peer IP for the point-to-point tunnel + peerIP := generatePeerIP(ip) + + // Configure the interface with proper point-to-point addressing + if err = exec.Command("ifconfig", name, "inet", ip.String(), peerIP.String(), "mtu", fmt.Sprint(defaultMTU), "up").Run(); err != nil { + return nil, err + } + + // Add default route for the tunnel subnet + routes := []net.IPNet{*ipNet} + if err = addRoutes(name, routes); err != nil { + return nil, err + } + return dev, nil +} + +// generatePeerIP creates a peer IP for the point-to-point tunnel +// by incrementing the last octet of the IP +func generatePeerIP(ip net.IP) net.IP { + // Make a copy to avoid modifying the original + peerIP := make(net.IP, len(ip)) + copy(peerIP, ip) + + // Increment the last octet + peerIP[len(peerIP)-1]++ + + return peerIP +} + +// addRoutes configures system routes for the TUN interface +func addRoutes(ifName string, routes []net.IPNet) error { + for _, route := range routes { + routeStr := route.String() + if err := exec.Command("route", "add", "-net", routeStr, "-interface", ifName).Run(); err != nil { + return err + } + } + return nil +} diff --git a/pkg/vnet/tun_linux.go b/pkg/vnet/tun_linux.go new file mode 100644 index 00000000000..7c9c684cc97 --- /dev/null +++ b/pkg/vnet/tun_linux.go @@ -0,0 +1,84 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package vnet + +import ( + "context" + "fmt" + "net" + + "github.com/vishvananda/netlink" + "golang.zx2c4.com/wireguard/tun" +) + +const ( + defaultTunName = "utun" + defaultMTU = 1420 +) + +func openTun(_ context.Context, addr string) (tun.Device, error) { + dev, err := tun.CreateTUN(defaultTunName, defaultMTU) + if err != nil { + return nil, err + } + + name, err := dev.Name() + if err != nil { + return nil, err + } + + ifn, err := net.InterfaceByName(name) + if err != nil { + return nil, err + } + + link, err := netlink.LinkByName(name) + if err != nil { + return nil, err + } + + ip, cidr, err := net.ParseCIDR(addr) + if err != nil { + return nil, err + } + if err := netlink.AddrAdd(link, &netlink.Addr{ + IPNet: &net.IPNet{ + IP: ip, + Mask: cidr.Mask, + }, + }); err != nil { + return nil, err + } + + if err := netlink.LinkSetUp(link); err != nil { + return nil, err + } + + if err = addRoutes(ifn, cidr); err != nil { + return nil, err + } + return dev, nil +} + +func addRoutes(ifn *net.Interface, cidr *net.IPNet) error { + r := netlink.Route{ + Dst: cidr, + LinkIndex: ifn.Index, + } + if err := netlink.RouteReplace(&r); err != nil { + return fmt.Errorf("add route to %v error: %v", r.Dst, err) + } + return nil +} diff --git a/pkg/vnet/tun_unsupported.go b/pkg/vnet/tun_unsupported.go new file mode 100644 index 00000000000..0e2a811441f --- /dev/null +++ b/pkg/vnet/tun_unsupported.go @@ -0,0 +1,27 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !darwin && !linux + +package vnet + +import ( + "context" + "fmt" + "runtime" +) + +func openTun(ctx context.Context) (TunDevice, error) { + return nil, fmt.Errorf("virtual net is not supported on this platform (%s/%s)", runtime.GOOS, runtime.GOARCH) +} From e208043323d0ffb5d495c32e14787f509572174c Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 16 Apr 2025 16:17:26 +0800 Subject: [PATCH 61/90] vnet: update tun_unsupported function (#4752) --- pkg/vnet/tun_unsupported.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/vnet/tun_unsupported.go b/pkg/vnet/tun_unsupported.go index 0e2a811441f..731a06cda9e 100644 --- a/pkg/vnet/tun_unsupported.go +++ b/pkg/vnet/tun_unsupported.go @@ -20,8 +20,10 @@ import ( "context" "fmt" "runtime" + + "golang.zx2c4.com/wireguard/tun" ) -func openTun(ctx context.Context) (TunDevice, error) { +func openTun(_ context.Context, _ string) (tun.Device, error) { return nil, fmt.Errorf("virtual net is not supported on this platform (%s/%s)", runtime.GOOS, runtime.GOARCH) } From 27f66baf547ce88f45e2b9d68427410c729427c9 Mon Sep 17 00:00:00 2001 From: fatedier Date: Thu, 17 Apr 2025 01:34:14 +0800 Subject: [PATCH 62/90] update feature gates doc (#4755) --- README.md | 4 +--- doc/virtual_net.md | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e604d5af114..25537220e94 100644 --- a/README.md +++ b/README.md @@ -1283,9 +1283,7 @@ frp supports feature gates to enable or disable experimental features. This allo To enable an experimental feature, add the feature gate to your configuration: ```toml -featureGates = { - VirtualNet = true -} +featureGates = { VirtualNet = true } ``` ### Feature Lifecycle diff --git a/doc/virtual_net.md b/doc/virtual_net.md index 62653e9f188..6f135dfc2fc 100644 --- a/doc/virtual_net.md +++ b/doc/virtual_net.md @@ -49,9 +49,7 @@ type = "virtual_net" # frpc.toml (client side) serverAddr = "x.x.x.x" serverPort = 7000 -featureGates = { - VirtualNet = true -} +featureGates = { VirtualNet = true } # Configure the virtual network interface virtualNet.address = "100.86.0.2/24" From 3c8d648ddc4541f45bdc8d171c564834d8832abc Mon Sep 17 00:00:00 2001 From: fatedier Date: Sun, 27 Apr 2025 15:22:28 +0800 Subject: [PATCH 63/90] vnet: fix issues (#4771) --- client/admin_api.go | 12 +-- client/control.go | 2 +- client/service.go | 2 +- pkg/plugin/client/virtual_net.go | 43 +++++++--- pkg/plugin/visitor/virtual_net.go | 80 +++++-------------- pkg/util/vhost/http.go | 2 +- pkg/util/vhost/vhost.go | 2 +- pkg/vnet/controller.go | 118 +++++++++++++++++----------- pkg/vnet/message.go | 8 +- pkg/vnet/tun.go | 62 +++++++++++---- pkg/vnet/tun_linux.go | 63 +++++++++++++-- server/control.go | 2 +- server/dashboard_api.go | 20 ++--- server/service.go | 18 ++--- test/e2e/e2e.go | 2 +- test/e2e/framework/request.go | 6 +- test/e2e/legacy/features/real_ip.go | 4 +- test/e2e/v1/features/real_ip.go | 4 +- 18 files changed, 268 insertions(+), 182 deletions(-) diff --git a/client/admin_api.go b/client/admin_api.go index 708b2cbd9e6..f161d588b4d 100644 --- a/client/admin_api.go +++ b/client/admin_api.go @@ -165,9 +165,9 @@ func (svr *Service) apiStatus(w http.ResponseWriter, _ *http.Request) { res StatusResp = make(map[string][]ProxyStatusResp) ) - log.Infof("Http request [/api/status]") + log.Infof("http request [/api/status]") defer func() { - log.Infof("Http response [/api/status]") + log.Infof("http response [/api/status]") buf, _ = json.Marshal(&res) _, _ = w.Write(buf) }() @@ -198,9 +198,9 @@ func (svr *Service) apiStatus(w http.ResponseWriter, _ *http.Request) { func (svr *Service) apiGetConfig(w http.ResponseWriter, _ *http.Request) { res := GeneralResponse{Code: 200} - log.Infof("Http get request [/api/config]") + log.Infof("http get request [/api/config]") defer func() { - log.Infof("Http get response [/api/config], code [%d]", res.Code) + log.Infof("http get response [/api/config], code [%d]", res.Code) w.WriteHeader(res.Code) if len(res.Msg) > 0 { _, _ = w.Write([]byte(res.Msg)) @@ -228,9 +228,9 @@ func (svr *Service) apiGetConfig(w http.ResponseWriter, _ *http.Request) { func (svr *Service) apiPutConfig(w http.ResponseWriter, r *http.Request) { res := GeneralResponse{Code: 200} - log.Infof("Http put request [/api/config]") + log.Infof("http put request [/api/config]") defer func() { - log.Infof("Http put response [/api/config], code [%d]", res.Code) + log.Infof("http put response [/api/config], code [%d]", res.Code) w.WriteHeader(res.Code) if len(res.Msg) > 0 { _, _ = w.Write([]byte(res.Msg)) diff --git a/client/control.go b/client/control.go index 157b4aef913..0dd70b8c72f 100644 --- a/client/control.go +++ b/client/control.go @@ -189,7 +189,7 @@ func (ctl *Control) handlePong(m msg.Message) { inMsg := m.(*msg.Pong) if inMsg.Error != "" { - xl.Errorf("Pong message contains error: %s", inMsg.Error) + xl.Errorf("pong message contains error: %s", inMsg.Error) ctl.closeSession() return } diff --git a/client/service.go b/client/service.go index 57eb483559e..e163cac4554 100644 --- a/client/service.go +++ b/client/service.go @@ -341,7 +341,7 @@ func (svr *Service) loopLoginUntilSuccess(maxInterval time.Duration, firstLoginE ctl, err := NewControl(svr.ctx, sessionCtx) if err != nil { conn.Close() - xl.Errorf("NewControl error: %v", err) + xl.Errorf("new control error: %v", err) return false, err } ctl.SetInWorkConnCallback(svr.handleWorkConnCb) diff --git a/pkg/plugin/client/virtual_net.go b/pkg/plugin/client/virtual_net.go index e1b29fdc843..53570035c55 100644 --- a/pkg/plugin/client/virtual_net.go +++ b/pkg/plugin/client/virtual_net.go @@ -18,9 +18,10 @@ package client import ( "context" + "io" + "sync" v1 "github.com/fatedier/frp/pkg/config/v1" - "github.com/fatedier/frp/pkg/util/xlog" ) func init() { @@ -30,6 +31,8 @@ func init() { type VirtualNetPlugin struct { pluginCtx PluginContext opts *v1.VirtualNetPluginOptions + mu sync.Mutex + conns map[io.ReadWriteCloser]struct{} } func NewVirtualNetPlugin(pluginCtx PluginContext, options v1.ClientPluginOptions) (Plugin, error) { @@ -43,19 +46,32 @@ func NewVirtualNetPlugin(pluginCtx PluginContext, options v1.ClientPluginOptions } func (p *VirtualNetPlugin) Handle(ctx context.Context, connInfo *ConnectionInfo) { - xl := xlog.FromContextSafe(ctx) - // Verify if virtual network controller is available if p.pluginCtx.VnetController == nil { return } - // Register the connection with the controller - routeName := p.pluginCtx.Name - err := p.pluginCtx.VnetController.RegisterServerConn(ctx, routeName, connInfo.Conn) - if err != nil { - xl.Errorf("virtual net failed to register server connection: %v", err) - return + // Add the connection before starting the read loop to avoid race condition + // where RemoveConn might be called before the connection is added. + p.mu.Lock() + if p.conns == nil { + p.conns = make(map[io.ReadWriteCloser]struct{}) + } + p.conns[connInfo.Conn] = struct{}{} + p.mu.Unlock() + + // Register the connection with the controller and pass the cleanup function + p.pluginCtx.VnetController.StartServerConnReadLoop(ctx, connInfo.Conn, func() { + p.RemoveConn(connInfo.Conn) + }) +} + +func (p *VirtualNetPlugin) RemoveConn(conn io.ReadWriteCloser) { + p.mu.Lock() + defer p.mu.Unlock() + // Check if the map exists, as Close might have set it to nil concurrently + if p.conns != nil { + delete(p.conns, conn) } } @@ -64,8 +80,13 @@ func (p *VirtualNetPlugin) Name() string { } func (p *VirtualNetPlugin) Close() error { - if p.pluginCtx.VnetController != nil { - p.pluginCtx.VnetController.UnregisterServerConn(p.pluginCtx.Name) + p.mu.Lock() + defer p.mu.Unlock() + + // Close any remaining connections + for conn := range p.conns { + _ = conn.Close() } + p.conns = nil return nil } diff --git a/pkg/plugin/visitor/virtual_net.go b/pkg/plugin/visitor/virtual_net.go index e452e14f810..f660c0c89e5 100644 --- a/pkg/plugin/visitor/virtual_net.go +++ b/pkg/plugin/visitor/virtual_net.go @@ -60,7 +60,7 @@ func NewVirtualNetPlugin(pluginCtx PluginContext, options v1.VisitorPluginOption return nil, errors.New("destinationIP is required") } - // Parse DestinationIP as a single IP and create a host route + // Parse DestinationIP and create a host route. ip := net.ParseIP(opts.DestinationIP) if ip == nil { return nil, fmt.Errorf("invalid destination IP address [%s]", opts.DestinationIP) @@ -91,7 +91,7 @@ func (p *VirtualNetPlugin) Start() { if len(p.routes) > 0 { routeStr = p.routes[0].String() } - xl.Infof("Starting VirtualNetPlugin for visitor [%s], attempting to register routes for %s", p.pluginCtx.Name, routeStr) + xl.Infof("starting VirtualNetPlugin for visitor [%s], attempting to register routes for %s", p.pluginCtx.Name, routeStr) go p.run() } @@ -101,10 +101,8 @@ func (p *VirtualNetPlugin) run() { reconnectDelay := 10 * time.Second for { - // Create a signal channel for this connection attempt currentCloseSignal := make(chan struct{}) - // Store the signal channel under lock p.mu.Lock() p.closeSignal = currentCloseSignal p.mu.Unlock() @@ -112,7 +110,6 @@ func (p *VirtualNetPlugin) run() { select { case <-p.ctx.Done(): xl.Infof("VirtualNetPlugin run loop for visitor [%s] stopping (context cancelled before pipe creation).", p.pluginCtx.Name) - // Ensure controllerConn from previous loop is cleaned up if necessary p.cleanupControllerConn(xl) return default: @@ -120,65 +117,43 @@ func (p *VirtualNetPlugin) run() { controllerConn, pluginConn := net.Pipe() - // Store controllerConn under lock for cleanup purposes p.mu.Lock() p.controllerConn = controllerConn p.mu.Unlock() - // Wrap pluginConn using CloseNotifyConn pluginNotifyConn := netutil.WrapCloseNotifyConn(pluginConn, func() { - close(currentCloseSignal) // Signal the run loop + close(currentCloseSignal) // Signal the run loop on close. }) - xl.Infof("Attempting to register client route for visitor [%s]", p.pluginCtx.Name) - err := p.pluginCtx.VnetController.RegisterClientRoute(p.ctx, p.pluginCtx.Name, p.routes, controllerConn) - if err != nil { - xl.Errorf("Failed to register client route for visitor [%s]: %v. Retrying after %v", p.pluginCtx.Name, err, reconnectDelay) - p.cleanupPipePair(xl, controllerConn, pluginConn) // Close both ends on registration failure - - // Wait before retrying registration, unless context is cancelled - select { - case <-time.After(reconnectDelay): - continue // Retry the loop - case <-p.ctx.Done(): - xl.Infof("VirtualNetPlugin registration retry wait interrupted for visitor [%s]", p.pluginCtx.Name) - return // Exit loop if context is cancelled during wait - } - } - - xl.Infof("Successfully registered client route for visitor [%s]. Starting connection handler with CloseNotifyConn.", p.pluginCtx.Name) + xl.Infof("attempting to register client route for visitor [%s]", p.pluginCtx.Name) + p.pluginCtx.VnetController.RegisterClientRoute(p.ctx, p.pluginCtx.Name, p.routes, controllerConn) + xl.Infof("successfully registered client route for visitor [%s]. Starting connection handler with CloseNotifyConn.", p.pluginCtx.Name) // Pass the CloseNotifyConn to HandleConn. // HandleConn is responsible for calling Close() on pluginNotifyConn. p.pluginCtx.HandleConn(pluginNotifyConn) - // Wait for either the plugin context to be cancelled or the wrapper's Close() to be called via the signal channel. + // Wait for context cancellation or connection close. select { case <-p.ctx.Done(): xl.Infof("VirtualNetPlugin run loop stopping for visitor [%s] (context cancelled while waiting).", p.pluginCtx.Name) - // Context cancelled, ensure controller side is closed if HandleConn didn't close its side yet. p.cleanupControllerConn(xl) return case <-currentCloseSignal: - xl.Infof("Detected connection closed via CloseNotifyConn for visitor [%s].", p.pluginCtx.Name) - // HandleConn closed the plugin side (pluginNotifyConn). The closeFn was called, closing currentCloseSignal. - // We still need to close the controller side. + xl.Infof("detected connection closed via CloseNotifyConn for visitor [%s].", p.pluginCtx.Name) + // HandleConn closed the plugin side. Close the controller side. p.cleanupControllerConn(xl) - // Add a delay before attempting to reconnect, respecting context cancellation. - xl.Infof("Waiting %v before attempting reconnection for visitor [%s]...", reconnectDelay, p.pluginCtx.Name) + xl.Infof("waiting %v before attempting reconnection for visitor [%s]...", reconnectDelay, p.pluginCtx.Name) select { case <-time.After(reconnectDelay): - // Delay completed, loop will continue. case <-p.ctx.Done(): xl.Infof("VirtualNetPlugin reconnection delay interrupted for visitor [%s]", p.pluginCtx.Name) - return // Exit loop if context is cancelled during wait + return } - // Loop will continue to reconnect. } - // Loop will restart, context check at the beginning of the loop is sufficient. - xl.Infof("Re-establishing virtual connection for visitor [%s]...", p.pluginCtx.Name) + xl.Infof("re-establishing virtual connection for visitor [%s]...", p.pluginCtx.Name) } } @@ -187,46 +162,31 @@ func (p *VirtualNetPlugin) cleanupControllerConn(xl *xlog.Logger) { p.mu.Lock() defer p.mu.Unlock() if p.controllerConn != nil { - xl.Debugf("Cleaning up controllerConn for visitor [%s]", p.pluginCtx.Name) + xl.Debugf("cleaning up controllerConn for visitor [%s]", p.pluginCtx.Name) p.controllerConn.Close() p.controllerConn = nil } - // Also clear the closeSignal reference for the completed/cancelled connection attempt p.closeSignal = nil } -// cleanupPipePair closes both ends of a pipe, used typically when registration fails. -func (p *VirtualNetPlugin) cleanupPipePair(xl *xlog.Logger, controllerConn, pluginConn net.Conn) { - xl.Debugf("Cleaning up pipe pair for visitor [%s] after registration failure", p.pluginCtx.Name) - controllerConn.Close() - pluginConn.Close() - p.mu.Lock() - p.controllerConn = nil // Ensure field is nil if it was briefly set - p.closeSignal = nil // Ensure field is nil if it was briefly set - p.mu.Unlock() -} - // Close initiates the plugin shutdown. func (p *VirtualNetPlugin) Close() error { - xl := xlog.FromContextSafe(p.pluginCtx.Ctx) // Use base context for close logging - xl.Infof("Closing VirtualNetPlugin for visitor [%s]", p.pluginCtx.Name) + xl := xlog.FromContextSafe(p.pluginCtx.Ctx) + xl.Infof("closing VirtualNetPlugin for visitor [%s]", p.pluginCtx.Name) - // 1. Signal the run loop goroutine to stop via context cancellation. + // Signal the run loop goroutine to stop. p.cancel() - // 2. Unregister the route from the controller. - // This might implicitly cause the VnetController to close its end of the pipe (controllerConn). + // Unregister the route from the controller. if p.pluginCtx.VnetController != nil { p.pluginCtx.VnetController.UnregisterClientRoute(p.pluginCtx.Name) - xl.Infof("Unregistered client route for visitor [%s]", p.pluginCtx.Name) - } else { - xl.Warnf("VnetController is nil during close for visitor [%s], cannot unregister route", p.pluginCtx.Name) + xl.Infof("unregistered client route for visitor [%s]", p.pluginCtx.Name) } - // 3. Explicitly close the controller side of the pipe managed by this plugin. + // Explicitly close the controller side of the pipe. // This ensures the pipe is broken even if the run loop is stuck or HandleConn hasn't closed its end. p.cleanupControllerConn(xl) - xl.Infof("Finished cleaning up connections during close for visitor [%s]", p.pluginCtx.Name) + xl.Infof("finished cleaning up connections during close for visitor [%s]", p.pluginCtx.Name) return nil } diff --git a/pkg/util/vhost/http.go b/pkg/util/vhost/http.go index bc458a5c48a..46ebc3c7d7f 100644 --- a/pkg/util/vhost/http.go +++ b/pkg/util/vhost/http.go @@ -162,7 +162,7 @@ func (rp *HTTPReverseProxy) UnRegister(routeCfg RouteConfig) { func (rp *HTTPReverseProxy) GetRouteConfig(domain, location, routeByHTTPUser string) *RouteConfig { vr, ok := rp.getVhost(domain, location, routeByHTTPUser) if ok { - log.Debugf("get new HTTP request host [%s] path [%s] httpuser [%s]", domain, location, routeByHTTPUser) + log.Debugf("get new http request host [%s] path [%s] httpuser [%s]", domain, location, routeByHTTPUser) return vr.payload.(*RouteConfig) } return nil diff --git a/pkg/util/vhost/vhost.go b/pkg/util/vhost/vhost.go index 75b472b6ee4..66dd577d8ec 100644 --- a/pkg/util/vhost/vhost.go +++ b/pkg/util/vhost/vhost.go @@ -275,7 +275,7 @@ func (l *Listener) Accept() (net.Conn, error) { xl := xlog.FromContextSafe(l.ctx) conn, ok := <-l.accept if !ok { - return nil, fmt.Errorf("Listener closed") + return nil, fmt.Errorf("listener closed") } // if rewriteHost func is exist diff --git a/pkg/vnet/controller.go b/pkg/vnet/controller.go index d43147a3076..ca71a8c3abd 100644 --- a/pkg/vnet/controller.go +++ b/pkg/vnet/controller.go @@ -87,7 +87,7 @@ func (c *Controller) handlePacket(buf []byte) { case waterutil.IsIPv4(buf): header, err := ipv4.ParseHeader(buf) if err != nil { - log.Warnf("parse ipv4 header error:", err) + log.Warnf("parse ipv4 header error: %v", err) return } src = header.Src @@ -98,7 +98,7 @@ func (c *Controller) handlePacket(buf []byte) { case waterutil.IsIPv6(buf): header, err := ipv6.ParseHeader(buf) if err != nil { - log.Warnf("parse ipv6 header error:", err) + log.Warnf("parse ipv6 header error: %v", err) return } src = header.Src @@ -137,6 +137,12 @@ func (c *Controller) Stop() error { // Client connection read loop func (c *Controller) readLoopClient(ctx context.Context, conn io.ReadWriteCloser) { xl := xlog.FromContextSafe(ctx) + defer func() { + // Remove the route when read loop ends (connection closed) + c.clientRouter.removeConnRoute(conn) + conn.Close() + }() + for { data, err := ReadMessage(conn) if err != nil { @@ -181,8 +187,18 @@ func (c *Controller) readLoopClient(ctx context.Context, conn io.ReadWriteCloser } // Server connection read loop -func (c *Controller) readLoopServer(ctx context.Context, conn io.ReadWriteCloser) { +func (c *Controller) readLoopServer(ctx context.Context, conn io.ReadWriteCloser, onClose func()) { xl := xlog.FromContextSafe(ctx) + defer func() { + // Clean up all IP mappings associated with this connection when it closes + c.serverRouter.cleanupConnIPs(conn) + // Call the provided callback upon closure + if onClose != nil { + onClose() + } + conn.Close() + }() + for { data, err := ReadMessage(conn) if err != nil { @@ -220,27 +236,11 @@ func (c *Controller) readLoopServer(ctx context.Context, conn io.ReadWriteCloser } } -// RegisterClientRoute Register client route (based on destination IP CIDR) -func (c *Controller) RegisterClientRoute(ctx context.Context, name string, routes []net.IPNet, conn io.ReadWriteCloser) error { - if err := c.clientRouter.addRoute(name, routes, conn); err != nil { - return err - } +// RegisterClientRoute registers a client route (based on destination IP CIDR) +// and starts the read loop +func (c *Controller) RegisterClientRoute(ctx context.Context, name string, routes []net.IPNet, conn io.ReadWriteCloser) { + c.clientRouter.addRoute(name, routes, conn) go c.readLoopClient(ctx, conn) - return nil -} - -// RegisterServerConn Register server connection (dynamically associates with source IPs) -func (c *Controller) RegisterServerConn(ctx context.Context, name string, conn io.ReadWriteCloser) error { - if err := c.serverRouter.addConn(name, conn); err != nil { - return err - } - go c.readLoopServer(ctx, conn) - return nil -} - -// UnregisterServerConn Remove server connection from routing table -func (c *Controller) UnregisterServerConn(name string) { - c.serverRouter.delConn(name) } // UnregisterClientRoute Remove client route from routing table @@ -248,6 +248,12 @@ func (c *Controller) UnregisterClientRoute(name string) { c.clientRouter.delRoute(name) } +// StartServerConnReadLoop starts the read loop for a server connection +// (dynamically associates with source IPs) +func (c *Controller) StartServerConnReadLoop(ctx context.Context, conn io.ReadWriteCloser, onClose func()) { + go c.readLoopServer(ctx, conn, onClose) +} + // ParseRoutes Convert route strings to IPNet objects func ParseRoutes(routeStrings []string) ([]net.IPNet, error) { routes := make([]net.IPNet, 0, len(routeStrings)) @@ -273,7 +279,7 @@ func newClientRouter() *clientRouter { } } -func (r *clientRouter) addRoute(name string, routes []net.IPNet, conn io.ReadWriteCloser) error { +func (r *clientRouter) addRoute(name string, routes []net.IPNet, conn io.ReadWriteCloser) { r.mu.Lock() defer r.mu.Unlock() r.routes[name] = &routeElement{ @@ -281,7 +287,6 @@ func (r *clientRouter) addRoute(name string, routes []net.IPNet, conn io.ReadWri routes: routes, conn: conn, } - return nil } func (r *clientRouter) findConn(dst net.IP) (io.Writer, error) { @@ -303,32 +308,29 @@ func (r *clientRouter) delRoute(name string) { delete(r.routes, name) } -// Server router (based on source IP routing) +func (r *clientRouter) removeConnRoute(conn io.Writer) { + r.mu.Lock() + defer r.mu.Unlock() + for name, re := range r.routes { + if re.conn == conn { + delete(r.routes, name) + return + } + } +} + +// Server router (based solely on source IP routing) type serverRouter struct { - namedConns map[string]io.ReadWriteCloser // Name to connection mapping - srcIPConns map[string]io.Writer // Source IP string to connection mapping + srcIPConns map[string]io.Writer // Source IP string to connection mapping mu sync.RWMutex } func newServerRouter() *serverRouter { return &serverRouter{ - namedConns: make(map[string]io.ReadWriteCloser), srcIPConns: make(map[string]io.Writer), } } -func (r *serverRouter) addConn(name string, conn io.ReadWriteCloser) error { - r.mu.Lock() - original, ok := r.namedConns[name] - r.namedConns[name] = conn - r.mu.Unlock() - if ok { - // Close the original connection if it exists - _ = original.Close() - } - return nil -} - func (r *serverRouter) findConnBySrc(src net.IP) (io.Writer, error) { r.mu.RLock() defer r.mu.RUnlock() @@ -340,17 +342,41 @@ func (r *serverRouter) findConnBySrc(src net.IP) (io.Writer, error) { } func (r *serverRouter) registerSrcIP(src net.IP, conn io.Writer) { + key := src.String() + + r.mu.RLock() + existingConn, ok := r.srcIPConns[key] + r.mu.RUnlock() + + // If the entry exists and the connection is the same, no need to do anything. + if ok && existingConn == conn { + return + } + + // Acquire write lock to update the map. r.mu.Lock() defer r.mu.Unlock() - r.srcIPConns[src.String()] = conn + + // Double-check after acquiring the write lock to handle potential race conditions. + existingConn, ok = r.srcIPConns[key] + if ok && existingConn == conn { + return + } + + r.srcIPConns[key] = conn } -func (r *serverRouter) delConn(name string) { +// cleanupConnIPs removes all IP mappings associated with the specified connection +func (r *serverRouter) cleanupConnIPs(conn io.Writer) { r.mu.Lock() defer r.mu.Unlock() - delete(r.namedConns, name) - // Note: We don't delete mappings from srcIPConns because we don't know which source IPs are associated with this connection - // This might cause dangling references, but they will be overwritten on new connections or restart + + // Find and delete all IP mappings pointing to this connection + for ip, mappedConn := range r.srcIPConns { + if mappedConn == conn { + delete(r.srcIPConns, ip) + } + } } type routeElement struct { diff --git a/pkg/vnet/message.go b/pkg/vnet/message.go index 002b090ab4a..68ac7704c12 100644 --- a/pkg/vnet/message.go +++ b/pkg/vnet/message.go @@ -33,7 +33,7 @@ func ReadMessage(r io.Reader) ([]byte, error) { var length uint32 err := binary.Read(r, binary.LittleEndian, &length) if err != nil { - return nil, fmt.Errorf("read message length error: %v", err) + return nil, fmt.Errorf("read message length error: %w", err) } // Check length to prevent DoS @@ -48,7 +48,7 @@ func ReadMessage(r io.Reader) ([]byte, error) { data := make([]byte, length) _, err = io.ReadFull(r, data) if err != nil { - return nil, fmt.Errorf("read message data error: %v", err) + return nil, fmt.Errorf("read message data error: %w", err) } return data, nil @@ -68,13 +68,13 @@ func WriteMessage(w io.Writer, data []byte) error { // Write length err := binary.Write(w, binary.LittleEndian, length) if err != nil { - return fmt.Errorf("write message length error: %v", err) + return fmt.Errorf("write message length error: %w", err) } // Write message data _, err = w.Write(data) if err != nil { - return fmt.Errorf("write message data error: %v", err) + return fmt.Errorf("write message data error: %w", err) } return nil diff --git a/pkg/vnet/tun.go b/pkg/vnet/tun.go index bafc639271d..d26314d053e 100644 --- a/pkg/vnet/tun.go +++ b/pkg/vnet/tun.go @@ -23,7 +23,8 @@ import ( ) const ( - offset = 16 + offset = 16 + defaultPacketSize = 1420 ) type TunDevice interface { @@ -35,20 +36,45 @@ func OpenTun(ctx context.Context, addr string) (TunDevice, error) { if err != nil { return nil, err } - return &tunDeviceWrapper{dev: td}, nil + + mtu, err := td.MTU() + if err != nil { + mtu = defaultPacketSize + } + + bufferSize := max(mtu, defaultPacketSize) + batchSize := td.BatchSize() + + device := &tunDeviceWrapper{ + dev: td, + bufferSize: bufferSize, + readBuffers: make([][]byte, batchSize), + sizeBuffer: make([]int, batchSize), + } + + for i := range device.readBuffers { + device.readBuffers[i] = make([]byte, offset+bufferSize) + } + + return device, nil } type tunDeviceWrapper struct { - dev tun.Device + dev tun.Device + bufferSize int + readBuffers [][]byte + packetBuffers [][]byte + sizeBuffer []int } func (d *tunDeviceWrapper) Read(p []byte) (int, error) { - buf := pool.GetBuf(len(p) + offset) - defer pool.PutBuf(buf) - - sz := make([]int, 1) + if len(d.packetBuffers) > 0 { + n := copy(p, d.packetBuffers[0]) + d.packetBuffers = d.packetBuffers[1:] + return n, nil + } - n, err := d.dev.Read([][]byte{buf}, sz, offset) + n, err := d.dev.Read(d.readBuffers, d.sizeBuffer, offset) if err != nil { return 0, err } @@ -56,20 +82,26 @@ func (d *tunDeviceWrapper) Read(p []byte) (int, error) { return 0, io.EOF } - dataSize := sz[0] - if dataSize > len(p) { - dataSize = len(p) + for i := range n { + if d.sizeBuffer[i] <= 0 { + continue + } + d.packetBuffers = append(d.packetBuffers, d.readBuffers[i][offset:offset+d.sizeBuffer[i]]) } - copy(p, buf[offset:offset+dataSize]) + + dataSize := copy(p, d.packetBuffers[0]) + d.packetBuffers = d.packetBuffers[1:] + return dataSize, nil } func (d *tunDeviceWrapper) Write(p []byte) (int, error) { - buf := pool.GetBuf(len(p) + offset) + buf := pool.GetBuf(offset + d.bufferSize) defer pool.PutBuf(buf) - copy(buf[offset:], p) - return d.dev.Write([][]byte{buf}, offset) + n := copy(buf[offset:], p) + _, err := d.dev.Write([][]byte{buf[:offset+n]}, offset) + return n, err } func (d *tunDeviceWrapper) Close() error { diff --git a/pkg/vnet/tun_linux.go b/pkg/vnet/tun_linux.go index 7c9c684cc97..2e0cc56b234 100644 --- a/pkg/vnet/tun_linux.go +++ b/pkg/vnet/tun_linux.go @@ -16,35 +16,44 @@ package vnet import ( "context" + "crypto/sha256" + "encoding/hex" "fmt" "net" + "strconv" + "strings" "github.com/vishvananda/netlink" "golang.zx2c4.com/wireguard/tun" ) const ( - defaultTunName = "utun" - defaultMTU = 1420 + baseTunName = "utun" + defaultMTU = 1420 ) func openTun(_ context.Context, addr string) (tun.Device, error) { - dev, err := tun.CreateTUN(defaultTunName, defaultMTU) + name, err := findNextTunName(baseTunName) if err != nil { - return nil, err + name = getFallbackTunName(baseTunName, addr) + } + + tunDevice, err := tun.CreateTUN(name, defaultMTU) + if err != nil { + return nil, fmt.Errorf("failed to create TUN device '%s': %w", name, err) } - name, err := dev.Name() + actualName, err := tunDevice.Name() if err != nil { return nil, err } - ifn, err := net.InterfaceByName(name) + ifn, err := net.InterfaceByName(actualName) if err != nil { return nil, err } - link, err := netlink.LinkByName(name) + link, err := netlink.LinkByName(actualName) if err != nil { return nil, err } @@ -69,7 +78,34 @@ func openTun(_ context.Context, addr string) (tun.Device, error) { if err = addRoutes(ifn, cidr); err != nil { return nil, err } - return dev, nil + return tunDevice, nil +} + +func findNextTunName(basename string) (string, error) { + interfaces, err := net.Interfaces() + if err != nil { + return "", fmt.Errorf("failed to get network interfaces: %w", err) + } + maxSuffix := -1 + + for _, iface := range interfaces { + name := iface.Name + if strings.HasPrefix(name, basename) { + suffix := name[len(basename):] + if suffix == "" { + continue + } + + numSuffix, err := strconv.Atoi(suffix) + if err == nil && numSuffix > maxSuffix { + maxSuffix = numSuffix + } + } + } + + nextSuffix := maxSuffix + 1 + name := fmt.Sprintf("%s%d", basename, nextSuffix) + return name, nil } func addRoutes(ifn *net.Interface, cidr *net.IPNet) error { @@ -82,3 +118,14 @@ func addRoutes(ifn *net.Interface, cidr *net.IPNet) error { } return nil } + +// getFallbackTunName generates a deterministic fallback TUN device name +// based on the base name and the provided address string using a hash. +func getFallbackTunName(baseName, addr string) string { + hasher := sha256.New() + hasher.Write([]byte(addr)) + hashBytes := hasher.Sum(nil) + // Use first 4 bytes -> 8 hex chars for brevity, respecting IFNAMSIZ limit. + shortHash := hex.EncodeToString(hashBytes[:4]) + return fmt.Sprintf("%s%s", baseName, shortHash) +} diff --git a/server/control.go b/server/control.go index 0b6b31741b0..b70d8d1268a 100644 --- a/server/control.go +++ b/server/control.go @@ -224,7 +224,7 @@ func (ctl *Control) Close() error { func (ctl *Control) Replaced(newCtl *Control) { xl := ctl.xl - xl.Infof("Replaced by client [%s]", newCtl.runID) + xl.Infof("replaced by client [%s]", newCtl.runID) ctl.runID = "" ctl.conn.Close() } diff --git a/server/dashboard_api.go b/server/dashboard_api.go index a29433a6235..54e5d9e97a8 100644 --- a/server/dashboard_api.go +++ b/server/dashboard_api.go @@ -97,14 +97,14 @@ func (svr *Service) healthz(w http.ResponseWriter, _ *http.Request) { func (svr *Service) apiServerInfo(w http.ResponseWriter, r *http.Request) { res := GeneralResponse{Code: 200} defer func() { - log.Infof("Http response [%s]: code [%d]", r.URL.Path, res.Code) + log.Infof("http response [%s]: code [%d]", r.URL.Path, res.Code) w.WriteHeader(res.Code) if len(res.Msg) > 0 { _, _ = w.Write([]byte(res.Msg)) } }() - log.Infof("Http request: [%s]", r.URL.Path) + log.Infof("http request: [%s]", r.URL.Path) serverStats := mem.StatsCollector.GetServer() svrResp := serverInfoResp{ Version: version.Full(), @@ -218,13 +218,13 @@ func (svr *Service) apiProxyByType(w http.ResponseWriter, r *http.Request) { proxyType := params["type"] defer func() { - log.Infof("Http response [%s]: code [%d]", r.URL.Path, res.Code) + log.Infof("http response [%s]: code [%d]", r.URL.Path, res.Code) w.WriteHeader(res.Code) if len(res.Msg) > 0 { _, _ = w.Write([]byte(res.Msg)) } }() - log.Infof("Http request: [%s]", r.URL.Path) + log.Infof("http request: [%s]", r.URL.Path) proxyInfoResp := GetProxyInfoResp{} proxyInfoResp.Proxies = svr.getProxyStatsByType(proxyType) @@ -290,13 +290,13 @@ func (svr *Service) apiProxyByTypeAndName(w http.ResponseWriter, r *http.Request name := params["name"] defer func() { - log.Infof("Http response [%s]: code [%d]", r.URL.Path, res.Code) + log.Infof("http response [%s]: code [%d]", r.URL.Path, res.Code) w.WriteHeader(res.Code) if len(res.Msg) > 0 { _, _ = w.Write([]byte(res.Msg)) } }() - log.Infof("Http request: [%s]", r.URL.Path) + log.Infof("http request: [%s]", r.URL.Path) var proxyStatsResp GetProxyStatsResp proxyStatsResp, res.Code, res.Msg = svr.getProxyStatsByTypeAndName(proxyType, name) @@ -358,13 +358,13 @@ func (svr *Service) apiProxyTraffic(w http.ResponseWriter, r *http.Request) { name := params["name"] defer func() { - log.Infof("Http response [%s]: code [%d]", r.URL.Path, res.Code) + log.Infof("http response [%s]: code [%d]", r.URL.Path, res.Code) w.WriteHeader(res.Code) if len(res.Msg) > 0 { _, _ = w.Write([]byte(res.Msg)) } }() - log.Infof("Http request: [%s]", r.URL.Path) + log.Infof("http request: [%s]", r.URL.Path) trafficResp := GetProxyTrafficResp{} trafficResp.Name = name @@ -386,9 +386,9 @@ func (svr *Service) apiProxyTraffic(w http.ResponseWriter, r *http.Request) { func (svr *Service) deleteProxies(w http.ResponseWriter, r *http.Request) { res := GeneralResponse{Code: 200} - log.Infof("Http request: [%s]", r.URL.Path) + log.Infof("http request: [%s]", r.URL.Path) defer func() { - log.Infof("Http response [%s]: code [%d]", r.URL.Path, res.Code) + log.Infof("http response [%s]: code [%d]", r.URL.Path, res.Code) w.WriteHeader(res.Code) if len(res.Msg) > 0 { _, _ = w.Write([]byte(res.Msg)) diff --git a/server/service.go b/server/service.go index d1dd68a1c90..b9abaa80099 100644 --- a/server/service.go +++ b/server/service.go @@ -427,7 +427,7 @@ func (svr *Service) handleConnection(ctx context.Context, conn net.Conn, interna _ = conn.SetReadDeadline(time.Now().Add(connReadTimeout)) if rawMsg, err = msg.ReadMsg(conn); err != nil { - log.Tracef("Failed to read message: %v", err) + log.Tracef("failed to read message: %v", err) conn.Close() return } @@ -475,7 +475,7 @@ func (svr *Service) handleConnection(ctx context.Context, conn net.Conn, interna }) } default: - log.Warnf("Error message type for the new connection [%s]", conn.RemoteAddr().String()) + log.Warnf("error message type for the new connection [%s]", conn.RemoteAddr().String()) conn.Close() } } @@ -488,7 +488,7 @@ func (svr *Service) HandleListener(l net.Listener, internal bool) { for { c, err := l.Accept() if err != nil { - log.Warnf("Listener for incoming connections from client closed") + log.Warnf("listener for incoming connections from client closed") return } // inject xlog object into net.Conn context @@ -504,7 +504,7 @@ func (svr *Service) HandleListener(l net.Listener, internal bool) { var isTLS, custom bool c, isTLS, custom, err = netpkg.CheckAndEnableTLSServerConnWithTimeout(c, svr.tlsConfig, forceTLS, connReadTimeout) if err != nil { - log.Warnf("CheckAndEnableTLSServerConnWithTimeout error: %v", err) + log.Warnf("checkAndEnableTLSServerConnWithTimeout error: %v", err) originConn.Close() continue } @@ -520,7 +520,7 @@ func (svr *Service) HandleListener(l net.Listener, internal bool) { fmuxCfg.MaxStreamWindowSize = 6 * 1024 * 1024 session, err := fmux.Server(frpConn, fmuxCfg) if err != nil { - log.Warnf("Failed to create mux connection: %v", err) + log.Warnf("failed to create mux connection: %v", err) frpConn.Close() return } @@ -528,7 +528,7 @@ func (svr *Service) HandleListener(l net.Listener, internal bool) { for { stream, err := session.AcceptStream() if err != nil { - log.Debugf("Accept new mux stream error: %v", err) + log.Debugf("accept new mux stream error: %v", err) session.Close() return } @@ -546,7 +546,7 @@ func (svr *Service) HandleQUICListener(l *quic.Listener) { for { c, err := l.Accept(context.Background()) if err != nil { - log.Warnf("QUICListener for incoming connections from client closed") + log.Warnf("quic listener for incoming connections from client closed") return } // Start a new goroutine to handle connection. @@ -554,7 +554,7 @@ func (svr *Service) HandleQUICListener(l *quic.Listener) { for { stream, err := frpConn.AcceptStream(context.Background()) if err != nil { - log.Debugf("Accept new quic mux stream error: %v", err) + log.Debugf("accept new quic mux stream error: %v", err) _ = frpConn.CloseWithError(0, "") return } @@ -620,7 +620,7 @@ func (svr *Service) RegisterWorkConn(workConn net.Conn, newMsg *msg.NewWorkConn) xl := netpkg.NewLogFromConn(workConn) ctl, exist := svr.ctlManager.GetByID(newMsg.RunID) if !exist { - xl.Warnf("No client control found for run id [%s]", newMsg.RunID) + xl.Warnf("no client control found for run id [%s]", newMsg.RunID) return fmt.Errorf("no client control found for run id [%s]", newMsg.RunID) } // server plugin hook diff --git a/test/e2e/e2e.go b/test/e2e/e2e.go index 994ac59deef..ee00e1031e2 100644 --- a/test/e2e/e2e.go +++ b/test/e2e/e2e.go @@ -38,7 +38,7 @@ func RunE2ETests(t *testing.T) { // Randomize specs as well as suites suiteConfig.RandomizeAllSpecs = true - log.Infof("Starting e2e run %q on Ginkgo node %d of total %d", + log.Infof("starting e2e run %q on Ginkgo node %d of total %d", framework.RunID, suiteConfig.ParallelProcess, suiteConfig.ParallelTotal) ginkgo.RunSpecs(t, "frp e2e suite", suiteConfig, reporterConfig) } diff --git a/test/e2e/framework/request.go b/test/e2e/framework/request.go index f56fc973a9f..599ff11b26a 100644 --- a/test/e2e/framework/request.go +++ b/test/e2e/framework/request.go @@ -20,7 +20,7 @@ func ExpectResponseCode(code int) EnsureFunc { if resp.Code == code { return true } - flog.Warnf("Expect code %d, but got %d", code, resp.Code) + flog.Warnf("expect code %d, but got %d", code, resp.Code) return false } } @@ -111,14 +111,14 @@ func (e *RequestExpect) Ensure(fns ...EnsureFunc) { if len(fns) == 0 { if !bytes.Equal(e.expectResp, ret.Content) { - flog.Tracef("Response info: %+v", ret) + flog.Tracef("response info: %+v", ret) } ExpectEqualValuesWithOffset(1, string(ret.Content), string(e.expectResp), e.explain...) } else { for _, fn := range fns { ok := fn(ret) if !ok { - flog.Tracef("Response info: %+v", ret) + flog.Tracef("response info: %+v", ret) } ExpectTrueWithOffset(1, ok, e.explain...) } diff --git a/test/e2e/legacy/features/real_ip.go b/test/e2e/legacy/features/real_ip.go index f74c62d2d68..a79afb45b1d 100644 --- a/test/e2e/legacy/features/real_ip.go +++ b/test/e2e/legacy/features/real_ip.go @@ -93,7 +93,7 @@ var _ = ginkgo.Describe("[Feature: Real IP]", func() { f.RunProcesses([]string{serverConf}, []string{clientConf}) framework.NewRequestExpect(f).Port(remotePort).Ensure(func(resp *request.Response) bool { - log.Tracef("ProxyProtocol get SourceAddr: %s", string(resp.Content)) + log.Tracef("proxy protocol get SourceAddr: %s", string(resp.Content)) addr, err := net.ResolveTCPAddr("tcp", string(resp.Content)) if err != nil { return false @@ -142,7 +142,7 @@ var _ = ginkgo.Describe("[Feature: Real IP]", func() { r.HTTP().HTTPHost("normal.example.com") }).Ensure(framework.ExpectResponseCode(404)) - log.Tracef("ProxyProtocol get SourceAddr: %s", srcAddrRecord) + log.Tracef("proxy protocol get SourceAddr: %s", srcAddrRecord) addr, err := net.ResolveTCPAddr("tcp", srcAddrRecord) framework.ExpectNoError(err, srcAddrRecord) framework.ExpectEqualValues("127.0.0.1", addr.IP.String()) diff --git a/test/e2e/v1/features/real_ip.go b/test/e2e/v1/features/real_ip.go index 94508f7da9a..216f531de92 100644 --- a/test/e2e/v1/features/real_ip.go +++ b/test/e2e/v1/features/real_ip.go @@ -215,7 +215,7 @@ var _ = ginkgo.Describe("[Feature: Real IP]", func() { f.RunProcesses([]string{serverConf}, []string{clientConf}) framework.NewRequestExpect(f).Port(remotePort).Ensure(func(resp *request.Response) bool { - log.Tracef("ProxyProtocol get SourceAddr: %s", string(resp.Content)) + log.Tracef("proxy protocol get SourceAddr: %s", string(resp.Content)) addr, err := net.ResolveTCPAddr("tcp", string(resp.Content)) if err != nil { return false @@ -265,7 +265,7 @@ var _ = ginkgo.Describe("[Feature: Real IP]", func() { r.HTTP().HTTPHost("normal.example.com") }).Ensure(framework.ExpectResponseCode(404)) - log.Tracef("ProxyProtocol get SourceAddr: %s", srcAddrRecord) + log.Tracef("proxy protocol get SourceAddr: %s", srcAddrRecord) addr, err := net.ResolveTCPAddr("tcp", srcAddrRecord) framework.ExpectNoError(err, srcAddrRecord) framework.ExpectEqualValues("127.0.0.1", addr.IP.String()) From b41d8f8e4074c4f633fb67d7d31b97db59472674 Mon Sep 17 00:00:00 2001 From: fatedier Date: Sun, 27 Apr 2025 15:41:13 +0800 Subject: [PATCH 64/90] update release notes (#4772) --- Release.md | 9 ++------- pkg/util/version/version.go | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/Release.md b/Release.md index b3edf41090c..94cba964084 100644 --- a/Release.md +++ b/Release.md @@ -1,8 +1,3 @@ -### Notes +### Bug Fixes -* **Feature Gates Introduced:** This version introduces a new experimental mechanism called Feature Gates. This allows users to enable or disable specific experimental features before they become generally available. Feature gates can be configured in the `featureGates` map within the configuration file. -* **VirtualNet Feature Gate:** The first available feature gate is `VirtualNet`, which enables the experimental Virtual Network functionality (currently in Alpha stage). - -### Features - -* **Virtual Network (VirtualNet):** Introduce experimental virtual network capabilities (Alpha). This allows creating a TUN device managed by frp, enabling Layer 3 connectivity between different clients within the frp network. Requires root/admin privileges and is currently supported on Linux and macOS. Configuration is done via the `virtualNet` section and the `virtual_net` plugin. Enable with feature gate `VirtualNet`. **Note: As an Alpha feature, configuration details may change in future releases.** \ No newline at end of file +* **VirtualNet:** Resolved various issues related to connection handling, TUN device management, and stability in the virtual network feature. \ No newline at end of file diff --git a/pkg/util/version/version.go b/pkg/util/version/version.go index e74233c7083..8fa6bc193ed 100644 --- a/pkg/util/version/version.go +++ b/pkg/util/version/version.go @@ -14,7 +14,7 @@ package version -var version = "0.62.0" +var version = "0.62.1" func Full() string { return version From c99986fa28bf12b4e46e32d599ddac98b0f87eb0 Mon Sep 17 00:00:00 2001 From: CrynTox <88785107+CrynTox@users.noreply.github.com> Date: Tue, 6 May 2025 07:11:20 +0300 Subject: [PATCH 65/90] build: add x64 openbsd (#4780) Co-authored-by: CrynTox <> --- Makefile.cross-compiles | 2 +- package.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile.cross-compiles b/Makefile.cross-compiles index b75792a798c..d084bbef44a 100644 --- a/Makefile.cross-compiles +++ b/Makefile.cross-compiles @@ -2,7 +2,7 @@ export PATH := $(PATH):`go env GOPATH`/bin export GO111MODULE=on LDFLAGS := -s -w -os-archs=darwin:amd64 darwin:arm64 freebsd:amd64 linux:amd64 linux:arm:7 linux:arm:5 linux:arm64 windows:amd64 windows:arm64 linux:mips64 linux:mips64le linux:mips:softfloat linux:mipsle:softfloat linux:riscv64 linux:loong64 android:arm64 +os-archs=darwin:amd64 darwin:arm64 freebsd:amd64 openbsd:amd64 linux:amd64 linux:arm:7 linux:arm:5 linux:arm64 windows:amd64 windows:arm64 linux:mips64 linux:mips64le linux:mips:softfloat linux:mipsle:softfloat linux:riscv64 linux:loong64 android:arm64 all: build diff --git a/package.sh b/package.sh index 4699f59977d..16dfcee03ea 100755 --- a/package.sh +++ b/package.sh @@ -17,7 +17,7 @@ make -f ./Makefile.cross-compiles rm -rf ./release/packages mkdir -p ./release/packages -os_all='linux windows darwin freebsd android' +os_all='linux windows darwin freebsd openbsd android' arch_all='386 amd64 arm arm64 mips64 mips64le mips mipsle riscv64 loong64' extra_all='_ hf' From 077ba80ba35d8ad257f99bbb819fb4cbeaa9e1ba Mon Sep 17 00:00:00 2001 From: scientificworld <30764166+scientificworld@users.noreply.github.com> Date: Mon, 19 May 2025 11:39:35 +0800 Subject: [PATCH 66/90] fix: type error in server_plugin doc (#4799) --- doc/server_plugin.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/server_plugin.md b/doc/server_plugin.md index b8fa161907e..6ddef827470 100644 --- a/doc/server_plugin.md +++ b/doc/server_plugin.md @@ -121,7 +121,7 @@ Create new proxy // http and https only "custom_domains": [], "subdomain": , - "locations": , + "locations": [], "http_user": , "http_pwd": , "host_header_rewrite": , From 8eb525a64853aa15fb2bd21865ccaad3092baf29 Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 23 May 2025 19:25:34 +0800 Subject: [PATCH 67/90] feat: support YAML merge in strict configuration mode (#4809) --- Release.md | 4 +- pkg/config/load.go | 34 ++++++++++- pkg/config/load_test.go | 119 ++++++++++++++++++++++++++++++++++++ pkg/util/version/version.go | 2 +- 4 files changed, 154 insertions(+), 5 deletions(-) diff --git a/Release.md b/Release.md index 94cba964084..07c58d4a736 100644 --- a/Release.md +++ b/Release.md @@ -1,3 +1,3 @@ -### Bug Fixes +## Features -* **VirtualNet:** Resolved various issues related to connection handling, TUN device management, and stability in the virtual network feature. \ No newline at end of file +* Support for YAML merge functionality (anchors and references with dot-prefixed fields) in strict configuration mode without requiring `--strict-config=false` parameter. \ No newline at end of file diff --git a/pkg/config/load.go b/pkg/config/load.go index fa394dda115..bb050b406b5 100644 --- a/pkg/config/load.go +++ b/pkg/config/load.go @@ -111,6 +111,33 @@ func LoadConfigureFromFile(path string, c any, strict bool) error { return LoadConfigure(content, c, strict) } +// parseYAMLWithDotFieldsHandling parses YAML with dot-prefixed fields handling +// This function handles both cases efficiently: with or without dot fields +func parseYAMLWithDotFieldsHandling(content []byte, target any) error { + var temp any + if err := yaml.Unmarshal(content, &temp); err != nil { + return err + } + + // Remove dot fields if it's a map + if tempMap, ok := temp.(map[string]any); ok { + for key := range tempMap { + if strings.HasPrefix(key, ".") { + delete(tempMap, key) + } + } + } + + // Convert to JSON and decode with strict validation + jsonBytes, err := json.Marshal(temp) + if err != nil { + return err + } + decoder := json.NewDecoder(bytes.NewReader(jsonBytes)) + decoder.DisallowUnknownFields() + return decoder.Decode(target) +} + // LoadConfigure loads configuration from bytes and unmarshal into c. // Now it supports json, yaml and toml format. func LoadConfigure(b []byte, c any, strict bool) error { @@ -134,10 +161,13 @@ func LoadConfigure(b []byte, c any, strict bool) error { } return decoder.Decode(c) } - // It wasn't JSON. Unmarshal as YAML. + + // Handle YAML content if strict { - return yaml.UnmarshalStrict(b, c) + // In strict mode, always use our custom handler to support YAML merge + return parseYAMLWithDotFieldsHandling(b, c) } + // Non-strict mode, parse normally return yaml.Unmarshal(b, c) } diff --git a/pkg/config/load_test.go b/pkg/config/load_test.go index 980a332ad1b..95d6101e0ba 100644 --- a/pkg/config/load_test.go +++ b/pkg/config/load_test.go @@ -187,3 +187,122 @@ unixPath = "/tmp/uds.sock" err = LoadConfigure([]byte(pluginStr), &clientCfg, true) require.Error(err) } + +// TestYAMLMergeInStrictMode tests that YAML merge functionality works +// even in strict mode by properly handling dot-prefixed fields +func TestYAMLMergeInStrictMode(t *testing.T) { + require := require.New(t) + + yamlContent := ` +serverAddr: "127.0.0.1" +serverPort: 7000 + +.common: &common + type: stcp + secretKey: "test-secret" + localIP: 127.0.0.1 + transport: + useEncryption: true + useCompression: true + +proxies: +- name: ssh + localPort: 22 + <<: *common +- name: web + localPort: 80 + <<: *common +` + + clientCfg := v1.ClientConfig{} + // This should work in strict mode + err := LoadConfigure([]byte(yamlContent), &clientCfg, true) + require.NoError(err) + + // Verify the merge worked correctly + require.Equal("127.0.0.1", clientCfg.ServerAddr) + require.Equal(7000, clientCfg.ServerPort) + require.Len(clientCfg.Proxies, 2) + + // Check first proxy + sshProxy := clientCfg.Proxies[0].ProxyConfigurer + require.Equal("ssh", sshProxy.GetBaseConfig().Name) + require.Equal("stcp", sshProxy.GetBaseConfig().Type) + + // Check second proxy + webProxy := clientCfg.Proxies[1].ProxyConfigurer + require.Equal("web", webProxy.GetBaseConfig().Name) + require.Equal("stcp", webProxy.GetBaseConfig().Type) +} + +// TestOptimizedYAMLProcessing tests the optimization logic for YAML processing +func TestOptimizedYAMLProcessing(t *testing.T) { + require := require.New(t) + + yamlWithDotFields := []byte(` +serverAddr: "127.0.0.1" +.common: &common + type: stcp +proxies: +- name: test + <<: *common +`) + + yamlWithoutDotFields := []byte(` +serverAddr: "127.0.0.1" +proxies: +- name: test + type: tcp + localPort: 22 +`) + + // Test that YAML without dot fields works in strict mode + clientCfg := v1.ClientConfig{} + err := LoadConfigure(yamlWithoutDotFields, &clientCfg, true) + require.NoError(err) + require.Equal("127.0.0.1", clientCfg.ServerAddr) + require.Len(clientCfg.Proxies, 1) + require.Equal("test", clientCfg.Proxies[0].ProxyConfigurer.GetBaseConfig().Name) + + // Test that YAML with dot fields still works in strict mode + err = LoadConfigure(yamlWithDotFields, &clientCfg, true) + require.NoError(err) + require.Equal("127.0.0.1", clientCfg.ServerAddr) + require.Len(clientCfg.Proxies, 1) + require.Equal("test", clientCfg.Proxies[0].ProxyConfigurer.GetBaseConfig().Name) + require.Equal("stcp", clientCfg.Proxies[0].ProxyConfigurer.GetBaseConfig().Type) +} + +// TestYAMLEdgeCases tests edge cases for YAML parsing, including non-map types +func TestYAMLEdgeCases(t *testing.T) { + require := require.New(t) + + // Test array at root (should fail for frp config) + arrayYAML := []byte(` +- item1 +- item2 +`) + clientCfg := v1.ClientConfig{} + err := LoadConfigure(arrayYAML, &clientCfg, true) + require.Error(err) // Should fail because ClientConfig expects an object + + // Test scalar at root (should fail for frp config) + scalarYAML := []byte(`"just a string"`) + err = LoadConfigure(scalarYAML, &clientCfg, true) + require.Error(err) // Should fail because ClientConfig expects an object + + // Test empty object (should work) + emptyYAML := []byte(`{}`) + err = LoadConfigure(emptyYAML, &clientCfg, true) + require.NoError(err) + + // Test nested structure without dots (should work) + nestedYAML := []byte(` +serverAddr: "127.0.0.1" +serverPort: 7000 +`) + err = LoadConfigure(nestedYAML, &clientCfg, true) + require.NoError(err) + require.Equal("127.0.0.1", clientCfg.ServerAddr) + require.Equal(7000, clientCfg.ServerPort) +} diff --git a/pkg/util/version/version.go b/pkg/util/version/version.go index 8fa6bc193ed..966a942fe62 100644 --- a/pkg/util/version/version.go +++ b/pkg/util/version/version.go @@ -14,7 +14,7 @@ package version -var version = "0.62.1" +var version = "0.63.0" func Full() string { return version From 3fa76b72f3e6b2b9d8b0093ea755d5d1eb0d6b92 Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 23 May 2025 21:39:47 +0800 Subject: [PATCH 68/90] add proxy protocol support for UDP proxies (#4810) --- README.md | 2 +- Release.md | 3 +- client/proxy/proxy.go | 24 +--- client/proxy/sudp.go | 2 +- client/proxy/udp.go | 4 +- pkg/proto/udp/udp.go | 16 ++- pkg/util/net/proxyprotocol.go | 45 ++++++++ pkg/util/net/proxyprotocol_test.go | 178 +++++++++++++++++++++++++++++ test/e2e/v1/features/real_ip.go | 50 ++++++++ 9 files changed, 299 insertions(+), 25 deletions(-) create mode 100644 pkg/util/net/proxyprotocol.go create mode 100644 pkg/util/net/proxyprotocol_test.go diff --git a/README.md b/README.md index 25537220e94..f0ab4273096 100644 --- a/README.md +++ b/README.md @@ -1025,7 +1025,7 @@ You can get user's real IP from HTTP request headers `X-Forwarded-For`. #### Proxy Protocol -frp supports Proxy Protocol to send user's real IP to local services. It support all types except UDP. +frp supports Proxy Protocol to send user's real IP to local services. Here is an example for https service: diff --git a/Release.md b/Release.md index 07c58d4a736..19b79d6478b 100644 --- a/Release.md +++ b/Release.md @@ -1,3 +1,4 @@ ## Features -* Support for YAML merge functionality (anchors and references with dot-prefixed fields) in strict configuration mode without requiring `--strict-config=false` parameter. \ No newline at end of file +* Support for YAML merge functionality (anchors and references with dot-prefixed fields) in strict configuration mode without requiring `--strict-config=false` parameter. +* Support for proxy protocol in UDP proxies to preserve real client IP addresses. \ No newline at end of file diff --git a/client/proxy/proxy.go b/client/proxy/proxy.go index debda9fa2ff..876ca579d38 100644 --- a/client/proxy/proxy.go +++ b/client/proxy/proxy.go @@ -20,13 +20,11 @@ import ( "net" "reflect" "strconv" - "strings" "sync" "time" libio "github.com/fatedier/golib/io" libnet "github.com/fatedier/golib/net" - pp "github.com/pires/go-proxyproto" "golang.org/x/time/rate" "github.com/fatedier/frp/pkg/config/types" @@ -35,6 +33,7 @@ import ( plugin "github.com/fatedier/frp/pkg/plugin/client" "github.com/fatedier/frp/pkg/transport" "github.com/fatedier/frp/pkg/util/limit" + netpkg "github.com/fatedier/frp/pkg/util/net" "github.com/fatedier/frp/pkg/util/xlog" "github.com/fatedier/frp/pkg/vnet" ) @@ -176,24 +175,9 @@ func (pxy *BaseProxy) HandleTCPWorkConnection(workConn net.Conn, m *msg.StartWor } if baseCfg.Transport.ProxyProtocolVersion != "" && m.SrcAddr != "" && m.SrcPort != 0 { - h := &pp.Header{ - Command: pp.PROXY, - SourceAddr: connInfo.SrcAddr, - DestinationAddr: connInfo.DstAddr, - } - - if strings.Contains(m.SrcAddr, ".") { - h.TransportProtocol = pp.TCPv4 - } else { - h.TransportProtocol = pp.TCPv6 - } - - if baseCfg.Transport.ProxyProtocolVersion == "v1" { - h.Version = 1 - } else if baseCfg.Transport.ProxyProtocolVersion == "v2" { - h.Version = 2 - } - connInfo.ProxyProtocolHeader = h + // Use the common proxy protocol builder function + header := netpkg.BuildProxyProtocolHeaderStruct(connInfo.SrcAddr, connInfo.DstAddr, baseCfg.Transport.ProxyProtocolVersion) + connInfo.ProxyProtocolHeader = header } connInfo.Conn = remote connInfo.UnderlyingConn = workConn diff --git a/client/proxy/sudp.go b/client/proxy/sudp.go index ad9db89a940..13741d0ddc7 100644 --- a/client/proxy/sudp.go +++ b/client/proxy/sudp.go @@ -205,5 +205,5 @@ func (pxy *SUDPProxy) InWorkConn(conn net.Conn, _ *msg.StartWorkConn) { go workConnReaderFn(workConn, readCh) go heartbeatFn(sendCh) - udp.Forwarder(pxy.localAddr, readCh, sendCh, int(pxy.clientCfg.UDPPacketSize)) + udp.Forwarder(pxy.localAddr, readCh, sendCh, int(pxy.clientCfg.UDPPacketSize), pxy.cfg.Transport.ProxyProtocolVersion) } diff --git a/client/proxy/udp.go b/client/proxy/udp.go index b08fe1608ad..b70ffe4a0c8 100644 --- a/client/proxy/udp.go +++ b/client/proxy/udp.go @@ -171,5 +171,7 @@ func (pxy *UDPProxy) InWorkConn(conn net.Conn, _ *msg.StartWorkConn) { go workConnSenderFn(pxy.workConn, pxy.sendCh) go workConnReaderFn(pxy.workConn, pxy.readCh) go heartbeatFn(pxy.sendCh) - udp.Forwarder(pxy.localAddr, pxy.readCh, pxy.sendCh, int(pxy.clientCfg.UDPPacketSize)) + + // Call Forwarder with proxy protocol version (empty string means no proxy protocol) + udp.Forwarder(pxy.localAddr, pxy.readCh, pxy.sendCh, int(pxy.clientCfg.UDPPacketSize), pxy.cfg.Transport.ProxyProtocolVersion) } diff --git a/pkg/proto/udp/udp.go b/pkg/proto/udp/udp.go index 7a11984b2e4..f97b3b439cd 100644 --- a/pkg/proto/udp/udp.go +++ b/pkg/proto/udp/udp.go @@ -24,6 +24,7 @@ import ( "github.com/fatedier/golib/pool" "github.com/fatedier/frp/pkg/msg" + netpkg "github.com/fatedier/frp/pkg/util/net" ) func NewUDPPacket(buf []byte, laddr, raddr *net.UDPAddr) *msg.UDPPacket { @@ -69,7 +70,7 @@ func ForwardUserConn(udpConn *net.UDPConn, readCh <-chan *msg.UDPPacket, sendCh } } -func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UDPPacket, sendCh chan<- msg.Message, bufSize int) { +func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UDPPacket, sendCh chan<- msg.Message, bufSize int, proxyProtocolVersion string) { var mu sync.RWMutex udpConnMap := make(map[string]*net.UDPConn) @@ -110,6 +111,7 @@ func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UDPPacket, sendCh chan<- if err != nil { continue } + mu.Lock() udpConn, ok := udpConnMap[udpMsg.RemoteAddr.String()] if !ok { @@ -122,6 +124,18 @@ func Forwarder(dstAddr *net.UDPAddr, readCh <-chan *msg.UDPPacket, sendCh chan<- } mu.Unlock() + // Add proxy protocol header if configured + if proxyProtocolVersion != "" && udpMsg.RemoteAddr != nil { + ppBuf, err := netpkg.BuildProxyProtocolHeader(udpMsg.RemoteAddr, dstAddr, proxyProtocolVersion) + if err == nil { + // Prepend proxy protocol header to the UDP payload + finalBuf := make([]byte, len(ppBuf)+len(buf)) + copy(finalBuf, ppBuf) + copy(finalBuf[len(ppBuf):], buf) + buf = finalBuf + } + } + _, err = udpConn.Write(buf) if err != nil { udpConn.Close() diff --git a/pkg/util/net/proxyprotocol.go b/pkg/util/net/proxyprotocol.go new file mode 100644 index 00000000000..5f0cd51fab8 --- /dev/null +++ b/pkg/util/net/proxyprotocol.go @@ -0,0 +1,45 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package net + +import ( + "bytes" + "fmt" + "net" + + pp "github.com/pires/go-proxyproto" +) + +func BuildProxyProtocolHeaderStruct(srcAddr, dstAddr net.Addr, version string) *pp.Header { + var versionByte byte + if version == "v1" { + versionByte = 1 + } else { + versionByte = 2 // default to v2 + } + return pp.HeaderProxyFromAddrs(versionByte, srcAddr, dstAddr) +} + +func BuildProxyProtocolHeader(srcAddr, dstAddr net.Addr, version string) ([]byte, error) { + h := BuildProxyProtocolHeaderStruct(srcAddr, dstAddr, version) + + // Convert header to bytes using a buffer + var buf bytes.Buffer + _, err := h.WriteTo(&buf) + if err != nil { + return nil, fmt.Errorf("failed to write proxy protocol header: %v", err) + } + return buf.Bytes(), nil +} diff --git a/pkg/util/net/proxyprotocol_test.go b/pkg/util/net/proxyprotocol_test.go new file mode 100644 index 00000000000..187801f67aa --- /dev/null +++ b/pkg/util/net/proxyprotocol_test.go @@ -0,0 +1,178 @@ +package net + +import ( + "net" + "testing" + + pp "github.com/pires/go-proxyproto" + "github.com/stretchr/testify/require" +) + +func TestBuildProxyProtocolHeader(t *testing.T) { + require := require.New(t) + + tests := []struct { + name string + srcAddr net.Addr + dstAddr net.Addr + version string + expectError bool + }{ + { + name: "UDP IPv4 v2", + srcAddr: &net.UDPAddr{IP: net.ParseIP("192.168.1.100"), Port: 12345}, + dstAddr: &net.UDPAddr{IP: net.ParseIP("10.0.0.1"), Port: 3306}, + version: "v2", + expectError: false, + }, + { + name: "TCP IPv4 v1", + srcAddr: &net.TCPAddr{IP: net.ParseIP("192.168.1.100"), Port: 12345}, + dstAddr: &net.TCPAddr{IP: net.ParseIP("10.0.0.1"), Port: 80}, + version: "v1", + expectError: false, + }, + { + name: "UDP IPv6 v2", + srcAddr: &net.UDPAddr{IP: net.ParseIP("2001:db8::1"), Port: 12345}, + dstAddr: &net.UDPAddr{IP: net.ParseIP("::1"), Port: 3306}, + version: "v2", + expectError: false, + }, + { + name: "TCP IPv6 v1", + srcAddr: &net.TCPAddr{IP: net.ParseIP("::1"), Port: 12345}, + dstAddr: &net.TCPAddr{IP: net.ParseIP("2001:db8::1"), Port: 80}, + version: "v1", + expectError: false, + }, + { + name: "nil source address", + srcAddr: nil, + dstAddr: &net.UDPAddr{IP: net.ParseIP("10.0.0.1"), Port: 3306}, + version: "v2", + expectError: false, + }, + { + name: "nil destination address", + srcAddr: &net.TCPAddr{IP: net.ParseIP("192.168.1.100"), Port: 12345}, + dstAddr: nil, + version: "v2", + expectError: false, + }, + { + name: "unsupported address type", + srcAddr: &net.UnixAddr{Name: "/tmp/test.sock", Net: "unix"}, + dstAddr: &net.UDPAddr{IP: net.ParseIP("10.0.0.1"), Port: 3306}, + version: "v2", + expectError: false, + }, + } + + for _, tt := range tests { + header, err := BuildProxyProtocolHeader(tt.srcAddr, tt.dstAddr, tt.version) + + if tt.expectError { + require.Error(err, "test case: %s", tt.name) + continue + } + + require.NoError(err, "test case: %s", tt.name) + require.NotEmpty(header, "test case: %s", tt.name) + } +} + +func TestBuildProxyProtocolHeaderStruct(t *testing.T) { + require := require.New(t) + + tests := []struct { + name string + srcAddr net.Addr + dstAddr net.Addr + version string + expectedProtocol pp.AddressFamilyAndProtocol + expectedVersion byte + expectedCommand pp.ProtocolVersionAndCommand + expectedSourceAddr net.Addr + expectedDestAddr net.Addr + }{ + { + name: "TCP IPv4 v2", + srcAddr: &net.TCPAddr{IP: net.ParseIP("192.168.1.100"), Port: 12345}, + dstAddr: &net.TCPAddr{IP: net.ParseIP("10.0.0.1"), Port: 80}, + version: "v2", + expectedProtocol: pp.TCPv4, + expectedVersion: 2, + expectedCommand: pp.PROXY, + expectedSourceAddr: &net.TCPAddr{IP: net.ParseIP("192.168.1.100"), Port: 12345}, + expectedDestAddr: &net.TCPAddr{IP: net.ParseIP("10.0.0.1"), Port: 80}, + }, + { + name: "UDP IPv6 v1", + srcAddr: &net.UDPAddr{IP: net.ParseIP("2001:db8::1"), Port: 12345}, + dstAddr: &net.UDPAddr{IP: net.ParseIP("::1"), Port: 3306}, + version: "v1", + expectedProtocol: pp.UDPv6, + expectedVersion: 1, + expectedCommand: pp.PROXY, + expectedSourceAddr: &net.UDPAddr{IP: net.ParseIP("2001:db8::1"), Port: 12345}, + expectedDestAddr: &net.UDPAddr{IP: net.ParseIP("::1"), Port: 3306}, + }, + { + name: "TCP IPv6 default version", + srcAddr: &net.TCPAddr{IP: net.ParseIP("::1"), Port: 12345}, + dstAddr: &net.TCPAddr{IP: net.ParseIP("2001:db8::1"), Port: 80}, + version: "", + expectedProtocol: pp.TCPv6, + expectedVersion: 2, // default to v2 + expectedCommand: pp.PROXY, + expectedSourceAddr: &net.TCPAddr{IP: net.ParseIP("::1"), Port: 12345}, + expectedDestAddr: &net.TCPAddr{IP: net.ParseIP("2001:db8::1"), Port: 80}, + }, + { + name: "nil source address", + srcAddr: nil, + dstAddr: &net.UDPAddr{IP: net.ParseIP("10.0.0.1"), Port: 3306}, + version: "v2", + expectedProtocol: pp.UNSPEC, + expectedVersion: 2, + expectedCommand: pp.LOCAL, + expectedSourceAddr: nil, // go-proxyproto sets both to nil when srcAddr is nil + expectedDestAddr: nil, + }, + { + name: "nil destination address", + srcAddr: &net.TCPAddr{IP: net.ParseIP("192.168.1.100"), Port: 12345}, + dstAddr: nil, + version: "v2", + expectedProtocol: pp.UNSPEC, + expectedVersion: 2, + expectedCommand: pp.LOCAL, + expectedSourceAddr: nil, // go-proxyproto sets both to nil when dstAddr is nil + expectedDestAddr: nil, + }, + { + name: "unsupported address type", + srcAddr: &net.UnixAddr{Name: "/tmp/test.sock", Net: "unix"}, + dstAddr: &net.UDPAddr{IP: net.ParseIP("10.0.0.1"), Port: 3306}, + version: "v2", + expectedProtocol: pp.UNSPEC, + expectedVersion: 2, + expectedCommand: pp.LOCAL, + expectedSourceAddr: nil, // go-proxyproto sets both to nil for unsupported types + expectedDestAddr: nil, + }, + } + + for _, tt := range tests { + header := BuildProxyProtocolHeaderStruct(tt.srcAddr, tt.dstAddr, tt.version) + + require.NotNil(header, "test case: %s", tt.name) + + require.Equal(tt.expectedCommand, header.Command, "test case: %s", tt.name) + require.Equal(tt.expectedSourceAddr, header.SourceAddr, "test case: %s", tt.name) + require.Equal(tt.expectedDestAddr, header.DestinationAddr, "test case: %s", tt.name) + require.Equal(tt.expectedProtocol, header.TransportProtocol, "test case: %s", tt.name) + require.Equal(tt.expectedVersion, header.Version, "test case: %s", tt.name) + } +} diff --git a/test/e2e/v1/features/real_ip.go b/test/e2e/v1/features/real_ip.go index 216f531de92..a52cf0a2fbe 100644 --- a/test/e2e/v1/features/real_ip.go +++ b/test/e2e/v1/features/real_ip.go @@ -227,6 +227,56 @@ var _ = ginkgo.Describe("[Feature: Real IP]", func() { }) }) + ginkgo.It("UDP", func() { + serverConf := consts.DefaultServerConfig + clientConf := consts.DefaultClientConfig + + localPort := f.AllocPort() + localServer := streamserver.New(streamserver.UDP, streamserver.WithBindPort(localPort), + streamserver.WithCustomHandler(func(c net.Conn) { + defer c.Close() + rd := bufio.NewReader(c) + ppHeader, err := pp.Read(rd) + if err != nil { + log.Errorf("read proxy protocol error: %v", err) + return + } + + // Read the actual UDP content after proxy protocol header + if _, err := rpc.ReadBytes(rd); err != nil { + return + } + + buf := []byte(ppHeader.SourceAddr.String()) + _, _ = rpc.WriteBytes(c, buf) + })) + f.RunServer("", localServer) + + remotePort := f.AllocPort() + clientConf += fmt.Sprintf(` + [[proxies]] + name = "udp" + type = "udp" + localPort = %d + remotePort = %d + transport.proxyProtocolVersion = "v2" + `, localPort, remotePort) + + f.RunProcesses([]string{serverConf}, []string{clientConf}) + + framework.NewRequestExpect(f).Protocol("udp").Port(remotePort).Ensure(func(resp *request.Response) bool { + log.Tracef("udp proxy protocol get SourceAddr: %s", string(resp.Content)) + addr, err := net.ResolveUDPAddr("udp", string(resp.Content)) + if err != nil { + return false + } + if addr.IP.String() != "127.0.0.1" { + return false + } + return true + }) + }) + ginkgo.It("HTTP", func() { vhostHTTPPort := f.AllocPort() serverConf := consts.DefaultServerConfig + fmt.Sprintf(` From 720c09c06b31b44295a90dab9428a910e3c1b222 Mon Sep 17 00:00:00 2001 From: fatedier Date: Mon, 26 May 2025 14:54:03 +0800 Subject: [PATCH 69/90] update test package (#4814) --- .github/workflows/stale.yml | 2 +- pkg/proto/udp/udp_test.go | 8 +++---- pkg/util/metric/counter_test.go | 12 +++++----- pkg/util/metric/date_counter_test.go | 18 +++++++------- pkg/util/util/util_test.go | 36 +++++++++++++--------------- 5 files changed, 36 insertions(+), 40 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 784053e8f96..8f10d6415d8 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,4 +1,4 @@ -name: "Close stale issues" +name: "Close stale issues and PRs" on: schedule: - cron: "20 0 * * *" diff --git a/pkg/proto/udp/udp_test.go b/pkg/proto/udp/udp_test.go index 0e61d9e65a5..1a7f009117c 100644 --- a/pkg/proto/udp/udp_test.go +++ b/pkg/proto/udp/udp_test.go @@ -3,16 +3,16 @@ package udp import ( "testing" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestUdpPacket(t *testing.T) { - assert := assert.New(t) + require := require.New(t) buf := []byte("hello world") udpMsg := NewUDPPacket(buf, nil, nil) newBuf, err := GetContent(udpMsg) - assert.NoError(err) - assert.EqualValues(buf, newBuf) + require.NoError(err) + require.EqualValues(buf, newBuf) } diff --git a/pkg/util/metric/counter_test.go b/pkg/util/metric/counter_test.go index 4925c25b523..dca72052ed3 100644 --- a/pkg/util/metric/counter_test.go +++ b/pkg/util/metric/counter_test.go @@ -3,21 +3,21 @@ package metric import ( "testing" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestCounter(t *testing.T) { - assert := assert.New(t) + require := require.New(t) c := NewCounter() c.Inc(10) - assert.EqualValues(10, c.Count()) + require.EqualValues(10, c.Count()) c.Dec(5) - assert.EqualValues(5, c.Count()) + require.EqualValues(5, c.Count()) cTmp := c.Snapshot() - assert.EqualValues(5, cTmp.Count()) + require.EqualValues(5, cTmp.Count()) c.Clear() - assert.EqualValues(0, c.Count()) + require.EqualValues(0, c.Count()) } diff --git a/pkg/util/metric/date_counter_test.go b/pkg/util/metric/date_counter_test.go index c9997c70fe7..8752f1985a8 100644 --- a/pkg/util/metric/date_counter_test.go +++ b/pkg/util/metric/date_counter_test.go @@ -3,25 +3,25 @@ package metric import ( "testing" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestDateCounter(t *testing.T) { - assert := assert.New(t) + require := require.New(t) dc := NewDateCounter(3) dc.Inc(10) - assert.EqualValues(10, dc.TodayCount()) + require.EqualValues(10, dc.TodayCount()) dc.Dec(5) - assert.EqualValues(5, dc.TodayCount()) + require.EqualValues(5, dc.TodayCount()) counts := dc.GetLastDaysCount(3) - assert.EqualValues(3, len(counts)) - assert.EqualValues(5, counts[0]) - assert.EqualValues(0, counts[1]) - assert.EqualValues(0, counts[2]) + require.EqualValues(3, len(counts)) + require.EqualValues(5, counts[0]) + require.EqualValues(0, counts[1]) + require.EqualValues(0, counts[2]) dcTmp := dc.Snapshot() - assert.EqualValues(5, dcTmp.TodayCount()) + require.EqualValues(5, dcTmp.TodayCount()) } diff --git a/pkg/util/util/util_test.go b/pkg/util/util/util_test.go index 0061861119e..0a63ba6d086 100644 --- a/pkg/util/util/util_test.go +++ b/pkg/util/util/util_test.go @@ -3,45 +3,41 @@ package util import ( "testing" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestRandId(t *testing.T) { - assert := assert.New(t) + require := require.New(t) id, err := RandID() - assert.NoError(err) + require.NoError(err) t.Log(id) - assert.Equal(16, len(id)) + require.Equal(16, len(id)) } func TestGetAuthKey(t *testing.T) { - assert := assert.New(t) + require := require.New(t) key := GetAuthKey("1234", 1488720000) - assert.Equal("6df41a43725f0c770fd56379e12acf8c", key) + require.Equal("6df41a43725f0c770fd56379e12acf8c", key) } func TestParseRangeNumbers(t *testing.T) { - assert := assert.New(t) + require := require.New(t) numbers, err := ParseRangeNumbers("2-5") - if assert.NoError(err) { - assert.Equal([]int64{2, 3, 4, 5}, numbers) - } + require.NoError(err) + require.Equal([]int64{2, 3, 4, 5}, numbers) numbers, err = ParseRangeNumbers("1") - if assert.NoError(err) { - assert.Equal([]int64{1}, numbers) - } + require.NoError(err) + require.Equal([]int64{1}, numbers) numbers, err = ParseRangeNumbers("3-5,8") - if assert.NoError(err) { - assert.Equal([]int64{3, 4, 5, 8}, numbers) - } + require.NoError(err) + require.Equal([]int64{3, 4, 5, 8}, numbers) numbers, err = ParseRangeNumbers(" 3-5,8, 10-12 ") - if assert.NoError(err) { - assert.Equal([]int64{3, 4, 5, 8, 10, 11, 12}, numbers) - } + require.NoError(err) + require.Equal([]int64{3, 4, 5, 8, 10, 11, 12}, numbers) _, err = ParseRangeNumbers("3-a") - assert.Error(err) + require.Error(err) } From 43cf1688e483bc210f334b6e4c664fea0e3324d8 Mon Sep 17 00:00:00 2001 From: fatedier Date: Tue, 27 May 2025 16:46:15 +0800 Subject: [PATCH 70/90] update golangci-lint version (#4817) --- .github/workflows/golangci-lint.yml | 10 +- .golangci.yml | 212 +++++++++++-------------- client/service.go | 7 +- go.mod | 16 +- go.sum | 32 ++-- hack/run-e2e.sh | 6 +- pkg/config/legacy/client.go | 7 +- pkg/config/legacy/conversion.go | 44 ++--- pkg/config/legacy/proxy.go | 2 +- pkg/config/v1/proxy.go | 2 +- pkg/metrics/mem/server.go | 2 +- pkg/util/net/conn.go | 2 +- pkg/util/vhost/http.go | 6 +- pkg/util/vhost/vhost.go | 6 +- test/e2e/legacy/basic/client_server.go | 8 +- test/e2e/legacy/plugin/server.go | 4 +- test/e2e/v1/basic/client_server.go | 8 +- test/e2e/v1/plugin/server.go | 4 +- 18 files changed, 170 insertions(+), 208 deletions(-) diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 8058592853a..40aba1ce409 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -20,10 +20,10 @@ jobs: go-version: '1.23' cache: false - name: golangci-lint - uses: golangci/golangci-lint-action@v4 + uses: golangci/golangci-lint-action@v8 with: # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version - version: v1.61 + version: v2.1 # Optional: golangci-lint command line arguments. # args: --issues-exit-code=0 @@ -34,9 +34,3 @@ jobs: # Optional: if set to true then the all caching functionality will be complete disabled, # takes precedence over all other caching options. # skip-cache: true - - # Optional: if set to true then the action don't cache or restore ~/go/pkg. - # skip-pkg-cache: true - - # Optional: if set to true then the action don't cache or restore ~/.cache/go-build. - # skip-build-cache: true diff --git a/.golangci.yml b/.golangci.yml index a45e4ba3a2d..be0a717e74c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,139 +1,111 @@ -service: - golangci-lint-version: 1.61.x # use the fixed version to not introduce new linters unexpectedly - +version: "2" run: concurrency: 4 - # timeout for analysis, e.g. 30s, 5m, default is 1m - timeout: 20m build-tags: - integ - integfuzz - linters: - disable-all: true + default: none enable: - - unused - - errcheck + - asciicheck - copyloopvar + - errcheck - gocritic - - gofumpt - - goimports - - revive - - gosimple + - gosec - govet - ineffassign - lll + - makezero - misspell + - prealloc + - predeclared + - revive - staticcheck - - stylecheck - - typecheck - unconvert - unparam + - unused + settings: + errcheck: + check-type-assertions: false + check-blank: false + gocritic: + disabled-checks: + - exitAfterDefer + gosec: + excludes: + - G401 + - G402 + - G404 + - G501 + - G115 + severity: low + confidence: low + govet: + disable: + - shadow + lll: + line-length: 160 + tab-width: 1 + misspell: + locale: US + ignore-rules: + - cancelled + - marshalled + unparam: + check-exported: false + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + rules: + - linters: + - errcheck + - maligned + path: _test\.go$|^tests/|^samples/ + - linters: + - revive + - staticcheck + text: use underscores in Go names + - linters: + - revive + text: unused-parameter + - linters: + - unparam + text: is always false + paths: + - .*\.pb\.go + - .*\.gen\.go + - genfiles$ + - vendor$ + - bin$ + - third_party$ + - builtin$ + - examples$ +formatters: + enable: - gci - - gosec - - asciicheck - - prealloc - - predeclared - - makezero - fast: false - -linters-settings: - errcheck: - # report about not checking of errors in type assetions: `a := b.(MyStruct)`; - # default is false: such cases aren't reported by default. - check-type-assertions: false - - # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`; - # default is false: such cases aren't reported by default. - check-blank: false - govet: - # report about shadowed variables - disable: - - shadow - maligned: - # print struct with more effective memory layout or not, false by default - suggest-new: true - misspell: - # Correct spellings using locale preferences for US or UK. - # Default is to use a neutral variety of English. - # Setting locale to US will correct the British spelling of 'colour' to 'color'. - locale: US - ignore-words: - - cancelled - - marshalled - lll: - # max line length, lines longer will be reported. Default is 120. - # '\t' is counted as 1 character by default, and can be changed with the tab-width option - line-length: 160 - # tab width in spaces. Default to 1. - tab-width: 1 - gocritic: - disabled-checks: - - exitAfterDefer - unused: - check-exported: false - unparam: - # Inspect exported functions, default is false. Set to true if no external program/library imports your code. - # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors: - # if it's called for subdir of a project it can't find external interfaces. All text editor integrations - # with golangci-lint call it on a directory with the changed file. - check-exported: false - gci: - sections: - - standard - - default - - prefix(github.com/fatedier/frp/) - gosec: - severity: "low" - confidence: "low" - excludes: - - G401 - - G402 - - G404 - - G501 - - G115 # integer overflow conversion - + - gofumpt + - goimports + settings: + gci: + sections: + - standard + - default + - prefix(github.com/fatedier/frp/) + exclusions: + generated: lax + paths: + - .*\.pb\.go + - .*\.gen\.go + - genfiles$ + - vendor$ + - bin$ + - third_party$ + - builtin$ + - examples$ issues: - # List of regexps of issue texts to exclude, empty list by default. - # But independently from this option we use default exclude patterns, - # it can be disabled by `exclude-use-default: false`. To list all - # excluded by default patterns execute `golangci-lint run --help` - # exclude: - # - composite literal uses unkeyed fields - - exclude-rules: - # Exclude some linters from running on test files. - - path: _test\.go$|^tests/|^samples/ - linters: - - errcheck - - maligned - - linters: - - revive - - stylecheck - text: "use underscores in Go names" - - linters: - - revive - text: "unused-parameter" - - linters: - - unparam - text: "is always false" - - exclude-dirs: - - genfiles$ - - vendor$ - - bin$ - exclude-files: - - ".*\\.pb\\.go" - - ".*\\.gen\\.go" - - # Independently from option `exclude` we use default exclude patterns, - # it can be disabled by this option. To list all - # excluded by default patterns execute `golangci-lint run --help`. - # Default value for this option is true. - exclude-use-default: true - - # Maximum issues count per one linter. Set to 0 to disable. Default is 50. - max-per-linter: 0 - - # Maximum count of issues with the same text. Set to 0 to disable. Default is 3. + max-issues-per-linter: 0 max-same-issues: 0 diff --git a/client/service.go b/client/service.go index e163cac4554..d6a12970c6c 100644 --- a/client/service.go +++ b/client/service.go @@ -325,10 +325,9 @@ func (svr *Service) loopLoginUntilSuccess(maxInterval time.Duration, firstLoginE proxyCfgs := svr.proxyCfgs visitorCfgs := svr.visitorCfgs svr.cfgMu.RUnlock() - connEncrypted := true - if svr.clientSpec != nil && svr.clientSpec.Type == "ssh-tunnel" { - connEncrypted = false - } + + connEncrypted := svr.clientSpec == nil || svr.clientSpec.Type != "ssh-tunnel" + sessionCtx := &SessionContext{ Common: svr.common, RunID: svr.runID, diff --git a/go.mod b/go.mod index 0b8ee2a5e8a..e3bdc711cc0 100644 --- a/go.mod +++ b/go.mod @@ -10,8 +10,8 @@ require ( github.com/gorilla/mux v1.8.1 github.com/gorilla/websocket v1.5.0 github.com/hashicorp/yamux v0.1.1 - github.com/onsi/ginkgo/v2 v2.22.0 - github.com/onsi/gomega v1.34.2 + github.com/onsi/ginkgo/v2 v2.23.4 + github.com/onsi/gomega v1.36.3 github.com/pelletier/go-toml/v2 v2.2.0 github.com/pion/stun/v2 v2.0.0 github.com/pires/go-proxyproto v0.7.0 @@ -46,12 +46,11 @@ require ( github.com/go-logr/logr v1.4.2 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/golang/snappy v0.0.4 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/pprof v0.0.0-20241206021119-61a79c692802 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/klauspost/reedsolomon v1.12.0 // indirect - github.com/kr/text v0.2.0 // indirect github.com/pion/dtls/v2 v2.2.7 // indirect github.com/pion/logging v0.2.2 // indirect github.com/pion/transport/v2 v2.2.1 // indirect @@ -67,14 +66,15 @@ require ( github.com/tidwall/pretty v1.2.0 // indirect github.com/tjfoc/gmsm v1.4.1 // indirect github.com/vishvananda/netns v0.0.4 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/mock v0.5.0 // indirect golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d // indirect - golang.org/x/mod v0.22.0 // indirect + golang.org/x/mod v0.24.0 // indirect golang.org/x/sys v0.32.0 // indirect golang.org/x/text v0.24.0 // indirect - golang.org/x/tools v0.28.0 // indirect + golang.org/x/tools v0.31.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect - google.golang.org/protobuf v1.34.1 // indirect + google.golang.org/protobuf v1.36.5 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect diff --git a/go.sum b/go.sum index a39d174edae..a65c303320c 100644 --- a/go.sum +++ b/go.sum @@ -14,7 +14,6 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/coreos/go-oidc/v3 v3.14.1 h1:9ePWwfdwC4QKRlCXsJGou56adA/owXczOzwKdOumLqk= github.com/coreos/go-oidc/v3 v3.14.1/go.mod h1:HaZ3szPaZ0e4r6ebqvsLWlk2Tn+aejfmrfah6hnSYEU= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -50,10 +49,11 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20241206021119-61a79c692802 h1:US08AXzP0bLurpzFUV3Poa9ZijrRdd1zAIOVtoHEiS8= -github.com/google/pprof v0.0.0-20241206021119-61a79c692802/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -72,10 +72,10 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= -github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= -github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= +github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= +github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= +github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= +github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/pelletier/go-toml/v2 v2.2.0 h1:QLgLl2yMN7N+ruc31VynXs1vhMZa7CeHHejIeBAsoHo= github.com/pelletier/go-toml/v2 v2.2.0/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/pion/dtls/v2 v2.2.7 h1:cSUBsETxepsCSFSxC3mc/aDo14qQLMSL+O6IjG28yV8= @@ -94,6 +94,8 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -152,6 +154,8 @@ github.com/xtaci/kcp-go/v5 v5.6.13/go.mod h1:75S1AKYYzNUSXIv30h+jPKJYZUwqpfvLshu github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37 h1:EWU6Pktpas0n8lLQwDsRyZfmkPeRbdgPtW609es+/9E= github.com/xtaci/lossyconn v0.0.0-20200209145036-adba10fffc37/go.mod h1:HpMP7DB2CyokmAh4lp0EQnnWhmycP/TvwBGzvuie+H0= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/mock v0.5.0 h1:KAMbZvZPyBPWgD14IrIQ38QCyjwpvVVV6K/bHl1IwQU= go.uber.org/mock v0.5.0/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -170,8 +174,8 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -239,8 +243,8 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= -golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 h1:B82qJJgjvYKsXS9jeunTOisW56dUokqW/FOteYJJ/yg= @@ -261,8 +265,8 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/hack/run-e2e.sh b/hack/run-e2e.sh index 8009359c14a..d1b20b527f3 100755 --- a/hack/run-e2e.sh +++ b/hack/run-e2e.sh @@ -3,10 +3,10 @@ SCRIPT=$(readlink -f "$0") ROOT=$(unset CDPATH && cd "$(dirname "$SCRIPT")/.." && pwd) -ginkgo_command=$(which ginkgo 2>/dev/null) -if [ -z "$ginkgo_command" ]; then +# Check if ginkgo is available +if ! command -v ginkgo >/dev/null 2>&1; then echo "ginkgo not found, try to install..." - go install github.com/onsi/ginkgo/v2/ginkgo@v2.17.1 + go install github.com/onsi/ginkgo/v2/ginkgo@v2.23.4 fi debug=false diff --git a/pkg/config/legacy/client.go b/pkg/config/legacy/client.go index 0d677d9cc56..8cc02614798 100644 --- a/pkg/config/legacy/client.go +++ b/pkg/config/legacy/client.go @@ -194,7 +194,7 @@ func UnmarshalClientConfFromIni(source any) (ClientCommonConf, error) { } common.Metas = GetMapWithoutPrefix(s.KeysHash(), "meta_") - common.ClientConfig.OidcAdditionalEndpointParams = GetMapWithoutPrefix(s.KeysHash(), "oidc_additional_") + common.OidcAdditionalEndpointParams = GetMapWithoutPrefix(s.KeysHash(), "oidc_additional_") return common, nil } @@ -229,10 +229,7 @@ func LoadAllProxyConfsFromIni( startProxy[s] = struct{}{} } - startAll := true - if len(startProxy) > 0 { - startAll = false - } + startAll := len(startProxy) == 0 // Build template sections from range section And append to ini.File. rangeSections := make([]*ini.Section, 0) diff --git a/pkg/config/legacy/conversion.go b/pkg/config/legacy/conversion.go index dd8c4a11d91..4ae54f88ecb 100644 --- a/pkg/config/legacy/conversion.go +++ b/pkg/config/legacy/conversion.go @@ -26,20 +26,20 @@ import ( func Convert_ClientCommonConf_To_v1(conf *ClientCommonConf) *v1.ClientCommonConfig { out := &v1.ClientCommonConfig{} out.User = conf.User - out.Auth.Method = v1.AuthMethod(conf.ClientConfig.AuthenticationMethod) - out.Auth.Token = conf.ClientConfig.Token - if conf.ClientConfig.AuthenticateHeartBeats { + out.Auth.Method = v1.AuthMethod(conf.AuthenticationMethod) + out.Auth.Token = conf.Token + if conf.AuthenticateHeartBeats { out.Auth.AdditionalScopes = append(out.Auth.AdditionalScopes, v1.AuthScopeHeartBeats) } - if conf.ClientConfig.AuthenticateNewWorkConns { + if conf.AuthenticateNewWorkConns { out.Auth.AdditionalScopes = append(out.Auth.AdditionalScopes, v1.AuthScopeNewWorkConns) } - out.Auth.OIDC.ClientID = conf.ClientConfig.OidcClientID - out.Auth.OIDC.ClientSecret = conf.ClientConfig.OidcClientSecret - out.Auth.OIDC.Audience = conf.ClientConfig.OidcAudience - out.Auth.OIDC.Scope = conf.ClientConfig.OidcScope - out.Auth.OIDC.TokenEndpointURL = conf.ClientConfig.OidcTokenEndpointURL - out.Auth.OIDC.AdditionalEndpointParams = conf.ClientConfig.OidcAdditionalEndpointParams + out.Auth.OIDC.ClientID = conf.OidcClientID + out.Auth.OIDC.ClientSecret = conf.OidcClientSecret + out.Auth.OIDC.Audience = conf.OidcAudience + out.Auth.OIDC.Scope = conf.OidcScope + out.Auth.OIDC.TokenEndpointURL = conf.OidcTokenEndpointURL + out.Auth.OIDC.AdditionalEndpointParams = conf.OidcAdditionalEndpointParams out.ServerAddr = conf.ServerAddr out.ServerPort = conf.ServerPort @@ -59,10 +59,10 @@ func Convert_ClientCommonConf_To_v1(conf *ClientCommonConf) *v1.ClientCommonConf out.Transport.QUIC.MaxIncomingStreams = conf.QUICMaxIncomingStreams out.Transport.TLS.Enable = lo.ToPtr(conf.TLSEnable) out.Transport.TLS.DisableCustomTLSFirstByte = lo.ToPtr(conf.DisableCustomTLSFirstByte) - out.Transport.TLS.TLSConfig.CertFile = conf.TLSCertFile - out.Transport.TLS.TLSConfig.KeyFile = conf.TLSKeyFile - out.Transport.TLS.TLSConfig.TrustedCaFile = conf.TLSTrustedCaFile - out.Transport.TLS.TLSConfig.ServerName = conf.TLSServerName + out.Transport.TLS.CertFile = conf.TLSCertFile + out.Transport.TLS.KeyFile = conf.TLSKeyFile + out.Transport.TLS.TrustedCaFile = conf.TLSTrustedCaFile + out.Transport.TLS.ServerName = conf.TLSServerName out.Log.To = conf.LogFile out.Log.Level = conf.LogLevel @@ -87,18 +87,18 @@ func Convert_ClientCommonConf_To_v1(conf *ClientCommonConf) *v1.ClientCommonConf func Convert_ServerCommonConf_To_v1(conf *ServerCommonConf) *v1.ServerConfig { out := &v1.ServerConfig{} - out.Auth.Method = v1.AuthMethod(conf.ServerConfig.AuthenticationMethod) - out.Auth.Token = conf.ServerConfig.Token - if conf.ServerConfig.AuthenticateHeartBeats { + out.Auth.Method = v1.AuthMethod(conf.AuthenticationMethod) + out.Auth.Token = conf.Token + if conf.AuthenticateHeartBeats { out.Auth.AdditionalScopes = append(out.Auth.AdditionalScopes, v1.AuthScopeHeartBeats) } - if conf.ServerConfig.AuthenticateNewWorkConns { + if conf.AuthenticateNewWorkConns { out.Auth.AdditionalScopes = append(out.Auth.AdditionalScopes, v1.AuthScopeNewWorkConns) } - out.Auth.OIDC.Audience = conf.ServerConfig.OidcAudience - out.Auth.OIDC.Issuer = conf.ServerConfig.OidcIssuer - out.Auth.OIDC.SkipExpiryCheck = conf.ServerConfig.OidcSkipExpiryCheck - out.Auth.OIDC.SkipIssuerCheck = conf.ServerConfig.OidcSkipIssuerCheck + out.Auth.OIDC.Audience = conf.OidcAudience + out.Auth.OIDC.Issuer = conf.OidcIssuer + out.Auth.OIDC.SkipExpiryCheck = conf.OidcSkipExpiryCheck + out.Auth.OIDC.SkipIssuerCheck = conf.OidcSkipIssuerCheck out.BindAddr = conf.BindAddr out.BindPort = conf.BindPort diff --git a/pkg/config/legacy/proxy.go b/pkg/config/legacy/proxy.go index e6653ee9787..0c461a1a63f 100644 --- a/pkg/config/legacy/proxy.go +++ b/pkg/config/legacy/proxy.go @@ -206,7 +206,7 @@ func (cfg *BaseProxyConf) decorate(_ string, name string, section *ini.Section) } // plugin_xxx - cfg.LocalSvrConf.PluginParams = GetMapByPrefix(section.KeysHash(), "plugin_") + cfg.PluginParams = GetMapByPrefix(section.KeysHash(), "plugin_") return nil } diff --git a/pkg/config/v1/proxy.go b/pkg/config/v1/proxy.go index d53d05e3cbd..34bd712592c 100644 --- a/pkg/config/v1/proxy.go +++ b/pkg/config/v1/proxy.go @@ -129,7 +129,7 @@ func (c *ProxyBaseConfig) Complete(namePrefix string) { c.Transport.BandwidthLimitMode = util.EmptyOr(c.Transport.BandwidthLimitMode, types.BandwidthLimitModeClient) if c.Plugin.ClientPluginOptions != nil { - c.Plugin.ClientPluginOptions.Complete() + c.Plugin.Complete() } } diff --git a/pkg/metrics/mem/server.go b/pkg/metrics/mem/server.go index d92546c4c58..70cfc1c1486 100644 --- a/pkg/metrics/mem/server.go +++ b/pkg/metrics/mem/server.go @@ -109,7 +109,7 @@ func (m *serverMetrics) NewProxy(name string, proxyType string) { m.info.ProxyTypeCounts[proxyType] = counter proxyStats, ok := m.info.ProxyStatistics[name] - if !(ok && proxyStats.ProxyType == proxyType) { + if !ok || proxyStats.ProxyType != proxyType { proxyStats = &ProxyStatistics{ Name: name, ProxyType: proxyType, diff --git a/pkg/util/net/conn.go b/pkg/util/net/conn.go index 20ac73ed1c6..ff7d1c37606 100644 --- a/pkg/util/net/conn.go +++ b/pkg/util/net/conn.go @@ -223,7 +223,7 @@ func (conn *wrapQuicStream) RemoteAddr() net.Addr { } func (conn *wrapQuicStream) Close() error { - conn.Stream.CancelRead(0) + conn.CancelRead(0) return conn.Stream.Close() } diff --git a/pkg/util/vhost/http.go b/pkg/util/vhost/http.go index 46ebc3c7d7f..05ec174bff0 100644 --- a/pkg/util/vhost/http.go +++ b/pkg/util/vhost/http.go @@ -225,11 +225,7 @@ func (rp *HTTPReverseProxy) getVhost(domain, location, routeByHTTPUser string) ( // *.example.com // *.com domainSplit := strings.Split(domain, ".") - for { - if len(domainSplit) < 3 { - break - } - + for len(domainSplit) >= 3 { domainSplit[0] = "*" domain = strings.Join(domainSplit, ".") vr, ok = findRouter(domain, location, routeByHTTPUser) diff --git a/pkg/util/vhost/vhost.go b/pkg/util/vhost/vhost.go index 66dd577d8ec..007751d7f3e 100644 --- a/pkg/util/vhost/vhost.go +++ b/pkg/util/vhost/vhost.go @@ -169,11 +169,7 @@ func (v *Muxer) getListener(name, path, httpUser string) (*Listener, bool) { } domainSplit := strings.Split(name, ".") - for { - if len(domainSplit) < 3 { - break - } - + for len(domainSplit) >= 3 { domainSplit[0] = "*" name = strings.Join(domainSplit, ".") diff --git a/test/e2e/legacy/basic/client_server.go b/test/e2e/legacy/basic/client_server.go index 03bca0c54e2..d85b5accfa3 100644 --- a/test/e2e/legacy/basic/client_server.go +++ b/test/e2e/legacy/basic/client_server.go @@ -24,12 +24,14 @@ type generalTestConfigures struct { } func renderBindPortConfig(protocol string) string { - if protocol == "kcp" { + switch protocol { + case "kcp": return fmt.Sprintf(`kcp_bind_port = {{ .%s }}`, consts.PortServerName) - } else if protocol == "quic" { + case "quic": return fmt.Sprintf(`quic_bind_port = {{ .%s }}`, consts.PortServerName) + default: + return "" } - return "" } func runClientServerTest(f *framework.Framework, configures *generalTestConfigures) { diff --git a/test/e2e/legacy/plugin/server.go b/test/e2e/legacy/plugin/server.go index cf600be2ee0..9120b7d77a1 100644 --- a/test/e2e/legacy/plugin/server.go +++ b/test/e2e/legacy/plugin/server.go @@ -223,7 +223,7 @@ var _ = ginkgo.Describe("[Feature: Server-Plugins]", func() { handler := func(req *plugin.Request) *plugin.Response { var ret plugin.Response content := req.Content.(*plugin.PingContent) - record = content.Ping.PrivilegeKey + record = content.PrivilegeKey ret.Unchange = true return &ret } @@ -273,7 +273,7 @@ var _ = ginkgo.Describe("[Feature: Server-Plugins]", func() { handler := func(req *plugin.Request) *plugin.Response { var ret plugin.Response content := req.Content.(*plugin.NewWorkConnContent) - record = content.NewWorkConn.RunID + record = content.RunID ret.Unchange = true return &ret } diff --git a/test/e2e/v1/basic/client_server.go b/test/e2e/v1/basic/client_server.go index 16270781855..85dd1227dd7 100644 --- a/test/e2e/v1/basic/client_server.go +++ b/test/e2e/v1/basic/client_server.go @@ -24,12 +24,14 @@ type generalTestConfigures struct { } func renderBindPortConfig(protocol string) string { - if protocol == "kcp" { + switch protocol { + case "kcp": return fmt.Sprintf(`kcpBindPort = {{ .%s }}`, consts.PortServerName) - } else if protocol == "quic" { + case "quic": return fmt.Sprintf(`quicBindPort = {{ .%s }}`, consts.PortServerName) + default: + return "" } - return "" } func runClientServerTest(f *framework.Framework, configures *generalTestConfigures) { diff --git a/test/e2e/v1/plugin/server.go b/test/e2e/v1/plugin/server.go index b043c57f13f..6637650d46a 100644 --- a/test/e2e/v1/plugin/server.go +++ b/test/e2e/v1/plugin/server.go @@ -232,7 +232,7 @@ var _ = ginkgo.Describe("[Feature: Server-Plugins]", func() { handler := func(req *plugin.Request) *plugin.Response { var ret plugin.Response content := req.Content.(*plugin.PingContent) - record = content.Ping.PrivilegeKey + record = content.PrivilegeKey ret.Unchange = true return &ret } @@ -284,7 +284,7 @@ var _ = ginkgo.Describe("[Feature: Server-Plugins]", func() { handler := func(req *plugin.Request) *plugin.Response { var ret plugin.Response content := req.Content.(*plugin.NewWorkConnContent) - record = content.NewWorkConn.RunID + record = content.RunID ret.Unchange = true return &ret } From c777891f7589e3491f6e5c375b91fd637680aa04 Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 25 Jun 2025 11:16:48 +0800 Subject: [PATCH 71/90] update .golangci.yml (#4848) --- .gitignore | 3 +++ .golangci.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 0f69b089a2b..c6480f59a4a 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,6 @@ client.key # Cache *.swp + +# AI +CLAUDE.md diff --git a/.golangci.yml b/.golangci.yml index be0a717e74c..09848bc7211 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,6 +1,7 @@ version: "2" run: concurrency: 4 + timeout: 20m build-tags: - integ - integfuzz From 61330d4d794180c38d1f8ff7e9024b7f0f69d717 Mon Sep 17 00:00:00 2001 From: fatedier Date: Tue, 1 Jul 2025 18:56:46 +0800 Subject: [PATCH 72/90] Update quic-go dependency from v0.48.2 to v0.53.0 (#4862) - Update go.mod to use github.com/quic-go/quic-go v0.53.0 - Replace quic.Connection interface with *quic.Conn struct - Replace quic.Stream interface with *quic.Stream struct - Update all affected files to use new API: - pkg/util/net/conn.go: Update QuicStreamToNetConn function and wrapQuicStream struct - server/service.go: Update HandleQUICListener function parameter - client/visitor/xtcp.go: Update QUICTunnelSession struct field - client/connector.go: Update defaultConnectorImpl struct field Fixes #4852 Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- client/connector.go | 2 +- client/visitor/xtcp.go | 2 +- go.mod | 3 +-- go.sum | 6 ++---- pkg/util/net/conn.go | 6 +++--- server/service.go | 2 +- 6 files changed, 9 insertions(+), 12 deletions(-) diff --git a/client/connector.go b/client/connector.go index 64aa71c06e1..ab7c2fdda42 100644 --- a/client/connector.go +++ b/client/connector.go @@ -48,7 +48,7 @@ type defaultConnectorImpl struct { cfg *v1.ClientCommonConfig muxSession *fmux.Session - quicConn quic.Connection + quicConn *quic.Conn closeOnce sync.Once } diff --git a/client/visitor/xtcp.go b/client/visitor/xtcp.go index 51f29ad2a94..99d25d8ac81 100644 --- a/client/visitor/xtcp.go +++ b/client/visitor/xtcp.go @@ -398,7 +398,7 @@ func (ks *KCPTunnelSession) Close() { } type QUICTunnelSession struct { - session quic.Connection + session *quic.Conn listenConn *net.UDPConn mu sync.RWMutex diff --git a/go.mod b/go.mod index e3bdc711cc0..46e753e2a14 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/pion/stun/v2 v2.0.0 github.com/pires/go-proxyproto v0.7.0 github.com/prometheus/client_golang v1.19.1 - github.com/quic-go/quic-go v0.48.2 + github.com/quic-go/quic-go v0.53.0 github.com/rodaine/table v1.2.0 github.com/samber/lo v1.47.0 github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 @@ -68,7 +68,6 @@ require ( github.com/vishvananda/netns v0.0.4 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/mock v0.5.0 // indirect - golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d // indirect golang.org/x/mod v0.24.0 // indirect golang.org/x/sys v0.32.0 // indirect golang.org/x/text v0.24.0 // indirect diff --git a/go.sum b/go.sum index a65c303320c..bd044c39cbb 100644 --- a/go.sum +++ b/go.sum @@ -105,8 +105,8 @@ github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSz github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= -github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= -github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= +github.com/quic-go/quic-go v0.53.0 h1:QHX46sISpG2S03dPeZBgVIZp8dGagIaiu2FiVYvpCZI= +github.com/quic-go/quic-go v0.53.0/go.mod h1:e68ZEaCdyviluZmy44P6Iey98v/Wfz6HCjQEm+l8zTY= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rodaine/table v1.2.0 h1:38HEnwK4mKSHQJIkavVj+bst1TEY7j9zhLMWu4QJrMA= @@ -167,8 +167,6 @@ golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98y golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d h1:0olWaB5pg3+oychR51GUVCEsGkeCU/2JxjBgIo4f3M0= -golang.org/x/exp v0.0.0-20241204233417-43b7b7cde48d/go.mod h1:qj5a5QZpwLU2NLQudwIN5koi3beDhSAlJwa67PuM98c= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= diff --git a/pkg/util/net/conn.go b/pkg/util/net/conn.go index ff7d1c37606..20468f1b8c5 100644 --- a/pkg/util/net/conn.go +++ b/pkg/util/net/conn.go @@ -197,11 +197,11 @@ func (statsConn *StatsConn) Close() (err error) { } type wrapQuicStream struct { - quic.Stream - c quic.Connection + *quic.Stream + c *quic.Conn } -func QuicStreamToNetConn(s quic.Stream, c quic.Connection) net.Conn { +func QuicStreamToNetConn(s *quic.Stream, c *quic.Conn) net.Conn { return &wrapQuicStream{ Stream: s, c: c, diff --git a/server/service.go b/server/service.go index b9abaa80099..514afb518e3 100644 --- a/server/service.go +++ b/server/service.go @@ -550,7 +550,7 @@ func (svr *Service) HandleQUICListener(l *quic.Listener) { return } // Start a new goroutine to handle connection. - go func(ctx context.Context, frpConn quic.Connection) { + go func(ctx context.Context, frpConn *quic.Conn) { for { stream, err := frpConn.AcceptStream(context.Background()) if err != nil { From f9065a6a78f91f31ca9522209194346755ac4d87 Mon Sep 17 00:00:00 2001 From: fatedier Date: Thu, 3 Jul 2025 13:17:21 +0800 Subject: [PATCH 73/90] add tokenSource support for auth configuration (#4865) --- README.md | 15 ++ Release.md | 3 +- client/service.go | 11 +- cmd/frpc/sub/nathole.go | 5 +- cmd/frpc/sub/proxy.go | 10 +- cmd/frps/root.go | 5 +- conf/frpc_full_example.toml | 5 + conf/frps_full_example.toml | 5 + pkg/config/load.go | 8 +- pkg/config/v1/client.go | 30 +++- pkg/config/v1/client_test.go | 72 ++++++++- pkg/config/v1/server.go | 25 ++- pkg/config/v1/server_test.go | 72 ++++++++- pkg/config/v1/validation/client.go | 12 ++ pkg/config/v1/validation/server.go | 12 ++ pkg/config/v1/value_source.go | 93 +++++++++++ pkg/config/v1/value_source_test.go | 246 +++++++++++++++++++++++++++++ pkg/ssh/server.go | 5 +- pkg/virtual/client.go | 4 +- test/e2e/v1/basic/token_source.go | 217 +++++++++++++++++++++++++ 20 files changed, 832 insertions(+), 23 deletions(-) create mode 100644 pkg/config/v1/value_source.go create mode 100644 pkg/config/v1/value_source_test.go create mode 100644 test/e2e/v1/basic/token_source.go diff --git a/README.md b/README.md index f0ab4273096..38bafab4891 100644 --- a/README.md +++ b/README.md @@ -612,6 +612,21 @@ When specifying `auth.method = "token"` in `frpc.toml` and `frps.toml` - token b Make sure to specify the same `auth.token` in `frps.toml` and `frpc.toml` for frpc to pass frps validation +##### Token Source + +frp supports reading authentication tokens from external sources using the `tokenSource` configuration. Currently, file-based token source is supported. + +**File-based token source:** + +```toml +# frpc.toml +auth.method = "token" +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "/path/to/token/file" +``` + +The token will be read from the specified file at startup. This is useful for scenarios where tokens are managed by external systems or need to be kept separate from configuration files for security reasons. + #### OIDC Authentication When specifying `auth.method = "oidc"` in `frpc.toml` and `frps.toml` - OIDC based authentication will be used. diff --git a/Release.md b/Release.md index 19b79d6478b..7ee50ea07c9 100644 --- a/Release.md +++ b/Release.md @@ -1,4 +1,3 @@ ## Features -* Support for YAML merge functionality (anchors and references with dot-prefixed fields) in strict configuration mode without requiring `--strict-config=false` parameter. -* Support for proxy protocol in UDP proxies to preserve real client IP addresses. \ No newline at end of file +* Support tokenSource for loading authentication tokens from files \ No newline at end of file diff --git a/client/service.go b/client/service.go index d6a12970c6c..337f8f2b8d0 100644 --- a/client/service.go +++ b/client/service.go @@ -88,13 +88,16 @@ type ServiceOptions struct { } // setServiceOptionsDefault sets the default values for ServiceOptions. -func setServiceOptionsDefault(options *ServiceOptions) { +func setServiceOptionsDefault(options *ServiceOptions) error { if options.Common != nil { - options.Common.Complete() + if err := options.Common.Complete(); err != nil { + return err + } } if options.ConnectorCreator == nil { options.ConnectorCreator = NewConnector } + return nil } // Service is the client service that connects to frps and provides proxy services. @@ -134,7 +137,9 @@ type Service struct { } func NewService(options ServiceOptions) (*Service, error) { - setServiceOptionsDefault(&options) + if err := setServiceOptionsDefault(&options); err != nil { + return nil, err + } var webServer *httppkg.Server if options.Common.WebServer.Port > 0 { diff --git a/cmd/frpc/sub/nathole.go b/cmd/frpc/sub/nathole.go index fb5b08078c2..a07d6852305 100644 --- a/cmd/frpc/sub/nathole.go +++ b/cmd/frpc/sub/nathole.go @@ -51,7 +51,10 @@ var natholeDiscoveryCmd = &cobra.Command{ cfg, _, _, _, err := config.LoadClientConfig(cfgFile, strictConfigMode) if err != nil { cfg = &v1.ClientCommonConfig{} - cfg.Complete() + if err := cfg.Complete(); err != nil { + fmt.Printf("failed to complete config: %v\n", err) + os.Exit(1) + } } if natHoleSTUNServer != "" { cfg.NatHoleSTUNServer = natHoleSTUNServer diff --git a/cmd/frpc/sub/proxy.go b/cmd/frpc/sub/proxy.go index c5d76b1e3b3..67bd774f7a3 100644 --- a/cmd/frpc/sub/proxy.go +++ b/cmd/frpc/sub/proxy.go @@ -73,7 +73,10 @@ func NewProxyCommand(name string, c v1.ProxyConfigurer, clientCfg *v1.ClientComm Use: name, Short: fmt.Sprintf("Run frpc with a single %s proxy", name), Run: func(cmd *cobra.Command, args []string) { - clientCfg.Complete() + if err := clientCfg.Complete(); err != nil { + fmt.Println(err) + os.Exit(1) + } if _, err := validation.ValidateClientCommonConfig(clientCfg); err != nil { fmt.Println(err) os.Exit(1) @@ -99,7 +102,10 @@ func NewVisitorCommand(name string, c v1.VisitorConfigurer, clientCfg *v1.Client Use: "visitor", Short: fmt.Sprintf("Run frpc with a single %s visitor", name), Run: func(cmd *cobra.Command, args []string) { - clientCfg.Complete() + if err := clientCfg.Complete(); err != nil { + fmt.Println(err) + os.Exit(1) + } if _, err := validation.ValidateClientCommonConfig(clientCfg); err != nil { fmt.Println(err) os.Exit(1) diff --git a/cmd/frps/root.go b/cmd/frps/root.go index fff487d1074..c1bfc880624 100644 --- a/cmd/frps/root.go +++ b/cmd/frps/root.go @@ -70,7 +70,10 @@ var rootCmd = &cobra.Command{ "please use yaml/json/toml format instead!\n") } } else { - serverCfg.Complete() + if err := serverCfg.Complete(); err != nil { + fmt.Printf("failed to complete server config: %v\n", err) + os.Exit(1) + } svrCfg = &serverCfg } diff --git a/conf/frpc_full_example.toml b/conf/frpc_full_example.toml index 7d4838cd78f..d8d93a3fe25 100644 --- a/conf/frpc_full_example.toml +++ b/conf/frpc_full_example.toml @@ -32,6 +32,11 @@ auth.method = "token" # auth token auth.token = "12345678" +# alternatively, you can use tokenSource to load the token from a file +# this is mutually exclusive with auth.token +# auth.tokenSource.type = "file" +# auth.tokenSource.file.path = "/etc/frp/token" + # oidc.clientID specifies the client ID to use to get a token in OIDC authentication. # auth.oidc.clientID = "" # oidc.clientSecret specifies the client secret to use to get a token in OIDC authentication. diff --git a/conf/frps_full_example.toml b/conf/frps_full_example.toml index a4fc2736a74..aba37435ffc 100644 --- a/conf/frps_full_example.toml +++ b/conf/frps_full_example.toml @@ -105,6 +105,11 @@ auth.method = "token" # auth token auth.token = "12345678" +# alternatively, you can use tokenSource to load the token from a file +# this is mutually exclusive with auth.token +# auth.tokenSource.type = "file" +# auth.tokenSource.file.path = "/etc/frp/token" + # oidc issuer specifies the issuer to verify OIDC tokens with. auth.oidc.issuer = "" # oidc audience specifies the audience OIDC tokens should contain when validated. diff --git a/pkg/config/load.go b/pkg/config/load.go index bb050b406b5..3852af9a886 100644 --- a/pkg/config/load.go +++ b/pkg/config/load.go @@ -212,7 +212,9 @@ func LoadServerConfig(path string, strict bool) (*v1.ServerConfig, bool, error) } } if svrCfg != nil { - svrCfg.Complete() + if err := svrCfg.Complete(); err != nil { + return nil, isLegacyFormat, err + } } return svrCfg, isLegacyFormat, nil } @@ -280,7 +282,9 @@ func LoadClientConfig(path string, strict bool) ( } if cliCfg != nil { - cliCfg.Complete() + if err := cliCfg.Complete(); err != nil { + return nil, nil, nil, isLegacyFormat, err + } } for _, c := range proxyCfgs { c.Complete(cliCfg.User) diff --git a/pkg/config/v1/client.go b/pkg/config/v1/client.go index d616fc0a300..a830df994a5 100644 --- a/pkg/config/v1/client.go +++ b/pkg/config/v1/client.go @@ -15,6 +15,8 @@ package v1 import ( + "context" + "fmt" "os" "github.com/samber/lo" @@ -77,18 +79,21 @@ type ClientCommonConfig struct { IncludeConfigFiles []string `json:"includes,omitempty"` } -func (c *ClientCommonConfig) Complete() { +func (c *ClientCommonConfig) Complete() error { c.ServerAddr = util.EmptyOr(c.ServerAddr, "0.0.0.0") c.ServerPort = util.EmptyOr(c.ServerPort, 7000) c.LoginFailExit = util.EmptyOr(c.LoginFailExit, lo.ToPtr(true)) c.NatHoleSTUNServer = util.EmptyOr(c.NatHoleSTUNServer, "stun.easyvoip.com:3478") - c.Auth.Complete() + if err := c.Auth.Complete(); err != nil { + return err + } c.Log.Complete() c.Transport.Complete() c.WebServer.Complete() c.UDPPacketSize = util.EmptyOr(c.UDPPacketSize, 1500) + return nil } type ClientTransportConfig struct { @@ -184,12 +189,27 @@ type AuthClientConfig struct { // Token specifies the authorization token used to create keys to be sent // to the server. The server must have a matching token for authorization // to succeed. By default, this value is "". - Token string `json:"token,omitempty"` - OIDC AuthOIDCClientConfig `json:"oidc,omitempty"` + Token string `json:"token,omitempty"` + // TokenSource specifies a dynamic source for the authorization token. + // This is mutually exclusive with Token field. + TokenSource *ValueSource `json:"tokenSource,omitempty"` + OIDC AuthOIDCClientConfig `json:"oidc,omitempty"` } -func (c *AuthClientConfig) Complete() { +func (c *AuthClientConfig) Complete() error { c.Method = util.EmptyOr(c.Method, "token") + + // Resolve tokenSource during configuration loading + if c.Method == AuthMethodToken && c.TokenSource != nil { + token, err := c.TokenSource.Resolve(context.Background()) + if err != nil { + return fmt.Errorf("failed to resolve auth.tokenSource: %w", err) + } + // Move the resolved token to the Token field and clear TokenSource + c.Token = token + c.TokenSource = nil + } + return nil } type AuthOIDCClientConfig struct { diff --git a/pkg/config/v1/client_test.go b/pkg/config/v1/client_test.go index 9ff7c287164..120c4fd42a3 100644 --- a/pkg/config/v1/client_test.go +++ b/pkg/config/v1/client_test.go @@ -15,6 +15,8 @@ package v1 import ( + "os" + "path/filepath" "testing" "github.com/samber/lo" @@ -24,7 +26,8 @@ import ( func TestClientConfigComplete(t *testing.T) { require := require.New(t) c := &ClientConfig{} - c.Complete() + err := c.Complete() + require.NoError(err) require.EqualValues("token", c.Auth.Method) require.Equal(true, lo.FromPtr(c.Transport.TCPMux)) @@ -33,3 +36,70 @@ func TestClientConfigComplete(t *testing.T) { require.Equal(true, lo.FromPtr(c.Transport.TLS.DisableCustomTLSFirstByte)) require.NotEmpty(c.NatHoleSTUNServer) } + +func TestAuthClientConfig_Complete(t *testing.T) { + // Create a temporary file for testing + tmpDir := t.TempDir() + testFile := filepath.Join(tmpDir, "test_token") + testContent := "client-token-value" + err := os.WriteFile(testFile, []byte(testContent), 0o600) + require.NoError(t, err) + + tests := []struct { + name string + config AuthClientConfig + expectToken string + expectPanic bool + }{ + { + name: "tokenSource resolved to token", + config: AuthClientConfig{ + Method: AuthMethodToken, + TokenSource: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: testFile, + }, + }, + }, + expectToken: testContent, + expectPanic: false, + }, + { + name: "direct token unchanged", + config: AuthClientConfig{ + Method: AuthMethodToken, + Token: "direct-token", + }, + expectToken: "direct-token", + expectPanic: false, + }, + { + name: "invalid tokenSource should panic", + config: AuthClientConfig{ + Method: AuthMethodToken, + TokenSource: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: "/non/existent/file", + }, + }, + }, + expectPanic: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.expectPanic { + err := tt.config.Complete() + require.Error(t, err) + } else { + err := tt.config.Complete() + require.NoError(t, err) + require.Equal(t, tt.expectToken, tt.config.Token) + require.Nil(t, tt.config.TokenSource, "TokenSource should be cleared after resolution") + } + }) + } +} diff --git a/pkg/config/v1/server.go b/pkg/config/v1/server.go index 3108cd34f40..54aac080bd0 100644 --- a/pkg/config/v1/server.go +++ b/pkg/config/v1/server.go @@ -15,6 +15,9 @@ package v1 import ( + "context" + "fmt" + "github.com/samber/lo" "github.com/fatedier/frp/pkg/config/types" @@ -98,8 +101,10 @@ type ServerConfig struct { HTTPPlugins []HTTPPluginOptions `json:"httpPlugins,omitempty"` } -func (c *ServerConfig) Complete() { - c.Auth.Complete() +func (c *ServerConfig) Complete() error { + if err := c.Auth.Complete(); err != nil { + return err + } c.Log.Complete() c.Transport.Complete() c.WebServer.Complete() @@ -120,17 +125,31 @@ func (c *ServerConfig) Complete() { c.UserConnTimeout = util.EmptyOr(c.UserConnTimeout, 10) c.UDPPacketSize = util.EmptyOr(c.UDPPacketSize, 1500) c.NatHoleAnalysisDataReserveHours = util.EmptyOr(c.NatHoleAnalysisDataReserveHours, 7*24) + return nil } type AuthServerConfig struct { Method AuthMethod `json:"method,omitempty"` AdditionalScopes []AuthScope `json:"additionalScopes,omitempty"` Token string `json:"token,omitempty"` + TokenSource *ValueSource `json:"tokenSource,omitempty"` OIDC AuthOIDCServerConfig `json:"oidc,omitempty"` } -func (c *AuthServerConfig) Complete() { +func (c *AuthServerConfig) Complete() error { c.Method = util.EmptyOr(c.Method, "token") + + // Resolve tokenSource during configuration loading + if c.Method == AuthMethodToken && c.TokenSource != nil { + token, err := c.TokenSource.Resolve(context.Background()) + if err != nil { + return fmt.Errorf("failed to resolve auth.tokenSource: %w", err) + } + // Move the resolved token to the Token field and clear TokenSource + c.Token = token + c.TokenSource = nil + } + return nil } type AuthOIDCServerConfig struct { diff --git a/pkg/config/v1/server_test.go b/pkg/config/v1/server_test.go index 3100fc4b12f..21d18fb7653 100644 --- a/pkg/config/v1/server_test.go +++ b/pkg/config/v1/server_test.go @@ -15,6 +15,8 @@ package v1 import ( + "os" + "path/filepath" "testing" "github.com/samber/lo" @@ -24,9 +26,77 @@ import ( func TestServerConfigComplete(t *testing.T) { require := require.New(t) c := &ServerConfig{} - c.Complete() + err := c.Complete() + require.NoError(err) require.EqualValues("token", c.Auth.Method) require.Equal(true, lo.FromPtr(c.Transport.TCPMux)) require.Equal(true, lo.FromPtr(c.DetailedErrorsToClient)) } + +func TestAuthServerConfig_Complete(t *testing.T) { + // Create a temporary file for testing + tmpDir := t.TempDir() + testFile := filepath.Join(tmpDir, "test_token") + testContent := "file-token-value" + err := os.WriteFile(testFile, []byte(testContent), 0o600) + require.NoError(t, err) + + tests := []struct { + name string + config AuthServerConfig + expectToken string + expectPanic bool + }{ + { + name: "tokenSource resolved to token", + config: AuthServerConfig{ + Method: AuthMethodToken, + TokenSource: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: testFile, + }, + }, + }, + expectToken: testContent, + expectPanic: false, + }, + { + name: "direct token unchanged", + config: AuthServerConfig{ + Method: AuthMethodToken, + Token: "direct-token", + }, + expectToken: "direct-token", + expectPanic: false, + }, + { + name: "invalid tokenSource should panic", + config: AuthServerConfig{ + Method: AuthMethodToken, + TokenSource: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: "/non/existent/file", + }, + }, + }, + expectPanic: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.expectPanic { + err := tt.config.Complete() + require.Error(t, err) + } else { + err := tt.config.Complete() + require.NoError(t, err) + require.Equal(t, tt.expectToken, tt.config.Token) + require.Nil(t, tt.config.TokenSource, "TokenSource should be cleared after resolution") + } + }) + } +} diff --git a/pkg/config/v1/validation/client.go b/pkg/config/v1/validation/client.go index bae21fda40b..0c8575c990c 100644 --- a/pkg/config/v1/validation/client.go +++ b/pkg/config/v1/validation/client.go @@ -45,6 +45,18 @@ func ValidateClientCommonConfig(c *v1.ClientCommonConfig) (Warning, error) { errs = AppendError(errs, fmt.Errorf("invalid auth additional scopes, optional values are %v", SupportedAuthAdditionalScopes)) } + // Validate token/tokenSource mutual exclusivity + if c.Auth.Token != "" && c.Auth.TokenSource != nil { + errs = AppendError(errs, fmt.Errorf("cannot specify both auth.token and auth.tokenSource")) + } + + // Validate tokenSource if specified + if c.Auth.TokenSource != nil { + if err := c.Auth.TokenSource.Validate(); err != nil { + errs = AppendError(errs, fmt.Errorf("invalid auth.tokenSource: %v", err)) + } + } + if err := validateLogConfig(&c.Log); err != nil { errs = AppendError(errs, err) } diff --git a/pkg/config/v1/validation/server.go b/pkg/config/v1/validation/server.go index cdb80ea3851..5694227299f 100644 --- a/pkg/config/v1/validation/server.go +++ b/pkg/config/v1/validation/server.go @@ -35,6 +35,18 @@ func ValidateServerConfig(c *v1.ServerConfig) (Warning, error) { errs = AppendError(errs, fmt.Errorf("invalid auth additional scopes, optional values are %v", SupportedAuthAdditionalScopes)) } + // Validate token/tokenSource mutual exclusivity + if c.Auth.Token != "" && c.Auth.TokenSource != nil { + errs = AppendError(errs, fmt.Errorf("cannot specify both auth.token and auth.tokenSource")) + } + + // Validate tokenSource if specified + if c.Auth.TokenSource != nil { + if err := c.Auth.TokenSource.Validate(); err != nil { + errs = AppendError(errs, fmt.Errorf("invalid auth.tokenSource: %v", err)) + } + } + if err := validateLogConfig(&c.Log); err != nil { errs = AppendError(errs, err) } diff --git a/pkg/config/v1/value_source.go b/pkg/config/v1/value_source.go new file mode 100644 index 00000000000..624a2658965 --- /dev/null +++ b/pkg/config/v1/value_source.go @@ -0,0 +1,93 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1 + +import ( + "context" + "errors" + "fmt" + "os" + "strings" +) + +// ValueSource provides a way to dynamically resolve configuration values +// from various sources like files, environment variables, or external services. +type ValueSource struct { + Type string `json:"type"` + File *FileSource `json:"file,omitempty"` +} + +// FileSource specifies how to load a value from a file. +type FileSource struct { + Path string `json:"path"` +} + +// Validate validates the ValueSource configuration. +func (v *ValueSource) Validate() error { + if v == nil { + return errors.New("valueSource cannot be nil") + } + + switch v.Type { + case "file": + if v.File == nil { + return errors.New("file configuration is required when type is 'file'") + } + return v.File.Validate() + default: + return fmt.Errorf("unsupported value source type: %s (only 'file' is supported)", v.Type) + } +} + +// Resolve resolves the value from the configured source. +func (v *ValueSource) Resolve(ctx context.Context) (string, error) { + if err := v.Validate(); err != nil { + return "", err + } + + switch v.Type { + case "file": + return v.File.Resolve(ctx) + default: + return "", fmt.Errorf("unsupported value source type: %s", v.Type) + } +} + +// Validate validates the FileSource configuration. +func (f *FileSource) Validate() error { + if f == nil { + return errors.New("fileSource cannot be nil") + } + + if f.Path == "" { + return errors.New("file path cannot be empty") + } + return nil +} + +// Resolve reads and returns the content from the specified file. +func (f *FileSource) Resolve(_ context.Context) (string, error) { + if err := f.Validate(); err != nil { + return "", err + } + + content, err := os.ReadFile(f.Path) + if err != nil { + return "", fmt.Errorf("failed to read file %s: %v", f.Path, err) + } + + // Trim whitespace, which is important for file-based tokens + return strings.TrimSpace(string(content)), nil +} diff --git a/pkg/config/v1/value_source_test.go b/pkg/config/v1/value_source_test.go new file mode 100644 index 00000000000..685151f44ad --- /dev/null +++ b/pkg/config/v1/value_source_test.go @@ -0,0 +1,246 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1 + +import ( + "context" + "os" + "path/filepath" + "testing" +) + +func TestValueSource_Validate(t *testing.T) { + tests := []struct { + name string + vs *ValueSource + wantErr bool + }{ + { + name: "nil valueSource", + vs: nil, + wantErr: true, + }, + { + name: "unsupported type", + vs: &ValueSource{ + Type: "unsupported", + }, + wantErr: true, + }, + { + name: "file type without file config", + vs: &ValueSource{ + Type: "file", + File: nil, + }, + wantErr: true, + }, + { + name: "valid file type with absolute path", + vs: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: "/tmp/test", + }, + }, + wantErr: false, + }, + { + name: "valid file type with relative path", + vs: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: "configs/token", + }, + }, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.vs.Validate() + if (err != nil) != tt.wantErr { + t.Errorf("ValueSource.Validate() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestFileSource_Validate(t *testing.T) { + tests := []struct { + name string + fs *FileSource + wantErr bool + }{ + { + name: "nil fileSource", + fs: nil, + wantErr: true, + }, + { + name: "empty path", + fs: &FileSource{ + Path: "", + }, + wantErr: true, + }, + { + name: "relative path (allowed)", + fs: &FileSource{ + Path: "relative/path", + }, + wantErr: false, + }, + { + name: "absolute path", + fs: &FileSource{ + Path: "/absolute/path", + }, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.fs.Validate() + if (err != nil) != tt.wantErr { + t.Errorf("FileSource.Validate() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +} + +func TestFileSource_Resolve(t *testing.T) { + // Create a temporary file for testing + tmpDir := t.TempDir() + testFile := filepath.Join(tmpDir, "test_token") + testContent := "test-token-value\n\t " + expectedContent := "test-token-value" + + err := os.WriteFile(testFile, []byte(testContent), 0o600) + if err != nil { + t.Fatalf("failed to create test file: %v", err) + } + + tests := []struct { + name string + fs *FileSource + want string + wantErr bool + }{ + { + name: "valid file path", + fs: &FileSource{ + Path: testFile, + }, + want: expectedContent, + wantErr: false, + }, + { + name: "non-existent file", + fs: &FileSource{ + Path: "/non/existent/file", + }, + want: "", + wantErr: true, + }, + { + name: "path traversal attempt (should fail validation)", + fs: &FileSource{ + Path: "../../../etc/passwd", + }, + want: "", + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.fs.Resolve(context.Background()) + if (err != nil) != tt.wantErr { + t.Errorf("FileSource.Resolve() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("FileSource.Resolve() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestValueSource_Resolve(t *testing.T) { + // Create a temporary file for testing + tmpDir := t.TempDir() + testFile := filepath.Join(tmpDir, "test_token") + testContent := "test-token-value" + + err := os.WriteFile(testFile, []byte(testContent), 0o600) + if err != nil { + t.Fatalf("failed to create test file: %v", err) + } + + tests := []struct { + name string + vs *ValueSource + want string + wantErr bool + }{ + { + name: "valid file type", + vs: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: testFile, + }, + }, + want: testContent, + wantErr: false, + }, + { + name: "unsupported type", + vs: &ValueSource{ + Type: "unsupported", + }, + want: "", + wantErr: true, + }, + { + name: "file type with path traversal", + vs: &ValueSource{ + Type: "file", + File: &FileSource{ + Path: "../../../etc/passwd", + }, + }, + want: "", + wantErr: true, + }, + } + + ctx := context.Background() + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.vs.Resolve(ctx) + if (err != nil) != tt.wantErr { + t.Errorf("ValueSource.Resolve() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("ValueSource.Resolve() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/ssh/server.go b/pkg/ssh/server.go index 84b744fb9a4..378c609847b 100644 --- a/pkg/ssh/server.go +++ b/pkg/ssh/server.go @@ -105,7 +105,10 @@ func (s *TunnelServer) Run() error { s.writeToClient(err.Error()) return fmt.Errorf("parse flags from ssh client error: %v", err) } - clientCfg.Complete() + if err := clientCfg.Complete(); err != nil { + s.writeToClient(fmt.Sprintf("failed to complete client config: %v", err)) + return fmt.Errorf("complete client config error: %v", err) + } if sshConn.Permissions != nil { clientCfg.User = util.EmptyOr(sshConn.Permissions.Extensions["user"], clientCfg.User) } diff --git a/pkg/virtual/client.go b/pkg/virtual/client.go index 96835a48c7f..8fec28c858d 100644 --- a/pkg/virtual/client.go +++ b/pkg/virtual/client.go @@ -37,7 +37,9 @@ type Client struct { func NewClient(options ClientOptions) (*Client, error) { if options.Common != nil { - options.Common.Complete() + if err := options.Common.Complete(); err != nil { + return nil, err + } } ln := netpkg.NewInternalListener() diff --git a/test/e2e/v1/basic/token_source.go b/test/e2e/v1/basic/token_source.go new file mode 100644 index 00000000000..95bb8dd4b0c --- /dev/null +++ b/test/e2e/v1/basic/token_source.go @@ -0,0 +1,217 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package basic + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/onsi/ginkgo/v2" + + "github.com/fatedier/frp/test/e2e/framework" + "github.com/fatedier/frp/test/e2e/framework/consts" + "github.com/fatedier/frp/test/e2e/pkg/port" +) + +var _ = ginkgo.Describe("[Feature: TokenSource]", func() { + f := framework.NewDefaultFramework() + + ginkgo.Describe("File-based token loading", func() { + ginkgo.It("should work with file tokenSource", func() { + // Create a temporary token file + tmpDir := f.TempDirectory + tokenFile := filepath.Join(tmpDir, "test_token") + tokenContent := "test-token-123" + + err := os.WriteFile(tokenFile, []byte(tokenContent), 0o600) + framework.ExpectNoError(err) + + serverConf := consts.DefaultServerConfig + clientConf := consts.DefaultClientConfig + + portName := port.GenName("TCP") + + // Server config with tokenSource + serverConf += fmt.Sprintf(` +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "%s" +`, tokenFile) + + // Client config with matching token + clientConf += fmt.Sprintf(` +auth.token = "%s" + +[[proxies]] +name = "tcp" +type = "tcp" +localPort = {{ .%s }} +remotePort = {{ .%s }} +`, tokenContent, framework.TCPEchoServerPort, portName) + + f.RunProcesses([]string{serverConf}, []string{clientConf}) + + framework.NewRequestExpect(f).PortName(portName).Ensure() + }) + + ginkgo.It("should work with client tokenSource", func() { + // Create a temporary token file + tmpDir := f.TempDirectory + tokenFile := filepath.Join(tmpDir, "client_token") + tokenContent := "client-token-456" + + err := os.WriteFile(tokenFile, []byte(tokenContent), 0o600) + framework.ExpectNoError(err) + + serverConf := consts.DefaultServerConfig + clientConf := consts.DefaultClientConfig + + portName := port.GenName("TCP") + + // Server config with matching token + serverConf += fmt.Sprintf(` +auth.token = "%s" +`, tokenContent) + + // Client config with tokenSource + clientConf += fmt.Sprintf(` +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "%s" + +[[proxies]] +name = "tcp" +type = "tcp" +localPort = {{ .%s }} +remotePort = {{ .%s }} +`, tokenFile, framework.TCPEchoServerPort, portName) + + f.RunProcesses([]string{serverConf}, []string{clientConf}) + + framework.NewRequestExpect(f).PortName(portName).Ensure() + }) + + ginkgo.It("should work with both server and client tokenSource", func() { + // Create temporary token files + tmpDir := f.TempDirectory + serverTokenFile := filepath.Join(tmpDir, "server_token") + clientTokenFile := filepath.Join(tmpDir, "client_token") + tokenContent := "shared-token-789" + + err := os.WriteFile(serverTokenFile, []byte(tokenContent), 0o600) + framework.ExpectNoError(err) + + err = os.WriteFile(clientTokenFile, []byte(tokenContent), 0o600) + framework.ExpectNoError(err) + + serverConf := consts.DefaultServerConfig + clientConf := consts.DefaultClientConfig + + portName := port.GenName("TCP") + + // Server config with tokenSource + serverConf += fmt.Sprintf(` +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "%s" +`, serverTokenFile) + + // Client config with tokenSource + clientConf += fmt.Sprintf(` +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "%s" + +[[proxies]] +name = "tcp" +type = "tcp" +localPort = {{ .%s }} +remotePort = {{ .%s }} +`, clientTokenFile, framework.TCPEchoServerPort, portName) + + f.RunProcesses([]string{serverConf}, []string{clientConf}) + + framework.NewRequestExpect(f).PortName(portName).Ensure() + }) + + ginkgo.It("should fail with mismatched tokens", func() { + // Create temporary token files with different content + tmpDir := f.TempDirectory + serverTokenFile := filepath.Join(tmpDir, "server_token") + clientTokenFile := filepath.Join(tmpDir, "client_token") + + err := os.WriteFile(serverTokenFile, []byte("server-token"), 0o600) + framework.ExpectNoError(err) + + err = os.WriteFile(clientTokenFile, []byte("client-token"), 0o600) + framework.ExpectNoError(err) + + serverConf := consts.DefaultServerConfig + clientConf := consts.DefaultClientConfig + + portName := port.GenName("TCP") + + // Server config with tokenSource + serverConf += fmt.Sprintf(` +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "%s" +`, serverTokenFile) + + // Client config with different tokenSource + clientConf += fmt.Sprintf(` +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "%s" + +[[proxies]] +name = "tcp" +type = "tcp" +localPort = {{ .%s }} +remotePort = {{ .%s }} +`, clientTokenFile, framework.TCPEchoServerPort, portName) + + f.RunProcesses([]string{serverConf}, []string{clientConf}) + + // This should fail due to token mismatch - the client should not be able to connect + // We expect the request to fail because the proxy tunnel is not established + framework.NewRequestExpect(f).PortName(portName).ExpectError(true).Ensure() + }) + + ginkgo.It("should fail with non-existent token file", func() { + // This test verifies that server fails to start when tokenSource points to non-existent file + // We'll verify this by checking that the configuration loading itself fails + + // Create a config that references a non-existent file + tmpDir := f.TempDirectory + nonExistentFile := filepath.Join(tmpDir, "non_existent_token") + + serverConf := consts.DefaultServerConfig + + // Server config with non-existent tokenSource file + serverConf += fmt.Sprintf(` +auth.tokenSource.type = "file" +auth.tokenSource.file.path = "%s" +`, nonExistentFile) + + // The test expectation is that this will fail during the RunProcesses call + // because the server cannot load the configuration due to missing token file + defer func() { + if r := recover(); r != nil { + // Expected: server should fail to start due to missing file + ginkgo.By(fmt.Sprintf("Server correctly failed to start: %v", r)) + } + }() + + // This should cause a panic or error during server startup + f.RunProcesses([]string{serverConf}, []string{}) + }) + }) +}) From c3bf952d8f49dfb23ef9dfc430cec1d9dab1c967 Mon Sep 17 00:00:00 2001 From: maguowei Date: Thu, 24 Jul 2025 10:16:44 +0800 Subject: [PATCH 74/90] fix webserver port not being released on frpc svr.Close() (#4896) --- client/service.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/service.go b/client/service.go index 337f8f2b8d0..9e1833b972c 100644 --- a/client/service.go +++ b/client/service.go @@ -403,6 +403,10 @@ func (svr *Service) stop() { svr.ctl.GracefulClose(svr.gracefulShutdownDuration) svr.ctl = nil } + if svr.webServer != nil { + svr.webServer.Close() + svr.webServer = nil + } } func (svr *Service) getProxyStatus(name string) (*proxy.WorkingStatus, bool) { From 7fe295f4f4f8edf7f5b1a8b7452a9f8dec4b85f0 Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 25 Jul 2025 17:10:32 +0800 Subject: [PATCH 75/90] update golangci-lint version (#4897) --- .github/workflows/golangci-lint.yml | 12 +----------- .golangci.yml | 3 +++ 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index 40aba1ce409..d4faac70a7e 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -23,14 +23,4 @@ jobs: uses: golangci/golangci-lint-action@v8 with: # Optional: version of golangci-lint to use in form of v1.2 or v1.2.3 or `latest` to use the latest version - version: v2.1 - - # Optional: golangci-lint command line arguments. - # args: --issues-exit-code=0 - - # Optional: show only new issues if it's a pull request. The default value is `false`. - # only-new-issues: true - - # Optional: if set to true then the all caching functionality will be complete disabled, - # takes precedence over all other caching options. - # skip-cache: true + version: v2.3 diff --git a/.golangci.yml b/.golangci.yml index 09848bc7211..3ba2c60fe63 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -73,6 +73,9 @@ linters: - linters: - revive text: unused-parameter + - linters: + - revive + text: "avoid meaningless package names" - linters: - unparam text: is always false From e6dacf3a67c127c005f5e7416bf87ec887f47e15 Mon Sep 17 00:00:00 2001 From: fatedier Date: Mon, 28 Jul 2025 15:19:56 +0800 Subject: [PATCH 76/90] Fix SSH tunnel gateway binding address issue #4900 (#4902) - Fix SSH tunnel gateway incorrectly binding to proxyBindAddr instead of bindAddr - This caused external connections to fail when proxyBindAddr was set to 127.0.0.1 - SSH tunnel gateway now correctly binds to bindAddr for external accessibility - Update Release.md with bug fix description Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- Release.md | 6 +++++- server/service.go | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Release.md b/Release.md index 7ee50ea07c9..9e1ce466a8e 100644 --- a/Release.md +++ b/Release.md @@ -1,3 +1,7 @@ ## Features -* Support tokenSource for loading authentication tokens from files \ No newline at end of file +* Support tokenSource for loading authentication tokens from files + +## Fixes + +* Fix SSH tunnel gateway incorrectly binding to proxyBindAddr instead of bindAddr, which caused external connections to fail when proxyBindAddr was set to 127.0.0.1 diff --git a/server/service.go b/server/service.go index 514afb518e3..fad0e1432c8 100644 --- a/server/service.go +++ b/server/service.go @@ -262,7 +262,7 @@ func NewService(cfg *v1.ServerConfig) (*Service, error) { } if cfg.SSHTunnelGateway.BindPort > 0 { - sshGateway, err := ssh.NewGateway(cfg.SSHTunnelGateway, cfg.ProxyBindAddr, svr.sshTunnelListener) + sshGateway, err := ssh.NewGateway(cfg.SSHTunnelGateway, cfg.BindAddr, svr.sshTunnelListener) if err != nil { return nil, fmt.Errorf("create ssh gateway error: %v", err) } From dc3bc9182c403c897830c0366c720c691df75545 Mon Sep 17 00:00:00 2001 From: fatedier Date: Fri, 8 Aug 2025 22:28:17 +0800 Subject: [PATCH 77/90] update sponsor info (#4917) --- README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.md b/README.md index 38bafab4891..baf9c734cfd 100644 --- a/README.md +++ b/README.md @@ -13,19 +13,36 @@ frp is an open source project with its ongoing development made possible entirel

Gold Sponsors

+

+ + +
+ Warp, the intelligent terminal +
+ Available for macOS, Linux and Windows +
+

+
+ The complete IDE crafted for professional Go developers

+
+ Secure and Elastic Infrastructure for Running Your AI-Generated Code

+
+ The sovereign cloud that puts you in control +
+ An open source, self-hosted alternative to public clouds, built for data ownership and privacy

From 024e4f5f1dd0a408f588ce53eecbc0851613f134 Mon Sep 17 00:00:00 2001 From: fatedier Date: Sun, 10 Aug 2025 22:59:28 +0800 Subject: [PATCH 78/90] improve random TLS certificate generation (#4923) --- Release.md | 4 ++-- pkg/transport/tls.go | 36 +++++++++++++++++++++++++++++------- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/Release.md b/Release.md index 9e1ce466a8e..5b2724d80dd 100644 --- a/Release.md +++ b/Release.md @@ -1,7 +1,7 @@ ## Features -* Support tokenSource for loading authentication tokens from files +* Support tokenSource for loading authentication tokens from files. ## Fixes -* Fix SSH tunnel gateway incorrectly binding to proxyBindAddr instead of bindAddr, which caused external connections to fail when proxyBindAddr was set to 127.0.0.1 +* Fix SSH tunnel gateway incorrectly binding to proxyBindAddr instead of bindAddr, which caused external connections to fail when proxyBindAddr was set to 127.0.0.1. diff --git a/pkg/transport/tls.go b/pkg/transport/tls.go index 5bc75921cbd..e8d2bf483a5 100644 --- a/pkg/transport/tls.go +++ b/pkg/transport/tls.go @@ -22,6 +22,7 @@ import ( "encoding/pem" "math/big" "os" + "time" ) func newCustomTLSKeyPair(certfile, keyfile string) (*tls.Certificate, error) { @@ -32,12 +33,30 @@ func newCustomTLSKeyPair(certfile, keyfile string) (*tls.Certificate, error) { return &tlsCert, nil } -func newRandomTLSKeyPair() *tls.Certificate { +func newRandomTLSKeyPair() (*tls.Certificate, error) { key, err := rsa.GenerateKey(rand.Reader, 2048) if err != nil { - panic(err) + return nil, err + } + + // Generate a random positive serial number with 128 bits of entropy. + // RFC 5280 requires serial numbers to be positive integers (not zero). + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, err + } + // Ensure serial number is positive (not zero) + if serialNumber.Sign() == 0 { + serialNumber = big.NewInt(1) + } + + template := x509.Certificate{ + SerialNumber: serialNumber, + NotBefore: time.Now().Add(-1 * time.Hour), + NotAfter: time.Now().Add(365 * 24 * time.Hour * 10), } - template := x509.Certificate{SerialNumber: big.NewInt(1)} + certDER, err := x509.CreateCertificate( rand.Reader, &template, @@ -45,16 +64,16 @@ func newRandomTLSKeyPair() *tls.Certificate { &key.PublicKey, key) if err != nil { - panic(err) + return nil, err } keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}) certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER}) tlsCert, err := tls.X509KeyPair(certPEM, keyPEM) if err != nil { - panic(err) + return nil, err } - return &tlsCert + return &tlsCert, nil } // Only support one ca file to add @@ -76,7 +95,10 @@ func NewServerTLSConfig(certPath, keyPath, caPath string) (*tls.Config, error) { if certPath == "" || keyPath == "" { // server will generate tls conf by itself - cert := newRandomTLSKeyPair() + cert, err := newRandomTLSKeyPair() + if err != nil { + return nil, err + } base.Certificates = []tls.Certificate{*cert} } else { cert, err := newCustomTLSKeyPair(certPath, keyPath) From f795950742a9edb8174cf0cdf97e53eb49865914 Mon Sep 17 00:00:00 2001 From: fatedier Date: Sun, 10 Aug 2025 23:11:50 +0800 Subject: [PATCH 79/90] bump version to v0.64.0 (#4924) --- pkg/util/version/version.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/util/version/version.go b/pkg/util/version/version.go index 966a942fe62..c6497e145f6 100644 --- a/pkg/util/version/version.go +++ b/pkg/util/version/version.go @@ -14,7 +14,7 @@ package version -var version = "0.63.0" +var version = "0.64.0" func Full() string { return version From 024c334d9dcf47ac4d69099c1ef658b6468d6b48 Mon Sep 17 00:00:00 2001 From: fatedier Date: Tue, 12 Aug 2025 01:48:26 +0800 Subject: [PATCH 80/90] Merge pull request #4928 from fatedier/xtcp improve context and polling logic in xtcp visitor --- client/visitor/xtcp.go | 49 ++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/client/visitor/xtcp.go b/client/visitor/xtcp.go index 99d25d8ac81..cb374b68e08 100644 --- a/client/visitor/xtcp.go +++ b/client/visitor/xtcp.go @@ -145,7 +145,7 @@ func (sv *XTCPVisitor) keepTunnelOpenWorker() { return case <-ticker.C: xl.Debugf("keepTunnelOpenWorker try to check tunnel...") - conn, err := sv.getTunnelConn() + conn, err := sv.getTunnelConn(sv.ctx) if err != nil { xl.Warnf("keepTunnelOpenWorker get tunnel connection error: %v", err) _ = sv.retryLimiter.Wait(sv.ctx) @@ -161,9 +161,9 @@ func (sv *XTCPVisitor) keepTunnelOpenWorker() { func (sv *XTCPVisitor) handleConn(userConn net.Conn) { xl := xlog.FromContextSafe(sv.ctx) - isConnTransfered := false + isConnTransferred := false defer func() { - if !isConnTransfered { + if !isConnTransferred { userConn.Close() } }() @@ -172,7 +172,7 @@ func (sv *XTCPVisitor) handleConn(userConn net.Conn) { // Open a tunnel connection to the server. If there is already a successful hole-punching connection, // it will be reused. Otherwise, it will block and wait for a successful hole-punching connection until timeout. - ctx := context.Background() + ctx := sv.ctx if sv.cfg.FallbackTo != "" { timeoutCtx, cancel := context.WithTimeout(ctx, time.Duration(sv.cfg.FallbackTimeoutMs)*time.Millisecond) defer cancel() @@ -191,7 +191,7 @@ func (sv *XTCPVisitor) handleConn(userConn net.Conn) { xl.Errorf("transfer connection to visitor %s error: %v", sv.cfg.FallbackTo, err) return } - isConnTransfered = true + isConnTransferred = true return } @@ -219,40 +219,37 @@ func (sv *XTCPVisitor) handleConn(userConn net.Conn) { // openTunnel will open a tunnel connection to the target server. func (sv *XTCPVisitor) openTunnel(ctx context.Context) (conn net.Conn, err error) { xl := xlog.FromContextSafe(sv.ctx) - ticker := time.NewTicker(500 * time.Millisecond) - defer ticker.Stop() + ctx, cancel := context.WithTimeout(ctx, 20*time.Second) + defer cancel() - timeoutC := time.After(20 * time.Second) - immediateTrigger := make(chan struct{}, 1) - defer close(immediateTrigger) - immediateTrigger <- struct{}{} + timer := time.NewTimer(0) + defer timer.Stop() for { select { case <-sv.ctx.Done(): return nil, sv.ctx.Err() case <-ctx.Done(): + if errors.Is(ctx.Err(), context.DeadlineExceeded) { + return nil, fmt.Errorf("open tunnel timeout") + } return nil, ctx.Err() - case <-immediateTrigger: - conn, err = sv.getTunnelConn() - case <-ticker.C: - conn, err = sv.getTunnelConn() - case <-timeoutC: - return nil, fmt.Errorf("open tunnel timeout") - } - - if err != nil { - if err != ErrNoTunnelSession { - xl.Warnf("get tunnel connection error: %v", err) + case <-timer.C: + conn, err = sv.getTunnelConn(ctx) + if err != nil { + if !errors.Is(err, ErrNoTunnelSession) { + xl.Warnf("get tunnel connection error: %v", err) + } + timer.Reset(500 * time.Millisecond) + continue } - continue + return conn, nil } - return conn, nil } } -func (sv *XTCPVisitor) getTunnelConn() (net.Conn, error) { - conn, err := sv.session.OpenConn(sv.ctx) +func (sv *XTCPVisitor) getTunnelConn(ctx context.Context) (net.Conn, error) { + conn, err := sv.session.OpenConn(ctx) if err == nil { return conn, nil } From 14253afe2f5deb66cddbd9a0aac37dd31ace7d29 Mon Sep 17 00:00:00 2001 From: immomo808 <4128219+immomo808@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:11:06 +0900 Subject: [PATCH 81/90] remove quotes (#4938) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index baf9c734cfd..9a1db495ebc 100644 --- a/README.md +++ b/README.md @@ -519,7 +519,7 @@ name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 -remotePort = "{{ .Envs.FRP_SSH_REMOTE_PORT }}" +remotePort = {{ .Envs.FRP_SSH_REMOTE_PORT }} ``` With the config above, variables can be passed into `frpc` program like this: From 80d3f332e184331172f94567b6f5f5606aa4fe18 Mon Sep 17 00:00:00 2001 From: fatedier Date: Mon, 25 Aug 2025 15:52:52 +0800 Subject: [PATCH 82/90] xtcp: add configuration to disable assisted addresses in NAT traversal (#4951) --- Release.md | 6 +----- client/proxy/xtcp.go | 10 +++++++++- client/visitor/xtcp.go | 10 +++++++++- conf/frpc_full_example.toml | 15 +++++++++++++++ pkg/config/v1/common.go | 8 ++++++++ pkg/config/v1/proxy.go | 3 +++ pkg/config/v1/visitor.go | 3 +++ pkg/nathole/nathole.go | 19 +++++++++++++++---- 8 files changed, 63 insertions(+), 11 deletions(-) diff --git a/Release.md b/Release.md index 5b2724d80dd..e0f5084e9ee 100644 --- a/Release.md +++ b/Release.md @@ -1,7 +1,3 @@ ## Features -* Support tokenSource for loading authentication tokens from files. - -## Fixes - -* Fix SSH tunnel gateway incorrectly binding to proxyBindAddr instead of bindAddr, which caused external connections to fail when proxyBindAddr was set to 127.0.0.1. +* Add NAT traversal configuration options for XTCP proxies and visitors. Support disabling assisted addresses to avoid using slow VPN connections during NAT hole punching. diff --git a/client/proxy/xtcp.go b/client/proxy/xtcp.go index 31f9ac89734..6e1deac39d3 100644 --- a/client/proxy/xtcp.go +++ b/client/proxy/xtcp.go @@ -64,11 +64,19 @@ func (pxy *XTCPProxy) InWorkConn(conn net.Conn, startWorkConnMsg *msg.StartWorkC } xl.Tracef("nathole prepare start") - prepareResult, err := nathole.Prepare([]string{pxy.clientCfg.NatHoleSTUNServer}) + + // Prepare NAT traversal options + var opts nathole.PrepareOptions + if pxy.cfg.NatTraversal != nil && pxy.cfg.NatTraversal.DisableAssistedAddrs { + opts.DisableAssistedAddrs = true + } + + prepareResult, err := nathole.Prepare([]string{pxy.clientCfg.NatHoleSTUNServer}, opts) if err != nil { xl.Warnf("nathole prepare error: %v", err) return } + xl.Infof("nathole prepare success, nat type: %s, behavior: %s, addresses: %v, assistedAddresses: %v", prepareResult.NatType, prepareResult.Behavior, prepareResult.Addrs, prepareResult.AssistedAddrs) defer prepareResult.ListenConn.Close() diff --git a/client/visitor/xtcp.go b/client/visitor/xtcp.go index cb374b68e08..353577db659 100644 --- a/client/visitor/xtcp.go +++ b/client/visitor/xtcp.go @@ -276,11 +276,19 @@ func (sv *XTCPVisitor) makeNatHole() { } xl.Tracef("nathole prepare start") - prepareResult, err := nathole.Prepare([]string{sv.clientCfg.NatHoleSTUNServer}) + + // Prepare NAT traversal options + var opts nathole.PrepareOptions + if sv.cfg.NatTraversal != nil && sv.cfg.NatTraversal.DisableAssistedAddrs { + opts.DisableAssistedAddrs = true + } + + prepareResult, err := nathole.Prepare([]string{sv.clientCfg.NatHoleSTUNServer}, opts) if err != nil { xl.Warnf("nathole prepare error: %v", err) return } + xl.Infof("nathole prepare success, nat type: %s, behavior: %s, addresses: %v, assistedAddresses: %v", prepareResult.NatType, prepareResult.Behavior, prepareResult.Addrs, prepareResult.AssistedAddrs) diff --git a/conf/frpc_full_example.toml b/conf/frpc_full_example.toml index d8d93a3fe25..dfae95734d3 100644 --- a/conf/frpc_full_example.toml +++ b/conf/frpc_full_example.toml @@ -372,6 +372,14 @@ localPort = 22 # Otherwise, visitors from same user can connect. '*' means allow all users. allowUsers = ["user1", "user2"] +# NAT traversal configuration (optional) +[proxies.natTraversal] +# Disable the use of local network interfaces (assisted addresses) for NAT traversal. +# When enabled, only STUN-discovered public addresses will be used. +# This can improve performance when you have slow VPN connections. +# Default: false +disableAssistedAddrs = false + [[proxies]] name = "vnet-server" type = "stcp" @@ -411,6 +419,13 @@ minRetryInterval = 90 # fallbackTo = "stcp_visitor" # fallbackTimeoutMs = 500 +# NAT traversal configuration (optional) +[visitors.natTraversal] +# Disable the use of local network interfaces (assisted addresses) for NAT traversal. +# When enabled, only STUN-discovered public addresses will be used. +# Default: false +disableAssistedAddrs = false + [[visitors]] name = "vnet-visitor" type = "stcp" diff --git a/pkg/config/v1/common.go b/pkg/config/v1/common.go index ddb23356823..38965a3cbcc 100644 --- a/pkg/config/v1/common.go +++ b/pkg/config/v1/common.go @@ -96,6 +96,14 @@ type TLSConfig struct { ServerName string `json:"serverName,omitempty"` } +// NatTraversalConfig defines configuration options for NAT traversal +type NatTraversalConfig struct { + // DisableAssistedAddrs disables the use of local network interfaces + // for assisted connections during NAT traversal. When enabled, + // only STUN-discovered public addresses will be used. + DisableAssistedAddrs bool `json:"disableAssistedAddrs,omitempty"` +} + type LogConfig struct { // This is destination where frp should write the logs. // If "console" is used, logs will be printed to stdout, otherwise, diff --git a/pkg/config/v1/proxy.go b/pkg/config/v1/proxy.go index 34bd712592c..37701b6d785 100644 --- a/pkg/config/v1/proxy.go +++ b/pkg/config/v1/proxy.go @@ -422,6 +422,9 @@ type XTCPProxyConfig struct { Secretkey string `json:"secretKey,omitempty"` AllowUsers []string `json:"allowUsers,omitempty"` + + // NatTraversal configuration for NAT traversal + NatTraversal *NatTraversalConfig `json:"natTraversal,omitempty"` } func (c *XTCPProxyConfig) MarshalToMsg(m *msg.NewProxy) { diff --git a/pkg/config/v1/visitor.go b/pkg/config/v1/visitor.go index f00391c34e4..7629875a6f2 100644 --- a/pkg/config/v1/visitor.go +++ b/pkg/config/v1/visitor.go @@ -160,6 +160,9 @@ type XTCPVisitorConfig struct { MinRetryInterval int `json:"minRetryInterval,omitempty"` FallbackTo string `json:"fallbackTo,omitempty"` FallbackTimeoutMs int `json:"fallbackTimeoutMs,omitempty"` + + // NatTraversal configuration for NAT traversal + NatTraversal *NatTraversalConfig `json:"natTraversal,omitempty"` } func (c *XTCPVisitorConfig) Complete(g *ClientCommonConfig) { diff --git a/pkg/nathole/nathole.go b/pkg/nathole/nathole.go index bdd0ee83cb2..72522fac0ed 100644 --- a/pkg/nathole/nathole.go +++ b/pkg/nathole/nathole.go @@ -68,6 +68,13 @@ var ( DetectRoleReceiver = "receiver" ) +// PrepareOptions defines options for NAT traversal preparation +type PrepareOptions struct { + // DisableAssistedAddrs disables the use of local network interfaces + // for assisted connections during NAT traversal + DisableAssistedAddrs bool +} + type PrepareResult struct { Addrs []string AssistedAddrs []string @@ -108,7 +115,7 @@ func PreCheck( } // Prepare is used to do some preparation work before penetration. -func Prepare(stunServers []string) (*PrepareResult, error) { +func Prepare(stunServers []string, opts PrepareOptions) (*PrepareResult, error) { // discover for Nat type addrs, localAddr, err := Discover(stunServers, "") if err != nil { @@ -133,9 +140,13 @@ func Prepare(stunServers []string) (*PrepareResult, error) { return nil, fmt.Errorf("listen local udp addr error: %v", err) } - assistedAddrs := make([]string, 0, len(localIPs)) - for _, ip := range localIPs { - assistedAddrs = append(assistedAddrs, net.JoinHostPort(ip, strconv.Itoa(laddr.Port))) + // Apply NAT traversal options + var assistedAddrs []string + if !opts.DisableAssistedAddrs { + assistedAddrs = make([]string, 0, len(localIPs)) + for _, ip := range localIPs { + assistedAddrs = append(assistedAddrs, net.JoinHostPort(ip, strconv.Itoa(laddr.Port))) + } } return &PrepareResult{ Addrs: addrs, From 610e5ed4798db5452cc0b62bf4a89ab50d1ee65d Mon Sep 17 00:00:00 2001 From: fatedier Date: Mon, 25 Aug 2025 17:52:58 +0800 Subject: [PATCH 83/90] improve yamux logging (#4952) --- client/connector.go | 4 +-- client/control.go | 2 ++ go.mod | 2 +- go.sum | 4 +-- pkg/util/xlog/log_writer.go | 65 +++++++++++++++++++++++++++++++++++++ server/service.go | 4 +-- 6 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 pkg/util/xlog/log_writer.go diff --git a/client/connector.go b/client/connector.go index ab7c2fdda42..03d7fc29d97 100644 --- a/client/connector.go +++ b/client/connector.go @@ -17,7 +17,6 @@ package client import ( "context" "crypto/tls" - "io" "net" "strconv" "strings" @@ -115,7 +114,8 @@ func (c *defaultConnectorImpl) Open() error { fmuxCfg := fmux.DefaultConfig() fmuxCfg.KeepAliveInterval = time.Duration(c.cfg.Transport.TCPMuxKeepaliveInterval) * time.Second - fmuxCfg.LogOutput = io.Discard + // Use trace level for yamux logs + fmuxCfg.LogOutput = xlog.NewTraceWriter(xl) fmuxCfg.MaxStreamWindowSize = 6 * 1024 * 1024 session, err := fmux.Client(conn, fmuxCfg) if err != nil { diff --git a/client/control.go b/client/control.go index 0dd70b8c72f..4bd6a2f737a 100644 --- a/client/control.go +++ b/client/control.go @@ -276,10 +276,12 @@ func (ctl *Control) heartbeatWorker() { } func (ctl *Control) worker() { + xl := ctl.xl go ctl.heartbeatWorker() go ctl.msgDispatcher.Run() <-ctl.msgDispatcher.Done() + xl.Debugf("control message dispatcher exited") ctl.closeSession() ctl.pm.Close() diff --git a/go.mod b/go.mod index 46e753e2a14..06bfb6ecc0e 100644 --- a/go.mod +++ b/go.mod @@ -82,4 +82,4 @@ require ( ) // TODO(fatedier): Temporary use the modified version, update to the official version after merging into the official repository. -replace github.com/hashicorp/yamux => github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d +replace github.com/hashicorp/yamux => github.com/fatedier/yamux v0.0.0-20250825093530-d0154be01cd6 diff --git a/go.sum b/go.sum index bd044c39cbb..a411ff30581 100644 --- a/go.sum +++ b/go.sum @@ -22,8 +22,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatedier/golib v0.5.1 h1:hcKAnaw5mdI/1KWRGejxR+i1Hn/NvbY5UsMKDr7o13M= github.com/fatedier/golib v0.5.1/go.mod h1:W6kIYkIFxHsTzbgqg5piCxIiDo4LzwgTY6R5W8l9NFQ= -github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d h1:ynk1ra0RUqDWQfvFi5KtMiSobkVQ3cNc0ODb8CfIETo= -github.com/fatedier/yamux v0.0.0-20230628132301-7aca4898904d/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/fatedier/yamux v0.0.0-20250825093530-d0154be01cd6 h1:u92UUy6FURPmNsMBUuongRWC0rBqN6gd01Dzu+D21NE= +github.com/fatedier/yamux v0.0.0-20250825093530-d0154be01cd6/go.mod h1:c5/tk6G0dSpXGzJN7Wk1OEie8grdSJAmeawId9Zvd34= github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= diff --git a/pkg/util/xlog/log_writer.go b/pkg/util/xlog/log_writer.go new file mode 100644 index 00000000000..3fff73240a8 --- /dev/null +++ b/pkg/util/xlog/log_writer.go @@ -0,0 +1,65 @@ +// Copyright 2025 The frp Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package xlog + +import "strings" + +// LogWriter forwards writes to frp's logger at configurable level. +// It is safe for concurrent use as long as the underlying Logger is thread-safe. +type LogWriter struct { + xl *Logger + logFunc func(string) +} + +func (w LogWriter) Write(p []byte) (n int, err error) { + msg := strings.TrimSpace(string(p)) + w.logFunc(msg) + return len(p), nil +} + +func NewTraceWriter(xl *Logger) LogWriter { + return LogWriter{ + xl: xl, + logFunc: func(msg string) { xl.Tracef("%s", msg) }, + } +} + +func NewDebugWriter(xl *Logger) LogWriter { + return LogWriter{ + xl: xl, + logFunc: func(msg string) { xl.Debugf("%s", msg) }, + } +} + +func NewInfoWriter(xl *Logger) LogWriter { + return LogWriter{ + xl: xl, + logFunc: func(msg string) { xl.Infof("%s", msg) }, + } +} + +func NewWarnWriter(xl *Logger) LogWriter { + return LogWriter{ + xl: xl, + logFunc: func(msg string) { xl.Warnf("%s", msg) }, + } +} + +func NewErrorWriter(xl *Logger) LogWriter { + return LogWriter{ + xl: xl, + logFunc: func(msg string) { xl.Errorf("%s", msg) }, + } +} diff --git a/server/service.go b/server/service.go index fad0e1432c8..7ca80dc89ba 100644 --- a/server/service.go +++ b/server/service.go @@ -19,7 +19,6 @@ import ( "context" "crypto/tls" "fmt" - "io" "net" "net/http" "os" @@ -516,7 +515,8 @@ func (svr *Service) HandleListener(l net.Listener, internal bool) { if lo.FromPtr(svr.cfg.Transport.TCPMux) && !internal { fmuxCfg := fmux.DefaultConfig() fmuxCfg.KeepAliveInterval = time.Duration(svr.cfg.Transport.TCPMuxKeepaliveInterval) * time.Second - fmuxCfg.LogOutput = io.Discard + // Use trace level for yamux logs + fmuxCfg.LogOutput = xlog.NewTraceWriter(xlog.FromContextSafe(ctx)) fmuxCfg.MaxStreamWindowSize = 6 * 1024 * 1024 session, err := fmux.Server(frpConn, fmuxCfg) if err != nil { From 604700cea5e56b0a607f3e243bd85850824b495b Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 27 Aug 2025 11:07:18 +0800 Subject: [PATCH 84/90] update README (#4957) --- README.md | 2 +- README_zh.md | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a1db495ebc..c1afcae0477 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ frp is an open source project with its ongoing development made possible entirel
- Warp, the intelligent terminal + Warp, built for collaborating with AI Agents
Available for macOS, Linux and Windows
diff --git a/README_zh.md b/README_zh.md index d911e15230f..c21be1c0356 100644 --- a/README_zh.md +++ b/README_zh.md @@ -15,19 +15,36 @@ frp 是一个完全开源的项目,我们的开发工作完全依靠赞助者

Gold Sponsors

+

+ + +
+ Warp, built for collaborating with AI Agents +
+ Available for macOS, Linux and Windows +
+

+
+ The complete IDE crafted for professional Go developers

+
+ Secure and Elastic Infrastructure for Running Your AI-Generated Code

+
+ The sovereign cloud that puts you in control +
+ An open source, self-hosted alternative to public clouds, built for data ownership and privacy

From 0a798a7a69adf3ccad352644b01c97763567be70 Mon Sep 17 00:00:00 2001 From: fatedier Date: Wed, 27 Aug 2025 15:10:36 +0800 Subject: [PATCH 85/90] update go version to 1.24 (#4960) --- .circleci/config.yml | 2 +- .github/workflows/golangci-lint.yml | 2 +- .github/workflows/goreleaser.yml | 2 +- dockerfiles/Dockerfile-for-frpc | 2 +- dockerfiles/Dockerfile-for-frps | 2 +- go.mod | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ede1f5fef64..017d75c9e73 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2,7 +2,7 @@ version: 2 jobs: go-version-latest: docker: - - image: cimg/go:1.23-node + - image: cimg/go:1.24-node resource_class: large steps: - checkout diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index d4faac70a7e..eb631c240b3 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: - go-version: '1.23' + go-version: '1.24' cache: false - name: golangci-lint uses: golangci/golangci-lint-action@v8 diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/goreleaser.yml index d55913fda6c..652d156ce59 100644 --- a/.github/workflows/goreleaser.yml +++ b/.github/workflows/goreleaser.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v5 with: - go-version: '1.23' + go-version: '1.24' - name: Make All run: | diff --git a/dockerfiles/Dockerfile-for-frpc b/dockerfiles/Dockerfile-for-frpc index d8d4437ad22..7d77a26de3d 100644 --- a/dockerfiles/Dockerfile-for-frpc +++ b/dockerfiles/Dockerfile-for-frpc @@ -1,4 +1,4 @@ -FROM golang:1.23 AS building +FROM golang:1.24 AS building COPY . /building WORKDIR /building diff --git a/dockerfiles/Dockerfile-for-frps b/dockerfiles/Dockerfile-for-frps index 00fb51a89d8..489ce0f5282 100644 --- a/dockerfiles/Dockerfile-for-frps +++ b/dockerfiles/Dockerfile-for-frps @@ -1,4 +1,4 @@ -FROM golang:1.23 AS building +FROM golang:1.24 AS building COPY . /building WORKDIR /building diff --git a/go.mod b/go.mod index 06bfb6ecc0e..af633af4135 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/fatedier/frp -go 1.23.0 +go 1.24.0 require ( github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 From 7cfa546b55ee485240c3a713b01a4923ee6b714c Mon Sep 17 00:00:00 2001 From: Charlie Blevins Date: Mon, 22 Sep 2025 11:18:49 -0500 Subject: [PATCH 86/90] add proxy name label to the proxy_count prometheus metric (#4985) * add proxy name label to the proxy_count metric * undo label addition in favor of a new metric - this change should not break existing queries * also register this new metric * add type label to proxy_counts_detailed * Update pkg/metrics/prometheus/server.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- pkg/metrics/prometheus/server.go | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/pkg/metrics/prometheus/server.go b/pkg/metrics/prometheus/server.go index 56dea6e82fe..a99bb1d5efe 100644 --- a/pkg/metrics/prometheus/server.go +++ b/pkg/metrics/prometheus/server.go @@ -14,11 +14,12 @@ const ( var ServerMetrics metrics.ServerMetrics = newServerMetrics() type serverMetrics struct { - clientCount prometheus.Gauge - proxyCount *prometheus.GaugeVec - connectionCount *prometheus.GaugeVec - trafficIn *prometheus.CounterVec - trafficOut *prometheus.CounterVec + clientCount prometheus.Gauge + proxyCount *prometheus.GaugeVec + proxyCountDetailed *prometheus.GaugeVec + connectionCount *prometheus.GaugeVec + trafficIn *prometheus.CounterVec + trafficOut *prometheus.CounterVec } func (m *serverMetrics) NewClient() { @@ -29,12 +30,14 @@ func (m *serverMetrics) CloseClient() { m.clientCount.Dec() } -func (m *serverMetrics) NewProxy(_ string, proxyType string) { +func (m *serverMetrics) NewProxy(name string, proxyType string) { m.proxyCount.WithLabelValues(proxyType).Inc() + m.proxyCountDetailed.WithLabelValues(proxyType, name).Inc() } -func (m *serverMetrics) CloseProxy(_ string, proxyType string) { +func (m *serverMetrics) CloseProxy(name string, proxyType string) { m.proxyCount.WithLabelValues(proxyType).Dec() + m.proxyCountDetailed.WithLabelValues(proxyType, name).Dec() } func (m *serverMetrics) OpenConnection(name string, proxyType string) { @@ -67,6 +70,12 @@ func newServerMetrics() *serverMetrics { Name: "proxy_counts", Help: "The current proxy counts", }, []string{"type"}), + proxyCountDetailed: prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Namespace: namespace, + Subsystem: serverSubsystem, + Name: "proxy_counts_detailed", + Help: "The current number of proxies grouped by type and name", + }, []string{"type", "name"}), connectionCount: prometheus.NewGaugeVec(prometheus.GaugeOpts{ Namespace: namespace, Subsystem: serverSubsystem, @@ -88,6 +97,7 @@ func newServerMetrics() *serverMetrics { } prometheus.MustRegister(m.clientCount) prometheus.MustRegister(m.proxyCount) + prometheus.MustRegister(m.proxyCountDetailed) prometheus.MustRegister(m.connectionCount) prometheus.MustRegister(m.trafficIn) prometheus.MustRegister(m.trafficOut) From abf4942e8a48dacf3689982d41c23a0bfc3470a9 Mon Sep 17 00:00:00 2001 From: fatedier Date: Thu, 25 Sep 2025 10:19:19 +0800 Subject: [PATCH 87/90] auth: enhance OIDC client with TLS and proxy configuration options (#4990) --- Release.md | 1 + client/service.go | 8 ++++- conf/frpc_full_example.toml | 14 ++++++++ pkg/auth/auth.go | 11 +++--- pkg/auth/oidc.go | 71 +++++++++++++++++++++++++++++++++++-- pkg/config/v1/client.go | 11 ++++++ 6 files changed, 108 insertions(+), 8 deletions(-) diff --git a/Release.md b/Release.md index e0f5084e9ee..742c9847aec 100644 --- a/Release.md +++ b/Release.md @@ -1,3 +1,4 @@ ## Features * Add NAT traversal configuration options for XTCP proxies and visitors. Support disabling assisted addresses to avoid using slow VPN connections during NAT hole punching. +* Enhanced OIDC client configuration with support for custom TLS certificate verification and proxy settings. Added `trustedCaFile`, `insecureSkipVerify`, and `proxyURL` options for OIDC token endpoint connections. diff --git a/client/service.go b/client/service.go index 9e1833b972c..f906e4d0a82 100644 --- a/client/service.go +++ b/client/service.go @@ -149,9 +149,15 @@ func NewService(options ServiceOptions) (*Service, error) { } webServer = ws } + + authSetter, err := auth.NewAuthSetter(options.Common.Auth) + if err != nil { + return nil, err + } + s := &Service{ ctx: context.Background(), - authSetter: auth.NewAuthSetter(options.Common.Auth), + authSetter: authSetter, webServer: webServer, common: options.Common, configFilePath: options.ConfigFilePath, diff --git a/conf/frpc_full_example.toml b/conf/frpc_full_example.toml index dfae95734d3..6b86907e459 100644 --- a/conf/frpc_full_example.toml +++ b/conf/frpc_full_example.toml @@ -55,6 +55,20 @@ auth.token = "12345678" # auth.oidc.additionalEndpointParams.audience = "https://dev.auth.com/api/v2/" # auth.oidc.additionalEndpointParams.var1 = "foobar" +# OIDC TLS and proxy configuration +# Specify a custom CA certificate file for verifying the OIDC token endpoint's TLS certificate. +# This is useful when the OIDC provider uses a self-signed certificate or a custom CA. +# auth.oidc.trustedCaFile = "/path/to/ca.crt" + +# Skip TLS certificate verification for the OIDC token endpoint. +# INSECURE: Only use this for debugging purposes, not recommended for production. +# auth.oidc.insecureSkipVerify = false + +# Specify a proxy server for OIDC token endpoint connections. +# Supports http, https, socks5, and socks5h proxy protocols. +# If not specified, no proxy is used for OIDC connections. +# auth.oidc.proxyURL = "http://proxy.example.com:8080" + # Set admin address for control frpc's action by http api such as reload webServer.addr = "127.0.0.1" webServer.port = 7400 diff --git a/pkg/auth/auth.go b/pkg/auth/auth.go index ae706986708..b954fc80eaa 100644 --- a/pkg/auth/auth.go +++ b/pkg/auth/auth.go @@ -27,16 +27,19 @@ type Setter interface { SetNewWorkConn(*msg.NewWorkConn) error } -func NewAuthSetter(cfg v1.AuthClientConfig) (authProvider Setter) { +func NewAuthSetter(cfg v1.AuthClientConfig) (authProvider Setter, err error) { switch cfg.Method { case v1.AuthMethodToken: authProvider = NewTokenAuth(cfg.AdditionalScopes, cfg.Token) case v1.AuthMethodOIDC: - authProvider = NewOidcAuthSetter(cfg.AdditionalScopes, cfg.OIDC) + authProvider, err = NewOidcAuthSetter(cfg.AdditionalScopes, cfg.OIDC) + if err != nil { + return nil, err + } default: - panic(fmt.Sprintf("wrong method: '%s'", cfg.Method)) + return nil, fmt.Errorf("unsupported auth method: %s", cfg.Method) } - return authProvider + return authProvider, nil } type Verifier interface { diff --git a/pkg/auth/oidc.go b/pkg/auth/oidc.go index 40ce060faa9..c5f636402c8 100644 --- a/pkg/auth/oidc.go +++ b/pkg/auth/oidc.go @@ -16,23 +16,72 @@ package auth import ( "context" + "crypto/tls" + "crypto/x509" "fmt" + "net/http" + "net/url" + "os" "slices" "github.com/coreos/go-oidc/v3/oidc" + "golang.org/x/oauth2" "golang.org/x/oauth2/clientcredentials" v1 "github.com/fatedier/frp/pkg/config/v1" "github.com/fatedier/frp/pkg/msg" ) +// createOIDCHTTPClient creates an HTTP client with custom TLS and proxy configuration for OIDC token requests +func createOIDCHTTPClient(trustedCAFile string, insecureSkipVerify bool, proxyURL string) (*http.Client, error) { + // Clone the default transport to get all reasonable defaults + transport := http.DefaultTransport.(*http.Transport).Clone() + + // Configure TLS settings + if trustedCAFile != "" || insecureSkipVerify { + tlsConfig := &tls.Config{ + InsecureSkipVerify: insecureSkipVerify, + } + + if trustedCAFile != "" && !insecureSkipVerify { + caCert, err := os.ReadFile(trustedCAFile) + if err != nil { + return nil, fmt.Errorf("failed to read OIDC CA certificate file %q: %w", trustedCAFile, err) + } + + caCertPool := x509.NewCertPool() + if !caCertPool.AppendCertsFromPEM(caCert) { + return nil, fmt.Errorf("failed to parse OIDC CA certificate from file %q", trustedCAFile) + } + + tlsConfig.RootCAs = caCertPool + } + transport.TLSClientConfig = tlsConfig + } + + // Configure proxy settings + if proxyURL != "" { + parsedURL, err := url.Parse(proxyURL) + if err != nil { + return nil, fmt.Errorf("failed to parse OIDC proxy URL %q: %w", proxyURL, err) + } + transport.Proxy = http.ProxyURL(parsedURL) + } else { + // Explicitly disable proxy to override DefaultTransport's ProxyFromEnvironment + transport.Proxy = nil + } + + return &http.Client{Transport: transport}, nil +} + type OidcAuthProvider struct { additionalAuthScopes []v1.AuthScope tokenGenerator *clientcredentials.Config + httpClient *http.Client } -func NewOidcAuthSetter(additionalAuthScopes []v1.AuthScope, cfg v1.AuthOIDCClientConfig) *OidcAuthProvider { +func NewOidcAuthSetter(additionalAuthScopes []v1.AuthScope, cfg v1.AuthOIDCClientConfig) (*OidcAuthProvider, error) { eps := make(map[string][]string) for k, v := range cfg.AdditionalEndpointParams { eps[k] = []string{v} @@ -50,14 +99,30 @@ func NewOidcAuthSetter(additionalAuthScopes []v1.AuthScope, cfg v1.AuthOIDCClien EndpointParams: eps, } + // Create custom HTTP client if needed + var httpClient *http.Client + if cfg.TrustedCaFile != "" || cfg.InsecureSkipVerify || cfg.ProxyURL != "" { + var err error + httpClient, err = createOIDCHTTPClient(cfg.TrustedCaFile, cfg.InsecureSkipVerify, cfg.ProxyURL) + if err != nil { + return nil, fmt.Errorf("failed to create OIDC HTTP client: %w", err) + } + } + return &OidcAuthProvider{ additionalAuthScopes: additionalAuthScopes, tokenGenerator: tokenGenerator, - } + httpClient: httpClient, + }, nil } func (auth *OidcAuthProvider) generateAccessToken() (accessToken string, err error) { - tokenObj, err := auth.tokenGenerator.Token(context.Background()) + ctx := context.Background() + if auth.httpClient != nil { + ctx = context.WithValue(ctx, oauth2.HTTPClient, auth.httpClient) + } + + tokenObj, err := auth.tokenGenerator.Token(ctx) if err != nil { return "", fmt.Errorf("couldn't generate OIDC token for login: %v", err) } diff --git a/pkg/config/v1/client.go b/pkg/config/v1/client.go index a830df994a5..c6cf97a69be 100644 --- a/pkg/config/v1/client.go +++ b/pkg/config/v1/client.go @@ -228,6 +228,17 @@ type AuthOIDCClientConfig struct { // AdditionalEndpointParams specifies additional parameters to be sent // this field will be transfer to map[string][]string in OIDC token generator. AdditionalEndpointParams map[string]string `json:"additionalEndpointParams,omitempty"` + + // TrustedCaFile specifies the path to a custom CA certificate file + // for verifying the OIDC token endpoint's TLS certificate. + TrustedCaFile string `json:"trustedCaFile,omitempty"` + // InsecureSkipVerify disables TLS certificate verification for the + // OIDC token endpoint. Only use this for debugging, not recommended for production. + InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"` + // ProxyURL specifies a proxy to use when connecting to the OIDC token endpoint. + // Supports http, https, socks5, and socks5h proxy protocols. + // If empty, no proxy is used for OIDC connections. + ProxyURL string `json:"proxyURL,omitempty"` } type VirtualNetConfig struct { From 6561107945b8bbfaccfa2dc0beab0444ce6a1afe Mon Sep 17 00:00:00 2001 From: juejinyuxitu Date: Thu, 25 Sep 2025 16:47:33 +0800 Subject: [PATCH 88/90] chore: fix struct field name in comment (#4993) Signed-off-by: juejinyuxitu --- pkg/config/v1/common.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/config/v1/common.go b/pkg/config/v1/common.go index 38965a3cbcc..8989855485b 100644 --- a/pkg/config/v1/common.go +++ b/pkg/config/v1/common.go @@ -85,9 +85,9 @@ func (c *WebServerConfig) Complete() { } type TLSConfig struct { - // CertPath specifies the path of the cert file that client will load. + // CertFile specifies the path of the cert file that client will load. CertFile string `json:"certFile,omitempty"` - // KeyPath specifies the path of the secret key file that client will load. + // KeyFile specifies the path of the secret key file that client will load. KeyFile string `json:"keyFile,omitempty"` // TrustedCaFile specifies the path of the trusted ca file that will load. TrustedCaFile string `json:"trustedCaFile,omitempty"` From b642a6323cf504ed555cdb984cc1ce731cfba42f Mon Sep 17 00:00:00 2001 From: fatedier Date: Thu, 25 Sep 2025 16:50:14 +0800 Subject: [PATCH 89/90] update sponsors info (#4997) --- README.md | 7 +++++++ README_zh.md | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/README.md b/README.md index c1afcae0477..00a3498cb63 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,13 @@ frp is an open source project with its ongoing development made possible entirel

Gold Sponsors

+

+ + Recall.ai - API for meeting recordings
+
+ If you're looking for a meeting recording API, consider checking out Recall.ai, an API that records Zoom, Google Meet, Microsoft Teams, in-person meetings, and more. +
+

diff --git a/README_zh.md b/README_zh.md index c21be1c0356..ea63d7261cb 100644 --- a/README_zh.md +++ b/README_zh.md @@ -15,6 +15,13 @@ frp 是一个完全开源的项目,我们的开发工作完全依靠赞助者

Gold Sponsors

+

+ + Recall.ai - API for meeting recordings
+
+ If you're looking for a meeting recording API, consider checking out Recall.ai, an API that records Zoom, Google Meet, Microsoft Teams, in-person meetings, and more. +
+

From b5e90c03a1d578b9cf5205cc619dd1570ef46a25 Mon Sep 17 00:00:00 2001 From: fatedier Date: Thu, 25 Sep 2025 20:11:17 +0800 Subject: [PATCH 90/90] bump version to v0.65.0 and update release notes (#4998) --- Release.md | 1 + pkg/util/version/version.go | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Release.md b/Release.md index 742c9847aec..2ea047fa5de 100644 --- a/Release.md +++ b/Release.md @@ -2,3 +2,4 @@ * Add NAT traversal configuration options for XTCP proxies and visitors. Support disabling assisted addresses to avoid using slow VPN connections during NAT hole punching. * Enhanced OIDC client configuration with support for custom TLS certificate verification and proxy settings. Added `trustedCaFile`, `insecureSkipVerify`, and `proxyURL` options for OIDC token endpoint connections. +* Added detailed Prometheus metrics with `proxy_counts_detailed` metric that includes both proxy type and proxy name labels, enabling monitoring of individual proxy connections instead of just aggregate counts. diff --git a/pkg/util/version/version.go b/pkg/util/version/version.go index c6497e145f6..0f4ec433898 100644 --- a/pkg/util/version/version.go +++ b/pkg/util/version/version.go @@ -14,7 +14,7 @@ package version -var version = "0.64.0" +var version = "0.65.0" func Full() string { return version